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