diff --git a/src/miscellaneous/application.cpp b/src/miscellaneous/application.cpp index 0b58466ca..cc37efd4d 100755 --- a/src/miscellaneous/application.cpp +++ b/src/miscellaneous/application.cpp @@ -78,7 +78,10 @@ bool Application::isFirstRun() { } bool Application::isFirstRun(const QString &version) { - return settings()->value(GROUP(General), QString(General::FirstRun) + QL1C('_') + version, true).toBool(); + if (version == APP_VERSION) { + // Check this only if checked version is equal to actual version. + return settings()->value(GROUP(General), QString(General::FirstRun) + QL1C('_') + version, true).toBool(); + } } void Application::eliminateFirstRun() { diff --git a/src/services/owncloud/network/owncloudnetworkfactory.cpp b/src/services/owncloud/network/owncloudnetworkfactory.cpp index 1f5fc23fd..61a433e04 100755 --- a/src/services/owncloud/network/owncloudnetworkfactory.cpp +++ b/src/services/owncloud/network/owncloudnetworkfactory.cpp @@ -27,6 +27,7 @@ #include "services/owncloud/owncloudfeed.h" #include +#include #include #include @@ -271,7 +272,7 @@ QNetworkReply::NetworkError OwnCloudNetworkFactory::markMessagesRead(RootItem::R NetworkResult network_reply = NetworkFactory::uploadData(final_url, qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(), - QJsonDocument(json).toJson(), + QJsonDocument(json).toJson(QJsonDocument::Compact), "application/json", raw_output, QNetworkAccessManager::PutOperation, @@ -314,7 +315,7 @@ QNetworkReply::NetworkError OwnCloudNetworkFactory::markMessagesStarred(RootItem NetworkResult network_reply = NetworkFactory::uploadData(final_url, qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(), - QJsonDocument(json).toJson(), + QJsonDocument(json).toJson(QJsonDocument::Compact), "application/json", raw_output, QNetworkAccessManager::PutOperation, @@ -337,7 +338,7 @@ void OwnCloudNetworkFactory::setUserId(const QString &userId) { } OwnCloudResponse::OwnCloudResponse(const QString &raw_content) { - m_rawContent = QJsonDocument::fromJson(raw_content.toUtf8());; + m_rawContent = QJsonDocument::fromJson(raw_content.toUtf8()).object(); } OwnCloudResponse::~OwnCloudResponse() { @@ -348,7 +349,7 @@ bool OwnCloudResponse::isLoaded() const { } QString OwnCloudResponse::toString() const { - return m_rawContent.toJson(); + return QJsonDocument(m_rawContent).toJson(QJsonDocument::Compact); } OwnCloudUserResponse::OwnCloudUserResponse(const QString &raw_content) : OwnCloudResponse(raw_content) { @@ -359,7 +360,7 @@ OwnCloudUserResponse::~OwnCloudUserResponse() { QString OwnCloudUserResponse::displayName() const { if (isLoaded()) { - return m_rawContent.object()["displayName"].toString(); + return m_rawContent["displayName"].toString(); } else { return QString(); @@ -368,7 +369,7 @@ QString OwnCloudUserResponse::displayName() const { QString OwnCloudUserResponse::userId() const { if (isLoaded()) { - return m_rawContent.object()["userId"].toString(); + return m_rawContent["userId"].toString(); } else { return QString(); @@ -377,7 +378,7 @@ QString OwnCloudUserResponse::userId() const { QDateTime OwnCloudUserResponse::lastLoginTime() const { if (isLoaded()) { - return QDateTime::fromMSecsSinceEpoch(m_rawContent.object()["lastLoginTimestamp"].toVariant().value()); + return QDateTime::fromMSecsSinceEpoch(m_rawContent["lastLoginTimestamp"].toVariant().value()); } else { return QDateTime(); @@ -386,7 +387,7 @@ QDateTime OwnCloudUserResponse::lastLoginTime() const { QIcon OwnCloudUserResponse::avatar() const { if (isLoaded()) { - QString image_data = m_rawContent.object()["avatar"].toObject()["data"].toString(); + QString image_data = m_rawContent["avatar"].toObject()["data"].toString(); QByteArray decoded_data = QByteArray::fromBase64(image_data.toLocal8Bit()); QPixmap image; @@ -407,7 +408,7 @@ OwnCloudStatusResponse::~OwnCloudStatusResponse() { QString OwnCloudStatusResponse::version() const { if (isLoaded()) { - return m_rawContent.object()["version"].toString(); + return m_rawContent["version"].toString(); } else { return QString(); @@ -416,7 +417,7 @@ QString OwnCloudStatusResponse::version() const { bool OwnCloudStatusResponse::misconfiguredCron() const { if (isLoaded()) { - return m_rawContent.object()["warnings"].toObject()["improperlyConfiguredCron"].toBool(); + return m_rawContent["warnings"].toObject()["improperlyConfiguredCron"].toBool(); } else { return false; @@ -492,13 +493,13 @@ OwnCloudGetMessagesResponse::~OwnCloudGetMessagesResponse() { QList OwnCloudGetMessagesResponse::messages() const { QList msgs; - foreach (QVariant message, m_rawContent.object()["items"].toArray().toVariantList()) { - QMap message_map = message.toMap(); + foreach (QJsonValue message, m_rawContent["items"].toArray()) { + QJsonObject message_map = message.toObject(); Message msg; msg.m_author = message_map["author"].toString(); msg.m_contents = message_map["body"].toString(); - msg.m_created = TextFactory::parseDateTime(message_map["pubDate"].value() * 1000); + msg.m_created = TextFactory::parseDateTime(message_map["pubDate"].toVariant().value() * 1000); msg.m_createdFromFeed = true; msg.m_customId = message_map["id"].toString(); msg.m_customHash = message_map["guidHash"].toString(); diff --git a/src/services/owncloud/network/owncloudnetworkfactory.h b/src/services/owncloud/network/owncloudnetworkfactory.h index caab1930c..5418f1466 100755 --- a/src/services/owncloud/network/owncloudnetworkfactory.h +++ b/src/services/owncloud/network/owncloudnetworkfactory.h @@ -25,7 +25,7 @@ #include #include #include -#include +#include class OwnCloudResponse { @@ -37,7 +37,7 @@ class OwnCloudResponse { QString toString() const; protected: - QJsonDocument m_rawContent; + QJsonObject m_rawContent; }; class OwnCloudUserResponse : public OwnCloudResponse { diff --git a/src/services/tt-rss/network/ttrssnetworkfactory.cpp b/src/services/tt-rss/network/ttrssnetworkfactory.cpp index 4f172f1e8..44ed3cc35 100755 --- a/src/services/tt-rss/network/ttrssnetworkfactory.cpp +++ b/src/services/tt-rss/network/ttrssnetworkfactory.cpp @@ -27,7 +27,7 @@ #include "miscellaneous/textfactory.h" #include "network-web/networkfactory.h" -#include +#include #include #include #include @@ -89,7 +89,7 @@ TtRssLoginResponse TtRssNetworkFactory::login() { QByteArray result_raw; NetworkResult network_reply = NetworkFactory::uploadData(m_url, qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(), - QJsonDocument(json).toJson(), CONTENT_TYPE, result_raw, + QJsonDocument(json).toJson(QJsonDocument::Compact), CONTENT_TYPE, result_raw, QNetworkAccessManager::PostOperation, m_authIsUsed, m_authUsername, m_authPassword); TtRssLoginResponse login_response(QString::fromUtf8(result_raw)); @@ -116,7 +116,7 @@ TtRssResponse TtRssNetworkFactory::logout() { QByteArray result_raw; NetworkResult network_reply = NetworkFactory::uploadData(m_url, qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(), - QJsonDocument(json).toJson(), CONTENT_TYPE, result_raw, + 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(), CONTENT_TYPE, result_raw, + network_reply = NetworkFactory::uploadData(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(), + NetworkResult network_reply = NetworkFactory::uploadData(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(), CONTENT_TYPE, result_raw, + network_reply = NetworkFactory::uploadData(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(), + NetworkResult network_reply = NetworkFactory::uploadData(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(), + network_reply = NetworkFactory::uploadData(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(), + NetworkResult network_reply = NetworkFactory::uploadData(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(), + network_reply = NetworkFactory::uploadData(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(), CONTENT_TYPE, result_raw, + NetworkResult network_reply = NetworkFactory::uploadData(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(), CONTENT_TYPE, result_raw, + network_reply = NetworkFactory::uploadData(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)); @@ -358,7 +358,7 @@ void TtRssNetworkFactory::setAuthPassword(const QString &auth_password) { } TtRssResponse::TtRssResponse(const QString &raw_content) { - m_rawContent = QJsonDocument::fromJson(raw_content.toUtf8()); + m_rawContent = QJsonDocument::fromJson(raw_content.toUtf8()).object(); } TtRssResponse::~TtRssResponse() { @@ -373,7 +373,7 @@ int TtRssResponse::seq() const { return CONTENT_NOT_LOADED; } else { - return m_rawContent.object()["seq"].toInt(); + return m_rawContent["seq"].toInt(); } } @@ -382,7 +382,7 @@ int TtRssResponse::status() const { return CONTENT_NOT_LOADED; } else { - return m_rawContent.object()["status"].toInt(); + return m_rawContent["status"].toInt(); } } @@ -391,7 +391,7 @@ bool TtRssResponse::isNotLoggedIn() const { } QString TtRssResponse::toString() const { - return m_rawContent.toJson(); + return QJsonDocument(m_rawContent).toJson(QJsonDocument::Compact); } TtRssLoginResponse::TtRssLoginResponse(const QString &raw_content) : TtRssResponse(raw_content) { @@ -405,7 +405,7 @@ int TtRssLoginResponse::apiLevel() const { return CONTENT_NOT_LOADED; } else { - return m_rawContent.object()["content"].toObject()["api_level"].toInt(); + return m_rawContent["content"].toObject()["api_level"].toInt(); } } @@ -414,7 +414,7 @@ QString TtRssLoginResponse::sessionId() const { return QString(); } else { - return m_rawContent.object()["content"].toObject()["session_id"].toString(); + return m_rawContent["content"].toObject()["session_id"].toString(); } } @@ -423,7 +423,7 @@ QString TtRssResponse::error() const { return QString(); } else { - return m_rawContent.object()["content"].toObject()["error"].toString(); + return m_rawContent["content"].toObject()["error"].toString(); } } @@ -432,7 +432,7 @@ bool TtRssResponse::hasError() const { return false; } else { - return m_rawContent.object()["content"].toObject().contains("error"); + return m_rawContent["content"].toObject().contains("error"); } } @@ -454,17 +454,17 @@ RootItem *TtRssGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons, QS if (status() == API_STATUS_OK) { // We have data, construct object tree according to data. - QList items_to_process = m_rawContent.object()["content"].toObject()["categories"].toObject()["items"].toArray().toVariantList(); - QList > pairs; + QJsonArray items_to_process = m_rawContent["content"].toObject()["categories"].toObject()["items"].toArray(); + QList > pairs; - foreach (QVariant item, items_to_process) { - pairs.append(QPair(parent, item)); + foreach (QJsonValue item, items_to_process) { + pairs.append(QPair(parent, item)); } while (!pairs.isEmpty()) { - QPair pair = pairs.takeFirst(); + QPair pair = pairs.takeFirst(); RootItem *act_parent = pair.first; - QMap item = pair.second.toMap(); + QJsonObject item = pair.second.toObject(); int item_id = item["bare_id"].toInt(); bool is_category = item.contains("type") && item["type"].toString() == GFT_TYPE_CATEGORY; @@ -474,8 +474,8 @@ RootItem *TtRssGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons, QS if (item_id == 0) { // This is "Uncategorized" category, all its feeds belong to top-level root. if (item.contains("items")) { - foreach (QVariant child_feed, item["items"].toList()) { - pairs.append(QPair(parent, child_feed)); + foreach (QJsonValue child_feed, item["items"].toArray()) { + pairs.append(QPair(parent, child_feed)); } } } @@ -487,8 +487,8 @@ RootItem *TtRssGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons, QS act_parent->appendChild(category); if (item.contains("items")) { - foreach (QVariant child, item["items"].toList()) { - pairs.append(QPair(category, child)); + foreach (QJsonValue child, item["items"].toArray()) { + pairs.append(QPair(category, child)); } } } @@ -498,7 +498,7 @@ RootItem *TtRssGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons, QS TtRssFeed *feed = new TtRssFeed(); if (obtain_icons) { - QString icon_path = item["icon"].type() == QVariant::String ? item["icon"].toString() : QString(); + QString icon_path = item["icon"].type() == QJsonValue::String ? item["icon"].toString() : QString(); if (!icon_path.isEmpty()) { // Chop the "api/" suffix out and append @@ -535,8 +535,8 @@ TtRssGetHeadlinesResponse::~TtRssGetHeadlinesResponse() { QList TtRssGetHeadlinesResponse::messages() const { QList messages; - foreach (QVariant item, m_rawContent.object()["content"].toArray().toVariantList()) { - QMap mapped = item.toMap(); + foreach (QJsonValue item, m_rawContent["content"].toArray()) { + QJsonObject mapped = item.toObject(); Message message; message.m_author = mapped["author"].toString(); @@ -546,7 +546,7 @@ QList TtRssGetHeadlinesResponse::messages() const { // Multiply by 1000 because Tiny Tiny RSS API does not include miliseconds in Unix // date/time number. - message.m_created = TextFactory::parseDateTime(mapped["updated"].value() * 1000); + message.m_created = TextFactory::parseDateTime(mapped["updated"].toVariant().value() * 1000); message.m_createdFromFeed = true; message.m_customId = mapped["id"].toString(); message.m_feedId = mapped["feed_id"].toString(); @@ -555,8 +555,8 @@ QList TtRssGetHeadlinesResponse::messages() const { if (mapped.contains(QSL("attachments"))) { // Process enclosures. - foreach (QVariant attachment, mapped["attachments"].toList()) { - QMap mapped_attachemnt = attachment.toMap(); + foreach (QJsonValue attachment, mapped["attachments"].toArray()) { + QJsonObject mapped_attachemnt = attachment.toObject(); Enclosure enclosure; enclosure.m_mimeType = mapped_attachemnt["content_type"].toString(); @@ -579,8 +579,8 @@ TtRssUpdateArticleResponse::~TtRssUpdateArticleResponse() { } QString TtRssUpdateArticleResponse::updateStatus() const { - if (m_rawContent.object().contains(QSL("content"))) { - return m_rawContent.object()["content"].toObject()["status"].toString(); + if (m_rawContent.contains(QSL("content"))) { + return m_rawContent["content"].toObject()["status"].toString(); } else { return QString(); @@ -588,8 +588,8 @@ QString TtRssUpdateArticleResponse::updateStatus() const { } int TtRssUpdateArticleResponse::articlesUpdated() const { - if (m_rawContent.object().contains(QSL("content"))) { - return m_rawContent.object()["content"].toObject()["updated"].toInt(); + if (m_rawContent.contains(QSL("content"))) { + return m_rawContent["content"].toObject()["updated"].toInt(); } else { return 0; @@ -603,8 +603,8 @@ TtRssSubscribeToFeedResponse::~TtRssSubscribeToFeedResponse() { } int TtRssSubscribeToFeedResponse::code() const { - if (m_rawContent.object().contains(QSL("content"))) { - return m_rawContent.object()["content"].toObject()["status"].toObject()["code"].toInt(); + if (m_rawContent.contains(QSL("content"))) { + return m_rawContent["content"].toObject()["status"].toObject()["code"].toInt(); } else { return STF_UNKNOWN; @@ -619,8 +619,8 @@ TtRssUnsubscribeFeedResponse::~TtRssUnsubscribeFeedResponse() { } QString TtRssUnsubscribeFeedResponse::code() const { - if (m_rawContent.object().contains(QSL("content"))) { - QJsonObject map = m_rawContent.object()["content"].toObject(); + if (m_rawContent.contains(QSL("content"))) { + QJsonObject map = m_rawContent["content"].toObject(); if (map.contains(QSL("error"))) { return map["error"].toString(); diff --git a/src/services/tt-rss/network/ttrssnetworkfactory.h b/src/services/tt-rss/network/ttrssnetworkfactory.h index 96e4fc639..708840a27 100755 --- a/src/services/tt-rss/network/ttrssnetworkfactory.h +++ b/src/services/tt-rss/network/ttrssnetworkfactory.h @@ -23,7 +23,7 @@ #include #include #include -#include +#include class RootItem; @@ -44,7 +44,7 @@ class TtRssResponse { QString toString() const; protected: - QJsonDocument m_rawContent; + QJsonObject m_rawContent; }; class TtRssLoginResponse : public TtRssResponse {