From b0e5773b226aeb0f542bed49e2de952ce0b2a8a2 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 29 Jan 2021 14:23:00 +0100 Subject: [PATCH] Basic fixes for theoldreaders, login and folder/feed sync works. --- .../services/greader/definitions.h | 3 +- .../services/greader/greadernetwork.cpp | 31 ++++++++++++------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/librssguard/services/greader/definitions.h b/src/librssguard/services/greader/definitions.h index e7e1d8f56..4249394ae 100755 --- a/src/librssguard/services/greader/definitions.h +++ b/src/librssguard/services/greader/definitions.h @@ -13,7 +13,7 @@ #define GREADER_API_FULL_STATE_IMPORTANT "user/-/state/com.google/starred" // API. -#define GREADER_API_CLIENT_LOGIN "accounts/ClientLogin?Email=%1&Passwd=%2" +#define GREADER_API_CLIENT_LOGIN "accounts/ClientLogin" #define GREADER_API_TAG_LIST "reader/api/0/tag/list?output=json" #define GREADER_API_SUBSCRIPTION_LIST "reader/api/0/subscription/list?output=json" #define GREADER_API_STREAM_CONTENTS "reader/api/0/stream/contents/%1?output=json&n=%2" @@ -21,6 +21,7 @@ // Misc. #define GREADER_API_EDIT_TAG_BATCH 200 +#define GREADER_API_ANY_LABEL "user/-/label" // FreshRSS. #define FRESHRSS_BASE_URL_PATH "api/greader.php/" diff --git a/src/librssguard/services/greader/greadernetwork.cpp b/src/librssguard/services/greader/greadernetwork.cpp index 7bd1b4312..90af7ae7f 100755 --- a/src/librssguard/services/greader/greadernetwork.cpp +++ b/src/librssguard/services/greader/greadernetwork.cpp @@ -195,9 +195,11 @@ RootItem* GreaderNetwork::decodeTagsSubscriptions(const QString& categories, con for (const QJsonValue& obj : json) { auto label = obj.toObject(); + QString label_id = label["id"].toString(); - if (label["type"].toString() == QL1S("folder")) { - QString label_id = label["id"].toString(); + if ((label["type"].toString() == QL1S("folder")) || + (m_service == GreaderServiceRoot::Service::TheOldReader && + label_id.startsWith(GREADER_API_ANY_LABEL))) { // We have label (not "state"). auto* category = new Category(); @@ -210,11 +212,10 @@ RootItem* GreaderNetwork::decodeTagsSubscriptions(const QString& categories, con parent->appendChild(category); } else if (label["type"] == QL1S("tag")) { - QString name_id = label["id"].toString(); - QString plain_name = QRegularExpression(".+\\/([^\\/]+)").match(name_id).captured(1); - auto* new_lbl = new Label(plain_name, TextFactory::generateColorFromText(name_id)); + QString plain_name = QRegularExpression(".+\\/([^\\/]+)").match(label_id).captured(1); + auto* new_lbl = new Label(plain_name, TextFactory::generateColorFromText(label_id)); - new_lbl->setCustomId(name_id); + new_lbl->setCustomId(label_id); lbls.append(new_lbl); } } @@ -252,6 +253,10 @@ RootItem* GreaderNetwork::decodeTagsSubscriptions(const QString& categories, con if (!icon_url.isEmpty()) { QByteArray icon_data; + if (icon_url.startsWith(QSL("//"))) { + icon_url = QSL("https:") + icon_url; + } + if (NetworkFactory::performNetworkOperation(icon_url, timeout, {}, icon_data, QNetworkAccessManager::Operation::GetOperation).first == @@ -282,11 +287,12 @@ QNetworkReply::NetworkError GreaderNetwork::clientLogin(const QNetworkProxy& pro QString full_url = generateFullUrl(Operations::ClientLogin); auto timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(); QByteArray output; + QByteArray args = QSL("Email=%1&Passwd=%2").arg(username(), password()).toUtf8(); auto network_result = NetworkFactory::performNetworkOperation(full_url, timeout, - {}, + args, output, - QNetworkAccessManager::Operation::GetOperation, + QNetworkAccessManager::Operation::PostOperation, {}, false, {}, @@ -322,10 +328,8 @@ QNetworkReply::NetworkError GreaderNetwork::clientLogin(const QNetworkProxy& pro m_authAuth = QString(); } - if (m_authAuth.isEmpty() || - (service() == GreaderServiceRoot::Service::FreshRss && m_authSid.isEmpty())) { + if (m_authAuth.isEmpty()) { clearCredentials(); - return QNetworkReply::NetworkError::InternalServerError; } } @@ -512,7 +516,7 @@ QString GreaderNetwork::sanitizedBaseUrl() const { QString GreaderNetwork::generateFullUrl(GreaderNetwork::Operations operation) const { switch (operation) { case Operations::ClientLogin: - return sanitizedBaseUrl() + QSL(GREADER_API_CLIENT_LOGIN).arg(username(), password()); + return sanitizedBaseUrl() + GREADER_API_CLIENT_LOGIN; case Operations::TagList: return sanitizedBaseUrl() + GREADER_API_TAG_LIST; @@ -525,5 +529,8 @@ QString GreaderNetwork::generateFullUrl(GreaderNetwork::Operations operation) co case Operations::EditTag: return sanitizedBaseUrl() + GREADER_API_EDIT_TAG; + + default: + return sanitizedBaseUrl(); } }