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