From 21b8de96d8e60d3a23e1c79265730bddc5d20b2f Mon Sep 17 00:00:00 2001 From: Bent Witthold Date: Thu, 19 Feb 2026 11:02:10 +0100 Subject: [PATCH] Minor refactoring to move JSON processing into JsonParser. --- libs/BeetRoundCore/formats/jsonparser.cpp | 20 +++++++++++++++++-- libs/BeetRoundCore/formats/jsonparser.h | 11 ++++++++-- .../network/servercommunicator.cpp | 13 ++++++------ 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/libs/BeetRoundCore/formats/jsonparser.cpp b/libs/BeetRoundCore/formats/jsonparser.cpp index 6e477fc..72bc5ee 100644 --- a/libs/BeetRoundCore/formats/jsonparser.cpp +++ b/libs/BeetRoundCore/formats/jsonparser.cpp @@ -90,6 +90,22 @@ QByteArray JsonParser::ToJsonObject(const QHash& values, return jsonDoc.toJson(QJsonDocument::Compact); } +ModelItemValues JsonParser::serverUserCredentialsToItemValues(const QJsonDocument& jsonDoc) { + ModelItemValues values; + + const QJsonObject rootObject = jsonDoc["data"].toObject(); + + const QString emailAddress = rootObject["email"].toString(); + const QString uuid = rootObject["id"].toString(); + const QString token = rootObject["token"].toString(); + + values.insert(MailRole, emailAddress); + values.insert(OnlineIdRole, uuid); + values.insert(AccessCodeRole, token); + + return values; +} + QJsonArray JsonParser::extractItemArray(const QJsonDocument& doc, const QString& objectName) { QJsonArray itemArray; if (objectName.isEmpty()) { @@ -101,8 +117,6 @@ QJsonArray JsonParser::extractItemArray(const QJsonDocument& doc, const QString& return itemArray; } -JsonParser::JsonParser() {} - ModelItemValues JsonParser::jsonObjectToItemValues(const QJsonObject& itemJsonObject) { ModelItemValues values; @@ -115,6 +129,8 @@ ModelItemValues JsonParser::jsonObjectToItemValues(const QJsonObject& itemJsonOb return values; } +JsonParser::JsonParser() {} + pair JsonParser::getKeyValuePair(const QJsonObject& itemJsonObject, const int role) { QVariant result; const QJsonValue jsonValue = itemJsonObject[ROLE_NAMES.value(role)]; diff --git a/libs/BeetRoundCore/formats/jsonparser.h b/libs/BeetRoundCore/formats/jsonparser.h index fee12ec..fd97090 100644 --- a/libs/BeetRoundCore/formats/jsonparser.h +++ b/libs/BeetRoundCore/formats/jsonparser.h @@ -21,12 +21,19 @@ class JsonParser { static QByteArray ToJsonObject(const QHash& Values, const QString& objectName = ""); - private: - explicit JsonParser(); + static ModelItemValues serverUserCredentialsToItemValues(const QJsonDocument& jsonDoc); + + // static ModelItemValues parseServerResponse(const QJsonDocument& jsonDoc, + // QHash entries); + // static ModelItemValues parseServerResponse(const QJsonObject& object, + // QHash entries); static QJsonArray extractItemArray(const QJsonDocument& doc, const QString& objectName); static ModelItemValues jsonObjectToItemValues(const QJsonObject& itemJsonObject); + private: + explicit JsonParser(); + static pair getKeyValuePair(const QJsonObject& itemJsonObject, const int role); }; diff --git a/libs/BeetRoundCore/network/servercommunicator.cpp b/libs/BeetRoundCore/network/servercommunicator.cpp index cc332fe..2e56259 100644 --- a/libs/BeetRoundCore/network/servercommunicator.cpp +++ b/libs/BeetRoundCore/network/servercommunicator.cpp @@ -5,6 +5,7 @@ #include #include +#include "../formats/jsonparser.h" #include "../genericcore.h" #include "../structs.h" #include "apiroutes.h" @@ -198,6 +199,9 @@ void ServerCommunicator::onPostReplyFailure(const PostRequestTypes type, void ServerCommunicator::currentBiddingRoundChangedReply(const QJsonDocument jsonDoc) { qInfo() << "Current bidding round received."; + // REFACTOR implement & use "JsonParser::parseServerResponse(const QJsonDocument& jsonDoc, + // QHash entries)" (generalized version of + // "serverUserCredentialsToItemValues") const QJsonObject rootObject = jsonDoc["data"].toObject(); const int roundNumber = rootObject["round_number"].toInt(); const bool stopped = rootObject["stopped"].toBool(); @@ -224,11 +228,8 @@ void ServerCommunicator::currentBiddingsReply(const QJsonDocument jsonDoc) { void ServerCommunicator::onlineUserAccountReply(const QJsonDocument jsonDoc) { qInfo() << "Online user account received."; - // TODO move data extraction of jsonDoc into JsonParser - const QJsonObject rootObject = jsonDoc["data"].toObject(); - const QString emailAddress = rootObject["email"].toString(); - const QString uuid = rootObject["id"].toString(); - const QString token = rootObject["token"].toString(); + ModelItemValues values = JsonParser::serverUserCredentialsToItemValues(jsonDoc); - emit onlineUserAccountReceived(emailAddress, uuid, token); + emit onlineUserAccountReceived(values[MailRole].toString(), values[OnlineIdRole].toString(), + values[AccessCodeRole].toString()); }