From 761fd56cc942999a5eb7c6660da784a564faee40 Mon Sep 17 00:00:00 2001 From: Mat Sutcliffe Date: Mon, 9 Nov 2020 18:33:05 +0000 Subject: [PATCH] Issue #77 Break cyclic dependency between CDatastoreUtility CAircraftModelList by factoring out dependent functionality --- src/blackcore/db/databasewriter.cpp | 81 ++++++++++++++++++++- src/blackcore/db/databasewriter.h | 6 ++ src/blackmisc/aviation/aircraftcategory.cpp | 1 - src/blackmisc/aviation/aircrafticaocode.cpp | 1 - src/blackmisc/aviation/airlineicaocode.cpp | 1 - src/blackmisc/aviation/livery.cpp | 1 - src/blackmisc/db/datastoreutility.cpp | 81 --------------------- src/blackmisc/db/datastoreutility.h | 7 -- 8 files changed, 86 insertions(+), 93 deletions(-) diff --git a/src/blackcore/db/databasewriter.cpp b/src/blackcore/db/databasewriter.cpp index 3e50a1738..6013803b6 100644 --- a/src/blackcore/db/databasewriter.cpp +++ b/src/blackcore/db/databasewriter.cpp @@ -185,7 +185,7 @@ namespace BlackCore CAircraftModelList modelsSkipped; CStatusMessageList msgs; bool directWrite; - const bool sendingSuccessful = CDatastoreUtility::parseSwiftPublishResponse(responseData, modelsPublished, modelsSkipped, msgs, directWrite); + const bool sendingSuccessful = parseSwiftPublishResponse(responseData, modelsPublished, modelsSkipped, msgs, directWrite); const int c = CDatabaseUtils::fillInMissingAircraftAndLiveryEntities(modelsPublished); emit this->publishedModels(modelsPublished, modelsSkipped, msgs, sendingSuccessful, directWrite); @@ -276,5 +276,84 @@ namespace BlackCore } return arrays; } + + bool CDatabaseWriter::parseSwiftPublishResponse(const QString &jsonResponse, CAircraftModelList &publishedModels, CAircraftModelList &skippedModels, CStatusMessageList &messages, bool &directWrite) + { + directWrite = false; + + if (jsonResponse.isEmpty()) + { + messages.push_back(CStatusMessage(static_cast(nullptr), CStatusMessage::SeverityError, u"Empty JSON data for published models")); + return false; + } + + const QJsonDocument jsonDoc(QJsonDocument::fromJson(jsonResponse.toUtf8())); + + // array of messages only + if (jsonDoc.isArray()) + { + const CStatusMessageList msgs(CStatusMessageList::fromDatabaseJson(jsonDoc.array())); + messages.push_back(msgs); + return true; + } + + // no object -> most likely some fucked up HTML string with the PHP error + if (!jsonDoc.isObject()) + { + const QString phpError(CNetworkUtils::removeHtmlPartsFromPhpErrorMessage(jsonResponse)); + messages.push_back(CStatusMessage(static_cast(nullptr), CStatusMessage::SeverityError, phpError)); + return false; + } + + // fully blown object + QJsonObject json(jsonDoc.object()); + bool hasData = false; + if (json.contains("msgs")) + { + const QJsonValue msgJson(json.take("msgs")); + const CStatusMessageList msgs(CStatusMessageList::fromDatabaseJson(msgJson.toArray())); + if (!msgs.isEmpty()) + { + messages.push_back(msgs); + hasData = true; + } + } + + // direct write means models written, otherwise CRs + if (json.contains("directWrite")) + { + const QJsonValue dw(json.take("directWrite")); + directWrite = dw.toBool(false); + } + + if (json.contains("publishedModels")) + { + const QJsonValue publishedJson(json.take("publishedModels")); + const CAircraftModelList published = CAircraftModelList::fromDatabaseJson(publishedJson.toArray(), ""); + if (!published.isEmpty()) + { + publishedModels.push_back(published); + hasData = true; + } + } + + if (json.contains("skippedModels")) + { + const QJsonValue skippedJson(json.take("skippedModels")); + const CAircraftModelList skipped = CAircraftModelList::fromDatabaseJson(skippedJson.toArray(), ""); + if (!skipped.isEmpty()) + { + skippedModels.push_back(skipped); + hasData = true; + } + } + + if (!hasData) + { + messages.push_back(CStatusMessage(static_cast(nullptr), CStatusMessage::SeverityError, u"Received response, but no JSON data")); + } + + return hasData; + } } // ns } // ns diff --git a/src/blackcore/db/databasewriter.h b/src/blackcore/db/databasewriter.h index 092bb69d5..ac99db8a0 100644 --- a/src/blackcore/db/databasewriter.h +++ b/src/blackcore/db/databasewriter.h @@ -104,6 +104,12 @@ namespace BlackCore //! Split data array static QList splitData(const QByteArray &data, int size); + + //! Get data from a DB response + static bool parseSwiftPublishResponse(const QString &jsonResponse, + BlackMisc::Simulation::CAircraftModelList &publishedModels, + BlackMisc::Simulation::CAircraftModelList &skippedModels, + BlackMisc::CStatusMessageList &messages, bool &directWrite); }; } // ns } // ns diff --git a/src/blackmisc/aviation/aircraftcategory.cpp b/src/blackmisc/aviation/aircraftcategory.cpp index dae48aa7d..c3ff0bea2 100644 --- a/src/blackmisc/aviation/aircraftcategory.cpp +++ b/src/blackmisc/aviation/aircraftcategory.cpp @@ -25,7 +25,6 @@ using namespace BlackMisc; using namespace BlackMisc::Db; -using namespace BlackMisc::Simulation; namespace BlackMisc { diff --git a/src/blackmisc/aviation/aircrafticaocode.cpp b/src/blackmisc/aviation/aircrafticaocode.cpp index b3e4f45de..ce883e00d 100644 --- a/src/blackmisc/aviation/aircrafticaocode.cpp +++ b/src/blackmisc/aviation/aircrafticaocode.cpp @@ -28,7 +28,6 @@ using namespace BlackMisc; using namespace BlackMisc::Db; using namespace BlackMisc::PhysicalQuantities; -using namespace BlackMisc::Simulation; namespace BlackMisc { diff --git a/src/blackmisc/aviation/airlineicaocode.cpp b/src/blackmisc/aviation/airlineicaocode.cpp index 8e74a6d6d..08c62880c 100644 --- a/src/blackmisc/aviation/airlineicaocode.cpp +++ b/src/blackmisc/aviation/airlineicaocode.cpp @@ -30,7 +30,6 @@ using namespace BlackMisc; using namespace BlackMisc::Db; -using namespace BlackMisc::Simulation; namespace BlackMisc { diff --git a/src/blackmisc/aviation/livery.cpp b/src/blackmisc/aviation/livery.cpp index b48fcdd11..caa714fd8 100644 --- a/src/blackmisc/aviation/livery.cpp +++ b/src/blackmisc/aviation/livery.cpp @@ -27,7 +27,6 @@ using namespace BlackMisc; using namespace BlackMisc::Db; using namespace BlackMisc::PhysicalQuantities; -using namespace BlackMisc::Simulation; namespace BlackMisc { diff --git a/src/blackmisc/db/datastoreutility.cpp b/src/blackmisc/db/datastoreutility.cpp index b7b7660cc..bc4f4a183 100644 --- a/src/blackmisc/db/datastoreutility.cpp +++ b/src/blackmisc/db/datastoreutility.cpp @@ -8,7 +8,6 @@ #include "blackmisc/db/datastoreutility.h" #include "blackmisc/logcategories.h" -#include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/network/networkutils.h" #include "blackmisc/statusmessage.h" #include "blackmisc/statusmessagelist.h" @@ -21,7 +20,6 @@ #include using namespace BlackMisc; -using namespace BlackMisc::Simulation; using namespace BlackMisc::Network; namespace BlackMisc @@ -79,85 +77,6 @@ namespace BlackMisc return parseDateTimeStringOptimized(removeDateTimeSeparators(timestamp)); } - bool CDatastoreUtility::parseSwiftPublishResponse(const QString &jsonResponse, CAircraftModelList &publishedModels, CAircraftModelList &skippedModels, CStatusMessageList &messages, bool &directWrite) - { - directWrite = false; - - if (jsonResponse.isEmpty()) - { - messages.push_back(CStatusMessage(static_cast(nullptr), CStatusMessage::SeverityError, u"Empty JSON data for published models")); - return false; - } - - const QJsonDocument jsonDoc(QJsonDocument::fromJson(jsonResponse.toUtf8())); - - // array of messages only - if (jsonDoc.isArray()) - { - const CStatusMessageList msgs(CStatusMessageList::fromDatabaseJson(jsonDoc.array())); - messages.push_back(msgs); - return true; - } - - // no object -> most likely some fucked up HTML string with the PHP error - if (!jsonDoc.isObject()) - { - const QString phpError(CNetworkUtils::removeHtmlPartsFromPhpErrorMessage(jsonResponse)); - messages.push_back(CStatusMessage(static_cast(nullptr), CStatusMessage::SeverityError, phpError)); - return false; - } - - // fully blown object - QJsonObject json(jsonDoc.object()); - bool hasData = false; - if (json.contains("msgs")) - { - const QJsonValue msgJson(json.take("msgs")); - const CStatusMessageList msgs(CStatusMessageList::fromDatabaseJson(msgJson.toArray())); - if (!msgs.isEmpty()) - { - messages.push_back(msgs); - hasData = true; - } - } - - // direct write means models written, otherwise CRs - if (json.contains("directWrite")) - { - const QJsonValue dw(json.take("directWrite")); - directWrite = dw.toBool(false); - } - - if (json.contains("publishedModels")) - { - const QJsonValue publishedJson(json.take("publishedModels")); - const CAircraftModelList published = CAircraftModelList::fromDatabaseJson(publishedJson.toArray(), ""); - if (!published.isEmpty()) - { - publishedModels.push_back(published); - hasData = true; - } - } - - if (json.contains("skippedModels")) - { - const QJsonValue skippedJson(json.take("skippedModels")); - const CAircraftModelList skipped = CAircraftModelList::fromDatabaseJson(skippedJson.toArray(), ""); - if (!skipped.isEmpty()) - { - skippedModels.push_back(skipped); - hasData = true; - } - } - - if (!hasData) - { - messages.push_back(CStatusMessage(static_cast(nullptr), CStatusMessage::SeverityError, u"Received response, but no JSON data")); - } - - return hasData; - } - bool CDatastoreUtility::parseAutoPublishResponse(const QString &jsonResponse, CStatusMessageList &messages) { if (jsonResponse.isEmpty()) diff --git a/src/blackmisc/db/datastoreutility.h b/src/blackmisc/db/datastoreutility.h index 69dd8f2e8..737826f6b 100644 --- a/src/blackmisc/db/datastoreutility.h +++ b/src/blackmisc/db/datastoreutility.h @@ -21,7 +21,6 @@ namespace BlackMisc { class CStatusMessageList; - namespace Simulation { class CAircraftModelList; } namespace Db { /*! @@ -51,12 +50,6 @@ namespace BlackMisc //! Parse a timestamp object static QDateTime parseTimestamp(const QString ×tamp); - //! Get data from a DB response - static bool parseSwiftPublishResponse(const QString &jsonResponse, - Simulation::CAircraftModelList &publishedModels, - Simulation::CAircraftModelList &skippedModels, - CStatusMessageList &messages, bool &directWrite); - //! Auto publish response static bool parseAutoPublishResponse(const QString &jsonResponse, CStatusMessageList &messages); };