Skip to content

Commit 37e6cd7

Browse files
committed
refactor: plugins included in swiftdata
1 parent 73a1179 commit 37e6cd7

File tree

9 files changed

+226
-25
lines changed

9 files changed

+226
-25
lines changed

src/core/application.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ namespace swift::core
315315
Q_ASSERT_X(m_setupReader && m_setupReader->isSetupAvailable(), Q_FUNC_INFO, "Setup not available");
316316

317317
// start hookin
318-
msgs.push_back(this->startHookIn());
318+
msgs.push_back(this->startHookIn()); // TODO TZ At this point, I also try to start the plugins for SwiftData.
319319
if (msgs.isFailure()) { break; }
320320

321321
// Settings if not already initialized

src/gui/components/dbownmodelscomponent.cpp

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -280,10 +280,10 @@ namespace swift::gui::components
280280
{
281281
QMessageBox msgBox(QMessageBox::Question, "Reload models from disk",
282282
QStringLiteral("Completely reload '%1' models from disk?").arg(simulator.toQString(true)),
283-
QMessageBox::Ok | QMessageBox::Cancel, this);
283+
QMessageBox::Yes | QMessageBox::No, this);
284284
msgBox.setDefaultButton(QMessageBox::Cancel);
285285
const QMessageBox::StandardButton reply = static_cast<QMessageBox::StandardButton>(msgBox.exec());
286-
if (reply != QMessageBox::Ok) { return; }
286+
if (reply != QMessageBox::Yes) { return; }
287287

288288
this->requestSimulatorModels(simulator, IAircraftModelLoader::InBackgroundNoCache);
289289
}
@@ -335,6 +335,17 @@ namespace swift::gui::components
335335
ui->tvp_OwnAircraftModels->updateContainerMaybeAsync(this->getOwnModels());
336336
}
337337

338+
void CDbOwnModelsComponent::loadInstalledModelsSimConnect(const CSimulatorInfo &simulator,
339+
IAircraftModelLoader::LoadMode mode,
340+
const QStringList &modelDirectories)
341+
{
342+
using namespace std::chrono_literals;
343+
const CStatusMessage msg = CLogMessage(this).info(u"Start loading models for %1") << simulator.toQString();
344+
this->showOverlayHTMLMessage(msg, 2s);
345+
//this->showOverlayMessage(msg);
346+
return;
347+
}
348+
338349
void CDbOwnModelsComponent::loadInstalledModels(const CSimulatorInfo &simulator,
339350
IAircraftModelLoader::LoadMode mode,
340351
const QStringList &modelDirectories)
@@ -517,7 +528,12 @@ namespace swift::gui::components
517528
IAircraftModelLoader::LoadMode mode,
518529
const QStringList &modelDirectories)
519530
{
520-
this->loadInstalledModels(simulator, mode, modelDirectories);
531+
// TODO TZ check
532+
// At this point, we switch how the models should be loaded: SimConnect or file search.
533+
if (simulator.isMSFS2024())
534+
this->loadInstalledModelsSimConnect(simulator, mode, modelDirectories);
535+
else
536+
this->loadInstalledModels(simulator, mode, modelDirectories);
521537
}
522538

523539
void CDbOwnModelsComponent::requestSimulatorModelsWithCacheInBackground(const CSimulatorInfo &simulator)

src/gui/components/dbownmodelscomponent.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ namespace swift::gui
153153
void ownModelsSimulatorChanged(const swift::misc::simulation::CSimulatorInfo &simulator);
154154

155155
private:
156+
static constexpr std::chrono::milliseconds OverlayMsgTimeout { 5000 }; //!< how long overlay is displayed
157+
156158
QScopedPointer<Ui::CDbOwnModelsComponent> ui;
157159
swift::misc::simulation::IAircraftModelLoader *m_modelLoader =
158160
nullptr; //!< read own aircraft models, aka models on disk
@@ -167,7 +169,12 @@ namespace swift::gui
167169
//! Request own models
168170
void requestOwnModelsUpdate();
169171

