Parse the feed content in the Feed class.
[grr] / src / googlereader.h
1 #ifndef _QTMAIN_H
2 #define _QTMAIN_H
3
4 #include <QObject>
5 #include <QNetworkReply>
6 #include <QNetworkRequest>
7 #include <QBuffer>
8 #include <QDateTime>
9
10 class GoogleReader;
11 class Entry;
12
13 class Feed : public QObject {
14         Q_OBJECT
15
16         public:
17                 bool subscription_updated;
18                 
19                 QString id;
20                 QString title;
21                 QString sortid;
22                 QString firstitemmsec;
23                 QString cat_id;
24                 QString cat_label;
25         
26                 int unread;
27                 uint newestitem;
28                 
29                 QString continuation;
30
31                 QDateTime lastUpdated;
32
33                 GoogleReader *reader;
34
35                 int special;
36
37                 void updateSubscription(Feed *feed);
38
39                 Feed(GoogleReader *gr = NULL) : QObject() {
40                         unread = 0;
41                         reader = gr;
42                         special = 0;
43                 }
44
45                 void fetch(bool);
46                 void addEntry(Entry *);
47                 void delEntry(Entry *);
48                 QList<Entry *> getEntries();
49                 int getEntriesSize() { return entries.size(); }
50                 void markRead();
51                 void updateUnread(int);
52
53         signals:
54                 void updateFeedComplete();
55                 void allReadChanged();
56
57         private:
58                 QHash<QString, Entry *> entries;
59                 QBuffer buffer;
60                 QNetworkReply *reply;
61
62         private slots:
63                 void fetchFinished();
64 };
65     
66 Q_DECLARE_METATYPE(Feed *)
67
68 #define ENTRY_FLAG_READ         0x00000001
69 #define ENTRY_FLAG_STARRED      0x00000002
70 #define ENTRY_FLAG_LOCKED       0x00000004
71 #define ENTRY_FLAG_SHARED       0x00000008
72
73 class Entry : public QObject {
74         Q_OBJECT
75
76         public:
77                 QString id;
78                 QString title;
79                 QString author;
80                 QDateTime published;
81                 qulonglong crawled;
82                 QUrl link;
83                 QString source;
84                 QString content;
85                 unsigned int flags;
86                 Feed *feed;
87
88                 Entry(Feed *f = NULL) : QObject() {
89                         feed = f;
90                         flags = 0;
91                 }
92         
93                 Entry(Entry &e) : QObject() {
94                         id = e.id;
95                         title = e.title;
96                         author = e.author;
97                         published = e.published;
98                         link = e.link;
99                         source = e.source;
100                         content = e.content;
101                         flags = e.flags;
102                         feed = e.feed;
103                 }
104
105                 void markRead(bool);
106                 void markStar(bool);
107                 void markShared(bool);
108
109         private:
110                 QBuffer postread;
111                 QBuffer poststar;
112                 QBuffer postshared;
113 };
114
115 Q_DECLARE_METATYPE(Entry *)
116
117 class GoogleReader: public QObject {
118         Q_OBJECT
119
120         public:
121                 GoogleReader();
122                 void updateSubscriptions();
123                 void updateUnread();
124                 QList<Feed *> getFeeds();
125                 QNetworkAccessManager *getManager() {
126                         return &manager;
127                 }
128                 void getToken();
129                 
130                 QUrl edittag_url;
131                 QUrl markallread_url;
132                 QByteArray token;
133                 QNetworkAccessManager manager;
134                 QDateTime lastUpdated;
135                 QHash<QString, Feed *> feeds;
136
137                 void setLogin(QString l) { login = l; }
138                 void setPasswd(QString p) { passwd = p; }
139                 void logOut() { 
140                         SID = NULL; 
141                         token = NULL;
142                         updateSubscriptionsPending = false;
143                         updateUnreadPending = false;
144                         SIDPending = false;
145                 }
146
147         private slots:
148                 void downloadFinished(QNetworkReply *reply);
149
150         private:
151                 char *SID;
152                 QBuffer buffer;
153                 bool updateSubscriptionsPending;
154                 bool updateUnreadPending;
155                 bool SIDPending;
156
157                 void getSID();
158                 void parseSubscriptions(QByteArray data);
159                 void parseUnread(QByteArray data);
160
161                 QUrl login_url;
162                 QUrl subscriptions_url;
163                 QUrl unread_url;
164                 QUrl token_url;
165
166                 QString login;
167                 QString passwd;
168
169         signals:
170                 void updateSubscriptionsComplete();
171                 void updateUnreadComplete();
172                 void allReadChanged();
173                 void loginFailed(QString);
174 };
175
176 #endif
177