rssguard/src/librssguard/services/greader/greadernetwork.h
2023-04-03 10:33:19 +02:00

151 lines
5.7 KiB
C++

// For license of this file, see <project-root-folder>/LICENSE.md.
#ifndef GREADERNETWORK_H
#define GREADERNETWORK_H
#include <QObject>
#include "network-web/networkfactory.h"
#include "services/abstract/feed.h"
#include "services/greader/greaderserviceroot.h"
class OAuth2Service;
class GreaderNetwork : public QObject {
Q_OBJECT
public:
enum class Operations {
ClientLogin,
TagList,
SubscriptionList,
StreamContents,
EditTag,
Token,
UserInfo,
ItemIds,
ItemContents
};
explicit GreaderNetwork(QObject* parent = nullptr);
// Convenience methods.
QNetworkReply::NetworkError markMessagesRead(RootItem::ReadStatus status,
const QStringList& msg_custom_ids,
const QNetworkProxy& proxy);
QNetworkReply::NetworkError markMessagesStarred(RootItem::Importance importance,
const QStringList& msg_custom_ids,
const QNetworkProxy& proxy);
void prepareFeedFetching(GreaderServiceRoot* root,
const QList<Feed*>& feeds,
const QHash<QString, QHash<ServiceRoot::BagOfMessages, QStringList>>& stated_messages,
const QHash<QString, QStringList>& tagged_messages,
const QNetworkProxy& proxy);
QList<Message> getMessagesIntelligently(ServiceRoot* root,
const QString& stream_id,
const QHash<ServiceRoot::BagOfMessages, QStringList>& stated_messages,
const QHash<QString, QStringList>& tagged_messages,
const QNetworkProxy& proxy);
RootItem* categoriesFeedsLabelsTree(bool obtain_icons, const QNetworkProxy& proxy);
void clearCredentials();
void clearPrefetchedMessages();
GreaderServiceRoot::Service service() const;
void setService(GreaderServiceRoot::Service service);
QString username() const;
void setUsername(const QString& username);
QString password() const;
void setPassword(const QString& password);
QString baseUrl() const;
void setBaseUrl(const QString& base_url);
int batchSize() const;
void setBatchSize(int batch_size);
bool downloadOnlyUnreadMessages() const;
void setDownloadOnlyUnreadMessages(bool download_only_unread);
bool intelligentSynchronization() const;
void setIntelligentSynchronization(bool intelligent_synchronization);
void setRoot(GreaderServiceRoot* root);
OAuth2Service* oauth() const;
void setOauth(OAuth2Service* oauth);
// API methods.
QNetworkReply::NetworkError editLabels(const QString& state,
bool assign,
const QStringList& msg_custom_ids,
const QNetworkProxy& proxy);
QVariantHash userInfo(const QNetworkProxy& proxy);
QStringList itemIds(const QString& stream_id,
bool unread_only,
const QNetworkProxy& proxy,
int max_count = -1,
QDate newer_than = {});
QList<Message> itemContents(ServiceRoot* root, const QList<QString>& stream_ids, const QNetworkProxy& proxy);
QList<Message> streamContents(ServiceRoot* root, const QString& stream_id, const QNetworkProxy& proxy);
QNetworkReply::NetworkError clientLogin(const QNetworkProxy& proxy);
QDate newerThanFilter() const;
void setNewerThanFilter(const QDate& newer_than);
private slots:
void onTokensError(const QString& error, const QString& error_description);
void onAuthFailed();
private:
QPair<QByteArray, QByteArray> authHeader() const;
QString tokenParameter() const;
// Make sure we are logged in and if we are not, return error.
bool ensureLogin(const QNetworkProxy& proxy, QNetworkReply::NetworkError* output = nullptr);
QString convertLongStreamIdToShortStreamId(const QString& stream_id) const;
QString convertShortStreamIdToLongStreamId(const QString& stream_id) const;
QString simplifyStreamId(const QString& stream_id) const;
QStringList decodeItemIds(const QString& stream_json_data, QString& continuation);
QList<Message> decodeStreamContents(ServiceRoot* root,
const QString& stream_json_data,
const QString& stream_id,
QString& continuation);
RootItem* decodeTagsSubscriptions(const QString& categories,
const QString& feeds,
bool obtain_icons,
const QNetworkProxy& proxy);
QString sanitizedBaseUrl() const;
QString generateFullUrl(Operations operation) const;
void initializeOauth();
private:
GreaderServiceRoot* m_root;
GreaderServiceRoot::Service m_service;
QString m_username;
QString m_password;
QString m_baseUrl;
int m_batchSize;
bool m_downloadOnlyUnreadMessages;
QString m_authSid;
QString m_authAuth;
QString m_authToken;
QList<Message> m_prefetchedMessages;
QMutex m_mutexPrefetchedMessages;
bool m_performGlobalFetching;
bool m_intelligentSynchronization;
QDate m_newerThanFilter;
OAuth2Service* m_oauth;
};
#endif // GREADERNETWORK_H