Working Qt 5 native JSON.

This commit is contained in:
Martin Rotter 2016-04-18 12:21:09 +02:00
parent 76b4c12584
commit e1f6ddc97d
5 changed files with 66 additions and 62 deletions

View file

@ -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() {

View file

@ -27,6 +27,7 @@
#include "services/owncloud/owncloudfeed.h"
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QPixmap>
@ -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<qint64>());
return QDateTime::fromMSecsSinceEpoch(m_rawContent["lastLoginTimestamp"].toVariant().value<qint64>());
}
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<Message> OwnCloudGetMessagesResponse::messages() const {
QList<Message> msgs;
foreach (QVariant message, m_rawContent.object()["items"].toArray().toVariantList()) {
QMap<QString,QVariant> 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<qint64>() * 1000);
msg.m_created = TextFactory::parseDateTime(message_map["pubDate"].toVariant().value<qint64>() * 1000);
msg.m_createdFromFeed = true;
msg.m_customId = message_map["id"].toString();
msg.m_customHash = message_map["guidHash"].toString();

View file

@ -25,7 +25,7 @@
#include <QString>
#include <QIcon>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
class OwnCloudResponse {
@ -37,7 +37,7 @@ class OwnCloudResponse {
QString toString() const;
protected:
QJsonDocument m_rawContent;
QJsonObject m_rawContent;
};
class OwnCloudUserResponse : public OwnCloudResponse {

View file

@ -27,7 +27,7 @@
#include "miscellaneous/textfactory.h"
#include "network-web/networkfactory.h"
#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonArray>
#include <QPair>
#include <QVariant>
@ -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<QVariant> items_to_process = m_rawContent.object()["content"].toObject()["categories"].toObject()["items"].toArray().toVariantList();
QList<QPair<RootItem*,QVariant> > pairs;
QJsonArray items_to_process = m_rawContent["content"].toObject()["categories"].toObject()["items"].toArray();
QList<QPair<RootItem*,QJsonValue> > pairs;
foreach (QVariant item, items_to_process) {
pairs.append(QPair<RootItem*,QVariant>(parent, item));
foreach (QJsonValue item, items_to_process) {
pairs.append(QPair<RootItem*,QJsonValue>(parent, item));
}
while (!pairs.isEmpty()) {
QPair<RootItem*,QVariant> pair = pairs.takeFirst();
QPair<RootItem*,QJsonValue> pair = pairs.takeFirst();
RootItem *act_parent = pair.first;
QMap<QString,QVariant> 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<RootItem*,QVariant>(parent, child_feed));
foreach (QJsonValue child_feed, item["items"].toArray()) {
pairs.append(QPair<RootItem*,QJsonValue>(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<RootItem*,QVariant>(category, child));
foreach (QJsonValue child, item["items"].toArray()) {
pairs.append(QPair<RootItem*,QJsonValue>(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<Message> TtRssGetHeadlinesResponse::messages() const {
QList<Message> messages;
foreach (QVariant item, m_rawContent.object()["content"].toArray().toVariantList()) {
QMap<QString,QVariant> 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<Message> 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<qint64>() * 1000);
message.m_created = TextFactory::parseDateTime(mapped["updated"].toVariant().value<qint64>() * 1000);
message.m_createdFromFeed = true;
message.m_customId = mapped["id"].toString();
message.m_feedId = mapped["feed_id"].toString();
@ -555,8 +555,8 @@ QList<Message> TtRssGetHeadlinesResponse::messages() const {
if (mapped.contains(QSL("attachments"))) {
// Process enclosures.
foreach (QVariant attachment, mapped["attachments"].toList()) {
QMap<QString,QVariant> 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();

View file

@ -23,7 +23,7 @@
#include <QString>
#include <QPair>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
class RootItem;
@ -44,7 +44,7 @@ class TtRssResponse {
QString toString() const;
protected:
QJsonDocument m_rawContent;
QJsonObject m_rawContent;
};
class TtRssLoginResponse : public TtRssResponse {