From 82467da45b2c06f302d016689b69fbee115b119b Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 18 Nov 2018 19:40:34 +0100 Subject: [PATCH] Ref T436, correct file name handling (UNC) and validate FSX position --- src/blackmisc/simulation/aircraftmodel.cpp | 9 +++++++-- src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp | 7 ++++--- src/plugins/simulator/fsxcommon/simulatorfsxcommon.h | 6 ++++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/blackmisc/simulation/aircraftmodel.cpp b/src/blackmisc/simulation/aircraftmodel.cpp index 7c7f65483..73ed8277a 100644 --- a/src/blackmisc/simulation/aircraftmodel.cpp +++ b/src/blackmisc/simulation/aircraftmodel.cpp @@ -140,13 +140,18 @@ namespace BlackMisc { CStatusMessageList msgs; const ModelType t = this->getModelType(); - if (t == TypeOwnSimulatorModel || t == TypeManuallySet || t == TypeDatabaseEntry) + if (t == TypeOwnSimulatorModel || t == TypeManuallySet || t == TypeDatabaseEntry || t == TypeModelMatching || t == TypeModelMatchingDefaultModel) { if (!this->hasExistingCorrespondingFile()) { const CStatusMessage m = CStatusMessage(this).validationError("File '%1' not readable") << this->getFileName(); msgs.push_back(m); } + else + { + const CStatusMessage m = CStatusMessage(this).validationInfo("File '%1' existing") << this->getFileName(); + msgs.push_back(m); + } } else { @@ -682,7 +687,7 @@ namespace BlackMisc bool CAircraftModel::hasExistingCorrespondingFile() const { if (!this->hasFileName()) { return false; } - const QFileInfo fi(this->getFileName()); + const QFileInfo fi(CFileUtils::fixWindowsUncPath(this->getFileName())); return (fi.exists() && fi.isReadable()); } diff --git a/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp b/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp index f8c9a3847..180ce70df 100644 --- a/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp +++ b/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp @@ -222,10 +222,11 @@ namespace BlackMisc // unfortunately some files are malformed which could end up in wrong data ok = false; - QFile file(fileName); // includes path + const QString fnFixed = CFileUtils::fixWindowsUncPath(fileName); + QFile file(fnFixed); // includes path if (!file.open(QFile::ReadOnly | QFile::Text)) { - const CStatusMessage m = CStatusMessage(getLogCategories()).warning("Unable to read file '%1'") << fileName; + const CStatusMessage m = CStatusMessage(getLogCategories()).warning("Unable to read file '%1'") << fnFixed; msgs.push_back(m); return CAircraftCfgEntriesList(); } @@ -352,7 +353,7 @@ namespace BlackMisc file.close(); // store all entries - const QFileInfo fileInfo(fileName); + const QFileInfo fileInfo(fnFixed); QDateTime fileTimestamp(fileInfo.lastModified()); if (!fileTimestamp.isValid() || fileInfo.created() > fileTimestamp) { diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h index 9529a0364..15f2df694 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h @@ -306,6 +306,12 @@ namespace BlackSimPlugin //! Format conversion static SIMCONNECT_DATA_LATLONALT coordinateToFsxLatLonAlt(const BlackMisc::Geo::ICoordinateGeodetic &coordinate); + //! Valid FSX/P3D position + static bool isValidFsxPosition(const SIMCONNECT_DATA_INITPOSITION &fsxPos); + + //! Valid 180degrees value + static bool isValid180Deg(double deg) { return deg > -180.0 && deg <= 180.0; } + static constexpr qint64 AutoTraceOffsetMs = 10 * 1000; //!< how long do we trace? HANDLE m_hSimConnect = nullptr; //!< handle to SimConnect object DispatchProc m_dispatchProc = &CSimulatorFsxCommon::SimConnectProc; //!< called function for dispatch, can be overriden by specialized P3D function