1 // For license of this file, see <project-root-folder>/LICENSE.md.
2 
3 #ifndef TTRSSNETWORKFACTORY_H
4 #define TTRSSNETWORKFACTORY_H
5 
6 #include "core/message.h"
7 
8 #include <QJsonObject>
9 #include <QNetworkReply>
10 #include <QPair>
11 #include <QString>
12 
13 class RootItem;
14 class TtRssFeed;
15 class Label;
16 
17 class TtRssResponse {
18   public:
19     explicit TtRssResponse(const QString& raw_content = QString());
20     virtual ~TtRssResponse();
21 
22     bool isLoaded() const;
23 
24     int seq() const;
25     int status() const;
26     QString error() const;
27     bool hasError() const;
28     bool isNotLoggedIn() const;
29     QString toString() const;
30 
31   protected:
32     QJsonObject m_rawContent;
33 };
34 
35 class TtRssLoginResponse : public TtRssResponse {
36   public:
37     explicit TtRssLoginResponse(const QString& raw_content = QString());
38     virtual ~TtRssLoginResponse();
39 
40     int apiLevel() const;
41     QString sessionId() const;
42 };
43 
44 class TtRssGetLabelsResponse : public TtRssResponse {
45   public:
46     explicit TtRssGetLabelsResponse(const QString& raw_content = QString());
47 
48     QList<RootItem*> labels() const;
49 };
50 
51 class TtRssGetFeedsCategoriesResponse : public TtRssResponse {
52   public:
53     explicit TtRssGetFeedsCategoriesResponse(const QString& raw_content = QString());
54     virtual ~TtRssGetFeedsCategoriesResponse();
55 
56     // Returns tree of feeds/categories.
57     // Top-level root of the tree is not needed here.
58     // Returned items do not have primary IDs assigned.
59     RootItem* feedsCategories(bool obtain_icons, const QNetworkProxy& proxy, const QString& base_address = QString()) const;
60 };
61 
62 class ServiceRoot;
63 
64 class TtRssGetHeadlinesResponse : public TtRssResponse {
65   public:
66     explicit TtRssGetHeadlinesResponse(const QString& raw_content = QString());
67     virtual ~TtRssGetHeadlinesResponse();
68 
69     QList<Message> messages(ServiceRoot* root) const;
70 };
71 
72 class TtRssUpdateArticleResponse : public TtRssResponse {
73   public:
74     explicit TtRssUpdateArticleResponse(const QString& raw_content = QString());
75     virtual ~TtRssUpdateArticleResponse();
76 
77     QString updateStatus() const;
78     int articlesUpdated() const;
79 };
80 
81 class TtRssSubscribeToFeedResponse : public TtRssResponse {
82   public:
83     explicit TtRssSubscribeToFeedResponse(const QString& raw_content = QString());
84     virtual ~TtRssSubscribeToFeedResponse();
85 
86     int code() const;
87 };
88 
89 class TtRssUnsubscribeFeedResponse : public TtRssResponse {
90   public:
91     explicit TtRssUnsubscribeFeedResponse(const QString& raw_content = QString());
92     virtual ~TtRssUnsubscribeFeedResponse();
93 
94     QString code() const;
95 };
96 
97 namespace UpdateArticle {
98   enum class Mode {
99     SetToFalse = 0,
100     SetToTrue = 1,
101     Togggle = 2
102   };
103 
104   enum class OperatingField {
105     Starred = 0,
106     Published = 1,
107     Unread = 2
108   };
109 
110 }
111 
112 class TtRssNetworkFactory {
113   public:
114     explicit TtRssNetworkFactory();
115 
116     QString url() const;
117     void setUrl(const QString& url);
118 
119     QString username() const;
120     void setUsername(const QString& username);
121 
122     QString password() const;
123     void setPassword(const QString& password);
124 
125     bool authIsUsed() const;
126     void setAuthIsUsed(bool auth_is_used);
127 
128     QString authUsername() const;
129     void setAuthUsername(const QString& auth_username);
130 
131     QString authPassword() const;
132     void setAuthPassword(const QString& auth_password);
133 
134     bool forceServerSideUpdate() const;
135     void setForceServerSideUpdate(bool force_server_side_update);
136 
137     bool downloadOnlyUnreadMessages() const;
138     void setDownloadOnlyUnreadMessages(bool download_only_unread_messages);
139 
140     // Metadata.
141     QDateTime lastLoginTime() const;
142     QNetworkReply::NetworkError lastError() const;
143 
144     // Operations.
145 
146     // Logs user in.
147     TtRssLoginResponse login(const QNetworkProxy& proxy);
148 
149     // Logs user out.
150     TtRssResponse logout(const QNetworkProxy& proxy);
151 
152     // Gets list of labels from the server.
153     TtRssGetLabelsResponse getLabels(const QNetworkProxy& proxy);
154 
155     // Gets feeds from the server.
156     TtRssGetFeedsCategoriesResponse getFeedsCategories(const QNetworkProxy& proxy);
157 
158     // Gets headlines (messages) from the server.
159     TtRssGetHeadlinesResponse getHeadlines(int feed_id, int limit, int skip,
160                                            bool show_content, bool include_attachments,
161                                            bool sanitize, bool unread_only,
162                                            const QNetworkProxy& proxy);
163 
164     TtRssResponse setArticleLabel(const QStringList& article_ids, const QString& label_custom_id,
165                                   bool assign, const QNetworkProxy& proxy);
166 
167     TtRssUpdateArticleResponse updateArticles(const QStringList& ids,
168                                               UpdateArticle::OperatingField field,
169                                               UpdateArticle::Mode mode,
170                                               const QNetworkProxy& proxy);
171 
172     TtRssSubscribeToFeedResponse subscribeToFeed(const QString& url, int category_id, const QNetworkProxy& proxy,
173                                                  bool protectd = false, const QString& username = QString(),
174                                                  const QString& password = QString());
175 
176     TtRssUnsubscribeFeedResponse unsubscribeFeed(int feed_id, const QNetworkProxy& proxy);
177 
178     int batchSize() const;
179     void setBatchSize(int batch_size);
180 
181   private:
182     QString m_bareUrl;
183     QString m_fullUrl;
184     QString m_username;
185     QString m_password;
186     int m_batchSize;
187     bool m_forceServerSideUpdate;
188     bool m_downloadOnlyUnreadMessages;
189     bool m_authIsUsed;
190     QString m_authUsername;
191     QString m_authPassword;
192     QString m_sessionId;
193     QDateTime m_lastLoginTime;
194 
195     QNetworkReply::NetworkError m_lastError;
196 };
197 
198 #endif // TTRSSNETWORKFACTORY_H
199