Updated changelog
[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                 uint updated;
31
32                 QDateTime lastUpdated;
33
34                 GoogleReader *reader;
35
36                 int special;
37
38                 void updateSubscription(Feed *feed);
39
40                 Feed(GoogleReader *gr = NULL) : QObject() {
41                         unread = 0;
42                         reader = gr;
43                         special = 0;
44                         updated = 0;
45                 }
46
47                 void fetch(bool);
48                 void addEntry(Entry *);
49                 void delEntry(Entry *);
50                 QList<Entry *> getEntries();
51                 int getEntriesSize() { return entries.size(); }
52                 void markRead();
53                 void updateUnread(int);
54
55         signals:
56                 void updateFeedComplete();
57                 void allReadChanged();
58
59         private:
60                 QHash<QString, Entry *> entries;
61                 QBuffer buffer;
62                 QNetworkReply *reply;
63
64         private slots:
65                 void fetchFinished();
66 };
67     
68 Q_DECLARE_METATYPE(Feed *)
69
70 #define ENTRY_FLAG_READ         0x00000001
71 #define ENTRY_FLAG_STARRED      0x00000002
72 #define ENTRY_FLAG_LOCKED       0x00000004
73 #define ENTRY_FLAG_SHARED       0x00000008
74
75 class Entry : public QObject {
76         Q_OBJECT
77
78         public:
79                 QString id;
80                 QString title;
81                 QString author;
82                 QDateTime published;
83                 qulonglong crawled;
84                 QUrl link;
85                 QString source;
86                 QString content;
87                 unsigned int flags;
88                 Feed *feed;
89
90                 Entry(Feed *f = NULL) : QObject() {
91                         feed = f;
92                         flags = 0;
93                 }
94         
95                 Entry(Entry &e) : QObject() {
96                         id = e.id;
97                         title = e.title;
98                         author = e.author;
99                         published = e.published;
100                         link = e.link;
101                         source = e.source;
102                         content = e.content;
103                         flags = e.flags;
104                         feed = e.feed;
105                 }
106
107                 void markRead(bool);
108                 void markStar(bool);
109                 void markShared(bool);
110
111         private:
112                 QBuffer postread;
113                 QBuffer poststar;
114                 QBuffer postshared;
115 };
116
117 Q_DECLARE_METATYPE(Entry *)
118
119 class GoogleReader: public QObject {
120         Q_OBJECT
121
122         public:
123                 GoogleReader();
124                 void updateSubscriptions();
125                 void updateUnread();
126                 QList<Feed *> getFeeds();
127                 QNetworkAccessManager *getManager() {
128                         return &manager;
129                 }
130                 void getToken();
131                 
132                 QUrl edittag_url;
133                 QUrl markallread_url;
134                 QByteArray token;
135                 QNetworkAccessManager manager;
136                 QDateTime lastUpdated;
137                 QHash<QString, Feed *> feeds;
138
139                 void setLogin(QString l) { login = l; }
140                 void setPasswd(QString p) { passwd = p; }
141                 void logOut() { 
142                         auth = NULL;
143                         token = NULL;
144                         updateSubscriptionsPending = false;
145                         updateUnreadPending = false;
146                         authPending = false;
147                 }
148
149                 QByteArray getAuth() {
150                         return auth;
151                 }
152
153         private slots:
154                 void downloadFinished(QNetworkReply *reply);
155
156         private:
157                 QByteArray auth;
158                 QBuffer buffer;
159                 bool updateSubscriptionsPending;
160                 bool updateUnreadPending;
161                 bool authPending;
162
163                 void clientLogin();
164                 void parseSubscriptions(QByteArray data);
165                 void parseUnread(QByteArray data);
166
167                 QUrl login_url;
168                 QUrl subscriptions_url;
169                 QUrl unread_url;
170                 QUrl token_url;
171
172                 QString login;
173                 QString passwd;
174
175         signals:
176                 void updateSubscriptionsComplete();
177                 void updateUnreadComplete();
178                 void allReadChanged();
179                 void loginFailed(QString);
180 };
181
182 #endif
183