From 34842080da3b7ac03547fecdc0d4eb0acfd78632 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 13 Aug 2018 02:10:35 +0200 Subject: [PATCH] Ref T304, use exception free JSON functions to copy settings --- .../copysettingsandcachescomponent.cpp | 61 +++++++++++-------- .../copysettingsandcachescomponent.h | 3 + src/blackgui/guiapplication.cpp | 1 + 3 files changed, 40 insertions(+), 25 deletions(-) diff --git a/src/blackgui/components/copysettingsandcachescomponent.cpp b/src/blackgui/components/copysettingsandcachescomponent.cpp index 583831f4f..86bae3c9c 100644 --- a/src/blackgui/components/copysettingsandcachescomponent.cpp +++ b/src/blackgui/components/copysettingsandcachescomponent.cpp @@ -137,6 +137,9 @@ namespace BlackGui const CApplicationInfo otherVersionInfo = ui->comp_OtherSwiftVersions->selectedOtherVersion(); if (otherVersionInfo.isNull()) { return; } + + bool success = false; + QString errMsg; ui->le_Status->setText("Starting to copy from '" + otherVersionInfo.toQString(true) + "'"); // ------- audio ------- @@ -145,8 +148,8 @@ namespace BlackGui const QString joStr = CCacheSettingsUtils::otherVersionSettingsFileContent(otherVersionInfo, m_settingsAudio.getFilename()); if (!joStr.isEmpty()) { - const Audio::CSettings audioSettings = Audio::CSettings::fromJson(joStr, true); - this->displayStatusMessage(m_settingsAudio.setAndSave(audioSettings), audioSettings.toQString(true)); + const Audio::CSettings audioSettings = Audio::CSettings::fromJsonNoThrow(joStr, true, success, errMsg); + if (this->parsingMessage(success, errMsg, m_settingsAudio.getKey())) { this->displayStatusMessage(m_settingsAudio.setAndSave(audioSettings), audioSettings.toQString(true)); } } } @@ -176,8 +179,8 @@ namespace BlackGui const QString joStr = CCacheSettingsUtils::otherVersionSettingsFileContent(otherVersionInfo, m_settingsNetworkServers.getFilename()); if (!joStr.isEmpty()) { - const CServerList networkServers = CServerList::fromJson(joStr, true); - this->displayStatusMessage(m_settingsNetworkServers.setAndSave(networkServers), networkServers.toQString(true)); + const CServerList networkServers = CServerList::fromJsonNoThrow(joStr, true, success, errMsg); + if (this->parsingMessage(success, errMsg, m_settingsNetworkServers.getKey())) { this->displayStatusMessage(m_settingsNetworkServers.setAndSave(networkServers), networkServers.toQString(true)); } } } @@ -186,8 +189,8 @@ namespace BlackGui const QString joStr = CCacheSettingsUtils::otherVersionCacheFileContent(otherVersionInfo, m_cacheLastNetworkServer.getFilename()); if (!joStr.isEmpty()) { - const CServer server = CServer::fromJson(joStr, true); - this->displayStatusMessage(m_cacheLastNetworkServer.set(server), server.toQString(true)); + const CServer server = CServer::fromJsonNoThrow(joStr, true, success, errMsg); + if (this->parsingMessage(success, errMsg, m_cacheLastNetworkServer.getKey())) { this->displayStatusMessage(m_cacheLastNetworkServer.set(server), server.toQString(true)); } } } @@ -196,8 +199,8 @@ namespace BlackGui const QString joStr = CCacheSettingsUtils::otherVersionCacheFileContent(otherVersionInfo, m_cacheLastVatsimServer.getFilename()); if (!joStr.isEmpty()) { - const CServer server = CServer::fromJson(joStr, true); - this->displayStatusMessage(m_cacheLastVatsimServer.set(server), server.toQString(true)); + const CServer server = CServer::fromJsonNoThrow(joStr, true, success, errMsg); + if (this->parsingMessage(success, errMsg, m_cacheLastVatsimServer.getKey())) { this->displayStatusMessage(m_cacheLastVatsimServer.set(server), server.toQString(true)); } } } @@ -207,7 +210,7 @@ namespace BlackGui const QString joStr = CCacheSettingsUtils::otherVersionSettingsFileContent(otherVersionInfo, m_settingsGuiGeneral.getFilename()); if (!joStr.isEmpty()) { - const CGeneralGuiSettings guiGeneral = CGeneralGuiSettings::fromJson(joStr, true); + const CGeneralGuiSettings guiGeneral = CGeneralGuiSettings::fromJsonNoThrow(joStr, true, success, errMsg); this->displayStatusMessage(m_settingsGuiGeneral.setAndSave(guiGeneral), guiGeneral.toQString(true)); } } @@ -217,7 +220,7 @@ namespace BlackGui const QString joStr = CCacheSettingsUtils::otherVersionSettingsFileContent(otherVersionInfo, m_settingsDockWidget.getFilename()); if (!joStr.isEmpty()) { - const CDockWidgetSettings dwSettings = CDockWidgetSettings::fromJson(joStr, true); + const CDockWidgetSettings dwSettings = CDockWidgetSettings::fromJsonNoThrow(joStr, true, success, errMsg); this->displayStatusMessage(m_settingsDockWidget.setAndSave(dwSettings), dwSettings.toQString(true)); } } @@ -227,7 +230,7 @@ namespace BlackGui const QString joStr = CCacheSettingsUtils::otherVersionSettingsFileContent(otherVersionInfo, m_settingsViewUpdate.getFilename()); if (!joStr.isEmpty()) { - const CViewUpdateSettings viewUpdate = CViewUpdateSettings::fromJson(joStr, true); + const CViewUpdateSettings viewUpdate = CViewUpdateSettings::fromJsonNoThrow(joStr, true, success, errMsg); this->displayStatusMessage(m_settingsViewUpdate.setAndSave(viewUpdate), viewUpdate.toQString(true)); } } @@ -251,8 +254,8 @@ namespace BlackGui const QString joStr = CCacheSettingsUtils::otherVersionSettingsFileContent(otherVersionInfo, m_settingsSimulatorFsx.getFilename()); if (!joStr.isEmpty()) { - const CSimulatorSettings settings = CSimulatorSettings::fromJson(joStr, true); - this->displayStatusMessage(m_settingsSimulatorFsx.setAndSave(settings), settings.toQString(true)); + const CSimulatorSettings settings = CSimulatorSettings::fromJsonNoThrow(joStr, true, success, errMsg); + if (this->parsingMessage(success, errMsg, m_settingsSimulatorFsx.getKey())) { this->displayStatusMessage(m_settingsSimulatorFsx.setAndSave(settings), settings.toQString(true)); } } } @@ -261,8 +264,8 @@ namespace BlackGui const QString joStr = CCacheSettingsUtils::otherVersionSettingsFileContent(otherVersionInfo, m_settingsSimulatorP3D.getFilename()); if (!joStr.isEmpty()) { - const CSimulatorSettings settings = CSimulatorSettings::fromJson(joStr, true); - this->displayStatusMessage(m_settingsSimulatorP3D.setAndSave(settings), settings.toQString(true)); + const CSimulatorSettings settings = CSimulatorSettings::fromJsonNoThrow(joStr, true, success, errMsg); + if (this->parsingMessage(success, errMsg, m_settingsSimulatorP3D.getKey())) { this->displayStatusMessage(m_settingsSimulatorP3D.setAndSave(settings), settings.toQString(true)); } } } @@ -271,8 +274,8 @@ namespace BlackGui const QString joStr = CCacheSettingsUtils::otherVersionSettingsFileContent(otherVersionInfo, m_settingsSimulatorXPlane.getFilename()); if (!joStr.isEmpty()) { - const CSimulatorSettings settings = CSimulatorSettings::fromJson(joStr, true); - this->displayStatusMessage(m_settingsSimulatorXPlane.setAndSave(settings), settings.toQString(true)); + const CSimulatorSettings settings = CSimulatorSettings::fromJsonNoThrow(joStr, true, success, errMsg); + if (this->parsingMessage(success, errMsg, m_settingsSimulatorXPlane.getKey())) { this->displayStatusMessage(m_settingsSimulatorXPlane.setAndSave(settings), settings.toQString(true)); } } } @@ -282,8 +285,8 @@ namespace BlackGui const QString joStr = CCacheSettingsUtils::otherVersionSettingsFileContent(otherVersionInfo, m_settingsModel.getFilename()); if (!joStr.isEmpty()) { - const CModelSettings settings = CModelSettings::fromJson(joStr, true); - this->displayStatusMessage(m_settingsModel.setAndSave(settings), settings.toQString(true)); + const CModelSettings settings = CModelSettings::fromJsonNoThrow(joStr, true, success, errMsg); + if (this->parsingMessage(success, errMsg, m_settingsModel.getKey())) { this->displayStatusMessage(m_settingsModel.setAndSave(settings), settings.toQString(true)); } } } @@ -307,8 +310,8 @@ namespace BlackGui const QString joStr = CCacheSettingsUtils::otherVersionSettingsFileContent(otherVersionInfo, m_settingsActionHotkeys.getFilename()); if (!joStr.isEmpty()) { - const CActionHotkeyList hotkeys = CActionHotkeyList::fromJson(joStr, true); - this->displayStatusMessage(m_settingsActionHotkeys.setAndSave(hotkeys), hotkeys.toQString(true)); + const CActionHotkeyList hotkeys = CActionHotkeyList::fromJsonNoThrow(joStr, true, success, errMsg); + if (this->parsingMessage(success, errMsg, m_settingsActionHotkeys.getKey())) { this->displayStatusMessage(m_settingsActionHotkeys.setAndSave(hotkeys), hotkeys.toQString(true)); } } } @@ -317,8 +320,8 @@ namespace BlackGui const QString joStr = CCacheSettingsUtils::otherVersionSettingsFileContent(otherVersionInfo, m_settingsAtcStations.getFilename()); if (!joStr.isEmpty()) { - const CAtcStationsSettings settings = CAtcStationsSettings::fromJson(joStr, true); - this->displayStatusMessage(m_settingsAtcStations.setAndSave(settings), settings.toQString(true)); + const CAtcStationsSettings settings = CAtcStationsSettings::fromJsonNoThrow(joStr, true, success, errMsg); + if (this->parsingMessage(success, errMsg, m_settingsAtcStations.getKey())) { this->displayStatusMessage(m_settingsAtcStations.setAndSave(settings), settings.toQString(true)); } } } @@ -327,8 +330,8 @@ namespace BlackGui const QString joStr = CCacheSettingsUtils::otherVersionSettingsFileContent(otherVersionInfo, m_settingsTextMessage.getFilename()); if (!joStr.isEmpty()) { - const CTextMessageSettings settings = CTextMessageSettings::fromJson(joStr, true); - this->displayStatusMessage(m_settingsTextMessage.setAndSave(settings), settings.toQString(true)); + const CTextMessageSettings settings = CTextMessageSettings::fromJsonNoThrow(joStr, true, success, errMsg); + if (this->parsingMessage(success, errMsg, m_settingsTextMessage.getKey())) { this->displayStatusMessage(m_settingsTextMessage.setAndSave(settings), settings.toQString(true)); } } } } @@ -354,6 +357,14 @@ namespace BlackGui return this->findChildren(); } + bool CCopySettingsAndCachesComponent::parsingMessage(bool success, const QString &msg, const QString &value) + { + if (success) { return true; } + const CStatusMessage sm(this, msg); + this->displayStatusMessage(sm, value); + return false; + } + void CCopySettingsAndCachesComponent::displayStatusMessage(const CStatusMessage &msg, const QString &value) { if (msg.isEmpty()) { return; } diff --git a/src/blackgui/components/copysettingsandcachescomponent.h b/src/blackgui/components/copysettingsandcachescomponent.h index dc6c35fb3..d423e244d 100644 --- a/src/blackgui/components/copysettingsandcachescomponent.h +++ b/src/blackgui/components/copysettingsandcachescomponent.h @@ -93,6 +93,9 @@ namespace BlackGui //! All checkboxes QList checkBoxes() const; + //! Display parsing message + bool parsingMessage(bool success, const QString &msg, const QString &value); + //! Display status message void displayStatusMessage(const BlackMisc::CStatusMessage &msg, const QString &value); diff --git a/src/blackgui/guiapplication.cpp b/src/blackgui/guiapplication.cpp index b509b7e89..4abc453aa 100644 --- a/src/blackgui/guiapplication.cpp +++ b/src/blackgui/guiapplication.cpp @@ -189,6 +189,7 @@ namespace BlackGui void CGuiApplication::processEventsToRefreshGui() const { + if (this->isShuttingDown()) { return; } QCoreApplication::processEvents(QEventLoop::AllEvents, 100); }