Basic fixes for theoldreaders, login and folder/feed sync works.

This commit is contained in:
Martin Rotter 2021-01-29 14:23:00 +01:00
parent 6dc5e016f1
commit b0e5773b22
2 changed files with 21 additions and 13 deletions

View file

@ -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/"

View file

@ -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();
}
}