akregator/src
feed.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef AKREGATORFEED_H
00027 #define AKREGATORFEED_H
00028
00029 #include "treenode.h"
00030 #include "librss/librss.h"
00031
00032 class TQDomElement;
00033 class TQPixmap;
00034 class TQString;
00035 class TQStringList;
00036 class KURL;
00037
00038
00039 namespace KPIM {
00040 class ProgressItem;
00041 }
00042
00043
00044 using RSS::Document;
00045 using RSS::Loader;
00046 using RSS::Status;
00047
00048 namespace Akregator
00049 {
00050 class Article;
00051 class FetchQueue;
00052 class Folder;
00053 class TreeNodeVisitor;
00054
00055 namespace Backend
00056 {
00057 class FeedStorage;
00058 }
00062 class Feed : public TreeNode
00063 {
00064 friend class Article;
00065
00066 Q_OBJECT
00067 public:
00075 enum ArchiveMode { globalDefault, keepAllArticles, disableArchiving, limitArticleNumber, limitArticleAge };
00076
00077
00081 static ArchiveMode stringToArchiveMode(const TQString& str);
00082
00084 static TQString archiveModeToString(ArchiveMode mode);
00085
00087 static Feed* fromOPML(TQDomElement e);
00088
00090 Feed();
00091
00092 virtual ~Feed();
00093
00094 virtual bool accept(TreeNodeVisitor* visitor);
00095
00097 virtual TQDomElement toOPML( TQDomElement parent, TQDomDocument document ) const;
00098
00103 bool useCustomFetchInterval() const;
00104
00109 void setCustomFetchIntervalEnabled(bool enabled);
00110
00111
00114 int fetchInterval() const;
00115
00118 void setFetchInterval(int interval);
00119
00121 ArchiveMode archiveMode() const;
00122
00124 void setArchiveMode(ArchiveMode archiveMode);
00125
00128 int maxArticleAge() const;
00129
00132 void setMaxArticleAge(int maxArticleAge);
00133
00134
00136 int maxArticleNumber() const;
00137
00139 void setMaxArticleNumber(int maxArticleNumber);
00140
00142 bool markImmediatelyAsRead() const;
00143
00144 void setMarkImmediatelyAsRead(bool enabled);
00145
00146 void setUseNotification(bool enabled);
00147
00148 bool useNotification() const;
00149
00151 void setLoadLinkedWebsite(bool enabled);
00152
00153 bool loadLinkedWebsite() const;
00154
00156 const TQPixmap& favicon() const;
00157
00159 void setFavicon(const TQPixmap& p);
00160
00162 const TQPixmap& image() const;
00163
00165 const TQString& xmlUrl() const;
00167 void setXmlUrl(const TQString& s);
00168
00170 const TQString& htmlUrl() const;
00172 void setHtmlUrl(const TQString& s);
00173
00175 const TQString& description() const;
00176
00178 void setDescription(const TQString& s);
00179
00180 virtual TQValueList<Article> articles(const TQString& tag=TQString::null);
00181
00183 virtual Article findArticle(const TQString& guid) const;
00184
00185 virtual TQStringList tags() const;
00186
00188 bool fetchErrorOccurred();
00189
00191 virtual int unread() const;
00192
00196 virtual int totalCount() const;
00197
00199 bool isArticlesLoaded() const;
00200
00202 virtual bool isGroup() const { return false; }
00203
00207 virtual TreeNode* next();
00208
00210 void loadFavicon();
00211
00213 void loadImage();
00214
00215 public slots:
00217 void fetch(bool followDiscovery=false);
00218
00219 void slotAbortFetch();
00220
00222 virtual void slotDeleteExpiredArticles();
00223
00225 virtual void slotMarkAllArticlesAsRead();
00226
00228 virtual void slotAddToFetchQueue(FetchQueue* queue, bool intervalFetchOnly=false);
00229
00230 signals:
00232 void fetchStarted(Feed*);
00234 void fetched(Feed *);
00236 void fetchError(Feed *);
00238 void fetchDiscovery(Feed *);
00240 void fetchAborted(Feed *);
00241
00242 protected:
00244 void loadArticles();
00245
00246 void recalcUnreadCount();
00247
00248 virtual void doArticleNotification();
00249
00251 void setUnread(int unread);
00252
00253
00254 private slots:
00255
00256 void fetchCompleted(Loader *loader, Document doc, Status status);
00257 void slotImageFetched(const TQPixmap& image);
00258
00259 private:
00260
00264 void setArticleDeleted(Article& a);
00265
00270 void setArticleChanged(Article& a, int oldStatus=-1);
00271
00272 void enforceLimitArticleNumber();
00273
00274 void appendArticles(const RSS::Document &d);
00276 void appendArticle(const Article& a);
00277
00279 bool isExpired(const Article& a) const;
00280
00282 bool usesExpiryByAge() const;
00283
00285 void tryFetch();
00286
00287 class FeedPrivate;
00288 FeedPrivate* d;
00289 };
00290 }
00291
00292 #endif
|