Network operations refactored. JSON usage refactored a bit.
This commit is contained in:
parent
e1f6ddc97d
commit
8586c6c9e3
@ -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);
|
||||
|
@ -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 {
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>541</width>
|
||||
<height>273</height>
|
||||
<height>301</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -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(),
|
||||
|
@ -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;
|
||||
|
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>598</width>
|
||||
<height>235</height>
|
||||
<height>266</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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() {
|
||||
|
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>541</width>
|
||||
<height>377</height>
|
||||
<height>415</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>598</width>
|
||||
<height>235</height>
|
||||
<height>263</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user