diff --git a/resources/share/matchingscript/networkDemo.js b/resources/share/matchingscript/networkDemo.js index 1fd70d0e0..71de6e6aa 100644 --- a/resources/share/matchingscript/networkDemo.js +++ b/resources/share/matchingscript/networkDemo.js @@ -4,7 +4,13 @@ function() { // reverseModel // returnObject returnObject.aircraftIcao = "C172"; - return "Changed ICAO to C172"; + returnObject.modified = true; + returnObject.logMessage = "Changed to C172"; + + return returnObject; + + // string return is possible + // return "Changed ICAO to C172"; } ) diff --git a/src/blackcore/aircraftmatcher.cpp b/src/blackcore/aircraftmatcher.cpp index 668f966de..5ec8d6f29 100644 --- a/src/blackcore/aircraftmatcher.cpp +++ b/src/blackcore/aircraftmatcher.cpp @@ -311,20 +311,10 @@ namespace BlackCore static const QString logFile = CFileUtils::appendFilePaths(CDirectoryUtils::logDirectory(), "logMatchingSriptEntry.log"); QJSEngine engine; // engine.installExtensions(QJSEngine::ConsoleExtension); - QJSValue jsMetaObject = engine.newQMetaObject(&MSSwiftValues::staticMetaObject); + static const QJSValue jsMetaObject = engine.newQMetaObject(&MSSwiftValues::staticMetaObject); engine.globalObject().setProperty("SwiftValues", jsMetaObject); - MSSwiftValues networkObject( - callsign.asString(), - inAircraftIcao.getDesignator(), inAircraftIcao.getDbKey(), - inAirlineIcao.getDesignator(), inAirlineIcao.getDbKey(), - inLivery.getCombinedCode(), inLivery.getDbKey() - ); - MSSwiftValues reverseModel( - inModel.getCallsign().asString(), - inModel.getAircraftIcaoCode().getDesignator(), inModel.getAircraftIcaoCode().getDbKey(), - inModel.getAirlineIcaoCode().getDesignator(), inModel.getAirlineIcaoCode().getDbKey(), - inModel.getLivery().getCombinedCode(), inModel.getLivery().getDbKey() - ); + MSSwiftValues networkObject(callsign.asString(), inAircraftIcao, inLivery); + MSSwiftValues reverseModel(callsign.asString(), inAircraftIcao, inLivery); MSSwiftValues returnObject; QJSValue jsNetworkObject = engine.newQObject(&networkObject); @@ -334,6 +324,7 @@ namespace BlackCore QJSValue jsReturnObject = engine.newQObject(&returnObject); engine.globalObject().setProperty("returnObject", jsNetworkObject); + QString logMessage; QJSValue ms = engine.evaluate(js, logFile); ms = ms.call(); if (ms.isError()) @@ -344,22 +335,33 @@ namespace BlackCore } else { - QString logMessage; if (ms.isQObject()) { - // reverseModel = ms.toQ + const MSSwiftValues *reverseModelProcessed = qobject_cast(ms.toQObject()); + logMessage = reverseModelProcessed->getLogMessage(); + if (!reverseModelProcessed->isModified()) { break; } + + // changed + if (reverseModel.hasChangedAircraftIcao(inAircraftIcao)) + { + CAircraftIcaoCode icao; + if (log) { CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Matching script: '%1' -> '%2'").arg(inAircraftIcao.getDesignatorDbKey(), icao.getDesignatorDbKey())); } + } + + if (reverseModel.hasChangedAirlineIcao(inAirlineIcao)) + { + + } } else if (ms.isString()) { logMessage = ms.toString(); } - - if (!logMessage.isEmpty()) - { - CLogMessage(getLogCategories()).info(u"Matching script: '%1'") << logMessage; - } } + // log message + if (log && !logMessage.isEmpty()) { CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Matching script: '%1'").arg(logMessage)); } + // end this break; } diff --git a/src/blackgui/components/modelmatchercomponent.cpp b/src/blackgui/components/modelmatchercomponent.cpp index c8feea193..451da4215 100644 --- a/src/blackgui/components/modelmatchercomponent.cpp +++ b/src/blackgui/components/modelmatchercomponent.cpp @@ -21,6 +21,7 @@ #include "blackgui/guiutility.h" #include "blackcore/webdataservices.h" #include "blackmisc/simulation/data/modelcaches.h" +#include "blackmisc/simulation/matchingutils.h" #include "blackmisc/aviation/aircrafticaocode.h" #include "blackmisc/aviation/airlineicaocode.h" #include "blackmisc/aviation/callsign.h" @@ -175,9 +176,23 @@ namespace BlackGui ui->te_Results->clear(); CStatusMessageList msgs; m_matcher.setDefaultModel(CModelMatcherComponent::defaultModel()); + + const CAircraftMatcherSetup setup = m_matcher.getSetup(); const CSimulatedAircraft remoteAircraft(createAircraft()); const QString livery(ui->comp_LiverySelector->getRawCombinedCode()); const CAircraftModel matched = CAircraftMatcher::reverseLookupModel(remoteAircraft.getModel(), livery, &msgs); + + // Script + CAircraftModel matchedWithScript = matched; + if (setup.doRunMsNetworkEntryScript()) + { + matchedWithScript = CAircraftMatcher::networkEntryScript(matched, setup, &msgs); + } + else + { + CMatchingUtils::addLogDetailsToList(&msgs, remoteAircraft.getCallsign(), QStringLiteral("No entry script used")); + } + ui->te_Results->setText(matched.toQString(true)); ui->tvp_ResultMessages->updateContainer(msgs); } diff --git a/src/blackmisc/simulation/matchingscript.cpp b/src/blackmisc/simulation/matchingscript.cpp index cf5dfb6f3..19e546f6d 100644 --- a/src/blackmisc/simulation/matchingscript.cpp +++ b/src/blackmisc/simulation/matchingscript.cpp @@ -8,10 +8,42 @@ #include "matchingscript.h" +using namespace BlackMisc::Aviation; + namespace BlackMisc { namespace Simulation { + MSSwiftValues::MSSwiftValues( + const QString &cs, + const CAircraftIcaoCode aircraftIcao, + const CAirlineIcaoCode airlineIcao, + const QString &livery, int liveryId) : + MSSwiftValues(cs, + aircraftIcao.getDesignator(), aircraftIcao.getDbKey(), + airlineIcao.getDesignator(), airlineIcao.getVDesignator(), airlineIcao.getDbKey(), + livery, liveryId) + { } + + MSSwiftValues::MSSwiftValues( + const QString &cs, + const CAircraftIcaoCode aircraftIcao, + const CLivery livery) : + MSSwiftValues(cs, + aircraftIcao, + livery.getAirlineIcaoCode(), + livery.getCombinedCode(), livery.getDbKey()) + { } + + MSSwiftValues::MSSwiftValues(const MSSwiftValues &sv) : + MSSwiftValues(sv.m_callsign, + sv.getAircraftIcao(), sv.getDbAircraftIcaoId(), + sv.getAirlineIcao(), sv.getVirtualAirlineIcao(), sv.getDbAirlineIcaoId(), + sv.getLivery(), sv.getDbLiveryId(), + sv.m_logMessage, + sv.isModified(), sv.isRerun()) + { } + void MSSwiftValues::setCallsign(const QString &callsign) { if (m_callsign == callsign) { return; } @@ -54,6 +86,13 @@ namespace BlackMisc emit this->airlineIcaoChanged(); } + void MSSwiftValues::setVirtualAirlineIcao(const QString &virtualAirlineIcao) + { + if (virtualAirlineIcao == m_vAirlineIcao) { return; } + m_vAirlineIcao = virtualAirlineIcao; + emit this->virtualAirlineIcaoChanged(); + } + void MSSwiftValues::setLivery(const QString &livery) { if (livery == m_livery) { return; } @@ -82,5 +121,20 @@ namespace BlackMisc emit this->rerunChanged(); } + bool MSSwiftValues::hasChangedAircraftIcao(const Aviation::CAircraftIcaoCode &aircraftIcao) const + { + if (aircraftIcao.hasValidDbKey() && aircraftIcao.getDbKey() != m_dbAircraftIcaoId) { return true; } + if (aircraftIcao.hasDesignator() && aircraftIcao.getDesignator() != m_aircraftIcao) { return true; } + return true; + } + + bool MSSwiftValues::hasChangedAirlineIcao(const Aviation::CAirlineIcaoCode &airlineIcao) const + { + if (airlineIcao.hasValidDbKey() && airlineIcao.getDbKey() != m_dbAirlineIcaoId) { return true; } + if (airlineIcao.hasValidDesignator() && airlineIcao.getDesignator() != m_airlineIcao) { return true; } + if (airlineIcao.hasValidDesignator() && airlineIcao.getVDesignator() != m_vAirlineIcao) { return true; } + return true; + } + } // namespace } // namespace diff --git a/src/blackmisc/simulation/matchingscript.h b/src/blackmisc/simulation/matchingscript.h index 1c22cee2f..0bd11691a 100644 --- a/src/blackmisc/simulation/matchingscript.h +++ b/src/blackmisc/simulation/matchingscript.h @@ -11,6 +11,9 @@ #ifndef BLACKMISC_SIMULATION_MATCHINGSCRIPT_H #define BLACKMISC_SIMULATION_MATCHINGSCRIPT_H +#include "blackmisc/aviation/aircrafticaocode.h" +#include "blackmisc/aviation/livery.h" +#include "blackmisc/aviation/airlineicaocode.h" #include "blackmisc/blackmiscexport.h" #include @@ -26,16 +29,17 @@ namespace BlackMisc Q_OBJECT //! MSNetworkValues properties @{ - Q_PROPERTY(QString callsign READ getCallsign WRITE setCallsign NOTIFY callsignChanged) - Q_PROPERTY(int dbAircraftIcaoId READ getDbAircraftIcaoId WRITE setDbAircraftIcaoId NOTIFY dbAircraftIcaoIdChanged) - Q_PROPERTY(int dbAirlineIcaoId READ getDbAirlineIcaoId WRITE setDbAirlineIcaoId NOTIFY dbAirlineIcaoIdChanged) - Q_PROPERTY(int dbLiveryId READ getDbLiveryId WRITE setDbLiveryId NOTIFY dbLiveryIdChanged) - Q_PROPERTY(QString aircraftIcao READ getAircraftIcao WRITE setAircraftIcao NOTIFY aircraftIcaoChanged) - Q_PROPERTY(QString airlineIcao READ getAirlineIcao WRITE setAirlineIcao NOTIFY airlineIcaoChanged) - Q_PROPERTY(QString livery READ getLivery WRITE setLivery NOTIFY liveryChanged) - Q_PROPERTY(QString logMessage READ getLogMessage WRITE setLogMessage NOTIFY logMessageChanged) - Q_PROPERTY(bool modified READ isModified WRITE setModified NOTIFY modifiedChanged) - Q_PROPERTY(bool rerun READ isRerun WRITE setRerun NOTIFY rerunChanged) + Q_PROPERTY(QString callsign READ getCallsign WRITE setCallsign NOTIFY callsignChanged) + Q_PROPERTY(int dbAircraftIcaoId READ getDbAircraftIcaoId WRITE setDbAircraftIcaoId NOTIFY dbAircraftIcaoIdChanged) + Q_PROPERTY(int dbAirlineIcaoId READ getDbAirlineIcaoId WRITE setDbAirlineIcaoId NOTIFY dbAirlineIcaoIdChanged) + Q_PROPERTY(int dbLiveryId READ getDbLiveryId WRITE setDbLiveryId NOTIFY dbLiveryIdChanged) + Q_PROPERTY(QString aircraftIcao READ getAircraftIcao WRITE setAircraftIcao NOTIFY aircraftIcaoChanged) + 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 logMessage READ getLogMessage WRITE setLogMessage NOTIFY logMessageChanged) + Q_PROPERTY(bool modified READ isModified WRITE setModified NOTIFY modifiedChanged) + Q_PROPERTY(bool rerun READ isRerun WRITE setRerun NOTIFY rerunChanged) //! @} public: @@ -45,15 +49,33 @@ namespace BlackMisc //! Ctor Q_INVOKABLE MSSwiftValues(const QString &cs, const QString &aircraftIcao, int idAircraftIcao, - const QString &airlineIcao, int idAirlineIcao, - const QString &livery, int liveryId) : + 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_aircraftIcao(aircraftIcao.trimmed().toUpper()), - m_airlineIcao(airlineIcao.trimmed().toUpper()), + m_airlineIcao(airlineIcao.trimmed().toUpper()), m_vAirlineIcao(virtualAirlineIcao), m_livery(livery.trimmed().toUpper()), - m_dbAircraftIcaoId(idAircraftIcao), m_dbAirlineIcaoId(idAirlineIcao), m_dbLiveryId(liveryId) + m_dbAircraftIcaoId(idAircraftIcao), m_dbAirlineIcaoId(idAirlineIcao), m_dbLiveryId(liveryId), + m_logMessage(logMsg), + m_modified(modified), m_rerun(rerun) {} + //! Ctor + MSSwiftValues(const QString &cs, + const BlackMisc::Aviation::CAircraftIcaoCode aircraftIcao, + const BlackMisc::Aviation::CAirlineIcaoCode airlineIcao, + const QString &livery, int liveryId); + + //! Ctor + MSSwiftValues(const QString &cs, + const BlackMisc::Aviation::CAircraftIcaoCode aircraftIcao, + const BlackMisc::Aviation::CLivery livery); + + //! Ctor + MSSwiftValues(const MSSwiftValues &sv); + //! Get callsign const QString &getCallsign() const { return m_callsign; } @@ -64,20 +86,22 @@ namespace BlackMisc bool isFoundDbAircraftIcao() const { return m_dbAircraftIcaoId >= 0; } bool isFoundDbAirlineIcao() const { return m_dbAirlineIcaoId >= 0; } bool isFoundDbLivery() const { return m_dbLiveryId >= 0; } - int getDbAircraftIcaoId() const { return m_dbAircraftIcaoId; } - int getDbAirlineIcaoId() const { return m_dbAirlineIcaoId; } - int getDbLiveryId() const { return m_dbLiveryId; } + int getDbAircraftIcaoId() const { return m_dbAircraftIcaoId; } + int getDbAirlineIcaoId() const { return m_dbAirlineIcaoId; } + int getDbLiveryId() const { return m_dbLiveryId; } void setDbAircraftIcaoId(int id); void setDbAirlineIcaoId(int id); void setDbLiveryId(int id); //! @} //! Livery, airline, aircraft @{ - const QString &getAircraftIcao() const { return m_aircraftIcao; } - const QString &getAirlineIcao() const { return m_airlineIcao; } - const QString &getLivery() const { return m_livery; } + const QString &getAircraftIcao() const { return m_aircraftIcao; } + const QString &getAirlineIcao() const { return m_airlineIcao; } + const QString &getVirtualAirlineIcao() const { return m_vAirlineIcao; } + const QString &getLivery() const { return m_livery; } void setAircraftIcao(const QString &aircraftIcao); void setAirlineIcao(const QString &airlineIcao); + void setVirtualAirlineIcao(const QString &virtualAirlineIcao); void setLivery(const QString &livery); //! @} @@ -96,6 +120,11 @@ namespace BlackMisc void setRerun(bool rerun); //! @} + //! Changed values @{ + bool hasChangedAircraftIcao(const BlackMisc::Aviation::CAircraftIcaoCode &aircraftIcao) const; + bool hasChangedAirlineIcao(const BlackMisc::Aviation::CAirlineIcaoCode &airlineIcao) const; + //! } + signals: //! Callsign changed void callsignChanged(); @@ -103,6 +132,7 @@ namespace BlackMisc //! Livery, airline, aircraft changed @{ void aircraftIcaoChanged(); void airlineIcaoChanged(); + void virtualAirlineIcaoChanged(); void liveryChanged(); //! @} @@ -125,11 +155,12 @@ namespace BlackMisc QString m_callsign; QString m_aircraftIcao; QString m_airlineIcao; + QString m_vAirlineIcao; QString m_livery; - QString m_logMessage; int m_dbAircraftIcaoId = -1; int m_dbAirlineIcaoId = -1; int m_dbLiveryId = -1; + QString m_logMessage; bool m_modified = false; bool m_rerun = false; };