From 950af0c588c9526c26cdcbaccb1f141f228feb6d Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 18 Jun 2019 01:17:55 +0200 Subject: [PATCH] Ref T658, improved matching script * properties * functions * log improved * fixes --- src/blackcore/aircraftmatcher.cpp | 22 ++++++++------- src/blackmisc/rgbcolor.cpp | 4 +-- src/blackmisc/simulation/matchingscript.cpp | 30 ++++++++++++++++++--- src/blackmisc/simulation/matchingscript.h | 24 +++++++++++++---- 4 files changed, 60 insertions(+), 20 deletions(-) diff --git a/src/blackcore/aircraftmatcher.cpp b/src/blackcore/aircraftmatcher.cpp index cd2af5e75..425d16541 100644 --- a/src/blackcore/aircraftmatcher.cpp +++ b/src/blackcore/aircraftmatcher.cpp @@ -350,6 +350,7 @@ namespace BlackCore QString logMessage; const CCallsign callsign = inModel.getCallsign(); + if (js.isEmpty() && log) { CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Matching script is empty")); } while (!js.isEmpty() && sApp && !sApp->isShuttingDown()) { rv.runScript = true; @@ -363,16 +364,19 @@ namespace BlackCore if (log) { CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Matching script (%1): '%2'").arg(msToString(ms), lf)); + CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Matching script input model (%1): '%2'").arg(inModel.toQString(true))); } QJSEngine engine; // engine.installExtensions(QJSEngine::ConsoleExtension); - static const QJSValue jsInMetaObject = engine.newQMetaObject(&MSInOutValues::staticMetaObject); - engine.globalObject().setProperty("SwiftInObject", jsInMetaObject); - static const QJSValue jsSetMetaObject = engine.newQMetaObject(&MSModelSet::staticMetaObject); - engine.globalObject().setProperty("SwiftModelSet", jsSetMetaObject); - static const QJSValue jsWebServicesMetaObject = engine.newQMetaObject(&MSWebServices::staticMetaObject); - engine.globalObject().setProperty("SwiftWebServices", jsWebServicesMetaObject); + + // Meta objects to create new JS objects, here causing JSValue can't be reassigned to another engine. + // static const QJSValue jsInOutMetaObject = engine.newQMetaObject(&MSInOutValues::staticMetaObject); + // engine.globalObject().setProperty("SwiftInOutObject", jsInOutMetaObject); // JS: new SwiftInOutObject(); + // static const QJSValue jsSetMetaObject = engine.newQMetaObject(&MSModelSet::staticMetaObject); + // engine.globalObject().setProperty("SwiftModelSet", jsSetMetaObject); // JS: new SwiftModelSet + // static const QJSValue jsWebServicesMetaObject = engine.newQMetaObject(&MSWebServices::staticMetaObject); + // engine.globalObject().setProperty("SwiftWebServices", jsWebServicesMetaObject); // JS: new SwiftWebServices // init models and set MSInOutValues inObject(inModel); @@ -429,7 +433,7 @@ namespace BlackCore if (model.hasValidDbKey()) { // found full model from DB - rv.model = model; + rv.model = model; rv.modified = true; break; } @@ -495,7 +499,7 @@ namespace BlackCore } // log message - if (log && !logMessage.isEmpty()) { CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Matching script: '%1'").arg(logMessage)); } + if (log && !logMessage.isEmpty()) { CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Matching script log: '%1'").arg(logMessage)); } // end return rv; @@ -536,7 +540,7 @@ namespace BlackCore const DBTripleIds ids = CAircraftModel::parseNetworkLiveryString(networkLiveryInfo); if (log) { CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Livery string with ids: '%1'").arg(ids.toQString())); } - if (setup.isReverseLookupSwiftLiveryIds()) + if (!setup.isReverseLookupSwiftLiveryIds()) { if (log) { CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Ignoring livery ids '%1', because of setup").arg(ids.toQString())); } } diff --git a/src/blackmisc/rgbcolor.cpp b/src/blackmisc/rgbcolor.cpp index fa129a9ad..62eccec3a 100644 --- a/src/blackmisc/rgbcolor.cpp +++ b/src/blackmisc/rgbcolor.cpp @@ -146,7 +146,7 @@ namespace BlackMisc { const QString c(color.trimmed()); QColor q(c); - if (setQColor(q)) { return; } + if (this->setQColor(q)) { return; } if (c.startsWith("#")) { this->setInvalid(); return; } q.setNamedColor("#" + c); this->setQColor(q); @@ -241,7 +241,7 @@ namespace BlackMisc double CRgbColor::colorRange() const { if (!this->isValid()) { return 255; } - if (m_b < 256 && m_g < 256 && m_r < 256) { return 255; } + if (m_b < 256 && m_g < 256 && m_r < 256) { return 255; } if (m_b < 4096 && m_g < 4096 && m_r < 4096) { return 4095; } return 65535; } diff --git a/src/blackmisc/simulation/matchingscript.cpp b/src/blackmisc/simulation/matchingscript.cpp index 22f0bf496..a02d5cc0d 100644 --- a/src/blackmisc/simulation/matchingscript.cpp +++ b/src/blackmisc/simulation/matchingscript.cpp @@ -20,7 +20,7 @@ namespace BlackMisc const CAirlineIcaoCode airlineIcao, const QString &livery, int liveryId) : MSInOutValues(cs.asString(), cs.getStringAsSet(), cs.getFlightNumber(), - aircraftIcao.getDesignator(), aircraftIcao.getCombinedType(), aircraftIcao.getDbKey(), + aircraftIcao.getDesignator(), aircraftIcao.getFamily(), aircraftIcao.getCombinedType(), aircraftIcao.getDbKey(), airlineIcao.getDesignator(), airlineIcao.getVDesignator(), airlineIcao.getDbKey(), livery, liveryId) { } @@ -40,7 +40,7 @@ namespace BlackMisc MSInOutValues::MSInOutValues(const MSInOutValues &sv) : MSInOutValues(sv.m_callsign, sv.m_callsignAsSet, sv.m_flightNumber, - sv.getAircraftIcao(), sv.getCombinedType(), sv.getDbAircraftIcaoId(), + sv.getAircraftIcao(), sv.getCombinedType(), sv.getAircraftFamily(), sv.getDbAircraftIcaoId(), sv.getAirlineIcao(), sv.getVirtualAirlineIcao(), sv.getDbAirlineIcaoId(), sv.getLivery(), sv.getDbLiveryId(), sv.m_logMessage, @@ -148,6 +148,7 @@ namespace BlackMisc void MSInOutValues::evaluateChanges(const CAircraftIcaoCode &aircraft, const CAirlineIcaoCode &airline) { m_modifiedAircraftDesignator = aircraft.getDesignator() != m_aircraftIcao; + m_modifiedAircraftFamily = aircraft.getFamily() != m_aircraftFamily; if (airline.isVirtualAirline()) { m_modifiedAirlineDesignator = airline.getVDesignator() != m_vAirlineIcao; @@ -246,9 +247,30 @@ namespace BlackMisc QString MSModelSet::findCombinedTypeWithClosestColorLivery(const QString &combinedType, const QString &rgbColor) const { - if (rgbColor.isEmpty()) { return {}; } + if (combinedType.isEmpty() || rgbColor.isEmpty()) { return QString(); } CAircraftModelList models = m_modelSet.findByCombinedTypeWithColorLivery(combinedType); - if (models.isEmpty()) { return {}; } + if (models.isEmpty()) { return QString(); } + const CRgbColor color(rgbColor); + models = models.findClosestFuselageColorDistance(color); + return models.isEmpty() ? QString() : models.front().getModelString(); + } + + QString MSModelSet::findClosestCombinedTypeWithClosestColorLivery(const QString &combinedType, const QString &rgbColor) const + { + QString ms = this->findCombinedTypeWithClosestColorLivery(combinedType, rgbColor); + if (!ms.isEmpty()) { return ms; } + if (combinedType.size() != 3) { return ms; } + QString wildCard(combinedType); + if (wildCard.size() != 3) { return QString(); } + wildCard[1] = '*'; + return this->findCombinedTypeWithClosestColorLivery(wildCard, rgbColor); + } + + QString MSModelSet::findAircraftFamilyWithClosestColorLivery(const QString &family, const QString &rgbColor) const + { + if (family.isEmpty() || rgbColor.isEmpty()) { return QString(); } + CAircraftModelList models = m_modelSet.findByFamilyWithColorLivery(family); + if (models.isEmpty()) { return QString(); } const CRgbColor color(rgbColor); models = models.findClosestFuselageColorDistance(color); return models.isEmpty() ? QString() : models.front().getModelString(); diff --git a/src/blackmisc/simulation/matchingscript.h b/src/blackmisc/simulation/matchingscript.h index f426962ed..84c570a2f 100644 --- a/src/blackmisc/simulation/matchingscript.h +++ b/src/blackmisc/simulation/matchingscript.h @@ -38,18 +38,21 @@ namespace BlackMisc Q_PROPERTY(int dbLiveryId READ getDbLiveryId WRITE setDbLiveryId NOTIFY dbLiveryIdChanged) Q_PROPERTY(int dbModelId READ getDbModelId WRITE setDbModelId NOTIFY dbModelIdChanged) Q_PROPERTY(QString aircraftIcao READ getAircraftIcao WRITE setAircraftIcao NOTIFY aircraftIcaoChanged) + Q_PROPERTY(QString aircraftFamily READ getAircraftFamily) Q_PROPERTY(QString airlineIcao READ getAirlineIcao WRITE setAirlineIcao NOTIFY airlineIcaoChanged) Q_PROPERTY(QString virtualAirlineIcao READ getVirtualAirlineIcao WRITE setVirtualAirlineIcao NOTIFY virtualAirlineIcaoChanged) Q_PROPERTY(QString livery READ getLivery WRITE setLivery NOTIFY liveryChanged) Q_PROPERTY(QString modelString READ getModelString WRITE setModelString NOTIFY modelStringChanged) Q_PROPERTY(QString combinedType READ getCombinedType WRITE setCombinedType NOTIFY combinedTypeChanged) Q_PROPERTY(QString logMessage READ getLogMessage WRITE setLogMessage NOTIFY logMessageChanged) + Q_PROPERTY(bool hasAircraftFamily READ hasAircraftFamily) Q_PROPERTY(bool modified READ isModified WRITE setModified NOTIFY modifiedChanged) Q_PROPERTY(bool rerun READ isRerun WRITE setRerun NOTIFY rerunChanged) // ----- status values ------- Q_PROPERTY(bool hasAirlineIcao READ hasAirlineIcao) Q_PROPERTY(bool hasAircraftIcao READ hasAircraftIcao) Q_PROPERTY(bool hasModifiedAircraftIcaoDesignator READ hasModifiedAircraftIcaoDesignator) + Q_PROPERTY(bool hasModifiedAircraftFamily READ hasModifiedAircraftFamily) Q_PROPERTY(bool hasModifiedAirlineIcaoDesignator READ hasModifiedAirlineIcaoDesignator) Q_PROPERTY(bool hasUnmodifiedDesignators READ hasUnmodifiedDesignators) //! @} @@ -60,13 +63,13 @@ namespace BlackMisc //! Ctor Q_INVOKABLE MSInOutValues(const QString &cs, const QString &csAsSet, const QString &flightNumber, - const QString &aircraftIcao, const QString &combinedType, int idAircraftIcao, + const QString &aircraftIcao, const QString &aircraftFamily, const QString &combinedType, int idAircraftIcao, const QString &airlineIcao, const QString &virtualAirlineIcao, int idAirlineIcao, const QString &livery, int liveryId, const QString &logMsg = {}, bool modified = false, bool rerun = false) : - m_callsign(cs.trimmed().toUpper()), m_callsignAsSet(csAsSet), m_flightNumber(flightNumber), - m_aircraftIcao(aircraftIcao.trimmed().toUpper()), m_combinedType(combinedType.trimmed().toUpper()), + m_callsign(cs.trimmed().toUpper()), m_callsignAsSet(csAsSet), m_flightNumber(flightNumber), + m_aircraftIcao(aircraftIcao.trimmed().toUpper()), m_aircraftFamily(aircraftFamily.trimmed().toUpper()), m_combinedType(combinedType.trimmed().toUpper()), m_airlineIcao(airlineIcao.trimmed().toUpper()), m_vAirlineIcao(virtualAirlineIcao), m_livery(livery.trimmed().toUpper()), m_dbAircraftIcaoId(idAircraftIcao), m_dbAirlineIcaoId(idAirlineIcao), m_dbLiveryId(liveryId), @@ -115,6 +118,7 @@ namespace BlackMisc //! Livery, airline, aircraft, model string @{ const QString &getAircraftIcao() const { return m_aircraftIcao; } + const QString &getAircraftFamily() const { return m_aircraftFamily; } const QString &getAirlineIcao() const { return m_airlineIcao; } const QString &getVirtualAirlineIcao() const { return m_vAirlineIcao; } const QString &getLivery() const { return m_livery; } @@ -126,8 +130,9 @@ namespace BlackMisc void setLivery(const QString &livery); void setModelString(const QString &modelString); void setCombinedType(const QString &type); - bool hasAircraftIcao() const { return !m_aircraftIcao.isEmpty(); } - bool hasAirlineIcao() const { return !m_airlineIcao.isEmpty(); } + bool hasAircraftIcao() const { return !m_aircraftIcao.isEmpty(); } + bool hasAirlineIcao() const { return !m_airlineIcao.isEmpty(); } + bool hasAircraftFamily() const { return !m_aircraftFamily.isEmpty(); } //! @} //! Log. message @{ @@ -151,6 +156,7 @@ namespace BlackMisc //! Changed values @{ bool hasModifiedAircraftIcaoDesignator() const { return m_modifiedAircraftDesignator; } bool hasModifiedAirlineIcaoDesignator() const { return m_modifiedAirlineDesignator; } + bool hasModifiedAircraftFamily() const { return m_modifiedAircraftFamily; } bool hasUnmodifiedDesignators() const { return !this->hasModifiedAirlineIcaoDesignator() && !this->hasModifiedAircraftIcaoDesignator(); } bool hasChangedAircraftIcao(const BlackMisc::Aviation::CAircraftIcaoCode &aircraftIcao) const; bool hasChangedAircraftIcaoId(const BlackMisc::Aviation::CAircraftIcaoCode &aircraftIcao) const; @@ -196,6 +202,7 @@ namespace BlackMisc QString m_callsignAsSet; QString m_flightNumber; QString m_aircraftIcao; + QString m_aircraftFamily; QString m_combinedType; QString m_airlineIcao; QString m_vAirlineIcao; @@ -207,6 +214,7 @@ namespace BlackMisc int m_dbModelId = -1; QString m_logMessage; bool m_modifiedAircraftDesignator = false; + bool m_modifiedAircraftFamily = false; bool m_modifiedAirlineDesignator = false; bool m_modified = false; bool m_rerun = false; @@ -269,6 +277,12 @@ namespace BlackMisc //! Model string of model with closest color distance Q_INVOKABLE QString findCombinedTypeWithClosestColorLivery(const QString &combinedType, const QString &rgbColor) const; + //! Model string of model with closest color distance + Q_INVOKABLE QString findClosestCombinedTypeWithClosestColorLivery(const QString &combinedType, const QString &rgbColor) const; + + //! Model string of model with closest color distance + Q_INVOKABLE QString findAircraftFamilyWithClosestColorLivery(const QString &family, const QString &rgbColor) const; + // ------- NOT EXPOSED TO JAVASCRIPT ------- //! Ctor