proxy support for tt-rss
This commit is contained in:
parent
bb361e5b9b
commit
b5b412719f
13 changed files with 172 additions and 98 deletions
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -21,6 +21,9 @@ class FormEditTtRssAccount : public FormAccountDetails {
|
|||
protected:
|
||||
virtual void setEditableAccount(ServiceRoot* editable_account);
|
||||
|
||||
private slots:
|
||||
void performTest();
|
||||
|
||||
private:
|
||||
TtRssAccountDetails* m_details;
|
||||
};
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Add table
Reference in a new issue