proxy support for tt-rss

This commit is contained in:
Martin Rotter 2021-01-22 10:55:05 +01:00
parent bb361e5b9b
commit b5b412719f
13 changed files with 172 additions and 98 deletions

View file

@ -201,25 +201,6 @@ QNetworkReply::NetworkError NetworkFactory::downloadIcon(const QList<QString>& u
return network_result;
}
Downloader* NetworkFactory::performAsyncNetworkOperation(const QString& url, int timeout, const QByteArray& input_data,
QNetworkAccessManager::Operation operation,
QList<QPair<QByteArray, QByteArray>> additional_headers,
bool protected_contents, const QString& username,
const QString& password) {
auto* downloader = new Downloader();
QObject::connect(downloader, &Downloader::completed, downloader, &Downloader::deleteLater);
for (const auto& header : additional_headers) {
if (!header.first.isEmpty()) {
downloader->appendRawHeader(header.first, header.second);
}
}
downloader->manipulateData(url, operation, input_data, timeout, protected_contents, username, password);
return downloader;
}
NetworkResult NetworkFactory::performNetworkOperation(const QString& url, int timeout, const QByteArray& input_data,
QByteArray& output, QNetworkAccessManager::Operation operation,
QList<QPair<QByteArray, QByteArray>> additional_headers,

View file

@ -37,15 +37,6 @@ class NetworkFactory {
int timeout,
QIcon& output,
const QNetworkProxy& custom_proxy = QNetworkProxy::ProxyType::DefaultProxy);
static Downloader* performAsyncNetworkOperation(const QString& url,
int timeout,
const QByteArray& input_data,
QNetworkAccessManager::Operation operation,
QList<QPair<QByteArray,
QByteArray>> additional_headers = QList<QPair<QByteArray, QByteArray>>(),
bool protected_contents = false,
const QString& username = QString(),
const QString& password = QString());
static NetworkResult performNetworkOperation(const QString& url, int timeout,
const QByteArray& input_data,
QByteArray& output,

View file

@ -314,6 +314,8 @@ QNetworkProxy ServiceRoot::networkProxy() const {
void ServiceRoot::setNetworkProxy(const QNetworkProxy& network_proxy) {
m_networkProxy = network_proxy;
emit proxyChanged(network_proxy);
}
ImportantNode* ServiceRoot::importantNode() const {

View file

@ -153,10 +153,8 @@ class ServiceRoot : public RootItem {
// NOTE: Keep in sync with ServiceEntryRoot::code().
virtual QString code() const = 0;
// These are not part of "interface".
CacheForServiceRoot* toCache() const;
public:
CacheForServiceRoot* toCache() const;
// Account ID corresponds with DB attribute Accounts (id).
int accountId() const;
@ -231,6 +229,7 @@ class ServiceRoot : public RootItem {
void assembleFeeds(Assignment feeds);
signals:
void proxyChanged(QNetworkProxy proxy);
void dataChanged(QList<RootItem*> items);
void reloadMessageListRequested(bool mark_selected_messages_read);
void itemExpandRequested(QList<RootItem*> items, bool expand);

View file

@ -13,6 +13,7 @@ FormEditTtRssAccount::FormEditTtRssAccount(QWidget* parent)
insertCustomTab(m_details, tr("Server setup"), 0);
activateTab(0);
connect(m_details->m_ui.m_btnTestSetup, &QPushButton::clicked, this, &FormEditTtRssAccount::performTest);
m_details->m_ui.m_txtUrl->setFocus();
}
@ -32,7 +33,7 @@ void FormEditTtRssAccount::apply() {
accept();
if (editing_account) {
account<TtRssServiceRoot>()->network()->logout();
account<TtRssServiceRoot>()->network()->logout(m_account->networkProxy());
account<TtRssServiceRoot>()->completelyRemoveAllData();
account<TtRssServiceRoot>()->syncIn();
}
@ -52,3 +53,7 @@ void FormEditTtRssAccount::setEditableAccount(ServiceRoot* editable_account) {
m_details->m_ui.m_checkServerSideUpdate->setChecked(existing_root->network()->forceServerSideUpdate());
m_details->m_ui.m_checkDownloadOnlyUnreadMessages->setChecked(existing_root->network()->downloadOnlyUnreadMessages());
}
void FormEditTtRssAccount::performTest() {
m_details->performTest(m_proxyDetails->proxy());
}

View file

@ -21,6 +21,9 @@ class FormEditTtRssAccount : public FormAccountDetails {
protected:
virtual void setEditableAccount(ServiceRoot* editable_account);
private slots:
void performTest();
private:
TtRssAccountDetails* m_details;
};

View file

@ -56,6 +56,7 @@ void FormTtRssFeedDetails::apply() {
parent->customId().toInt();
const TtRssSubscribeToFeedResponse response = root->network()->subscribeToFeed(m_feedDetails->ui.m_txtUrl->lineEdit()->text(),
category_id,
m_serviceRoot->networkProxy(),
m_authDetails->m_gbAuthentication->isChecked(),
m_authDetails->m_txtUsername->lineEdit()->text(),
m_authDetails->m_txtPassword->lineEdit()->text());

View file

@ -41,7 +41,6 @@ TtRssAccountDetails::TtRssAccountDetails(QWidget* parent) : QWidget(parent) {
connect(m_ui.m_txtHttpPassword->lineEdit(), &BaseLineEdit::textChanged, this, &TtRssAccountDetails::onHttpPasswordChanged);
connect(m_ui.m_txtHttpUsername->lineEdit(), &BaseLineEdit::textChanged, this, &TtRssAccountDetails::onHttpUsernameChanged);
connect(m_ui.m_txtUrl->lineEdit(), &BaseLineEdit::textChanged, this, &TtRssAccountDetails::onUrlChanged);
connect(m_ui.m_btnTestSetup, &QPushButton::clicked, this, &TtRssAccountDetails::performTest);
connect(m_ui.m_gbHttpAuthentication, &QGroupBox::toggled, this, &TtRssAccountDetails::onHttpPasswordChanged);
connect(m_ui.m_gbHttpAuthentication, &QGroupBox::toggled, this, &TtRssAccountDetails::onHttpUsernameChanged);
connect(m_ui.m_checkShowHttpPassword, &QCheckBox::toggled, this, &TtRssAccountDetails::displayHttpPassword);
@ -63,7 +62,7 @@ void TtRssAccountDetails::displayHttpPassword(bool display) {
m_ui.m_txtHttpPassword->lineEdit()->setEchoMode(display ? QLineEdit::Normal : QLineEdit::Password);
}
void TtRssAccountDetails::performTest() {
void TtRssAccountDetails::performTest(const QNetworkProxy& proxy) {
TtRssNetworkFactory factory;
factory.setUsername(m_ui.m_txtUsername->lineEdit()->text());
@ -74,7 +73,7 @@ void TtRssAccountDetails::performTest() {
factory.setAuthPassword(m_ui.m_txtHttpPassword->lineEdit()->text());
factory.setForceServerSideUpdate(m_ui.m_checkServerSideUpdate->isChecked());
TtRssLoginResponse result = factory.login();
TtRssLoginResponse result = factory.login(proxy);
if (result.isLoaded()) {
if (result.hasError()) {

View file

@ -7,6 +7,8 @@
#include "ui_ttrssaccountdetails.h"
#include <QNetworkProxy>
class TtRssServiceRoot;
class TtRssAccountDetails : public QWidget {
@ -20,7 +22,7 @@ class TtRssAccountDetails : public QWidget {
private slots:
void displayPassword(bool display);
void displayHttpPassword(bool display);
void performTest();
void performTest(const QNetworkProxy& proxy);
void onUsernameChanged();
void onPasswordChanged();

View file

@ -69,11 +69,11 @@ QNetworkReply::NetworkError TtRssNetworkFactory::lastError() const {
return m_lastError;
}
TtRssLoginResponse TtRssNetworkFactory::login() {
TtRssLoginResponse TtRssNetworkFactory::login(const QNetworkProxy& proxy) {
if (!m_sessionId.isEmpty()) {
qWarningNN << LOGSEC_TTRSS
<< "Session ID is not empty before login, logging out first.";
logout();
logout(proxy);
}
QJsonObject json;
@ -95,7 +95,11 @@ TtRssLoginResponse TtRssNetworkFactory::login() {
QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
result_raw,
QNetworkAccessManager::Operation::PostOperation,
headers);
headers,
false,
{},
{},
proxy);
TtRssLoginResponse login_response(QString::fromUtf8(result_raw));
if (network_reply.first == QNetworkReply::NoError) {
@ -112,7 +116,7 @@ TtRssLoginResponse TtRssNetworkFactory::login() {
return login_response;
}
TtRssResponse TtRssNetworkFactory::logout() {
TtRssResponse TtRssNetworkFactory::logout(const QNetworkProxy& proxy) {
if (!m_sessionId.isEmpty()) {
QJsonObject json;
@ -131,7 +135,11 @@ TtRssResponse TtRssNetworkFactory::logout() {
QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
result_raw,
QNetworkAccessManager::Operation::PostOperation,
headers);
headers,
false,
{},
{},
proxy);
m_lastError = network_reply.first;
@ -154,7 +162,7 @@ TtRssResponse TtRssNetworkFactory::logout() {
}
}
TtRssGetLabelsResponse TtRssNetworkFactory::getLabels() {
TtRssGetLabelsResponse TtRssNetworkFactory::getLabels(const QNetworkProxy& proxy) {
QJsonObject json;
json["op"] = QSL("getLabels");
@ -176,12 +184,18 @@ TtRssGetLabelsResponse TtRssNetworkFactory::getLabels() {
if (result.isNotLoggedIn()) {
// We are not logged in.
login();
login(proxy);
json["sid"] = m_sessionId;
network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
network_reply = NetworkFactory::performNetworkOperation(m_fullUrl,
timeout,
QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
result_raw,
QNetworkAccessManager::Operation::PostOperation,
headers);
headers,
false,
{},
{},
proxy);
result = TtRssGetLabelsResponse(QString::fromUtf8(result_raw));
}
@ -195,7 +209,7 @@ TtRssGetLabelsResponse TtRssNetworkFactory::getLabels() {
return result;
}
TtRssGetFeedsCategoriesResponse TtRssNetworkFactory::getFeedsCategories() {
TtRssGetFeedsCategoriesResponse TtRssNetworkFactory::getFeedsCategories(const QNetworkProxy& proxy) {
QJsonObject json;
json["op"] = QSL("getFeedTree");
@ -212,17 +226,27 @@ TtRssGetFeedsCategoriesResponse TtRssNetworkFactory::getFeedsCategories() {
QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
result_raw,
QNetworkAccessManager::Operation::PostOperation,
headers);
headers,
false,
{},
{},
proxy);
TtRssGetFeedsCategoriesResponse result(QString::fromUtf8(result_raw));
if (result.isNotLoggedIn()) {
// We are not logged in.
login();
login(proxy);
json["sid"] = m_sessionId;
network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
network_reply = NetworkFactory::performNetworkOperation(m_fullUrl,
timeout,
QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
result_raw,
QNetworkAccessManager::Operation::PostOperation,
headers);
headers,
false,
{},
{},
proxy);
result = TtRssGetFeedsCategoriesResponse(QString::fromUtf8(result_raw));
}
@ -238,7 +262,8 @@ TtRssGetFeedsCategoriesResponse TtRssNetworkFactory::getFeedsCategories() {
TtRssGetHeadlinesResponse TtRssNetworkFactory::getHeadlines(int feed_id, int limit, int skip,
bool show_content, bool include_attachments,
bool sanitize, bool unread_only) {
bool sanitize, bool unread_only,
const QNetworkProxy& proxy) {
QJsonObject json;
json["op"] = QSL("getHeadlines");
@ -258,21 +283,32 @@ TtRssGetHeadlinesResponse TtRssNetworkFactory::getHeadlines(int feed_id, int lim
headers << QPair<QByteArray, QByteArray>(HTTP_HEADERS_CONTENT_TYPE, TTRSS_CONTENT_TYPE_JSON);
headers << NetworkFactory::generateBasicAuthHeader(m_authUsername, m_authPassword);
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout,
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_fullUrl,
timeout,
QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
result_raw,
QNetworkAccessManager::Operation::PostOperation,
headers);
headers,
false,
{},
{},
proxy);
TtRssGetHeadlinesResponse result(QString::fromUtf8(result_raw));
if (result.isNotLoggedIn()) {
// We are not logged in.
login();
login(proxy);
json["sid"] = m_sessionId;
network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
network_reply = NetworkFactory::performNetworkOperation(m_fullUrl,
timeout,
QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
result_raw,
QNetworkAccessManager::Operation::PostOperation,
headers);
headers,
false,
{},
{},
proxy);
result = TtRssGetHeadlinesResponse(QString::fromUtf8(result_raw));
}
@ -286,7 +322,8 @@ TtRssGetHeadlinesResponse TtRssNetworkFactory::getHeadlines(int feed_id, int lim
return result;
}
TtRssResponse TtRssNetworkFactory::setArticleLabel(const QStringList& article_ids, const QString& label_custom_id, bool assign) {
TtRssResponse TtRssNetworkFactory::setArticleLabel(const QStringList& article_ids, const QString& label_custom_id,
bool assign, const QNetworkProxy& proxy) {
QJsonObject json;
json["op"] = QSL("setArticleLabel");
@ -302,21 +339,32 @@ TtRssResponse TtRssNetworkFactory::setArticleLabel(const QStringList& article_id
headers << QPair<QByteArray, QByteArray>(HTTP_HEADERS_CONTENT_TYPE, TTRSS_CONTENT_TYPE_JSON);
headers << NetworkFactory::generateBasicAuthHeader(m_authUsername, m_authPassword);
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout,
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_fullUrl,
timeout,
QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
result_raw,
QNetworkAccessManager::Operation::PostOperation,
headers);
headers,
false,
{},
{},
proxy);
TtRssResponse result(QString::fromUtf8(result_raw));
if (result.isNotLoggedIn()) {
// We are not logged in.
login();
login(proxy);
json["sid"] = m_sessionId;
network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
network_reply = NetworkFactory::performNetworkOperation(m_fullUrl,
timeout,
QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
result_raw,
QNetworkAccessManager::Operation::PostOperation,
headers);
headers,
false,
{},
{},
proxy);
result = TtRssResponse(QString::fromUtf8(result_raw));
}
@ -332,7 +380,8 @@ TtRssResponse TtRssNetworkFactory::setArticleLabel(const QStringList& article_id
TtRssUpdateArticleResponse TtRssNetworkFactory::updateArticles(const QStringList& ids,
UpdateArticle::OperatingField field,
UpdateArticle::Mode mode) {
UpdateArticle::Mode mode,
const QNetworkProxy& proxy) {
QJsonObject json;
json["op"] = QSL("updateArticle");
@ -348,21 +397,32 @@ TtRssUpdateArticleResponse TtRssNetworkFactory::updateArticles(const QStringList
headers << QPair<QByteArray, QByteArray>(HTTP_HEADERS_CONTENT_TYPE, TTRSS_CONTENT_TYPE_JSON);
headers << NetworkFactory::generateBasicAuthHeader(m_authUsername, m_authPassword);
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout,
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_fullUrl,
timeout,
QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
result_raw,
QNetworkAccessManager::Operation::PostOperation,
headers);
headers,
false,
{},
{},
proxy);
TtRssUpdateArticleResponse result(QString::fromUtf8(result_raw));
if (result.isNotLoggedIn()) {
// We are not logged in.
login();
login(proxy);
json["sid"] = m_sessionId;
network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
network_reply = NetworkFactory::performNetworkOperation(m_fullUrl,
timeout,
QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
result_raw,
QNetworkAccessManager::Operation::PostOperation,
headers);
headers,
false,
{},
{},
proxy);
result = TtRssUpdateArticleResponse(QString::fromUtf8(result_raw));
}
@ -377,6 +437,7 @@ TtRssUpdateArticleResponse TtRssNetworkFactory::updateArticles(const QStringList
}
TtRssSubscribeToFeedResponse TtRssNetworkFactory::subscribeToFeed(const QString& url, int category_id,
const QNetworkProxy& proxy,
bool protectd, const QString& username,
const QString& password) {
QJsonObject json;
@ -398,21 +459,32 @@ TtRssSubscribeToFeedResponse TtRssNetworkFactory::subscribeToFeed(const QString&
headers << QPair<QByteArray, QByteArray>(HTTP_HEADERS_CONTENT_TYPE, TTRSS_CONTENT_TYPE_JSON);
headers << NetworkFactory::generateBasicAuthHeader(m_authUsername, m_authPassword);
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout,
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_fullUrl,
timeout,
QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
result_raw,
QNetworkAccessManager::Operation::PostOperation,
headers);
headers,
false,
{},
{},
proxy);
TtRssSubscribeToFeedResponse result(QString::fromUtf8(result_raw));
if (result.isNotLoggedIn()) {
// We are not logged in.
login();
login(proxy);
json["sid"] = m_sessionId;
network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
network_reply = NetworkFactory::performNetworkOperation(m_fullUrl,
timeout,
QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
result_raw,
QNetworkAccessManager::Operation::PostOperation,
headers);
headers,
false,
{},
{},
proxy);
result = TtRssSubscribeToFeedResponse(QString::fromUtf8(result_raw));
}
@ -426,7 +498,7 @@ TtRssSubscribeToFeedResponse TtRssNetworkFactory::subscribeToFeed(const QString&
return result;
}
TtRssUnsubscribeFeedResponse TtRssNetworkFactory::unsubscribeFeed(int feed_id) {
TtRssUnsubscribeFeedResponse TtRssNetworkFactory::unsubscribeFeed(int feed_id, const QNetworkProxy& proxy) {
QJsonObject json;
json["op"] = QSL("unsubscribeFeed");
@ -444,17 +516,27 @@ TtRssUnsubscribeFeedResponse TtRssNetworkFactory::unsubscribeFeed(int feed_id) {
QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
result_raw,
QNetworkAccessManager::Operation::PostOperation,
headers);
headers,
false,
{},
{},
proxy);
TtRssUnsubscribeFeedResponse result(QString::fromUtf8(result_raw));
if (result.isNotLoggedIn()) {
// We are not logged in.
login();
login(proxy);
json["sid"] = m_sessionId;
network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
network_reply = NetworkFactory::performNetworkOperation(m_fullUrl,
timeout,
QJsonDocument(json).toJson(QJsonDocument::JsonFormat::Compact),
result_raw,
QNetworkAccessManager::Operation::PostOperation,
headers);
headers,
false,
{},
{},
proxy);
result = TtRssUnsubscribeFeedResponse(QString::fromUtf8(result_raw));
}

View file

@ -100,17 +100,18 @@ namespace UpdateArticle {
SetToTrue = 1,
Togggle = 2
};
enum class OperatingField {
Starred = 0,
Published = 1,
Unread = 2
};
}
class TtRssNetworkFactory {
public:
explicit TtRssNetworkFactory();
virtual ~TtRssNetworkFactory() = default;
QString url() const;
void setUrl(const QString& url);
@ -143,32 +144,36 @@ class TtRssNetworkFactory {
// Operations.
// Logs user in.
TtRssLoginResponse login();
TtRssLoginResponse login(const QNetworkProxy& proxy);
// Logs user out.
TtRssResponse logout();
TtRssResponse logout(const QNetworkProxy& proxy);
// Gets list of labels from the server.
TtRssGetLabelsResponse getLabels();
TtRssGetLabelsResponse getLabels(const QNetworkProxy& proxy);
// Gets feeds from the server.
TtRssGetFeedsCategoriesResponse getFeedsCategories();
TtRssGetFeedsCategoriesResponse getFeedsCategories(const QNetworkProxy& proxy);
// Gets headlines (messages) from the server.
TtRssGetHeadlinesResponse getHeadlines(int feed_id, int limit, int skip,
bool show_content, bool include_attachments,
bool sanitize, bool unread_only);
bool sanitize, bool unread_only,
const QNetworkProxy& proxy);
TtRssResponse setArticleLabel(const QStringList& article_ids, const QString& label_custom_id, bool assign);
TtRssResponse setArticleLabel(const QStringList& article_ids, const QString& label_custom_id,
bool assign, const QNetworkProxy& proxy);
TtRssUpdateArticleResponse updateArticles(const QStringList& ids,
UpdateArticle::OperatingField field,
UpdateArticle::Mode mode);
UpdateArticle::Mode mode,
const QNetworkProxy& proxy);
TtRssSubscribeToFeedResponse subscribeToFeed(const QString& url, int category_id, bool protectd = false,
const QString& username = QString(), const QString& password = QString());
TtRssSubscribeToFeedResponse subscribeToFeed(const QString& url, int category_id, const QNetworkProxy& proxy,
bool protectd = false, const QString& username = QString(),
const QString& password = QString());
TtRssUnsubscribeFeedResponse unsubscribeFeed(int feed_id);
TtRssUnsubscribeFeedResponse unsubscribeFeed(int feed_id, const QNetworkProxy& proxy);
private:
QString m_bareUrl;

View file

@ -28,7 +28,8 @@ bool TtRssFeed::canBeDeleted() const {
}
bool TtRssFeed::deleteViaGui() {
TtRssUnsubscribeFeedResponse response = serviceRoot()->network()->unsubscribeFeed(customId().toInt());
TtRssUnsubscribeFeedResponse response = serviceRoot()->network()->unsubscribeFeed(customNumericId(),
getParentServiceRoot()->networkProxy());
if (response.code() == UFF_OK && removeItself()) {
serviceRoot()->requestItemRemoval(this);
@ -51,7 +52,8 @@ QList<Message> TtRssFeed::obtainNewMessages(bool* error_during_obtaining) {
do {
TtRssGetHeadlinesResponse headlines = serviceRoot()->network()->getHeadlines(customId().toInt(), limit, skip,
true, true, false,
serviceRoot()->network()->downloadOnlyUnreadMessages());
serviceRoot()->network()->downloadOnlyUnreadMessages(),
getParentServiceRoot()->networkProxy());
if (serviceRoot()->network()->lastError() != QNetworkReply::NoError) {
setStatus(Feed::Status::NetworkError);

View file

@ -47,7 +47,7 @@ void TtRssServiceRoot::start(bool freshly_activated) {
}
void TtRssServiceRoot::stop() {
m_network->logout();
m_network->logout(networkProxy());
qDebugNN << LOGSEC_TTRSS
<< "Stopping Tiny Tiny RSS account, logging out with result"
<< QUOTE_W_SPACE_DOT(m_network->lastError());
@ -132,7 +132,8 @@ void TtRssServiceRoot::saveAllCachedData(bool ignore_errors) {
UpdateArticle::OperatingField::Unread,
key == RootItem::ReadStatus::Unread
? UpdateArticle::Mode::SetToTrue
: UpdateArticle::Mode::SetToFalse);
: UpdateArticle::Mode::SetToFalse,
networkProxy());
if (!ignore_errors && (network()->lastError() != QNetworkReply::NetworkError::NoError || res.hasError())) {
addMessageStatesToCache(ids, key);
@ -154,7 +155,8 @@ void TtRssServiceRoot::saveAllCachedData(bool ignore_errors) {
UpdateArticle::OperatingField::Starred,
key == RootItem::Importance::Important
? UpdateArticle::Mode::SetToTrue
: UpdateArticle::Mode::SetToFalse);
: UpdateArticle::Mode::SetToFalse,
networkProxy());
if (!ignore_errors && (network()->lastError() != QNetworkReply::NetworkError::NoError || res.hasError())) {
addMessageStatesToCache(messages, key);
@ -171,7 +173,7 @@ void TtRssServiceRoot::saveAllCachedData(bool ignore_errors) {
QStringList messages = k.value();
if (!messages.isEmpty()) {
auto res = network()->setArticleLabel(messages, label_custom_id, true);
auto res = network()->setArticleLabel(messages, label_custom_id, true, networkProxy());
if (!ignore_errors && (network()->lastError() != QNetworkReply::NetworkError::NoError || res.hasError())) {
addLabelsAssignmentsToCache(messages, label_custom_id, true);
@ -188,7 +190,7 @@ void TtRssServiceRoot::saveAllCachedData(bool ignore_errors) {
QStringList messages = l.value();
if (!messages.isEmpty()) {
auto res = network()->setArticleLabel(messages, label_custom_id, false);
auto res = network()->setArticleLabel(messages, label_custom_id, false, networkProxy());
if (!ignore_errors && (network()->lastError() != QNetworkReply::NetworkError::NoError || res.hasError())) {
addLabelsAssignmentsToCache(messages, label_custom_id, false);
@ -256,8 +258,8 @@ void TtRssServiceRoot::updateTitle() {
}
RootItem* TtRssServiceRoot::obtainNewTreeForSyncIn() const {
TtRssGetFeedsCategoriesResponse feed_cats = m_network->getFeedsCategories();
TtRssGetLabelsResponse labels = m_network->getLabels();
TtRssGetFeedsCategoriesResponse feed_cats = m_network->getFeedsCategories(networkProxy());
TtRssGetLabelsResponse labels = m_network->getLabels(networkProxy());
if (m_network->lastError() == QNetworkReply::NoError) {
auto* tree = feed_cats.feedsCategories(true, m_network->url());