From 76b4c12584bd99db9825b944e94838dcc0d27df0 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Mon, 18 Apr 2016 11:35:44 +0200 Subject: [PATCH] Save temporal changes. --- CMakeLists.txt | 1 - src/network-web/networkfactory.cpp | 2 + src/qt-json/json.cpp | 603 ------------------ src/qt-json/json.h | 178 ------ .../network/owncloudnetworkfactory.cpp | 42 +- .../owncloud/network/owncloudnetworkfactory.h | 10 +- .../tt-rss/network/ttrssnetworkfactory.cpp | 84 +-- .../tt-rss/network/ttrssnetworkfactory.h | 5 +- 8 files changed, 77 insertions(+), 848 deletions(-) delete mode 100755 src/qt-json/json.cpp delete mode 100755 src/qt-json/json.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 48d6f9873..addc04a20 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -278,7 +278,6 @@ file( GLOB APP_SOURCES_GL "src/qtsingleapplication/qtsinglecoreapplication.cpp" "src/qtsingleapplication/qtlocalpeer.cpp" - "src/qt-json/*.cpp" "src/gui/dialogs/*.cpp" "src/gui/notifications/*.cpp" "src/gui/*.cpp" diff --git a/src/network-web/networkfactory.cpp b/src/network-web/networkfactory.cpp index 54eb54ad8..e66a23b84 100755 --- a/src/network-web/networkfactory.cpp +++ b/src/network-web/networkfactory.cpp @@ -155,6 +155,8 @@ NetworkResult NetworkFactory::uploadData(const QString &url, int timeout, const QEventLoop loop; NetworkResult result; + QString str(input_data); + downloader.appendRawHeader("Content-Type", input_content_type.toLocal8Bit()); if (set_basic_header) { diff --git a/src/qt-json/json.cpp b/src/qt-json/json.cpp deleted file mode 100755 index e276ee2c6..000000000 --- a/src/qt-json/json.cpp +++ /dev/null @@ -1,603 +0,0 @@ -/** - * QtJson - A simple class for parsing JSON data into a QVariant hierarchies and vice-versa. - * Copyright (C) 2011 Eeli Reilin - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/** - * \file json.cpp - */ - -#include -#include -#include "json.h" - -namespace QtJson { - static QString dateFormat, dateTimeFormat; - - static QString sanitizeString(QString str); - static QByteArray join(const QList &list, const QByteArray &sep); - static QVariant parseValue(const QString &json, int &index, bool &success); - static QVariant parseObject(const QString &json, int &index, bool &success); - static QVariant parseArray(const QString &json, int &index, bool &success); - static QVariant parseString(const QString &json, int &index, bool &success); - static QVariant parseNumber(const QString &json, int &index); - static int lastIndexOfNumber(const QString &json, int index); - static void eatWhitespace(const QString &json, int &index); - static int lookAhead(const QString &json, int index); - static int nextToken(const QString &json, int &index); - - template - QByteArray serializeMap(const T &map, bool &success) { - QByteArray str = "{"; - QList pairs; - for (typename T::const_iterator it = map.begin(), itend = map.end(); it != itend; ++it) { - QByteArray serializedValue = serialize(it.value()); - if (serializedValue.isNull()) { - success = false; - break; - } - pairs << sanitizeString(it.key()).toUtf8() + ":" + serializedValue; - } - - str += join(pairs, ","); - str += "}"; - return str; - } - - void insert(QVariant &v, const QString &key, const QVariant &value); - void append(QVariant &v, const QVariant &value); - - template - void cloneMap(QVariant &json, const T &map) { - for (typename T::const_iterator it = map.begin(), itend = map.end(); it != itend; ++it) { - insert(json, it.key(), (*it)); - } - } - - template - void cloneList(QVariant &json, const T &list) { - for (typename T::const_iterator it = list.begin(), itend = list.end(); it != itend; ++it) { - append(json, (*it)); - } - } - - /** - * parse - */ - QVariant parse(const QString &json) { - bool success = true; - return parse(json, success); - } - - /** - * parse - */ - QVariant parse(const QString &json, bool &success) { - success = true; - - // Return an empty QVariant if the JSON data is either null or empty - if (!json.isNull() || !json.isEmpty()) { - QString data = json; - // We'll start from index 0 - int index = 0; - - // Parse the first value - QVariant value = parseValue(data, index, success); - - // Return the parsed value - return value; - } else { - // Return the empty QVariant - return QVariant(); - } - } - - /** - * clone - */ - QVariant clone(const QVariant &data) { - QVariant v; - - if (data.type() == QVariant::Map) { - cloneMap(v, data.toMap()); - } else if (data.type() == QVariant::Hash) { - cloneMap(v, data.toHash()); - } else if (data.type() == QVariant::List) { - cloneList(v, data.toList()); - } else if (data.type() == QVariant::StringList) { - cloneList(v, data.toStringList()); - } else { - v = QVariant(data); - } - - return v; - } - - /** - * insert value (map case) - */ - void insert(QVariant &v, const QString &key, const QVariant &value) { - if (!v.canConvert()) v = QVariantMap(); - QVariantMap *p = (QVariantMap *)v.data(); - p->insert(key, clone(value)); - } - - /** - * append value (list case) - */ - void append(QVariant &v, const QVariant &value) { - if (!v.canConvert()) v = QVariantList(); - QVariantList *p = (QVariantList *)v.data(); - p->append(value); - } - - QByteArray serialize(const QVariant &data) { - bool success = true; - return serialize(data, success); - } - - QByteArray serialize(const QVariant &data, bool &success) { - QByteArray str; - success = true; - - if (!data.isValid()) { // invalid or null? - str = "null"; - } else if ((data.type() == QVariant::List) || - (data.type() == QVariant::StringList)) { // variant is a list? - QList values; - const QVariantList list = data.toList(); - Q_FOREACH(const QVariant& v, list) { - QByteArray serializedValue = serialize(v); - if (serializedValue.isNull()) { - success = false; - break; - } - values << serializedValue; - } - - str = "[" + join( values, "," ) + "]"; - } else if (data.type() == QVariant::Hash) { // variant is a hash? - str = serializeMap<>(data.toHash(), success); - } else if (data.type() == QVariant::Map) { // variant is a map? - str = serializeMap<>(data.toMap(), success); - } else if ((data.type() == QVariant::String) || - (data.type() == QVariant::ByteArray)) {// a string or a byte array? - str = sanitizeString(data.toString()).toUtf8(); - } else if (data.type() == QVariant::Double) { // double? - double value = data.toDouble(&success); - if (success) { - str = QByteArray::number(value, 'g'); - if (!str.contains(".") && ! str.contains("e")) { - str += ".0"; - } - } - } else if (data.type() == QVariant::Bool) { // boolean value? - str = data.toBool() ? "true" : "false"; - } else if (data.type() == QVariant::ULongLong) { // large unsigned number? - str = QByteArray::number(data.value()); - } else if (data.canConvert()) { // any signed number? - str = QByteArray::number(data.value()); - } else if (data.canConvert()) { //TODO: this code is never executed because all smaller types can be converted to qlonglong - str = QString::number(data.value()).toUtf8(); - } else if (data.type() == QVariant::DateTime) { // datetime value? - str = sanitizeString(dateTimeFormat.isEmpty() - ? data.toDateTime().toString() - : data.toDateTime().toString(dateTimeFormat)).toUtf8(); - } else if (data.type() == QVariant::Date) { // date value? - str = sanitizeString(dateTimeFormat.isEmpty() - ? data.toDate().toString() - : data.toDate().toString(dateFormat)).toUtf8(); - } else if (data.canConvert()) { // can value be converted to string? - // this will catch QUrl, ... (all other types which can be converted to string) - str = sanitizeString(data.toString()).toUtf8(); - } else { - success = false; - } - - if (success) { - return str; - } - return QByteArray(); - } - - QString serializeStr(const QVariant &data) { - return QString::fromUtf8(serialize(data)); - } - - QString serializeStr(const QVariant &data, bool &success) { - return QString::fromUtf8(serialize(data, success)); - } - - - /** - * \enum JsonToken - */ - enum JsonToken { - JsonTokenNone = 0, - JsonTokenCurlyOpen = 1, - JsonTokenCurlyClose = 2, - JsonTokenSquaredOpen = 3, - JsonTokenSquaredClose = 4, - JsonTokenColon = 5, - JsonTokenComma = 6, - JsonTokenString = 7, - JsonTokenNumber = 8, - JsonTokenTrue = 9, - JsonTokenFalse = 10, - JsonTokenNull = 11 - }; - - static QString sanitizeString(QString str) { - str.replace(QLatin1String("\\"), QLatin1String("\\\\")); - str.replace(QLatin1String("\""), QLatin1String("\\\"")); - str.replace(QLatin1String("\b"), QLatin1String("\\b")); - str.replace(QLatin1String("\f"), QLatin1String("\\f")); - str.replace(QLatin1String("\n"), QLatin1String("\\n")); - str.replace(QLatin1String("\r"), QLatin1String("\\r")); - str.replace(QLatin1String("\t"), QLatin1String("\\t")); - return QString(QLatin1String("\"%1\"")).arg(str); - } - - static QByteArray join(const QList &list, const QByteArray &sep) { - QByteArray res; - Q_FOREACH(const QByteArray &i, list) { - if (!res.isEmpty()) { - res += sep; - } - res += i; - } - return res; - } - - /** - * parseValue - */ - static QVariant parseValue(const QString &json, int &index, bool &success) { - // Determine what kind of data we should parse by - // checking out the upcoming token - switch(lookAhead(json, index)) { - case JsonTokenString: - return parseString(json, index, success); - case JsonTokenNumber: - return parseNumber(json, index); - case JsonTokenCurlyOpen: - return parseObject(json, index, success); - case JsonTokenSquaredOpen: - return parseArray(json, index, success); - case JsonTokenTrue: - nextToken(json, index); - return QVariant(true); - case JsonTokenFalse: - nextToken(json, index); - return QVariant(false); - case JsonTokenNull: - nextToken(json, index); - return QVariant(); - case JsonTokenNone: - break; - } - - // If there were no tokens, flag the failure and return an empty QVariant - success = false; - return QVariant(); - } - - /** - * parseObject - */ - static QVariant parseObject(const QString &json, int &index, bool &success) { - QVariantMap map; - int token; - - // Get rid of the whitespace and increment index - nextToken(json, index); - - // Loop through all of the key/value pairs of the object - bool done = false; - while (!done) { - // Get the upcoming token - token = lookAhead(json, index); - - if (token == JsonTokenNone) { - success = false; - return QVariantMap(); - } else if (token == JsonTokenComma) { - nextToken(json, index); - } else if (token == JsonTokenCurlyClose) { - nextToken(json, index); - return map; - } else { - // Parse the key/value pair's name - QString name = parseString(json, index, success).toString(); - - if (!success) { - return QVariantMap(); - } - - // Get the next token - token = nextToken(json, index); - - // If the next token is not a colon, flag the failure - // return an empty QVariant - if (token != JsonTokenColon) { - success = false; - return QVariant(QVariantMap()); - } - - // Parse the key/value pair's value - QVariant value = parseValue(json, index, success); - - if (!success) { - return QVariantMap(); - } - - // Assign the value to the key in the map - map[name] = value; - } - } - - // Return the map successfully - return QVariant(map); - } - - /** - * parseArray - */ - static QVariant parseArray(const QString &json, int &index, bool &success) { - QVariantList list; - - nextToken(json, index); - - bool done = false; - while(!done) { - int token = lookAhead(json, index); - - if (token == JsonTokenNone) { - success = false; - return QVariantList(); - } else if (token == JsonTokenComma) { - nextToken(json, index); - } else if (token == JsonTokenSquaredClose) { - nextToken(json, index); - break; - } else { - QVariant value = parseValue(json, index, success); - if (!success) { - return QVariantList(); - } - list.push_back(value); - } - } - - return QVariant(list); - } - - /** - * parseString - */ - static QVariant parseString(const QString &json, int &index, bool &success) { - QString s; - QChar c; - - eatWhitespace(json, index); - - c = json[index++]; - - bool complete = false; - while(!complete) { - if (index == json.size()) { - break; - } - - c = json[index++]; - - if (c == '\"') { - complete = true; - break; - } else if (c == '\\') { - if (index == json.size()) { - break; - } - - c = json[index++]; - - if (c == '\"') { - s.append('\"'); - } else if (c == '\\') { - s.append('\\'); - } else if (c == '/') { - s.append('/'); - } else if (c == 'b') { - s.append('\b'); - } else if (c == 'f') { - s.append('\f'); - } else if (c == 'n') { - s.append('\n'); - } else if (c == 'r') { - s.append('\r'); - } else if (c == 't') { - s.append('\t'); - } else if (c == 'u') { - int remainingLength = json.size() - index; - if (remainingLength >= 4) { - QString unicodeStr = json.mid(index, 4); - - int symbol = unicodeStr.toInt(0, 16); - - s.append(QChar(symbol)); - - index += 4; - } else { - break; - } - } - } else { - s.append(c); - } - } - - if (!complete) { - success = false; - return QVariant(); - } - - return QVariant(s); - } - - /** - * parseNumber - */ - static QVariant parseNumber(const QString &json, int &index) { - eatWhitespace(json, index); - - int lastIndex = lastIndexOfNumber(json, index); - int charLength = (lastIndex - index) + 1; - QString numberStr; - - numberStr = json.mid(index, charLength); - - index = lastIndex + 1; - bool ok; - - if (numberStr.contains('.')) { - return QVariant(numberStr.toDouble(NULL)); - } else if (numberStr.startsWith('-')) { - int i = numberStr.toInt(&ok); - if (!ok) { - qlonglong ll = numberStr.toLongLong(&ok); - return ok ? ll : QVariant(numberStr); - } - return i; - } else { - uint u = numberStr.toUInt(&ok); - if (!ok) { - qulonglong ull = numberStr.toULongLong(&ok); - return ok ? ull : QVariant(numberStr); - } - return u; - } - } - - /** - * lastIndexOfNumber - */ - static int lastIndexOfNumber(const QString &json, int index) { - int lastIndex; - - for(lastIndex = index; lastIndex < json.size(); lastIndex++) { - if (QString("0123456789+-.eE").indexOf(json[lastIndex]) == -1) { - break; - } - } - - return lastIndex -1; - } - - /** - * eatWhitespace - */ - static void eatWhitespace(const QString &json, int &index) { - for(; index < json.size(); index++) { - if (QString(" \t\n\r").indexOf(json[index]) == -1) { - break; - } - } - } - - /** - * lookAhead - */ - static int lookAhead(const QString &json, int index) { - int saveIndex = index; - return nextToken(json, saveIndex); - } - - /** - * nextToken - */ - static int nextToken(const QString &json, int &index) { - eatWhitespace(json, index); - - if (index == json.size()) { - return JsonTokenNone; - } - - QChar c = json[index]; - index++; - switch(c.toLatin1()) { - case '{': return JsonTokenCurlyOpen; - case '}': return JsonTokenCurlyClose; - case '[': return JsonTokenSquaredOpen; - case ']': return JsonTokenSquaredClose; - case ',': return JsonTokenComma; - case '"': return JsonTokenString; - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - case '-': return JsonTokenNumber; - case ':': return JsonTokenColon; - } - index--; // ^ WTF? - - int remainingLength = json.size() - index; - - // True - if (remainingLength >= 4) { - if (json[index] == 't' && json[index + 1] == 'r' && - json[index + 2] == 'u' && json[index + 3] == 'e') { - index += 4; - return JsonTokenTrue; - } - } - - // False - if (remainingLength >= 5) { - if (json[index] == 'f' && json[index + 1] == 'a' && - json[index + 2] == 'l' && json[index + 3] == 's' && - json[index + 4] == 'e') { - index += 5; - return JsonTokenFalse; - } - } - - // Null - if (remainingLength >= 4) { - if (json[index] == 'n' && json[index + 1] == 'u' && - json[index + 2] == 'l' && json[index + 3] == 'l') { - index += 4; - return JsonTokenNull; - } - } - - return JsonTokenNone; - } - - void setDateTimeFormat(const QString &format) { - dateTimeFormat = format; - } - - void setDateFormat(const QString &format) { - dateFormat = format; - } - - QString getDateTimeFormat() { - return dateTimeFormat; - } - - QString getDateFormat() { - return dateFormat; - } - -} //end namespace diff --git a/src/qt-json/json.h b/src/qt-json/json.h deleted file mode 100755 index 8992508a2..000000000 --- a/src/qt-json/json.h +++ /dev/null @@ -1,178 +0,0 @@ -/** - * QtJson - A simple class for parsing JSON data into a QVariant hierarchies and vice-versa. - * Copyright (C) 2011 Eeli Reilin - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/** - * \file json.h - */ - -#ifndef JSON_H -#define JSON_H - -#include -#include - - -/** - * \namespace QtJson - * \brief A JSON data parser - * - * Json parses a JSON data into a QVariant hierarchy. - */ -namespace QtJson { - typedef QVariantMap JsonObject; - typedef QVariantList JsonArray; - - /** - * Clone a JSON object (makes a deep copy) - * - * \param data The JSON object - */ - QVariant clone(const QVariant &data); - - /** - * Insert value to JSON object (QVariantMap) - * - * \param v The JSON object - * \param key The key - * \param value The value - */ - void insert(QVariant &v, const QString &key, const QVariant &value); - - /** - * Append value to JSON array (QVariantList) - * - * \param v The JSON array - * \param value The value - */ - void append(QVariant &v, const QVariant &value); - - /** - * Parse a JSON string - * - * \param json The JSON data - */ - QVariant parse(const QString &json); - - /** - * Parse a JSON string - * - * \param json The JSON data - * \param success The success of the parsing - */ - QVariant parse(const QString &json, bool &success); - - /** - * This method generates a textual JSON representation - * - * \param data The JSON data generated by the parser. - * - * \return QByteArray Textual JSON representation in UTF-8 - */ - QByteArray serialize(const QVariant &data); - - /** - * This method generates a textual JSON representation - * - * \param data The JSON data generated by the parser. - * \param success The success of the serialization - * - * \return QByteArray Textual JSON representation in UTF-8 - */ - QByteArray serialize(const QVariant &data, bool &success); - - /** - * This method generates a textual JSON representation - * - * \param data The JSON data generated by the parser. - * - * \return QString Textual JSON representation - */ - QString serializeStr(const QVariant &data); - - /** - * This method generates a textual JSON representation - * - * \param data The JSON data generated by the parser. - * \param success The success of the serialization - * - * \return QString Textual JSON representation - */ - QString serializeStr(const QVariant &data, bool &success); - - /** - * This method sets date(time) format to be used for QDateTime::toString - * If QString is empty, Qt::TextDate is used. - * - * \param format The JSON data generated by the parser. - */ - void setDateTimeFormat(const QString& format); - void setDateFormat(const QString& format); - - /** - * This method gets date(time) format to be used for QDateTime::toString - * If QString is empty, Qt::TextDate is used. - */ - QString getDateTimeFormat(); - QString getDateFormat(); - - /** - * QVariant based Json object - */ - class Object : public QVariant { - template - Object& insertKey(Object* ptr, const QString& key) { - T* p = (T*)ptr->data(); - if (!p->contains(key)) p->insert(key, QVariant()); - return *reinterpret_cast(&p->operator[](key)); - } - template - void removeKey(Object *ptr, const QString& key) { - T* p = (T*)ptr->data(); - p->remove(key); - } - public: - Object() : QVariant() {} - Object(const Object& ref) : QVariant(ref) {} - - Object& operator=(const QVariant& rhs) { - setValue(rhs); - return *this; - } - Object& operator[](const QString& key) { - if (type() == QVariant::Map) - return insertKey(this, key); - else if (type() == QVariant::Hash) - return insertKey(this, key); - - setValue(QVariantMap()); - - return insertKey(this, key); - } - const Object& operator[](const QString& key) const { - return const_cast(this)->operator[](key); - } - void remove(const QString& key) { - if (type() == QVariant::Map) - removeKey(this, key); - else if (type() == QVariant::Hash) - removeKey(this, key); - } - }; -} - -#endif //JSON_H diff --git a/src/services/owncloud/network/owncloudnetworkfactory.cpp b/src/services/owncloud/network/owncloudnetworkfactory.cpp index d888956b7..1f5fc23fd 100755 --- a/src/services/owncloud/network/owncloudnetworkfactory.cpp +++ b/src/services/owncloud/network/owncloudnetworkfactory.cpp @@ -26,6 +26,8 @@ #include "services/owncloud/owncloudcategory.h" #include "services/owncloud/owncloudfeed.h" +#include +#include #include @@ -246,8 +248,8 @@ QNetworkReply::NetworkError OwnCloudNetworkFactory::triggerFeedUpdate(int feed_i QNetworkReply::NetworkError OwnCloudNetworkFactory::markMessagesRead(RootItem::ReadStatus status, const QStringList &custom_ids) { QList var_ids; - QtJson::JsonObject json; - QtJson::JsonArray ids; + QJsonObject json; + QJsonArray ids; QByteArray raw_output; QString final_url; @@ -263,13 +265,13 @@ QNetworkReply::NetworkError OwnCloudNetworkFactory::markMessagesRead(RootItem::R var_ids.append(id.toInt()); } - ids.append(var_ids); + 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(), - QtJson::serialize(json), + QJsonDocument(json).toJson(), "application/json", raw_output, QNetworkAccessManager::PutOperation, @@ -286,8 +288,8 @@ QNetworkReply::NetworkError OwnCloudNetworkFactory::markMessagesRead(RootItem::R QNetworkReply::NetworkError OwnCloudNetworkFactory::markMessagesStarred(RootItem::Importance importance, const QStringList &feed_ids, const QStringList &guid_hashes) { - QtJson::JsonObject json; - QtJson::JsonArray ids; + QJsonObject json; + QJsonArray ids; QByteArray raw_output; QString final_url; @@ -304,7 +306,7 @@ QNetworkReply::NetworkError OwnCloudNetworkFactory::markMessagesStarred(RootItem item.insert(QSL("feedId"), feed_ids.at(i)); item.insert(QSL("guidHash"), guid_hashes.at(i)); - ids.append(item); + ids.append(QJsonValue::fromVariant(item)); } json["items"] = ids; @@ -312,7 +314,7 @@ QNetworkReply::NetworkError OwnCloudNetworkFactory::markMessagesStarred(RootItem NetworkResult network_reply = NetworkFactory::uploadData(final_url, qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(), - QtJson::serialize(json), + QJsonDocument(json).toJson(), "application/json", raw_output, QNetworkAccessManager::PutOperation, @@ -335,18 +337,18 @@ void OwnCloudNetworkFactory::setUserId(const QString &userId) { } OwnCloudResponse::OwnCloudResponse(const QString &raw_content) { - m_rawContent = QtJson::parse(raw_content).toMap(); + m_rawContent = QJsonDocument::fromJson(raw_content.toUtf8());; } OwnCloudResponse::~OwnCloudResponse() { } bool OwnCloudResponse::isLoaded() const { - return !m_rawContent.empty(); + return !m_rawContent.isEmpty(); } QString OwnCloudResponse::toString() const { - return QtJson::serializeStr(m_rawContent); + return m_rawContent.toJson(); } OwnCloudUserResponse::OwnCloudUserResponse(const QString &raw_content) : OwnCloudResponse(raw_content) { @@ -357,7 +359,7 @@ OwnCloudUserResponse::~OwnCloudUserResponse() { QString OwnCloudUserResponse::displayName() const { if (isLoaded()) { - return m_rawContent["displayName"].toString(); + return m_rawContent.object()["displayName"].toString(); } else { return QString(); @@ -366,7 +368,7 @@ QString OwnCloudUserResponse::displayName() const { QString OwnCloudUserResponse::userId() const { if (isLoaded()) { - return m_rawContent["userId"].toString(); + return m_rawContent.object()["userId"].toString(); } else { return QString(); @@ -375,7 +377,7 @@ QString OwnCloudUserResponse::userId() const { QDateTime OwnCloudUserResponse::lastLoginTime() const { if (isLoaded()) { - return QDateTime::fromMSecsSinceEpoch(m_rawContent["lastLoginTimestamp"].value()); + return QDateTime::fromMSecsSinceEpoch(m_rawContent.object()["lastLoginTimestamp"].toVariant().value()); } else { return QDateTime(); @@ -384,7 +386,7 @@ QDateTime OwnCloudUserResponse::lastLoginTime() const { QIcon OwnCloudUserResponse::avatar() const { if (isLoaded()) { - QString image_data = m_rawContent["avatar"].toMap()["data"].toString(); + QString image_data = m_rawContent.object()["avatar"].toObject()["data"].toString(); QByteArray decoded_data = QByteArray::fromBase64(image_data.toLocal8Bit()); QPixmap image; @@ -405,7 +407,7 @@ OwnCloudStatusResponse::~OwnCloudStatusResponse() { QString OwnCloudStatusResponse::version() const { if (isLoaded()) { - return m_rawContent["version"].toString(); + return m_rawContent.object()["version"].toString(); } else { return QString(); @@ -414,7 +416,7 @@ QString OwnCloudStatusResponse::version() const { bool OwnCloudStatusResponse::misconfiguredCron() const { if (isLoaded()) { - return m_rawContent["warnings"].toMap()["improperlyConfiguredCron"].toBool(); + return m_rawContent.object()["warnings"].toObject()["improperlyConfiguredCron"].toBool(); } else { return false; @@ -437,7 +439,7 @@ RootItem *OwnCloudGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons) cats.insert(0, parent); // Process categories first, then process feeds. - foreach (QVariant cat, QtJson::parse(m_contentCategories).toMap()["folders"].toList()) { + foreach (QVariant cat, QJsonDocument::fromJson(m_contentCategories.toUtf8()).object()["folders"].toArray().toVariantList()) { QMap item = cat.toMap(); OwnCloudCategory *category = new OwnCloudCategory(); @@ -451,7 +453,7 @@ RootItem *OwnCloudGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons) } // We have categories added, now add all feeds. - foreach (QVariant fed, QtJson::parse(m_contentFeeds).toMap()["feeds"].toList()) { + foreach (QVariant fed, QJsonDocument::fromJson(m_contentFeeds.toUtf8()).object()["feeds"].toArray().toVariantList()) { QMap item = fed.toMap(); OwnCloudFeed *feed = new OwnCloudFeed(); @@ -490,7 +492,7 @@ OwnCloudGetMessagesResponse::~OwnCloudGetMessagesResponse() { QList OwnCloudGetMessagesResponse::messages() const { QList msgs; - foreach (QVariant message, m_rawContent["items"].toList()) { + foreach (QVariant message, m_rawContent.object()["items"].toArray().toVariantList()) { QMap message_map = message.toMap(); Message msg; diff --git a/src/services/owncloud/network/owncloudnetworkfactory.h b/src/services/owncloud/network/owncloudnetworkfactory.h index a0be363d4..caab1930c 100755 --- a/src/services/owncloud/network/owncloudnetworkfactory.h +++ b/src/services/owncloud/network/owncloudnetworkfactory.h @@ -18,14 +18,14 @@ #ifndef OWNCLOUDNETWORKFACTORY_H #define OWNCLOUDNETWORKFACTORY_H +#include "core/message.h" +#include "services/abstract/rootitem.h" + #include #include #include #include - -#include "qt-json/json.h" -#include "core/message.h" -#include "services/abstract/rootitem.h" +#include class OwnCloudResponse { @@ -37,7 +37,7 @@ class OwnCloudResponse { QString toString() const; protected: - QtJson::JsonObject m_rawContent; + QJsonDocument 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 a70ad7c1f..4f172f1e8 100755 --- a/src/services/tt-rss/network/ttrssnetworkfactory.cpp +++ b/src/services/tt-rss/network/ttrssnetworkfactory.cpp @@ -27,6 +27,8 @@ #include "miscellaneous/textfactory.h" #include "network-web/networkfactory.h" +#include +#include #include #include @@ -79,7 +81,7 @@ TtRssLoginResponse TtRssNetworkFactory::login() { logout(); } - QtJson::JsonObject json; + QJsonObject json; json["op"] = "login"; json["user"] = m_username; json["password"] = m_password; @@ -87,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(), - QtJson::serialize(json), CONTENT_TYPE, result_raw, + QJsonDocument(json).toJson(), CONTENT_TYPE, result_raw, QNetworkAccessManager::PostOperation, m_authIsUsed, m_authUsername, m_authPassword); TtRssLoginResponse login_response(QString::fromUtf8(result_raw)); @@ -107,14 +109,14 @@ TtRssLoginResponse TtRssNetworkFactory::login() { TtRssResponse TtRssNetworkFactory::logout() { if (!m_sessionId.isEmpty()) { - QtJson::JsonObject json; + QJsonObject json; json["op"] = "logout"; json["sid"] = m_sessionId; QByteArray result_raw; NetworkResult network_reply = NetworkFactory::uploadData(m_url, qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(), - QtJson::serialize(json), CONTENT_TYPE, result_raw, + QJsonDocument(json).toJson(), CONTENT_TYPE, result_raw, QNetworkAccessManager::PostOperation, m_authIsUsed, m_authUsername, m_authPassword); @@ -138,14 +140,15 @@ TtRssResponse TtRssNetworkFactory::logout() { } TtRssGetFeedsCategoriesResponse TtRssNetworkFactory::getFeedsCategories() { - QtJson::JsonObject json; + QJsonObject json; json["op"] = "getFeedTree"; json["sid"] = m_sessionId; json["include_empty"] = true; const int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(); QByteArray result_raw; - NetworkResult network_reply = NetworkFactory::uploadData(m_url, timeout, QtJson::serialize(json), 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); TtRssGetFeedsCategoriesResponse result(QString::fromUtf8(result_raw)); @@ -155,7 +158,7 @@ TtRssGetFeedsCategoriesResponse TtRssNetworkFactory::getFeedsCategories() { login(); json["sid"] = m_sessionId; - network_reply = NetworkFactory::uploadData(m_url, timeout, QtJson::serialize(json), CONTENT_TYPE, result_raw, + network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(), CONTENT_TYPE, result_raw, QNetworkAccessManager::PostOperation, m_authIsUsed, m_authUsername, m_authPassword); result = TtRssGetFeedsCategoriesResponse(QString::fromUtf8(result_raw)); @@ -172,7 +175,7 @@ TtRssGetFeedsCategoriesResponse TtRssNetworkFactory::getFeedsCategories() { TtRssGetHeadlinesResponse TtRssNetworkFactory::getHeadlines(int feed_id, int limit, int skip, bool show_content, bool include_attachments, bool sanitize) { - QtJson::JsonObject json; + QJsonObject json; json["op"] = "getHeadlines"; json["sid"] = m_sessionId; json["feed_id"] = feed_id; @@ -185,7 +188,8 @@ 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, QtJson::serialize(json), CONTENT_TYPE, result_raw, + NetworkResult network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(), + CONTENT_TYPE, result_raw, QNetworkAccessManager::PostOperation, m_authIsUsed, m_authUsername, m_authPassword); TtRssGetHeadlinesResponse result(QString::fromUtf8(result_raw)); @@ -195,7 +199,7 @@ TtRssGetHeadlinesResponse TtRssNetworkFactory::getHeadlines(int feed_id, int lim login(); json["sid"] = m_sessionId; - network_reply = NetworkFactory::uploadData(m_url, timeout, QtJson::serialize(json), CONTENT_TYPE, result_raw, + network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(), CONTENT_TYPE, result_raw, QNetworkAccessManager::PostOperation, m_authIsUsed, m_authUsername, m_authPassword); result = TtRssGetHeadlinesResponse(QString::fromUtf8(result_raw)); @@ -212,7 +216,7 @@ TtRssGetHeadlinesResponse TtRssNetworkFactory::getHeadlines(int feed_id, int lim TtRssUpdateArticleResponse TtRssNetworkFactory::updateArticles(const QStringList &ids, UpdateArticle::OperatingField field, UpdateArticle::Mode mode) { - QtJson::JsonObject json; + QJsonObject json; json["op"] = "updateArticle"; json["sid"] = m_sessionId; json["article_ids"] = ids.join(QSL(",")); @@ -221,7 +225,8 @@ 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, QtJson::serialize(json), CONTENT_TYPE, result_raw, + NetworkResult network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(), + CONTENT_TYPE, result_raw, QNetworkAccessManager::PostOperation, m_authIsUsed, m_authUsername, m_authPassword); TtRssUpdateArticleResponse result(QString::fromUtf8(result_raw)); @@ -231,7 +236,8 @@ TtRssUpdateArticleResponse TtRssNetworkFactory::updateArticles(const QStringList login(); json["sid"] = m_sessionId; - network_reply = NetworkFactory::uploadData(m_url, timeout, QtJson::serialize(json), CONTENT_TYPE, result_raw, + network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(), + CONTENT_TYPE, result_raw, QNetworkAccessManager::PostOperation, m_authIsUsed, m_authUsername, m_authPassword); result = TtRssUpdateArticleResponse(QString::fromUtf8(result_raw)); @@ -248,7 +254,7 @@ TtRssUpdateArticleResponse TtRssNetworkFactory::updateArticles(const QStringList TtRssSubscribeToFeedResponse TtRssNetworkFactory::subscribeToFeed(const QString &url, int category_id, bool protectd, const QString &username, const QString &password) { - QtJson::JsonObject json; + QJsonObject json; json["op"] = "subscribeToFeed"; json["sid"] = m_sessionId; json["feed_url"] = url; @@ -261,7 +267,8 @@ 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, QtJson::serialize(json), CONTENT_TYPE, result_raw, + NetworkResult network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(), + CONTENT_TYPE, result_raw, QNetworkAccessManager::PostOperation, m_authIsUsed, m_authUsername, m_authPassword); TtRssSubscribeToFeedResponse result(QString::fromUtf8(result_raw)); @@ -271,7 +278,8 @@ TtRssSubscribeToFeedResponse TtRssNetworkFactory::subscribeToFeed(const QString login(); json["sid"] = m_sessionId; - network_reply = NetworkFactory::uploadData(m_url, timeout, QtJson::serialize(json), CONTENT_TYPE, result_raw, + network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(), + CONTENT_TYPE, result_raw, QNetworkAccessManager::PostOperation, m_authIsUsed, m_authUsername, m_authPassword); result = TtRssSubscribeToFeedResponse(QString::fromUtf8(result_raw)); @@ -286,14 +294,14 @@ TtRssSubscribeToFeedResponse TtRssNetworkFactory::subscribeToFeed(const QString } TtRssUnsubscribeFeedResponse TtRssNetworkFactory::unsubscribeFeed(int feed_id) { - QtJson::JsonObject json; + QJsonObject json; json["op"] = "unsubscribeFeed"; json["sid"] = m_sessionId; json["feed_id"] = 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, QtJson::serialize(json), CONTENT_TYPE, result_raw, + NetworkResult network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(), CONTENT_TYPE, result_raw, QNetworkAccessManager::PostOperation, m_authIsUsed, m_authUsername, m_authPassword); TtRssUnsubscribeFeedResponse result(QString::fromUtf8(result_raw)); @@ -303,7 +311,7 @@ TtRssUnsubscribeFeedResponse TtRssNetworkFactory::unsubscribeFeed(int feed_id) { login(); json["sid"] = m_sessionId; - network_reply = NetworkFactory::uploadData(m_url, timeout, QtJson::serialize(json), CONTENT_TYPE, result_raw, + network_reply = NetworkFactory::uploadData(m_url, timeout, QJsonDocument(json).toJson(), CONTENT_TYPE, result_raw, QNetworkAccessManager::PostOperation, m_authIsUsed, m_authUsername, m_authPassword); result = TtRssUnsubscribeFeedResponse(QString::fromUtf8(result_raw)); @@ -350,14 +358,14 @@ void TtRssNetworkFactory::setAuthPassword(const QString &auth_password) { } TtRssResponse::TtRssResponse(const QString &raw_content) { - m_rawContent = QtJson::parse(raw_content).toMap(); + m_rawContent = QJsonDocument::fromJson(raw_content.toUtf8()); } TtRssResponse::~TtRssResponse() { } bool TtRssResponse::isLoaded() const { - return !m_rawContent.empty(); + return !m_rawContent.isEmpty(); } int TtRssResponse::seq() const { @@ -365,7 +373,7 @@ int TtRssResponse::seq() const { return CONTENT_NOT_LOADED; } else { - return m_rawContent["seq"].toInt(); + return m_rawContent.object()["seq"].toInt(); } } @@ -374,7 +382,7 @@ int TtRssResponse::status() const { return CONTENT_NOT_LOADED; } else { - return m_rawContent["status"].toInt(); + return m_rawContent.object()["status"].toInt(); } } @@ -383,7 +391,7 @@ bool TtRssResponse::isNotLoggedIn() const { } QString TtRssResponse::toString() const { - return QtJson::serializeStr(m_rawContent); + return m_rawContent.toJson(); } TtRssLoginResponse::TtRssLoginResponse(const QString &raw_content) : TtRssResponse(raw_content) { @@ -397,7 +405,7 @@ int TtRssLoginResponse::apiLevel() const { return CONTENT_NOT_LOADED; } else { - return m_rawContent["content"].toMap()["api_level"].toInt(); + return m_rawContent.object()["content"].toObject()["api_level"].toInt(); } } @@ -406,7 +414,7 @@ QString TtRssLoginResponse::sessionId() const { return QString(); } else { - return m_rawContent["content"].toMap()["session_id"].toString(); + return m_rawContent.object()["content"].toObject()["session_id"].toString(); } } @@ -415,7 +423,7 @@ QString TtRssResponse::error() const { return QString(); } else { - return m_rawContent["content"].toMap()["error"].toString(); + return m_rawContent.object()["content"].toObject()["error"].toString(); } } @@ -424,7 +432,7 @@ bool TtRssResponse::hasError() const { return false; } else { - return m_rawContent["content"].toMap().contains("error"); + return m_rawContent.object()["content"].toObject().contains("error"); } } @@ -446,7 +454,7 @@ 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["content"].toMap()["categories"].toMap()["items"].toList(); + QList items_to_process = m_rawContent.object()["content"].toObject()["categories"].toObject()["items"].toArray().toVariantList(); QList > pairs; foreach (QVariant item, items_to_process) { @@ -527,7 +535,7 @@ TtRssGetHeadlinesResponse::~TtRssGetHeadlinesResponse() { QList TtRssGetHeadlinesResponse::messages() const { QList messages; - foreach (QVariant item, m_rawContent["content"].toList()) { + foreach (QVariant item, m_rawContent.object()["content"].toArray().toVariantList()) { QMap mapped = item.toMap(); Message message; @@ -571,8 +579,8 @@ TtRssUpdateArticleResponse::~TtRssUpdateArticleResponse() { } QString TtRssUpdateArticleResponse::updateStatus() const { - if (m_rawContent.contains(QSL("content"))) { - return m_rawContent["content"].toMap()["status"].toString(); + if (m_rawContent.object().contains(QSL("content"))) { + return m_rawContent.object()["content"].toObject()["status"].toString(); } else { return QString(); @@ -580,8 +588,8 @@ QString TtRssUpdateArticleResponse::updateStatus() const { } int TtRssUpdateArticleResponse::articlesUpdated() const { - if (m_rawContent.contains(QSL("content"))) { - return m_rawContent["content"].toMap()["updated"].toInt(); + if (m_rawContent.object().contains(QSL("content"))) { + return m_rawContent.object()["content"].toObject()["updated"].toInt(); } else { return 0; @@ -595,8 +603,8 @@ TtRssSubscribeToFeedResponse::~TtRssSubscribeToFeedResponse() { } int TtRssSubscribeToFeedResponse::code() const { - if (m_rawContent.contains(QSL("content"))) { - return m_rawContent["content"].toMap()["status"].toMap()["code"].toInt(); + if (m_rawContent.object().contains(QSL("content"))) { + return m_rawContent.object()["content"].toObject()["status"].toObject()["code"].toInt(); } else { return STF_UNKNOWN; @@ -611,8 +619,8 @@ TtRssUnsubscribeFeedResponse::~TtRssUnsubscribeFeedResponse() { } QString TtRssUnsubscribeFeedResponse::code() const { - if (m_rawContent.contains(QSL("content"))) { - QVariantMap map = m_rawContent["content"].toMap(); + if (m_rawContent.object().contains(QSL("content"))) { + QJsonObject map = m_rawContent.object()["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 c66c1626c..96e4fc639 100755 --- a/src/services/tt-rss/network/ttrssnetworkfactory.h +++ b/src/services/tt-rss/network/ttrssnetworkfactory.h @@ -18,13 +18,12 @@ #ifndef TTRSSNETWORKFACTORY_H #define TTRSSNETWORKFACTORY_H -#include "qt-json/json.h" - #include "core/message.h" #include #include #include +#include class RootItem; @@ -45,7 +44,7 @@ class TtRssResponse { QString toString() const; protected: - QtJson::JsonObject m_rawContent; + QJsonDocument m_rawContent; }; class TtRssLoginResponse : public TtRssResponse {