From 71f116ffce90b46463c7a0208e4347d6690ba2be Mon Sep 17 00:00:00 2001 From: Oliver Knoll Date: Sat, 25 May 2024 14:57:47 +0200 Subject: [PATCH] Check for existence of SimConnect.cfg - If not present * Enforce local connection settings ("Pipe") * Use SIMCONNECT_OPEN_CONFIGINDEX_LOCAL connection index (as in previous Sky Dolly versions) * Disable combo box in flight simulator settings Other: - Start using brace initialisation for class members (in constructor member initialisers) --- CHANGELOG.md | 6 ++++ src/Kernel/include/Kernel/File.h | 7 ++++ src/Kernel/include/Kernel/Version.h | 2 +- src/Kernel/src/Convert.cpp | 1 - src/Kernel/src/File.cpp | 18 ++++++++--- src/Kernel/src/Version.cpp | 10 +++--- .../Location/BasicLocationExportDialog.cpp | 6 ++-- .../Location/BasicLocationImportDialog.cpp | 4 +-- .../src/Location/LocationExportPluginBase.cpp | 2 +- .../LocationExportPluginBaseSettings.cpp | 2 +- .../src/Location/LocationImportPluginBase.cpp | 2 +- .../LocationImportPluginBaseSettings.cpp | 2 +- src/PluginManager/src/ModuleManager.cpp | 4 +-- src/PluginManager/src/PluginManager.cpp | 28 ++++++++-------- src/PluginManager/src/SkyConnectManager.cpp | 8 ++--- .../src/MSFSSimConnectOptionWidget.cpp | 24 ++++++++++---- .../src/MSFSSimConnectPlugin.cpp | 32 +++++++++++-------- .../src/MSFSSimConnectSettings.cpp | 7 +++- 18 files changed, 103 insertions(+), 62 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb65c89aa..6237a8598 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,10 +40,16 @@ ## Improvements - Seeking backward and forward via flight simulator keyboard shortcuts (CTRL+, respectively CTRL+.) now repeats the action while keeping the shortcut combination pressed - Application settings: the flight simulator connection plugin and connection type (pipe, IPv4, IPv6) combo boxes are disabled while the connection is active (replay or recording in progress) +- When the *SimConnect.cfg* client configuration that comes with Sky Dolly is removed from the application directory then a local (configuration index *SIMCONNECT_OPEN_CONFIGINDEX_LOCAL*) connection is used (just like in previous Sky Dolly versions) + * Also refer to the official documentation of [SimConnect.cfg](https://docs.flightsimulator.com/html/Programming_Tools/SimConnect/SimConnect_CFG_Definition.htm) (client configuration) and [SimConnect.xml](https://docs.flightsimulator.com/html/Programming_Tools/SimConnect/SimConnect_XML_Definition.htm) (server configuration) ### Bug Fixes - Fix the example [Flight-Analysis.sql](doc/SQL/Flight-Analysis.sql) script (documentation) [[Issue #150](https://github.com/till213/SkyDolly/issues/150)] * The *flight_number* is now stored on *flight* level (and not per *aircraft* anymore) + +### Under the Hood +- Upgrade Qt to 6.7.1 (from 6.7.0) + * Note: fixes for the new Windows 11 style are expected to be in Qt 6.7.2, scheduled for August 2024 ## 0.17.1 diff --git a/src/Kernel/include/Kernel/File.h b/src/Kernel/include/Kernel/File.h index d7cf86737..eccf009f5 100644 --- a/src/Kernel/include/Kernel/File.h +++ b/src/Kernel/include/Kernel/File.h @@ -91,6 +91,13 @@ class KERNEL_API File final * \sa getEarthGravityModelFileInfo */ static bool hasEarthGravityModel() noexcept; + + /*! + * Returns whether a \e SimConnect.cfg client configuration exists in the application folder. + * + * \return \c true if a \e SimConnect.cfg is available; \c false else + */ + static bool hasSimConnectConfiguration() noexcept; }; #endif // FILE_H diff --git a/src/Kernel/include/Kernel/Version.h b/src/Kernel/include/Kernel/Version.h index c44bcce59..2cd6578e4 100644 --- a/src/Kernel/include/Kernel/Version.h +++ b/src/Kernel/include/Kernel/Version.h @@ -189,7 +189,7 @@ class KERNEL_API Version final */ static QString getApplicationName() noexcept; - static QLatin1String getGitHash() noexcept; + static QString getGitHash() noexcept; static QDateTime getGitDate() noexcept; diff --git a/src/Kernel/src/Convert.cpp b/src/Kernel/src/Convert.cpp index 81afa214e..302bab426 100644 --- a/src/Kernel/src/Convert.cpp +++ b/src/Kernel/src/Convert.cpp @@ -34,7 +34,6 @@ #include -#include "Settings.h" #include "File.h" #include "Convert.h" diff --git a/src/Kernel/src/File.cpp b/src/Kernel/src/File.cpp index 477509ea4..198e5cef9 100644 --- a/src/Kernel/src/File.cpp +++ b/src/Kernel/src/File.cpp @@ -45,6 +45,8 @@ namespace // from https://geographiclib.sourceforge.io/html/geoid.html#geoidinst constexpr const char *EgmDirectoryName {"geoids"}; constexpr const char *DefaultEgmFileName {"egm2008-5.pgm"}; + + constexpr const char *SimConnectConfigurationFileName {"SimConnect.cfg"}; } // PUBLIC @@ -96,7 +98,7 @@ QString File::getSequenceFilePath(const QString &filePath, int n) noexcept pluginsDirectory.cdUp(); } #endif - pluginsDirectory.cd(QString::fromLatin1(::PluginDirectoryName)); + pluginsDirectory.cd(::PluginDirectoryName); return pluginsDirectory.absolutePath(); } @@ -110,11 +112,11 @@ QString File::getSequenceFilePath(const QString &filePath, int n) noexcept egmDirectory.cdUp(); } #endif - if (egmDirectory.cd(QString::fromLatin1(::ResourceDirectoryName))) { - if (egmDirectory.cd(QString::fromLatin1(::EgmDirectoryName))) { - if (egmDirectory.exists(QString::fromLatin1(::DefaultEgmFileName))) { + if (egmDirectory.cd(::ResourceDirectoryName)) { + if (egmDirectory.cd(::EgmDirectoryName)) { + if (egmDirectory.exists(::DefaultEgmFileName)) { egmFileInfo = QFileInfo( - egmDirectory.absoluteFilePath(QString::fromLatin1(::DefaultEgmFileName))); + egmDirectory.absoluteFilePath(::DefaultEgmFileName)); } } } @@ -125,3 +127,9 @@ QString File::getSequenceFilePath(const QString &filePath, int n) noexcept { return getEarthGravityModelFileInfo().exists(); } + + bool File::hasSimConnectConfiguration() noexcept + { + QDir applicationDirectory = QDir(QCoreApplication::applicationDirPath()); + return applicationDirectory.exists(::SimConnectConfigurationFileName); + } diff --git a/src/Kernel/src/Version.cpp b/src/Kernel/src/Version.cpp index bbc84d84b..dbe549937 100644 --- a/src/Kernel/src/Version.cpp +++ b/src/Kernel/src/Version.cpp @@ -163,20 +163,20 @@ QString Version::getApplicationVersion() noexcept QString Version::getOrganisationName() noexcept { - return QString::fromLatin1(VersionConfig::OrganisationName); + return VersionConfig::OrganisationName; } QString Version::getApplicationName() noexcept { - return QString::fromLatin1(VersionConfig::ApplicationName); + return VersionConfig::ApplicationName; } -QLatin1String Version::getGitHash() noexcept +QString Version::getGitHash() noexcept { - return QLatin1String(GitInfo::GitHash); + return GitInfo::GitHash; } QDateTime Version::getGitDate() noexcept { - return QDateTime::fromString(QString::fromLatin1(GitInfo::GitIsoDate), Qt::ISODate); + return QDateTime::fromString(GitInfo::GitIsoDate, Qt::ISODate); } diff --git a/src/PluginManager/src/Location/BasicLocationExportDialog.cpp b/src/PluginManager/src/Location/BasicLocationExportDialog.cpp index 99d447fe6..1f4996e70 100644 --- a/src/PluginManager/src/Location/BasicLocationExportDialog.cpp +++ b/src/PluginManager/src/Location/BasicLocationExportDialog.cpp @@ -50,9 +50,9 @@ struct BasicLocationExportDialogPrivate { BasicLocationExportDialogPrivate(QString fileExtension, QString theFileFilter, LocationExportPluginBaseSettings &pluginSettings) noexcept - : fileExtension(std::move(fileExtension)), - fileFilter(std::move(theFileFilter)), - pluginSettings(pluginSettings) + : fileExtension {std::move(fileExtension)}, + fileFilter {std::move(theFileFilter)}, + pluginSettings {pluginSettings} {} QString fileExtension; diff --git a/src/PluginManager/src/Location/BasicLocationImportDialog.cpp b/src/PluginManager/src/Location/BasicLocationImportDialog.cpp index 1bff1cd20..844ec9466 100644 --- a/src/PluginManager/src/Location/BasicLocationImportDialog.cpp +++ b/src/PluginManager/src/Location/BasicLocationImportDialog.cpp @@ -46,8 +46,8 @@ struct BasicLocationImportDialogPrivate { BasicLocationImportDialogPrivate(QString fileFilter, LocationImportPluginBaseSettings &pluginSettings) noexcept - : fileFilter(std::move(fileFilter)), - pluginSettings(pluginSettings) + : fileFilter {std::move(fileFilter)}, + pluginSettings {pluginSettings} {} std::unique_ptr aircraftTypeService {std::make_unique()}; diff --git a/src/PluginManager/src/Location/LocationExportPluginBase.cpp b/src/PluginManager/src/Location/LocationExportPluginBase.cpp index 21e06b123..98f865147 100644 --- a/src/PluginManager/src/Location/LocationExportPluginBase.cpp +++ b/src/PluginManager/src/Location/LocationExportPluginBase.cpp @@ -61,7 +61,7 @@ struct LocationExportPluginBasePrivate // PUBLIC LocationExportPluginBase::LocationExportPluginBase() noexcept - : d(std::make_unique()) + : d {std::make_unique()} {} LocationExportPluginBase::~LocationExportPluginBase() = default; diff --git a/src/PluginManager/src/Location/LocationExportPluginBaseSettings.cpp b/src/PluginManager/src/Location/LocationExportPluginBaseSettings.cpp index 6eb8b8753..6dfb70555 100644 --- a/src/PluginManager/src/Location/LocationExportPluginBaseSettings.cpp +++ b/src/PluginManager/src/Location/LocationExportPluginBaseSettings.cpp @@ -51,7 +51,7 @@ struct LocationExportPluginBaseSettingsPrivate // PUBLIC LocationExportPluginBaseSettings::LocationExportPluginBaseSettings() noexcept - : d(std::make_unique()) + : d {std::make_unique()} {} LocationExportPluginBaseSettings::~LocationExportPluginBaseSettings() = default; diff --git a/src/PluginManager/src/Location/LocationImportPluginBase.cpp b/src/PluginManager/src/Location/LocationImportPluginBase.cpp index 24cc5427f..79f894ab3 100644 --- a/src/PluginManager/src/Location/LocationImportPluginBase.cpp +++ b/src/PluginManager/src/Location/LocationImportPluginBase.cpp @@ -52,7 +52,7 @@ struct LocationImportPluginBasePrivate // PUBLIC LocationImportPluginBase::LocationImportPluginBase() noexcept - : d(std::make_unique()) + : d {std::make_unique()} { std::unique_ptr locationService {std::make_unique()}; } diff --git a/src/PluginManager/src/Location/LocationImportPluginBaseSettings.cpp b/src/PluginManager/src/Location/LocationImportPluginBaseSettings.cpp index 157540821..b05919cc2 100644 --- a/src/PluginManager/src/Location/LocationImportPluginBaseSettings.cpp +++ b/src/PluginManager/src/Location/LocationImportPluginBaseSettings.cpp @@ -53,7 +53,7 @@ struct LocationImportPluginBaseSettingsPrivate // PUBLIC LocationImportPluginBaseSettings::LocationImportPluginBaseSettings() noexcept - : d(std::make_unique()) + : d {std::make_unique()} {} LocationImportPluginBaseSettings::~LocationImportPluginBaseSettings() = default; diff --git a/src/PluginManager/src/ModuleManager.cpp b/src/PluginManager/src/ModuleManager.cpp index 2b8d2af1b..88d324cfb 100644 --- a/src/PluginManager/src/ModuleManager.cpp +++ b/src/PluginManager/src/ModuleManager.cpp @@ -206,8 +206,8 @@ void ModuleManager::initModules() noexcept Graph graph; std::unordered_map moduleInfos; d->moduleRegistry.clear(); - if (d->pluginsDirectoryPath.exists(QString::fromLatin1(::ModuleDirectoryName))) { - d->pluginsDirectoryPath.cd(QString::fromLatin1(::ModuleDirectoryName)); + if (d->pluginsDirectoryPath.exists(::ModuleDirectoryName)) { + d->pluginsDirectoryPath.cd(::ModuleDirectoryName); const QStringList entryList = d->pluginsDirectoryPath.entryList(QDir::Files); for (const auto &fileName : entryList) { initModule(fileName, moduleInfos, graph); diff --git a/src/PluginManager/src/PluginManager.cpp b/src/PluginManager/src/PluginManager.cpp index f468520cd..1afa33c02 100644 --- a/src/PluginManager/src/PluginManager.cpp +++ b/src/PluginManager/src/PluginManager.cpp @@ -108,9 +108,9 @@ void PluginManager::initialise(QWidget *parentWidget) noexcept std::vector PluginManager::initialiseFlightImportPlugins() noexcept { std::vector pluginHandles; - if (d->pluginsDirectory.exists(QString::fromLatin1(::FlightDirectoryName))) { - d->pluginsDirectory.cd(QString::fromLatin1(::FlightDirectoryName)); - pluginHandles = enumeratePlugins(QString::fromLatin1(::ImportDirectoryName), d->flightImportPluginRegistry); + if (d->pluginsDirectory.exists(::FlightDirectoryName)) { + d->pluginsDirectory.cd(::FlightDirectoryName); + pluginHandles = enumeratePlugins(::ImportDirectoryName, d->flightImportPluginRegistry); d->pluginsDirectory.cdUp(); } return pluginHandles; @@ -119,9 +119,9 @@ std::vector PluginManager::initialiseFlightImportPlugins( std::vector PluginManager::initialiseFlightExportPlugins() noexcept { std::vector pluginHandles; - if (d->pluginsDirectory.exists(QString::fromLatin1(::FlightDirectoryName))) { - d->pluginsDirectory.cd(QString::fromLatin1(::FlightDirectoryName)); - pluginHandles = enumeratePlugins(QString::fromLatin1(::ExportDirectoryName), d->flightExportPluginRegistry); + if (d->pluginsDirectory.exists(::FlightDirectoryName)) { + d->pluginsDirectory.cd(::FlightDirectoryName); + pluginHandles = enumeratePlugins(::ExportDirectoryName, d->flightExportPluginRegistry); d->pluginsDirectory.cdUp(); } return pluginHandles; @@ -130,9 +130,9 @@ std::vector PluginManager::initialiseFlightExportPlugins( std::vector PluginManager::initialiseLocationImportPlugins() noexcept { std::vector pluginHandles; - if (d->pluginsDirectory.exists(QString::fromLatin1(::LocationDirectoryName))) { - d->pluginsDirectory.cd(QString::fromLatin1(::LocationDirectoryName)); - pluginHandles = enumeratePlugins(QString::fromLatin1(::ImportDirectoryName), d->locationImportPluginRegistry); + if (d->pluginsDirectory.exists(::LocationDirectoryName)) { + d->pluginsDirectory.cd(::LocationDirectoryName); + pluginHandles = enumeratePlugins(::ImportDirectoryName, d->locationImportPluginRegistry); d->pluginsDirectory.cdUp(); } return pluginHandles; @@ -141,9 +141,9 @@ std::vector PluginManager::initialiseLocationImportPlugin std::vector PluginManager::initialiseLocationExportPlugins() noexcept { std::vector pluginHandles; - if (d->pluginsDirectory.exists(QString::fromLatin1(::LocationDirectoryName))) { - d->pluginsDirectory.cd(QString::fromLatin1(::LocationDirectoryName)); - pluginHandles = enumeratePlugins(QString::fromLatin1(::ExportDirectoryName), d->locationExportPluginRegistry); + if (d->pluginsDirectory.exists(::LocationDirectoryName)) { + d->pluginsDirectory.cd(::LocationDirectoryName); + pluginHandles = enumeratePlugins(::ExportDirectoryName, d->locationExportPluginRegistry); d->pluginsDirectory.cdUp(); } return pluginHandles; @@ -267,8 +267,8 @@ std::vector PluginManager::enumeratePlugins(const QString const QJsonObject metaData = loader.metaData(); if (!metaData.isEmpty()) { const QJsonObject pluginMetadata {metaData.value (QStringLiteral("MetaData")).toObject()}; - const QUuid uuid {pluginMetadata.value(QString::fromLatin1(::PluginUuidKey)).toString()}; - const QString pluginName {pluginMetadata.value(QString::fromLatin1(::PluginNameKey)).toString()}; + const QUuid uuid {pluginMetadata.value(PluginUuidKey).toString()}; + const QString pluginName {pluginMetadata.value(PluginNameKey).toString()}; const Handle handle {uuid, pluginName}; pluginHandles.push_back(handle); pluginRegistry[uuid] = pluginPath; diff --git a/src/PluginManager/src/SkyConnectManager.cpp b/src/PluginManager/src/SkyConnectManager.cpp index 24dbf2f65..78cf25357 100644 --- a/src/PluginManager/src/SkyConnectManager.cpp +++ b/src/PluginManager/src/SkyConnectManager.cpp @@ -100,7 +100,7 @@ void SkyConnectManager::destroyInstance() noexcept const std::vector &SkyConnectManager::initialisePlugins() noexcept { - initialisePluginRegistry(QString::fromLatin1(::ConnectPluginDirectoryName)); + initialisePluginRegistry(::ConnectPluginDirectoryName); initialisePlugin(); return availablePlugins(); } @@ -519,9 +519,9 @@ void SkyConnectManager::initialisePluginRegistry(const QString &pluginDirectoryN const QJsonObject metaData = loader.metaData(); if (!metaData.isEmpty()) { const QJsonObject pluginMetadata {metaData.value(QStringLiteral("MetaData")).toObject()}; - const QUuid uuid {pluginMetadata.value(QString::fromLatin1(PluginUuidKey)).toString()}; - const QString pluginName {pluginMetadata.value(QString::fromLatin1(PluginNameKey)).toString()}; - const QString flightSimulatorName {pluginMetadata.value(QString::fromLatin1(PluginFlightSimulatorNameKey)).toString()}; + const QUuid uuid {pluginMetadata.value(PluginUuidKey).toString()}; + const QString pluginName {pluginMetadata.value(PluginNameKey).toString()}; + const QString flightSimulatorName {pluginMetadata.value(PluginFlightSimulatorNameKey).toString()}; const FlightSimulator::Id flightSimulatorId {FlightSimulator::nameToId(flightSimulatorName)}; SkyConnectPlugin plugin {pluginName, flightSimulatorId}; const Handle handle {uuid, plugin}; diff --git a/src/Plugins/Connect/MSFSSimConnectPlugin/src/MSFSSimConnectOptionWidget.cpp b/src/Plugins/Connect/MSFSSimConnectPlugin/src/MSFSSimConnectOptionWidget.cpp index df8b4bbf4..372feff62 100644 --- a/src/Plugins/Connect/MSFSSimConnectPlugin/src/MSFSSimConnectOptionWidget.cpp +++ b/src/Plugins/Connect/MSFSSimConnectPlugin/src/MSFSSimConnectOptionWidget.cpp @@ -34,6 +34,8 @@ #include #endif +#include +#include #include #include #include "MSFSSimConnectSettings.h" @@ -122,21 +124,27 @@ void MSFSSimConnectOptionWidget::initUi() noexcept void MSFSSimConnectOptionWidget::updateUi() noexcept { + using enum MSFSSimConnectSettings::ConnectionType; + + const bool simConnectConfiguration = File::hasSimConnectConfiguration(); + if (!simConnectConfiguration) { + d->pluginSettings.setConnectionType(Pipe); + } switch (d->pluginSettings.getConnectionType()) { - case MSFSSimConnectSettings::ConnectionType::Pipe: + case Pipe: ui->connectionComboBox->setCurrentIndex(0); break; - case MSFSSimConnectSettings::ConnectionType::IPv4: + case IPv4: ui->connectionComboBox->setCurrentIndex(1); break; - case MSFSSimConnectSettings::ConnectionType::IPv6: + case IPv6: ui->connectionComboBox->setCurrentIndex(2); break; default: break; } - const bool enabled = !SkyConnectManager::getInstance().isActive(); + const bool enabled = simConnectConfiguration && !SkyConnectManager::getInstance().isActive(); ui->connectionComboBox->setEnabled(enabled); updateInfoText(); @@ -144,12 +152,14 @@ void MSFSSimConnectOptionWidget::updateUi() noexcept void MSFSSimConnectOptionWidget::updateInfoText() noexcept { + const bool hasConfiguration = File::hasSimConnectConfiguration(); const bool isNetwork = ui->connectionComboBox->currentIndex() != 0; const QString url = QStringLiteral("file:///") % QCoreApplication::applicationDirPath() % "/SimConnect.cfg"; const QString link = QStringLiteral("SimConnect.cfg"; - const QString infoText = isNetwork ? - tr("Also refer to the %1 configuration file, located in the Sky Dolly application directory.").arg(link) : - tr("This is the preferred connection type when running Sky Dolly on the same local machine as MSFS."); + const QString infoText = hasConfiguration ? isNetwork ? + tr("Also refer to the %1 configuration file, located in the %2 application directory.").arg(link, Version::getApplicationName()) : + tr("This is the preferred connection type when running %1 on the same local machine as MSFS.").arg(Version::getApplicationName()) : + tr("No SimConnect.cfg present in the %1 application directory: using local connection.").arg(Version::getApplicationName()); ui->infoLabel->setText(infoText); } diff --git a/src/Plugins/Connect/MSFSSimConnectPlugin/src/MSFSSimConnectPlugin.cpp b/src/Plugins/Connect/MSFSSimConnectPlugin/src/MSFSSimConnectPlugin.cpp index 49374c53d..3ba05ce6b 100644 --- a/src/Plugins/Connect/MSFSSimConnectPlugin/src/MSFSSimConnectPlugin.cpp +++ b/src/Plugins/Connect/MSFSSimConnectPlugin/src/MSFSSimConnectPlugin.cpp @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -784,19 +785,24 @@ void MSFSSimConnectPlugin::resetEventStates(ResetReason reason) noexcept DWORD MSFSSimConnectPlugin::getConfigurationIndex() const noexcept { DWORD configurationIndex {0}; - switch (d->pluginSettings.getConnectionType()) { - case MSFSSimConnectSettings::ConnectionType::Pipe: - configurationIndex = 0; - break; - case MSFSSimConnectSettings::ConnectionType::IPv4: - configurationIndex = 1; - break; - case MSFSSimConnectSettings::ConnectionType::IPv6: - configurationIndex = 2; - break; - default: - configurationIndex = 0; - break; + if (File::hasSimConnectConfiguration()) { + switch (d->pluginSettings.getConnectionType()) { + case MSFSSimConnectSettings::ConnectionType::Pipe: + configurationIndex = 0; + break; + case MSFSSimConnectSettings::ConnectionType::IPv4: + configurationIndex = 1; + break; + case MSFSSimConnectSettings::ConnectionType::IPv6: + configurationIndex = 2; + break; + default: + configurationIndex = 0; + break; + } + } else { + // No SimConnect.cfg in application directory -> enforce local connection + configurationIndex = ::SIMCONNECT_OPEN_CONFIGINDEX_LOCAL; } return configurationIndex; } diff --git a/src/Plugins/Connect/MSFSSimConnectPlugin/src/MSFSSimConnectSettings.cpp b/src/Plugins/Connect/MSFSSimConnectPlugin/src/MSFSSimConnectSettings.cpp index 635455fc8..0ff2498d9 100644 --- a/src/Plugins/Connect/MSFSSimConnectPlugin/src/MSFSSimConnectSettings.cpp +++ b/src/Plugins/Connect/MSFSSimConnectPlugin/src/MSFSSimConnectSettings.cpp @@ -30,6 +30,7 @@ #endif #include +#include #include #include #include "MSFSSimConnectSettings.h" @@ -45,7 +46,11 @@ namespace struct MSFSSimConnectSettingsPrivate { - MSFSSimConnectSettings::ConnectionType connectionType {::DefaultConnectionType}; + MSFSSimConnectSettingsPrivate() + : connectionType {File::hasSimConnectConfiguration() ? ::DefaultConnectionType : MSFSSimConnectSettings::ConnectionType::Pipe} + {} + + MSFSSimConnectSettings::ConnectionType connectionType; }; // PUBLIC