170-
//! Load the models
172+
//! Load the models via SimConnect
173+
void loadInstalledModelsSimConnect(const swift::misc::simulation::CSimulatorInfo &simulator,
174+
swift::misc::simulation::IAircraftModelLoader::LoadMode mode,
175+
const QStringList &modelDirectories = {});
176+
177+
//! Load the models via disk
171178
void loadInstalledModels(const swift::misc::simulation::CSimulatorInfo &simulator,
172179
swift::misc::simulation::IAircraftModelLoader::LoadMode mode,
173180
const QStringList &modelDirectories = {});

src/misc/simulation/aircraftmodelloader.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,12 @@ namespace swift::misc::simulation
132132
}
133133

134134
QStringList modelDirs = { "", "" };
135-
if (!simulator.isMSFS2024())
136-
//{
137-
// emit this->loadingFinished(m_loadingMessages, simulator, LoadingSkipped);
138-
// return;
139-
//}
140-
// else
135+
if (simulator.isMSFS2024())
136+
{
137+
emit this->loadingFinished(m_loadingMessages, simulator, LoadingSkipped);
138+
return;
139+
}
140+
else
141141
{
142142
// really load from disk?
143143
modelDirs = this->getInitializedModelDirectories(modelDirectories, simulator);

src/swiftdata/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ add_executable(swiftdata WIN32
77
swiftdata.h
88
swiftdata.ui
99
swiftdatamenus.cpp
10+
swiftdataapplication.cpp
11+
swiftdataapplication.h
1012
)
1113

1214
if(WIN32)

src/swiftdata/main.cpp

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@
66
#include <QApplication>
77
#include <QtGlobal>
88

9+
#include "swiftdata.h"
10+
#include "swiftdataapplication.h"
11+
912
#include "core/webreaderflags.h"
1013
#include "gui/guiapplication.h"
1114
#include "misc/crashhandler.h"
1215
#include "misc/icons.h"
13-
#include "swiftdata.h"
16+
1417

1518
using namespace swift::misc;
1619
using namespace swift::core;
@@ -23,19 +26,25 @@ int main(int argc, char *argv[])
2326
Q_UNUSED(qa)
2427

2528
CCrashHandler::instance()->init();
26-
CGuiApplication a(CApplicationInfo::swiftMappingTool(), CApplicationInfo::MappingTool, CIcons::swiftDatabase48());
27-
if (!a.parseCommandLineArgsAndLoadSetup()) { return EXIT_FAILURE; }
28-
a.splashScreen(CIcons::swiftDatabase256());
29-
a.initAndStartWebDataServices(swift::core::CWebReaderFlags::AllSwiftDbReaders,
30-
CDatabaseReaderConfigList::forMappingTool());
31-
a.startCoreFacadeWithoutContexts();
32-
if (!a.start())
29+
30+
int r = 0;
3331
{
34-
a.gracefulShutdown();
35-
return EXIT_FAILURE;
32+
//CGuiApplication a(CApplicationInfo::swiftMappingTool(), CApplicationInfo::MappingTool,
33+
// CIcons::swiftDatabase48());
34+
CSwiftDataApplication a; // application with contexts
35+
if (!a.parseCommandLineArgsAndLoadSetup()) { return EXIT_FAILURE; }
36+
a.splashScreen(CIcons::swiftDatabase256());
37+
a.initAndStartWebDataServices(swift::core::CWebReaderFlags::AllSwiftDbReaders,
38+
CDatabaseReaderConfigList::forMappingTool());
39+
a.startCoreFacadeWithoutContexts();
40+
if (!a.start())
41+
{
42+
a.gracefulShutdown();
43+
return EXIT_FAILURE;
44+
}
45+
CSwiftData w;
46+
w.show();
47+
int r = a.exec();
3648
}
37-
CSwiftData w;
38-
w.show();
39-
int r = a.exec();
4049
return r;
4150
}

src/swiftdata/swiftdata.h

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@
1010
#include <QObject>
1111
#include <QScopedPointer>
1212

