You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
291 lines
7.0 KiB
291 lines
7.0 KiB
/* $Id$ */
|
|
#ifndef _RSS_SERVICE
|
|
#define _RSS_SERVICE
|
|
|
|
/***************************************************************************
|
|
service.h - A DCOP Service to provide RSS data
|
|
-------------------
|
|
begin : Saturday 15 February 2003
|
|
copyright : (C) 2003 by Ian Reinhart Geiser
|
|
email : geiseri@kde.org
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#include <dcopobject.h>
|
|
#include <dcopref.h>
|
|
#include <qdict.h>
|
|
#include <qptrlist.h>
|
|
#include <qstringlist.h>
|
|
#include <qstring.h>
|
|
#include <qdatetime.h>
|
|
#include <qpixmap.h>
|
|
#include <librss/global.h>
|
|
#include <librss/loader.h>
|
|
#include <librss/document.h>
|
|
#include <librss/article.h>
|
|
#include <librss/image.h>
|
|
/**
|
|
* This is a DCOP Service do not include this header in anything
|
|
*
|
|
**/
|
|
using namespace RSS;
|
|
|
|
class RSSDocument;
|
|
class RSSArticle;
|
|
|
|
class RSSService : public DCOPObject
|
|
{
|
|
K_DCOP
|
|
|
|
private:
|
|
|
|
QDict<RSSDocument> m_list;
|
|
|
|
public:
|
|
RSSService();
|
|
~RSSService();
|
|
void saveLinks();
|
|
void loadLinks();
|
|
|
|
|
|
k_dcop_signals:
|
|
/**
|
|
* Emmitted when a new document has been added. You can then
|
|
* use document(QString) to get the dcop ref for the object.
|
|
* Note: this document may or may not be valid at this
|
|
* point so you should connect your dcop signals and then
|
|
* do a documentValid() on the dcop ref to make sure of its
|
|
* state.
|
|
**/
|
|
|
|
void added(QString);
|
|
/**
|
|
* Emmitted when the document has been removed.
|
|
* note at this point the DCOPRef for this object is
|
|
* invalid and you will cannot access it any longer.
|
|
* When in doubt call a refresh on it, since if its in the
|
|
* process of loading the document call will be safely ignored
|
|
* and you will be notified of the updates.
|
|
**/
|
|
void removed(QString);
|
|
k_dcop:
|
|
/**
|
|
* Add a new rdf file resource. This will return a dcop reference to the resource. If its a new
|
|
* one it will be added otherwise an existing resource reference will be returned.
|
|
* once this reference has been returned you may connect dcop signals and then call
|
|
* refresh on the RSSDocument. The document will not be updated until refresh is called.
|
|
**/
|
|
DCOPRef add(QString url);
|
|
/**
|
|
* Return a list of current rss documents
|
|
**/
|
|
QStringList list();
|
|
/**
|
|
* Remove an rss document resource. NOTE: Be aware that others may be using this
|
|
* resource and if you remove it they may break. Likewise be aware that someone may
|
|
* decide to remove your resource on you so you should always check to see if the resource
|
|
* is valid before you access it.
|
|
**/
|
|
void remove(QString url);
|
|
/**
|
|
* Return the reference to a requested resource. If this resource is not present a null dcopref is
|
|
* returned.
|
|
**/
|
|
DCOPRef document(QString url);
|
|
/**
|
|
* Exit the RSSService. This will clean everything up and exit.
|
|
**/
|
|
void exit();
|
|
};
|
|
|
|
class RSSDocument : public QObject, public DCOPObject
|
|
{
|
|
Q_OBJECT
|
|
K_DCOP
|
|
|
|
private:
|
|
bool m_isLoading;
|
|
QString m_Url;
|
|
Document *m_Doc;
|
|
QPixmap m_pix;
|
|
QPtrList<RSSArticle> m_list;
|
|
QMap<QString,int> m_state;
|
|
QDateTime m_Timeout;
|
|
int m_maxAge;
|
|
|
|
private slots:
|
|
void pixmapLoaded(const QPixmap&);
|
|
void loadingComplete(Loader *, Document, Status);
|
|
|
|
public:
|
|
RSSDocument(const QString& url);
|
|
~RSSDocument();
|
|
|
|
k_dcop_signals:
|
|
/**
|
|
* The pixmap is currently loading
|
|
**/
|
|
void pixmapUpdating(DCOPRef);
|
|
/**
|
|
* The pixmap is ready for viewing
|
|
* you can then use dcopref->call("pixmap()"); to return it.
|
|
*
|
|
**/
|
|
void pixmapUpdated(DCOPRef);
|
|
/**
|
|
* The document is currently updating
|
|
**/
|
|
void documentUpdating(DCOPRef);
|
|
/**
|
|
* The document is ready for viewing
|
|
* you can then use dcopref->call() to access its data
|
|
**/
|
|
void documentUpdated(DCOPRef);
|
|
/**
|
|
* The document failed to update, with and error...
|
|
* 1 - RSS Parse Error
|
|
* 2 - Could not access file
|
|
* 3 - Unknown error.
|
|
**/
|
|
void documentUpdateError(DCOPRef, int);
|
|
|
|
k_dcop:
|
|
/**
|
|
* Return the webmaster information from the RSS::Document
|
|
**/
|
|
QString webMaster();
|
|
/**
|
|
* Return the manageing editor from the RSS::Document
|
|
**/
|
|
QString managingEditor();
|
|
/**
|
|
* Returns the rating of the RSS::Document
|
|
**/
|
|
QString rating();
|
|
/**
|
|
* Returns the last build date from the RSS::Document
|
|
**/
|
|
QDateTime lastBuildDate();
|
|
/**
|
|
* Returns the publication date from the RSS::Document
|
|
**/
|
|
QDateTime pubDate();
|
|
/**
|
|
* Returns the copyright information from the RSS::Document
|
|
**/
|
|
QString copyright();
|
|
/**
|
|
* Returns a list of article titles
|
|
**/
|
|
QStringList articles();
|
|
/**
|
|
* Returns the number of articles
|
|
**/
|
|
int count();
|
|
/**
|
|
* Returns a dcop reference to the article from the index
|
|
**/
|
|
DCOPRef article(int idx);
|
|
/**
|
|
* Returns the link from the RSS::Document
|
|
**/
|
|
QString link();
|
|
/**
|
|
* Returns the description from the RSS::Document
|
|
**/
|
|
QString description();
|
|
/**
|
|
* Returns the title from the RSS::Document
|
|
**/
|
|
QString title();
|
|
/**
|
|
* Returns the text version from the RSS::Document
|
|
**/
|
|
QString verbVersion();
|
|
/**
|
|
* Returns the url for the pixmap from the RSS::Document
|
|
**/
|
|
QString pixmapURL();
|
|
/**
|
|
* Returns the actual pixmap from the RSS::Document's RSS::Image
|
|
**/
|
|
QPixmap pixmap();
|
|
/**
|
|
* Returns if the RSSDocument contains a valid RSS::Document yet.
|
|
**/
|
|
bool documentValid();
|
|
/**
|
|
* Returns if the RSSDocument contains a valid RSS::Image
|
|
**/
|
|
bool pixmapValid();
|
|
/**
|
|
* Refresh the current RSS::Document.
|
|
* This must be called before the document is valid.
|
|
**/
|
|
void refresh();
|
|
|
|
/**
|
|
* Return the maximum age of the RSS document (Default is 60 minutes)
|
|
**/
|
|
int maxAge();
|
|
|
|
/**
|
|
* Set the maximum age of the RSS document.
|
|
**/
|
|
void setMaxAge(int minutes);
|
|
|
|
/**
|
|
* Returns the state of the article
|
|
* 0 - not present (deleted from the rss service)
|
|
* 1 - new
|
|
* 2 - unread
|
|
* 3 - read
|
|
*/
|
|
int state( const QString &title) const;
|
|
|
|
/**
|
|
* Set the article state
|
|
*/
|
|
void setState( const QString &title, int s );
|
|
|
|
/**
|
|
* Convience method that will set a title to read.
|
|
*/
|
|
void read( const QString &title);
|
|
};
|
|
|
|
class RSSArticle : public DCOPObject
|
|
{
|
|
K_DCOP
|
|
|
|
private:
|
|
Article *m_Art;
|
|
|
|
public:
|
|
RSSArticle(Article *art);
|
|
~RSSArticle();
|
|
|
|
k_dcop:
|
|
/**
|
|
* Return the articles title
|
|
**/
|
|
QString title();
|
|
/**
|
|
* Return the articles description
|
|
**/
|
|
QString description();
|
|
/**
|
|
* Return the link to the article
|
|
**/
|
|
QString link();
|
|
};
|
|
#endif
|