Skip to content

Commit

Permalink
Check for existence of SimConnect.cfg
Browse files Browse the repository at this point in the history
- 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)
  • Loading branch information
till213 committed May 25, 2024
1 parent d6a25fa commit ca45e9e
Show file tree
Hide file tree
Showing 19 changed files with 105 additions and 64 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,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

Expand Down
1 change: 1 addition & 0 deletions RELEASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
- Ensure that the resources files are in the package folder:
* Resources/geoids/egm2008-5.wld, egm2008-5.pgm. egm2008-5.pgm.aux.xml
* Resources/migr/Locations.csv
* SimConnect.cfg

### Smoke Test
- Launch `SkyDolly.exe`
Expand Down
7 changes: 7 additions & 0 deletions src/Kernel/include/Kernel/File.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion src/Kernel/include/Kernel/Version.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
1 change: 0 additions & 1 deletion src/Kernel/src/Convert.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@

#include <GeographicLib/Geoid.hpp>

#include "Settings.h"
#include "File.h"
#include "Convert.h"

Expand Down
18 changes: 13 additions & 5 deletions src/Kernel/src/File.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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();
}

Expand All @@ -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));
}
}
}
Expand All @@ -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);
}
10 changes: 5 additions & 5 deletions src/Kernel/src/Version.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
6 changes: 3 additions & 3 deletions src/PluginManager/src/Location/BasicLocationExportDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@
struct BasicLocationExportDialogPrivate
{
BasicLocationExportDialogPrivate(QString fileExtension, QString theFileFilter, LocationExportPluginBaseSettings &thePluginSettings) noexcept
: fileExtension(std::move(fileExtension)),
fileFilter(std::move(theFileFilter)),
pluginSettings(thePluginSettings)
: fileExtension {std::move(fileExtension)},
fileFilter {std::move(theFileFilter)},
pluginSettings {thePluginSettings}
{}

QString fileExtension;
Expand Down
4 changes: 2 additions & 2 deletions src/PluginManager/src/Location/BasicLocationImportDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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> aircraftTypeService {std::make_unique<AircraftTypeService>()};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ struct LocationExportPluginBasePrivate
// PUBLIC

LocationExportPluginBase::LocationExportPluginBase() noexcept
: d(std::make_unique<LocationExportPluginBasePrivate>())
: d {std::make_unique<LocationExportPluginBasePrivate>()}
{}

LocationExportPluginBase::~LocationExportPluginBase() = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ struct LocationExportPluginBaseSettingsPrivate
// PUBLIC

LocationExportPluginBaseSettings::LocationExportPluginBaseSettings() noexcept
: d(std::make_unique<LocationExportPluginBaseSettingsPrivate>())
: d {std::make_unique<LocationExportPluginBaseSettingsPrivate>()}
{}

LocationExportPluginBaseSettings::~LocationExportPluginBaseSettings() = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ struct LocationImportPluginBasePrivate
// PUBLIC

LocationImportPluginBase::LocationImportPluginBase() noexcept
: d(std::make_unique<LocationImportPluginBasePrivate>())
: d {std::make_unique<LocationImportPluginBasePrivate>()}
{
std::unique_ptr<LocationService> locationService {std::make_unique<LocationService>()};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
* DEALINGS IN THE SOFTWARE.
*/
#include <memory>
#include <string_view>

#include <Kernel/Enum.h>
#include <Kernel/Settings.h>
Expand All @@ -50,7 +49,7 @@ struct LocationImportPluginBaseSettingsPrivate
// PUBLIC

LocationImportPluginBaseSettings::LocationImportPluginBaseSettings() noexcept
: d(std::make_unique<LocationImportPluginBaseSettingsPrivate>())
: d {std::make_unique<LocationImportPluginBaseSettingsPrivate>()}
{}

LocationImportPluginBaseSettings::~LocationImportPluginBaseSettings() = default;
Expand Down
4 changes: 2 additions & 2 deletions src/PluginManager/src/ModuleManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -206,8 +206,8 @@ void ModuleManager::initModules() noexcept
Graph graph;
std::unordered_map<QUuid, ModuleInfo, QUuidHasher> 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);
Expand Down
30 changes: 15 additions & 15 deletions src/PluginManager/src/PluginManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,9 @@ void PluginManager::initialise(QWidget *parentWidget) noexcept
std::vector<PluginManager::Handle> PluginManager::initialiseFlightImportPlugins() noexcept
{
std::vector<PluginManager::Handle> 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;
Expand All @@ -117,9 +117,9 @@ std::vector<PluginManager::Handle> PluginManager::initialiseFlightImportPlugins(
std::vector<PluginManager::Handle> PluginManager::initialiseFlightExportPlugins() noexcept
{
std::vector<PluginManager::Handle> 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;
Expand All @@ -128,9 +128,9 @@ std::vector<PluginManager::Handle> PluginManager::initialiseFlightExportPlugins(
std::vector<PluginManager::Handle> PluginManager::initialiseLocationImportPlugins() noexcept
{
std::vector<PluginManager::Handle> 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;
Expand All @@ -139,9 +139,9 @@ std::vector<PluginManager::Handle> PluginManager::initialiseLocationImportPlugin
std::vector<PluginManager::Handle> PluginManager::initialiseLocationExportPlugins() noexcept
{
std::vector<PluginManager::Handle> 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;
Expand Down Expand Up @@ -268,11 +268,11 @@ std::vector<PluginManager::Handle> PluginManager::enumeratePlugins(const QString
const QJsonObject metaData = loader.metaData();
if (!metaData.isEmpty()) {
const QJsonObject pluginMetadata{
metaData.value(QString::fromLatin1("MetaData")).toObject()};
metaData.value("MetaData").toObject()};
const QUuid uuid{
pluginMetadata.value(QString::fromLatin1(::PluginUuidKey)).toString()};
pluginMetadata.value(::PluginUuidKey).toString()};
const QString pluginName{
pluginMetadata.value(QString::fromLatin1(::PluginNameKey)).toString()};
pluginMetadata.value(::PluginNameKey).toString()};
const Handle handle {uuid, pluginName};
pluginHandles.push_back(handle);
pluginRegistry[uuid] = pluginPath;
Expand Down
8 changes: 4 additions & 4 deletions src/PluginManager/src/SkyConnectManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ void SkyConnectManager::destroyInstance() noexcept

const std::vector<SkyConnectManager::Handle> &SkyConnectManager::initialisePlugins() noexcept
{
initialisePluginRegistry(QString::fromLatin1(::ConnectPluginDirectoryName));
initialisePluginRegistry(::ConnectPluginDirectoryName);
initialisePlugin();
return availablePlugins();
}
Expand Down Expand Up @@ -511,9 +511,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};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
#include <QDebug>
#endif

#include <Kernel/File.h>
#include <Kernel/Version.h>
#include <PluginManager/Connect/ConnectPluginBaseSettings.h>
#include <PluginManager/SkyConnectManager.h>
#include "MSFSSimConnectSettings.h"
Expand Down Expand Up @@ -122,34 +124,42 @@ 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();
}

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("<a href=\"") % url % "\">SimConnect.cfg</a>";
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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
#include <Kernel/Const.h>
#include <Kernel/SampleRate.h>
#include <Kernel/Enum.h>
#include <Kernel/File.h>
#include <Kernel/Settings.h>
#include <Model/Flight.h>
#include <Model/Aircraft.h>
Expand Down Expand Up @@ -828,19 +829,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;
}
Expand Down
Loading

0 comments on commit ca45e9e

Please sign in to comment.