13+
// TODO TZ
14+
//#include "core/pluginmanagersimulator.h"
15+
//#include "misc/simulation/simulatorplugininfo.h"
16+
//#include "misc/simulation/simulatorplugininfolist.h"
17+
1318
#include "core/db/backgrounddataupdater.h"
1419
#include "gui/mainwindowaccess.h"
1520
#include "gui/managedstatusbar.h"
@@ -25,7 +30,8 @@ namespace Ui
2530
namespace swift::core
2631
{
2732
class CWebDataServices;
28-
}
33+
//class CPluginManagerSimulator;
34+
} // namespace swift::core
2935
namespace swift::gui::components
3036
{
3137
class CAutoPublishDialog;
@@ -81,6 +87,13 @@ class CSwiftData : public QMainWindow, public swift::misc::CIdentifiable, public
8187
void displayLog();
8288
void checkMinimumVersion();
8389

90+
// TODO TZ
91+
//swift::core::CPluginManagerSimulator *m_plugins = nullptr;
92+
93+
//! Available plugins, auto pseudo plugin added
94+
//static swift::misc::simulation::CSimulatorPluginInfoList getAvailablePlugins();
95+
// END TODO TZ
96+
8497
QScopedPointer<Ui::CSwiftData> ui;
8598
swift::gui::CManagedStatusBar m_statusBar;
8699
swift::core::db::CBackgroundDataUpdater *m_updater = nullptr; //!< consolidate with DB data
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
// SPDX-FileCopyrightText: Copyright (C) 2016 swift Project Community / Contributors
2+
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3+
4+
#include "swiftdataapplication.h"
5+
6+
#include <QtGlobal>
7+
8+
#include "core/application.h"
9+
#include "core/corefacadeconfig.h"
10+
#include "core/coremodeenums.h"
11+
#include "misc/dbusserver.h"
12+
#include "misc/icons.h"
13+
14+
using namespace swift::misc;
15+
using namespace swift::core;
16+
17+
CSwiftDataApplication::CSwiftDataApplication()
18+
: CGuiApplication(CApplicationInfo::swiftMappingTool(), CApplicationInfo::MappingTool, CIcons::swiftDatabase48())
19+
//: CGuiApplication(CApplicationInfo::swiftPilotClientGui(), CApplicationInfo::PilotClientGui, CIcons::swift1024())
20+
21+
{
22+
this->addParserOption(m_cmdFacadeMode);
23+
this->addDBusAddressOption();
24+
this->addNetworkOptions();
25+
this->addAudioOptions();
26+
}
27+
28+
CStatusMessageList CSwiftDataApplication::startHookIn()
29+
{
30+
Q_ASSERT_X(m_parsed, Q_FUNC_INFO, "Not yet parsed cmd line arguments");
31+
32+
QString dBusAddress(this->getCmdDBusAddressValue());
33+
const QString coreModeStr =
34+
this->isParserOptionSet(m_cmdFacadeMode) ? this->getParserValue(m_cmdFacadeMode) : QString();
35+
CoreModes::CoreMode coreMode = CoreModes::stringToCoreMode(coreModeStr);
36+
37+
// Valid combination?
38+
if (!coreModeStr.isEmpty())
39+
{
40+
if (coreMode == CoreModes::Standalone && !dBusAddress.isEmpty())
41+
{
42+
const CStatusMessage m =
43+
CStatusMessage(this, CLogCategories::validation()).error(u"Inconsistent pair DBus: '%1' and core: '%2'")
44+
<< dBusAddress << coreModeStr;
45+
return CStatusMessageList(m);
46+
}
47+
}
48+
49+
// Implicit configuration
50+
CStatusMessageList msgs;
51+
if (!dBusAddress.isEmpty() && coreModeStr.isEmpty())
52+
{
53+
coreMode = CoreModes::Distributed; // default
54+
const CStatusMessage m =
55+
CStatusMessage(this, CLogCategories::validation()).info(u"No DBus address, setting core mode: '%1'")
56+
<< CoreModes::coreModeToString(coreMode);
57+
msgs.push_back(m);
58+
}
59+
else if (dBusAddress.isEmpty() && coreMode == CoreModes::Distributed)
60+
{
61+
dBusAddress = CDBusServer::sessionBusAddress(); // a possible default
62+
const CStatusMessage m =
63+
CStatusMessage(this, CLogCategories::validation()).info(u"Setting DBus address to '%1'") << dBusAddress;
64+
msgs.push_back(m);
65+
}
66+
67+
CCoreFacadeConfig runtimeConfig = coreModeToCoreFacadeConfig(coreMode, dBusAddress);
68+
const CStatusMessageList contextMsgs = this->initContextsAndStartCoreFacade(runtimeConfig);
69+
//const CStatusMessageList contextMsgs = { CStatusMessage(this, CLogCategories::validation()).info(u"TEST") };
70+
msgs.push_back(contextMsgs);
71+
return contextMsgs;
72+
}
73+
74+
bool CSwiftDataApplication::parsingHookIn()
75+
{
76+
// Parse core relevant arguments
77+
const QString dBusAddress(this->getCmdDBusAddressValue());
78+
if (!dBusAddress.isEmpty())
79+
{
80+
// check if reachable
81+
if (!CDBusServer::isDBusAvailable(dBusAddress))
82+
{
83+
this->cmdLineErrorMessage("DBus error", "DBus server at '" + dBusAddress + "' can not be reached");
84+
return false;
85+
}
86+
}
87+
return CGuiApplication::parsingHookIn();
88+
}
89+
90+
CSwiftDataApplication *CSwiftDataApplication::instance()
91+
{
92+
return qobject_cast<CSwiftDataApplication *>(CApplication::instance());
93+
}
94+
95+
CCoreFacadeConfig CSwiftDataApplication::coreModeToCoreFacadeConfig(CoreModes::CoreMode coreMode,
96+
const QString &dBusAddress)
97+
{
98+
switch (coreMode)
99+
{
100+
case CoreModes::Distributed: return CCoreFacadeConfig(CCoreFacadeConfig::Remote, dBusAddress);
101+
case CoreModes::Standalone: return CCoreFacadeConfig(CCoreFacadeConfig::Local, dBusAddress); break;
102+
default:
103+
Q_ASSERT_X(false, Q_FUNC_INFO, "Not handled core mode");
104+
return CCoreFacadeConfig(CCoreFacadeConfig::NotUsed, dBusAddress);
105+
}
106+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// SPDX-FileCopyrightText: Copyright (C) 2016 swift Project Community / Contributors
2+
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3+
4+
//! \file
5+
6+
#ifndef SWIFTDATAAPPLICATION_H
7+
#define SWIFTDATAAPPLICATION_H
8+
9+
#include <QCommandLineOption>
10+
#include <QCoreApplication>
11+
#include <QObject>
12+
#include <QString>
13+
14+
#include "core/coremodeenums.h"
15+
#include "gui/guiapplication.h"
16+
17+
/*!
18+
* Specialized GUI application for swift pilot client.
19+
* Handles parsing of some specialized CMD line argumenets and startup of core
20+
*/
21+
class CSwiftDataApplication : public swift::gui::CGuiApplication
22+
{
23+
Q_OBJECT
24+
25+
public:
26+
//! Constructor
27+
CSwiftDataApplication();
28+
29+
//! Single instance
30+
CSwiftDataApplication *instance();
31+
32+
protected:
33+
//! Parsing of special CMD args
34+
virtual bool parsingHookIn() override;
35+
36+
//! Start facade by cmd arguments
37+
virtual swift::misc::CStatusMessageList startHookIn() override;
38+
39+
private:
40+
static swift::core::CCoreFacadeConfig coreModeToCoreFacadeConfig(swift::core::CoreModes::CoreMode,
41+
const QString &dBusAddress);
42+
43+
QCommandLineOption m_cmdFacadeMode { { "c", "core" },
44+
QCoreApplication::translate("main", "Core mode: (d)istributed, (s)tandalone."),
45+
"coremode" }; //!< Facade startup mode
46+
};
47+
48+
#endif // SWIFTDATAAPPLICATION_H

0 commit comments

Comments
 (0)