Network operations refactored. JSON usage refactored a bit.

This commit is contained in:
Martin Rotter 2016-04-19 10:02:55 +02:00
parent e1f6ddc97d
commit 8586c6c9e3
15 changed files with 197 additions and 164 deletions

View File

@ -191,8 +191,10 @@ QPair<UpdateInfo, QNetworkReply::NetworkError> SystemFactory::checkForUpdates()
QByteArray releases_xml;
QByteArray changelog;
result.second = NetworkFactory::downloadFile(RELEASES_LIST, DOWNLOAD_TIMEOUT, releases_xml).first;
NetworkFactory::downloadFile(CHANGELOG, DOWNLOAD_TIMEOUT, changelog).first;
result.second = NetworkFactory::performNetworkOperation(RELEASES_LIST, DOWNLOAD_TIMEOUT, QByteArray(), QString(),
releases_xml, QNetworkAccessManager::GetOperation).first;
NetworkFactory::performNetworkOperation(CHANGELOG, DOWNLOAD_TIMEOUT, QByteArray(), QString(), changelog,
QNetworkAccessManager::GetOperation);
if (result.second == QNetworkReply::NoError) {
result.first = parseUpdatesFile(releases_xml, changelog);

View File

@ -43,6 +43,11 @@ void Downloader::downloadFile(const QString &url, int timeout, bool protected_co
protected_contents, username, password);
}
void Downloader::uploadFile(const QString &url, const QByteArray &data, int timeout,
bool protected_contents, const QString &username, const QString &password) {
manipulateData(url, QNetworkAccessManager::PostOperation, data, timeout, protected_contents, username, password);
}
void Downloader::manipulateData(const QString &url, QNetworkAccessManager::Operation operation, const QByteArray &data,
int timeout, bool protected_contents, const QString &username, const QString &password) {
QNetworkRequest request;
@ -202,7 +207,9 @@ QVariant Downloader::lastContentType() const {
}
void Downloader::appendRawHeader(const QByteArray &name, const QByteArray &value) {
m_customHeaders.insert(name, value);
if (!value.isEmpty()) {
m_customHeaders.insert(name, value);
}
}
QNetworkReply::NetworkError Downloader::lastOutputError() const {

View File

@ -49,6 +49,10 @@ class Downloader : public QObject {
void downloadFile(const QString &url, int timeout = DOWNLOAD_TIMEOUT, bool protected_contents = false,
const QString &username = QString(), const QString &password = QString());
void uploadFile(const QString &url, const QByteArray &data, int timeout = DOWNLOAD_TIMEOUT,
bool protected_contents = false, const QString &username = QString(),
const QString &password = QString());
// Performs asynchronous upload of given data as HTTP POST.
// User needs to setup "Content-Encoding" header which
// matches encoding of the data.

View File

@ -134,7 +134,8 @@ QNetworkReply::NetworkError NetworkFactory::downloadIcon(const QList<QString> &u
foreach (const QString &url, urls) {
const QString google_s2_with_url = QString("http://www.google.com/s2/favicons?domain=%1").arg(url.toHtmlEscaped());
QByteArray icon_data;
network_result = downloadFile(google_s2_with_url, timeout, icon_data).first;
network_result = performNetworkOperation(google_s2_with_url, timeout, QByteArray(), QString(), icon_data,
QNetworkAccessManager::GetOperation).first;
if (network_result == QNetworkReply::NoError) {
QPixmap icon_pixmap;
@ -147,7 +148,7 @@ QNetworkReply::NetworkError NetworkFactory::downloadIcon(const QList<QString> &u
return network_result;
}
NetworkResult NetworkFactory::uploadData(const QString &url, int timeout, const QByteArray &input_data,
NetworkResult NetworkFactory::performNetworkOperation(const QString &url, int timeout, const QByteArray &input_data,
const QString &input_content_type, QByteArray &output,
QNetworkAccessManager::Operation operation, bool protected_contents,
const QString &username, const QString &password, bool set_basic_header) {
@ -200,59 +201,3 @@ NetworkResult NetworkFactory::downloadFeedFile(const QString &url, int timeout,
return result;
}
NetworkResult NetworkFactory::downloadFile(const QString &url, int timeout,
QByteArray &output, bool protected_contents,
const QString &username, const QString &password, bool set_basic_header) {
// Here, we want to achieve "synchronous" approach because we want synchronous download API for
// some use-cases too.
Downloader downloader;
QEventLoop loop;
NetworkResult result;
if (set_basic_header) {
QString basic_value = username + ":" + password;
QString header_value = QString("Basic ") + QString(basic_value.toUtf8().toBase64());
downloader.appendRawHeader("Authorization", header_value.toLocal8Bit());
}
// We need to quit event loop when the download finishes.
QObject::connect(&downloader, SIGNAL(completed(QNetworkReply::NetworkError)), &loop, SLOT(quit()));
downloader.downloadFile(url, timeout, protected_contents, username, password);
loop.exec();
output = downloader.lastOutputData();
result.first = downloader.lastOutputError();
result.second = downloader.lastContentType();
return result;
}
NetworkResult NetworkFactory::deleteResource(const QString &url, int timeout, bool protected_contents,
const QString &username, const QString &password, bool set_basic_header) {
// Here, we want to achieve "synchronous" approach because we want synchronous download API for
// some use-cases too.
Downloader downloader;
QEventLoop loop;
NetworkResult result;
if (set_basic_header) {
QString basic_value = username + ":" + password;
QString header_value = QString("Basic ") + QString(basic_value.toUtf8().toBase64());
downloader.appendRawHeader("Authorization", header_value.toLocal8Bit());
}
// We need to quit event loop when the download finishes.
QObject::connect(&downloader, SIGNAL(completed(QNetworkReply::NetworkError)), &loop, SLOT(quit()));
downloader.manipulateData(url, QNetworkAccessManager::DeleteOperation, QByteArray(),
timeout, protected_contents, username, password);
loop.exec();
result.first = downloader.lastOutputError();
result.second = downloader.lastContentType();
return result;
}

View File

@ -43,25 +43,15 @@ class NetworkFactory {
// given URL belongs to.
static QNetworkReply::NetworkError downloadIcon(const QList<QString> &urls, int timeout, QIcon &output);
static NetworkResult uploadData(const QString &url, int timeout, const QByteArray &input_data,
const QString &input_content_type, QByteArray &output,
QNetworkAccessManager::Operation operation,
bool protected_contents = false, const QString &username = QString(),
const QString &password = QString(), bool set_basic_header = false);
static NetworkResult performNetworkOperation(const QString &url, int timeout, const QByteArray &input_data,
const QString &input_content_type, QByteArray &output,
QNetworkAccessManager::Operation operation,
bool protected_contents = false, const QString &username = QString(),
const QString &password = QString(), bool set_basic_header = false);
static NetworkResult downloadFeedFile(const QString &url, int timeout, QByteArray &output,
bool protected_contents = false, const QString &username = QString(),
const QString &password = QString());
// Performs SYNCHRONOUS download of file with given URL
// and given timeout.
static NetworkResult downloadFile(const QString &url, int timeout, QByteArray &output,
bool protected_contents = false, const QString &username = QString(),
const QString &password = QString(), bool set_basic_header = false);
static NetworkResult deleteResource(const QString &url, int timeout,
bool protected_contents = false, const QString &username = QString(),
const QString &password = QString(), bool set_basic_header = false);
};
#endif // NETWORKFACTORY_H

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>541</width>
<height>273</height>
<height>301</height>
</rect>
</property>
<property name="windowTitle">

View File

@ -96,6 +96,7 @@ void FormEditOwnCloudFeed::performAction() {
}
else {
// TODO: Add new feed.
addNewFeed();
}
accept();
@ -204,6 +205,31 @@ void FormEditOwnCloudFeed::saveFeed() {
delete new_feed_data;
}
void FormEditOwnCloudFeed::addNewFeed() {
RootItem *parent = static_cast<RootItem*>(m_ui->m_cmbParentCategory->itemData(m_ui->m_cmbParentCategory->currentIndex()).value<void*>());
const int category_id = parent->kind() == RootItemKind::ServiceRoot ? 0 : parent->customId();
/*const TtRssSubscribeToFeedResponse response = root->network()->subscribeToFeed(m_ui->m_txtUrl->lineEdit()->text(),
category_id,
m_ui->m_gbAuthentication->isChecked(),
m_ui->m_txtUsername->lineEdit()->text(),
m_ui->m_txtPassword->lineEdit()->text());
*/
/*if (response.code() == STF_INSERTED) {
// Feed was added online.
accept();
qApp->showGuiMessage(tr("Feed added"), tr("Feed was added, triggering sync in now."), QSystemTrayIcon::Information);
QTimer::singleShot(100, root, SLOT(syncIn()));
}
else {
reject();
qApp->showGuiMessage(tr("Cannot add feed"),
tr("Feed was not added due to error."),
QSystemTrayIcon::Critical, qApp->mainForm(), true);
}*/
}
void FormEditOwnCloudFeed::loadCategories(const QList<Category*> categories, RootItem *root_item) {
m_ui->m_cmbParentCategory->addItem(root_item->icon(),
root_item->title(),

View File

@ -54,6 +54,7 @@ class FormEditOwnCloudFeed : public QDialog {
void initialize();
void loadFeed(OwnCloudFeed *input_feed);
void saveFeed();
void addNewFeed();
void loadCategories(const QList<Category*> categories, RootItem *root_item);
QScopedPointer<Ui::FormEditOwnCloudFeed> m_ui;

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>598</width>
<height>235</height>
<height>266</height>
</rect>
</property>
<property name="windowTitle">

View File

@ -102,12 +102,13 @@ QNetworkReply::NetworkError OwnCloudNetworkFactory::lastError() const {
OwnCloudUserResponse OwnCloudNetworkFactory::userInfo() {
QByteArray result_raw;
NetworkResult network_reply = NetworkFactory::downloadFile(m_urlUser,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
result_raw,
true, m_authUsername, m_authPassword,
true);
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_urlUser,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
QByteArray(), QString(), result_raw,
QNetworkAccessManager::GetOperation,
true, m_authUsername, m_authPassword,
true);
OwnCloudUserResponse user_response(QString::fromUtf8(result_raw));
if (network_reply.first != QNetworkReply::NoError) {
@ -120,12 +121,13 @@ OwnCloudUserResponse OwnCloudNetworkFactory::userInfo() {
OwnCloudStatusResponse OwnCloudNetworkFactory::status() {
QByteArray result_raw;
NetworkResult network_reply = NetworkFactory::downloadFile(m_urlStatus,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
result_raw,
true, m_authUsername, m_authPassword,
true);
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_urlStatus,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
QByteArray(), QString(), result_raw,
QNetworkAccessManager::GetOperation,
true, m_authUsername, m_authPassword,
true);
OwnCloudStatusResponse status_response(QString::fromUtf8(result_raw));
if (network_reply.first != QNetworkReply::NoError) {
@ -138,12 +140,13 @@ OwnCloudStatusResponse OwnCloudNetworkFactory::status() {
OwnCloudGetFeedsCategoriesResponse OwnCloudNetworkFactory::feedsCategories() {
QByteArray result_raw;
NetworkResult network_reply = NetworkFactory::downloadFile(m_urlFolders,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
result_raw,
true, m_authUsername, m_authPassword,
true);
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_urlFolders,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
QByteArray(), QString(), result_raw,
QNetworkAccessManager::GetOperation,
true, m_authUsername, m_authPassword,
true);
if (network_reply.first != QNetworkReply::NoError) {
qWarning("ownCloud: Obtaining of categories failed with error %d.", network_reply.first);
m_lastError = network_reply.first;
@ -154,12 +157,13 @@ OwnCloudGetFeedsCategoriesResponse OwnCloudNetworkFactory::feedsCategories() {
QString content_categories = QString::fromUtf8(result_raw);
// Now, obtain feeds.
network_reply = NetworkFactory::downloadFile(m_urlFeeds,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
result_raw,
true, m_authUsername, m_authPassword,
true);
network_reply = NetworkFactory::performNetworkOperation(m_urlFeeds,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
QByteArray(), QString(), result_raw,
QNetworkAccessManager::GetOperation,
true, m_authUsername, m_authPassword,
true);
if (network_reply.first != QNetworkReply::NoError) {
qWarning("ownCloud: Obtaining of feeds failed with error %d.", network_reply.first);
m_lastError = network_reply.first;
@ -174,10 +178,12 @@ OwnCloudGetFeedsCategoriesResponse OwnCloudNetworkFactory::feedsCategories() {
bool OwnCloudNetworkFactory::deleteFeed(int feed_id) {
QString final_url = m_urlDeleteFeed.arg(QString::number(feed_id));
NetworkResult network_reply = NetworkFactory::deleteResource(final_url,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
true, m_authUsername, m_authPassword, true);
NetworkResult network_reply = NetworkFactory::performNetworkOperation(final_url,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
QByteArray(), QString(),
QByteArray(), QNetworkAccessManager::DeleteOperation,
true, m_authUsername, m_authPassword, true);
m_lastError = network_reply.first;
@ -190,6 +196,33 @@ bool OwnCloudNetworkFactory::deleteFeed(int feed_id) {
}
}
bool OwnCloudNetworkFactory::createFeed(const QString &url, int parent_id) {
QJsonObject json;
json["url"] = url;
json["folderId"] = parent_id;
QByteArray result_raw;
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_urlFeeds,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
QJsonDocument(json).toJson(QJsonDocument::Compact),
QSL("application/json"),
result_raw,
QNetworkAccessManager::PostOperation,
true, m_authUsername, m_authPassword, true);
m_lastError = network_reply.first;
if (network_reply.first != QNetworkReply::NoError) {
qWarning("ownCloud: Creating of category failed with error %d.", network_reply.first);
return false;
}
else {
return true;
}
}
OwnCloudGetMessagesResponse OwnCloudNetworkFactory::getMessages(int feed_id) {
if (forceServerSideUpdate()) {
triggerFeedUpdate(feed_id);
@ -199,12 +232,13 @@ OwnCloudGetMessagesResponse OwnCloudNetworkFactory::getMessages(int feed_id) {
QString::number(-1),
QString::number(0));
QByteArray result_raw;
NetworkResult network_reply = NetworkFactory::downloadFile(final_url,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
result_raw,
true, m_authUsername, m_authPassword,
true);
NetworkResult network_reply = NetworkFactory::performNetworkOperation(final_url,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
QByteArray(), QString(), result_raw,
QNetworkAccessManager::GetOperation,
true, m_authUsername, m_authPassword,
true);
OwnCloudGetMessagesResponse msgs_response(QString::fromUtf8(result_raw));
if (network_reply.first != QNetworkReply::NoError) {
@ -231,13 +265,14 @@ QNetworkReply::NetworkError OwnCloudNetworkFactory::triggerFeedUpdate(int feed_i
// Now, we can trigger the update.
QByteArray raw_output;
NetworkResult network_reply = NetworkFactory::downloadFile(m_urlFeedsUpdate.arg(userId(),
QString::number(feed_id)),
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
raw_output,
true, m_authUsername, m_authPassword,
true);
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_urlFeedsUpdate.arg(userId(),
QString::number(feed_id)),
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
QByteArray(), QString(), raw_output,
QNetworkAccessManager::GetOperation,
true, m_authUsername, m_authPassword,
true);
if (network_reply.first != QNetworkReply::NoError) {
qWarning("ownCloud: Feeds update failed with error %d.", network_reply.first);
@ -263,21 +298,20 @@ QNetworkReply::NetworkError OwnCloudNetworkFactory::markMessagesRead(RootItem::R
}
foreach (const QString &id, custom_ids) {
var_ids.append(id.toInt());
ids.append(QJsonValue(id.toInt()));
}
ids.append(QJsonArray::fromVariantList(var_ids));
json["items"] = ids;
NetworkResult network_reply = NetworkFactory::uploadData(final_url,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
QJsonDocument(json).toJson(QJsonDocument::Compact),
"application/json",
raw_output,
QNetworkAccessManager::PutOperation,
true, m_authUsername, m_authPassword,
true);
NetworkResult network_reply = NetworkFactory::performNetworkOperation(final_url,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
QJsonDocument(json).toJson(QJsonDocument::Compact),
QSL("application/json"),
raw_output,
QNetworkAccessManager::PutOperation,
true, m_authUsername, m_authPassword,
true);
if (network_reply.first != QNetworkReply::NoError) {
qWarning("ownCloud: Marking messages as (un)read failed with error %d.", network_reply.first);
@ -303,24 +337,24 @@ QNetworkReply::NetworkError OwnCloudNetworkFactory::markMessagesStarred(RootItem
}
for (int i = 0; i < feed_ids.size(); i++) {
QVariantMap item;
item.insert(QSL("feedId"), feed_ids.at(i));
item.insert(QSL("guidHash"), guid_hashes.at(i));
QJsonObject item;
item["feedId"] = feed_ids.at(i);
item["guidHash"] = guid_hashes.at(i);
ids.append(QJsonValue::fromVariant(item));
ids.append(item);
}
json["items"] = ids;
NetworkResult network_reply = NetworkFactory::uploadData(final_url,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
QJsonDocument(json).toJson(QJsonDocument::Compact),
"application/json",
raw_output,
QNetworkAccessManager::PutOperation,
true, m_authUsername, m_authPassword,
true);
NetworkResult network_reply = NetworkFactory::performNetworkOperation(final_url,
qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
QJsonDocument(json).toJson(QJsonDocument::Compact),
"application/json",
raw_output,
QNetworkAccessManager::PutOperation,
true, m_authUsername, m_authPassword,
true);
if (network_reply.first != QNetworkReply::NoError) {
qWarning("ownCloud: Marking messages as (un)starred failed with error %d.", network_reply.first);
@ -440,8 +474,8 @@ RootItem *OwnCloudGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons)
cats.insert(0, parent);
// Process categories first, then process feeds.
foreach (QVariant cat, QJsonDocument::fromJson(m_contentCategories.toUtf8()).object()["folders"].toArray().toVariantList()) {
QMap<QString,QVariant> item = cat.toMap();
foreach (QJsonValue cat, QJsonDocument::fromJson(m_contentCategories.toUtf8()).object()["folders"].toArray()) {
QJsonObject item = cat.toObject();
OwnCloudCategory *category = new OwnCloudCategory();
category->setTitle(item["name"].toString());
@ -454,8 +488,8 @@ RootItem *OwnCloudGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons)
}
// We have categories added, now add all feeds.
foreach (QVariant fed, QJsonDocument::fromJson(m_contentFeeds.toUtf8()).object()["feeds"].toArray().toVariantList()) {
QMap<QString,QVariant> item = fed.toMap();
foreach (QJsonValue fed, QJsonDocument::fromJson(m_contentFeeds.toUtf8()).object()["feeds"].toArray()) {
QJsonObject item = fed.toObject();
OwnCloudFeed *feed = new OwnCloudFeed();
if (obtain_icons) {
@ -464,7 +498,9 @@ RootItem *OwnCloudGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons)
if (!icon_path.isEmpty()) {
QByteArray icon_data;
if (NetworkFactory::downloadFile(icon_path, DOWNLOAD_TIMEOUT, icon_data).first == QNetworkReply::NoError) {
if (NetworkFactory::performNetworkOperation(icon_path, DOWNLOAD_TIMEOUT,
QByteArray(), QString(), icon_data,
QNetworkAccessManager::GetOperation).first == QNetworkReply::NoError) {
// Icon downloaded, set it up.
QPixmap icon_pixmap;
icon_pixmap.loadFromData(icon_data);

View File

@ -122,6 +122,9 @@ class OwnCloudNetworkFactory {
// Delete a feed.
bool deleteFeed(int feed_id);
// Creates new feed.
bool createFeed(const QString &url, int parent_id);
// Get messages for given feed.
OwnCloudGetMessagesResponse getMessages(int feed_id);

View File

@ -22,6 +22,7 @@
#include "miscellaneous/application.h"
#include "miscellaneous/textfactory.h"
#include "miscellaneous/iconfactory.h"
#include "miscellaneous/mutex.h"
#include "gui/dialogs/formmain.h"
#include "services/owncloud/owncloudserviceentrypoint.h"
#include "services/owncloud/owncloudrecyclebin.h"
@ -29,6 +30,7 @@
#include "services/owncloud/owncloudcategory.h"
#include "services/owncloud/network/owncloudnetworkfactory.h"
#include "services/owncloud/gui/formeditowncloudaccount.h"
#include "services/owncloud/gui/formeditowncloudfeed.h"
OwnCloudServiceRoot::OwnCloudServiceRoot(RootItem *parent)
@ -68,7 +70,7 @@ bool OwnCloudServiceRoot::deleteViaGui() {
}
bool OwnCloudServiceRoot::supportsFeedAdding() const {
return false;
return true;
}
bool OwnCloudServiceRoot::supportsCategoryAdding() const {
@ -195,6 +197,21 @@ void OwnCloudServiceRoot::saveAccountDataToDatabase() {
}
void OwnCloudServiceRoot::addNewFeed(const QString &url) {
if (!qApp->feedUpdateLock()->tryLock()) {
// Lock was not obtained because
// it is used probably by feed updater or application
// is quitting.
qApp->showGuiMessage(tr("Cannot add item"),
tr("Cannot add feed because another critical operation is ongoing."),
QSystemTrayIcon::Warning, qApp->mainForm(), true);
// Thus, cannot delete and quit the method.
return;
}
QScopedPointer<FormEditOwnCloudFeed> form_pointer(new FormEditOwnCloudFeed(this, qApp->mainForm()));
form_pointer.data()->execForAdd(url);
qApp->feedUpdateLock()->unlock();
}
void OwnCloudServiceRoot::addNewCategory() {

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>541</width>
<height>377</height>
<height>415</height>
</rect>
</property>
<property name="windowTitle">

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>598</width>
<height>235</height>
<height>263</height>
</rect>
</property>
<property name="windowTitle">

View File

@ -87,7 +87,7 @@ TtRssLoginResponse TtRssNetworkFactory::login() {
json["password"] = m_password;
QByteArray result_raw;
NetworkResult network_reply = NetworkFactory::uploadData(m_url, qApp->settings()->value(GROUP(Feeds),
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_url, qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
QJsonDocument(json).toJson(QJsonDocument::Compact), CONTENT_TYPE, result_raw,
QNetworkAccessManager::PostOperation,
@ -114,7 +114,7 @@ TtRssResponse TtRssNetworkFactory::logout() {
json["sid"] = m_sessionId;
QByteArray result_raw;
NetworkResult network_reply = NetworkFactory::uploadData(m_url, qApp->settings()->value(GROUP(Feeds),
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_url, qApp->settings()->value(GROUP(Feeds),
SETTING(Feeds::UpdateTimeout)).toInt(),
QJsonDocument(json).toJson(QJsonDocument::Compact), CONTENT_TYPE, result_raw,
QNetworkAccessManager::PostOperation,
@ -147,7 +147,7 @@ TtRssGetFeedsCategoriesResponse TtRssNetworkFactory::getFeedsCategories() {
const int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt();
QByteArray result_raw;
NetworkResult network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact),
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact),
CONTENT_TYPE, result_raw,
QNetworkAccessManager::PostOperation,
m_authIsUsed, m_authUsername, m_authPassword);
@ -158,7 +158,7 @@ TtRssGetFeedsCategoriesResponse TtRssNetworkFactory::getFeedsCategories() {
login();
json["sid"] = m_sessionId;
network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), CONTENT_TYPE, result_raw,
network_reply = NetworkFactory::performNetworkOperation(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), CONTENT_TYPE, result_raw,
QNetworkAccessManager::PostOperation,
m_authIsUsed, m_authUsername, m_authPassword);
result = TtRssGetFeedsCategoriesResponse(QString::fromUtf8(result_raw));
@ -188,7 +188,7 @@ TtRssGetHeadlinesResponse TtRssNetworkFactory::getHeadlines(int feed_id, int lim
const int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt();
QByteArray result_raw;
NetworkResult network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact),
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact),
CONTENT_TYPE, result_raw,
QNetworkAccessManager::PostOperation,
m_authIsUsed, m_authUsername, m_authPassword);
@ -199,7 +199,7 @@ TtRssGetHeadlinesResponse TtRssNetworkFactory::getHeadlines(int feed_id, int lim
login();
json["sid"] = m_sessionId;
network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), CONTENT_TYPE, result_raw,
network_reply = NetworkFactory::performNetworkOperation(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), CONTENT_TYPE, result_raw,
QNetworkAccessManager::PostOperation,
m_authIsUsed, m_authUsername, m_authPassword);
result = TtRssGetHeadlinesResponse(QString::fromUtf8(result_raw));
@ -225,7 +225,7 @@ TtRssUpdateArticleResponse TtRssNetworkFactory::updateArticles(const QStringList
const int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt();
QByteArray result_raw;
NetworkResult network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact),
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact),
CONTENT_TYPE, result_raw,
QNetworkAccessManager::PostOperation,
m_authIsUsed, m_authUsername, m_authPassword);
@ -236,7 +236,7 @@ TtRssUpdateArticleResponse TtRssNetworkFactory::updateArticles(const QStringList
login();
json["sid"] = m_sessionId;
network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact),
network_reply = NetworkFactory::performNetworkOperation(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact),
CONTENT_TYPE, result_raw,
QNetworkAccessManager::PostOperation,
m_authIsUsed, m_authUsername, m_authPassword);
@ -267,7 +267,7 @@ TtRssSubscribeToFeedResponse TtRssNetworkFactory::subscribeToFeed(const QString
const int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt();
QByteArray result_raw;
NetworkResult network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact),
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact),
CONTENT_TYPE, result_raw,
QNetworkAccessManager::PostOperation,
m_authIsUsed, m_authUsername, m_authPassword);
@ -278,7 +278,7 @@ TtRssSubscribeToFeedResponse TtRssNetworkFactory::subscribeToFeed(const QString
login();
json["sid"] = m_sessionId;
network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact),
network_reply = NetworkFactory::performNetworkOperation(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact),
CONTENT_TYPE, result_raw,
QNetworkAccessManager::PostOperation,
m_authIsUsed, m_authUsername, m_authPassword);
@ -301,7 +301,7 @@ TtRssUnsubscribeFeedResponse TtRssNetworkFactory::unsubscribeFeed(int feed_id) {
const int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt();
QByteArray result_raw;
NetworkResult network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), CONTENT_TYPE, result_raw,
NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), CONTENT_TYPE, result_raw,
QNetworkAccessManager::PostOperation,
m_authIsUsed, m_authUsername, m_authPassword);
TtRssUnsubscribeFeedResponse result(QString::fromUtf8(result_raw));
@ -311,7 +311,7 @@ TtRssUnsubscribeFeedResponse TtRssNetworkFactory::unsubscribeFeed(int feed_id) {
login();
json["sid"] = m_sessionId;
network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), CONTENT_TYPE, result_raw,
network_reply = NetworkFactory::performNetworkOperation(m_url, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), CONTENT_TYPE, result_raw,
QNetworkAccessManager::PostOperation,
m_authIsUsed, m_authUsername, m_authPassword);
result = TtRssUnsubscribeFeedResponse(QString::fromUtf8(result_raw));
@ -505,7 +505,9 @@ RootItem *TtRssGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons, QS
QString full_icon_address = base_address + QL1C('/') + icon_path;
QByteArray icon_data;
if (NetworkFactory::downloadFile(full_icon_address, DOWNLOAD_TIMEOUT, icon_data).first == QNetworkReply::NoError) {
if (NetworkFactory::performNetworkOperation(full_icon_address, DOWNLOAD_TIMEOUT,
QByteArray(), QString(), icon_data,
QNetworkAccessManager::GetOperation).first == QNetworkReply::NoError) {
// Icon downloaded, set it up.
QPixmap icon_pixmap;
icon_pixmap.loadFromData(icon_data);