diff --git a/src/swiftdata/CMakeLists.txt b/src/swiftdata/CMakeLists.txt index 1dc6536e9..22ccfd48f 100644 --- a/src/swiftdata/CMakeLists.txt +++ b/src/swiftdata/CMakeLists.txt @@ -7,6 +7,8 @@ add_executable(swiftdata WIN32 swiftdata.h swiftdata.ui swiftdatamenus.cpp + swiftdataapplication.cpp + swiftdataapplication.h ) if(WIN32) diff --git a/src/swiftdata/main.cpp b/src/swiftdata/main.cpp index e8d80900a..b0ea5384a 100644 --- a/src/swiftdata/main.cpp +++ b/src/swiftdata/main.cpp @@ -11,6 +11,7 @@ #include "misc/crashhandler.h" #include "misc/icons.h" #include "swiftdata.h" +#include "swiftdataapplication.h" using namespace swift::misc; using namespace swift::core; @@ -23,19 +24,25 @@ int main(int argc, char *argv[]) Q_UNUSED(qa) CCrashHandler::instance()->init(); - CGuiApplication a(CApplicationInfo::swiftMappingTool(), CApplicationInfo::MappingTool, CIcons::swiftDatabase48()); - if (!a.parseCommandLineArgsAndLoadSetup()) { return EXIT_FAILURE; } - a.splashScreen(CIcons::swiftDatabase256()); - a.initAndStartWebDataServices(swift::core::CWebReaderFlags::AllSwiftDbReaders, - CDatabaseReaderConfigList::forMappingTool()); - a.startCoreFacadeWithoutContexts(); - if (!a.start()) + + int r = 0; { - a.gracefulShutdown(); - return EXIT_FAILURE; + // CGuiApplication a(CApplicationInfo::swiftMappingTool(), CApplicationInfo::MappingTool, + // CIcons::swiftDatabase48()); + CSwiftDataApplication a; // application with contexts + if (!a.parseCommandLineArgsAndLoadSetup()) { return EXIT_FAILURE; } + a.splashScreen(CIcons::swiftDatabase256()); + a.initAndStartWebDataServices(swift::core::CWebReaderFlags::AllSwiftDbReaders, + CDatabaseReaderConfigList::forMappingTool()); + a.startCoreFacadeWithoutContexts(); + if (!a.start()) + { + a.gracefulShutdown(); + return EXIT_FAILURE; + } + CSwiftData w; + w.show(); + r = a.exec(); } - CSwiftData w; - w.show(); - int r = a.exec(); return r; } diff --git a/src/swiftdata/swiftdata.h b/src/swiftdata/swiftdata.h index 2b278cb5c..8160a4e90 100644 --- a/src/swiftdata/swiftdata.h +++ b/src/swiftdata/swiftdata.h @@ -25,7 +25,7 @@ namespace Ui namespace swift::core { class CWebDataServices; -} +} // namespace swift::core namespace swift::gui::components { class CAutoPublishDialog; diff --git a/src/swiftdata/swiftdataapplication.cpp b/src/swiftdata/swiftdataapplication.cpp new file mode 100644 index 000000000..8fb5b6a87 --- /dev/null +++ b/src/swiftdata/swiftdataapplication.cpp @@ -0,0 +1,61 @@ +// SPDX-FileCopyrightText: Copyright (C) 2016 swift Project Community / Contributors +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1 + +#include "swiftdataapplication.h" + +#include + +#include "core/application.h" +#include "core/corefacadeconfig.h" +#include "core/coremodeenums.h" +#include "misc/dbusserver.h" +#include "misc/icons.h" + +using namespace swift::misc; +using namespace swift::core; + +CSwiftDataApplication::CSwiftDataApplication() + : CGuiApplication(CApplicationInfo::swiftMappingTool(), CApplicationInfo::MappingTool, CIcons::swiftDatabase48()) +{ + // this->addParserOption(m_cmdFacadeMode); + // this->addDBusAddressOption(); + // this->addNetworkOptions(); + // this->addAudioOptions(); +} + +CStatusMessageList CSwiftDataApplication::startHookIn() +{ + Q_ASSERT_X(m_parsed, Q_FUNC_INFO, "Not yet parsed cmd line arguments"); + + QString dBusAddress(this->getCmdDBusAddressValue()); + const QString coreModeStr = + this->isParserOptionSet(m_cmdFacadeMode) ? this->getParserValue(m_cmdFacadeMode) : QString(); + CoreModes::CoreMode coreMode = CoreModes::stringToCoreMode(coreModeStr); + + CStatusMessageList msgs; + + CCoreFacadeConfig runtimeConfig = coreModeToCoreFacadeConfig(coreMode, dBusAddress); + const CStatusMessageList contextMsgs = this->initContextsAndStartCoreFacade(runtimeConfig); + msgs.push_back(contextMsgs); + return contextMsgs; +} + +bool CSwiftDataApplication::parsingHookIn() { return CGuiApplication::parsingHookIn(); } + +CSwiftDataApplication *CSwiftDataApplication::instance() +{ + return qobject_cast(CApplication::instance()); +} + +CCoreFacadeConfig CSwiftDataApplication::coreModeToCoreFacadeConfig(CoreModes::CoreMode coreMode, + const QString &dBusAddress) +{ + switch (coreMode) + { + case CoreModes::Distributed: return CCoreFacadeConfig(CCoreFacadeConfig::Remote, dBusAddress); + case CoreModes::Standalone: return CCoreFacadeConfig(CCoreFacadeConfig::Local, dBusAddress); break; + default: + Q_ASSERT_X(false, Q_FUNC_INFO, "Not handled core mode"); + return CCoreFacadeConfig(CCoreFacadeConfig::NotUsed, dBusAddress); + } +} diff --git a/src/swiftdata/swiftdataapplication.h b/src/swiftdata/swiftdataapplication.h new file mode 100644 index 000000000..50c516862 --- /dev/null +++ b/src/swiftdata/swiftdataapplication.h @@ -0,0 +1,48 @@ +// SPDX-FileCopyrightText: Copyright (C) 2016 swift Project Community / Contributors +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1 + +//! \file + +#ifndef SWIFTDATAAPPLICATION_H +#define SWIFTDATAAPPLICATION_H + +#include +#include +#include +#include + +#include "core/coremodeenums.h" +#include "gui/guiapplication.h" + +/*! + * Specialized GUI application for swift pilot client. + * Handles parsing of some specialized CMD line argumenets and startup of core + */ +class CSwiftDataApplication : public swift::gui::CGuiApplication +{ + Q_OBJECT + +public: + //! Constructor + CSwiftDataApplication(); + + //! Single instance + CSwiftDataApplication *instance(); + +protected: + //! Parsing of special CMD args + virtual bool parsingHookIn() override; + + //! Start facade by cmd arguments + virtual swift::misc::CStatusMessageList startHookIn() override; + +private: + static swift::core::CCoreFacadeConfig coreModeToCoreFacadeConfig(swift::core::CoreModes::CoreMode, + const QString &dBusAddress); + + QCommandLineOption m_cmdFacadeMode { { "c", "core" }, + QCoreApplication::translate("main", "Core mode: (d)istributed, (s)tandalone."), + "coremode" }; //!< Facade startup mode +}; + +#endif // SWIFTDATAAPPLICATION_H