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