T658, matching script for network entry

This commit is contained in:
Klaus Basan
2019-05-24 14:47:10 +02:00
committed by Mat Sutcliffe
parent fd281a464c
commit cec768b9a4
5 changed files with 150 additions and 42 deletions

View File

@@ -4,7 +4,13 @@ function() {
// reverseModel // reverseModel
// returnObject // returnObject
returnObject.aircraftIcao = "C172"; 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";
} }
) )

View File

@@ -311,20 +311,10 @@ namespace BlackCore
static const QString logFile = CFileUtils::appendFilePaths(CDirectoryUtils::logDirectory(), "logMatchingSriptEntry.log"); static const QString logFile = CFileUtils::appendFilePaths(CDirectoryUtils::logDirectory(), "logMatchingSriptEntry.log");
QJSEngine engine; QJSEngine engine;
// engine.installExtensions(QJSEngine::ConsoleExtension); // engine.installExtensions(QJSEngine::ConsoleExtension);
QJSValue jsMetaObject = engine.newQMetaObject(&MSSwiftValues::staticMetaObject); static const QJSValue jsMetaObject = engine.newQMetaObject(&MSSwiftValues::staticMetaObject);
engine.globalObject().setProperty("SwiftValues", jsMetaObject); engine.globalObject().setProperty("SwiftValues", jsMetaObject);
MSSwiftValues networkObject( MSSwiftValues networkObject(callsign.asString(), inAircraftIcao, inLivery);
callsign.asString(), MSSwiftValues reverseModel(callsign.asString(), inAircraftIcao, inLivery);
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 returnObject; MSSwiftValues returnObject;
QJSValue jsNetworkObject = engine.newQObject(&networkObject); QJSValue jsNetworkObject = engine.newQObject(&networkObject);
@@ -334,6 +324,7 @@ namespace BlackCore
QJSValue jsReturnObject = engine.newQObject(&returnObject); QJSValue jsReturnObject = engine.newQObject(&returnObject);
engine.globalObject().setProperty("returnObject", jsNetworkObject); engine.globalObject().setProperty("returnObject", jsNetworkObject);
QString logMessage;
QJSValue ms = engine.evaluate(js, logFile); QJSValue ms = engine.evaluate(js, logFile);
ms = ms.call(); ms = ms.call();
if (ms.isError()) if (ms.isError())
@@ -344,22 +335,33 @@ namespace BlackCore
} }
else else
{ {
QString logMessage;
if (ms.isQObject()) if (ms.isQObject())
{ {
// reverseModel = ms.toQ const MSSwiftValues *reverseModelProcessed = qobject_cast<const MSSwiftValues *>(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()) else if (ms.isString())
{ {
logMessage = ms.toString(); 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 // end this
break; break;
} }

View File

@@ -21,6 +21,7 @@
#include "blackgui/guiutility.h" #include "blackgui/guiutility.h"
#include "blackcore/webdataservices.h" #include "blackcore/webdataservices.h"
#include "blackmisc/simulation/data/modelcaches.h" #include "blackmisc/simulation/data/modelcaches.h"
#include "blackmisc/simulation/matchingutils.h"
#include "blackmisc/aviation/aircrafticaocode.h" #include "blackmisc/aviation/aircrafticaocode.h"
#include "blackmisc/aviation/airlineicaocode.h" #include "blackmisc/aviation/airlineicaocode.h"
#include "blackmisc/aviation/callsign.h" #include "blackmisc/aviation/callsign.h"
@@ -175,9 +176,23 @@ namespace BlackGui
ui->te_Results->clear(); ui->te_Results->clear();
CStatusMessageList msgs; CStatusMessageList msgs;
m_matcher.setDefaultModel(CModelMatcherComponent::defaultModel()); m_matcher.setDefaultModel(CModelMatcherComponent::defaultModel());
const CAircraftMatcherSetup setup = m_matcher.getSetup();
const CSimulatedAircraft remoteAircraft(createAircraft()); const CSimulatedAircraft remoteAircraft(createAircraft());
const QString livery(ui->comp_LiverySelector->getRawCombinedCode()); const QString livery(ui->comp_LiverySelector->getRawCombinedCode());
const CAircraftModel matched = CAircraftMatcher::reverseLookupModel(remoteAircraft.getModel(), livery, &msgs); 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->te_Results->setText(matched.toQString(true));
ui->tvp_ResultMessages->updateContainer(msgs); ui->tvp_ResultMessages->updateContainer(msgs);
} }

View File

@@ -8,10 +8,42 @@
#include "matchingscript.h" #include "matchingscript.h"
using namespace BlackMisc::Aviation;
namespace BlackMisc namespace BlackMisc
{ {
namespace Simulation 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) void MSSwiftValues::setCallsign(const QString &callsign)
{ {
if (m_callsign == callsign) { return; } if (m_callsign == callsign) { return; }
@@ -54,6 +86,13 @@ namespace BlackMisc
emit this->airlineIcaoChanged(); 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) void MSSwiftValues::setLivery(const QString &livery)
{ {
if (livery == m_livery) { return; } if (livery == m_livery) { return; }
@@ -82,5 +121,20 @@ namespace BlackMisc
emit this->rerunChanged(); 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
} // namespace } // namespace

View File

@@ -11,6 +11,9 @@
#ifndef BLACKMISC_SIMULATION_MATCHINGSCRIPT_H #ifndef BLACKMISC_SIMULATION_MATCHINGSCRIPT_H
#define 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 "blackmisc/blackmiscexport.h"
#include <QString> #include <QString>
@@ -26,16 +29,17 @@ namespace BlackMisc
Q_OBJECT Q_OBJECT
//! MSNetworkValues properties @{ //! MSNetworkValues properties @{
Q_PROPERTY(QString callsign READ getCallsign WRITE setCallsign NOTIFY callsignChanged) Q_PROPERTY(QString callsign READ getCallsign WRITE setCallsign NOTIFY callsignChanged)
Q_PROPERTY(int dbAircraftIcaoId READ getDbAircraftIcaoId WRITE setDbAircraftIcaoId NOTIFY dbAircraftIcaoIdChanged) Q_PROPERTY(int dbAircraftIcaoId READ getDbAircraftIcaoId WRITE setDbAircraftIcaoId NOTIFY dbAircraftIcaoIdChanged)
Q_PROPERTY(int dbAirlineIcaoId READ getDbAirlineIcaoId WRITE setDbAirlineIcaoId NOTIFY dbAirlineIcaoIdChanged) Q_PROPERTY(int dbAirlineIcaoId READ getDbAirlineIcaoId WRITE setDbAirlineIcaoId NOTIFY dbAirlineIcaoIdChanged)
Q_PROPERTY(int dbLiveryId READ getDbLiveryId WRITE setDbLiveryId NOTIFY dbLiveryIdChanged) Q_PROPERTY(int dbLiveryId READ getDbLiveryId WRITE setDbLiveryId NOTIFY dbLiveryIdChanged)
Q_PROPERTY(QString aircraftIcao READ getAircraftIcao WRITE setAircraftIcao NOTIFY aircraftIcaoChanged) Q_PROPERTY(QString aircraftIcao READ getAircraftIcao WRITE setAircraftIcao NOTIFY aircraftIcaoChanged)
Q_PROPERTY(QString airlineIcao READ getAirlineIcao WRITE setAirlineIcao NOTIFY airlineIcaoChanged) Q_PROPERTY(QString airlineIcao READ getAirlineIcao WRITE setAirlineIcao NOTIFY airlineIcaoChanged)
Q_PROPERTY(QString livery READ getLivery WRITE setLivery NOTIFY liveryChanged) Q_PROPERTY(QString virtualAirlineIcao READ getVirtualAirlineIcao WRITE setVirtualAirlineIcao NOTIFY virtualAirlineIcaoChanged)
Q_PROPERTY(QString logMessage READ getLogMessage WRITE setLogMessage NOTIFY logMessageChanged) Q_PROPERTY(QString livery READ getLivery WRITE setLivery NOTIFY liveryChanged)
Q_PROPERTY(bool modified READ isModified WRITE setModified NOTIFY modifiedChanged) Q_PROPERTY(QString logMessage READ getLogMessage WRITE setLogMessage NOTIFY logMessageChanged)
Q_PROPERTY(bool rerun READ isRerun WRITE setRerun NOTIFY rerunChanged) Q_PROPERTY(bool modified READ isModified WRITE setModified NOTIFY modifiedChanged)
Q_PROPERTY(bool rerun READ isRerun WRITE setRerun NOTIFY rerunChanged)
//! @} //! @}
public: public:
@@ -45,15 +49,33 @@ namespace BlackMisc
//! Ctor //! Ctor
Q_INVOKABLE MSSwiftValues(const QString &cs, Q_INVOKABLE MSSwiftValues(const QString &cs,
const QString &aircraftIcao, int idAircraftIcao, const QString &aircraftIcao, int idAircraftIcao,
const QString &airlineIcao, int idAirlineIcao, const QString &airlineIcao, const QString &virtualAirlineIcao, int idAirlineIcao,
const QString &livery, int liveryId) : const QString &livery, int liveryId,
const QString &logMsg = {},
bool modified = false, bool rerun = false) :
m_callsign(cs.trimmed().toUpper()), m_callsign(cs.trimmed().toUpper()),
m_aircraftIcao(aircraftIcao.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_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 //! Get callsign
const QString &getCallsign() const { return m_callsign; } const QString &getCallsign() const { return m_callsign; }
@@ -64,20 +86,22 @@ namespace BlackMisc
bool isFoundDbAircraftIcao() const { return m_dbAircraftIcaoId >= 0; } bool isFoundDbAircraftIcao() const { return m_dbAircraftIcaoId >= 0; }
bool isFoundDbAirlineIcao() const { return m_dbAirlineIcaoId >= 0; } bool isFoundDbAirlineIcao() const { return m_dbAirlineIcaoId >= 0; }
bool isFoundDbLivery() const { return m_dbLiveryId >= 0; } bool isFoundDbLivery() const { return m_dbLiveryId >= 0; }
int getDbAircraftIcaoId() const { return m_dbAircraftIcaoId; } int getDbAircraftIcaoId() const { return m_dbAircraftIcaoId; }
int getDbAirlineIcaoId() const { return m_dbAirlineIcaoId; } int getDbAirlineIcaoId() const { return m_dbAirlineIcaoId; }
int getDbLiveryId() const { return m_dbLiveryId; } int getDbLiveryId() const { return m_dbLiveryId; }
void setDbAircraftIcaoId(int id); void setDbAircraftIcaoId(int id);
void setDbAirlineIcaoId(int id); void setDbAirlineIcaoId(int id);
void setDbLiveryId(int id); void setDbLiveryId(int id);
//! @} //! @}
//! Livery, airline, aircraft @{ //! Livery, airline, aircraft @{
const QString &getAircraftIcao() const { return m_aircraftIcao; } const QString &getAircraftIcao() const { return m_aircraftIcao; }
const QString &getAirlineIcao() const { return m_airlineIcao; } const QString &getAirlineIcao() const { return m_airlineIcao; }
const QString &getLivery() const { return m_livery; } const QString &getVirtualAirlineIcao() const { return m_vAirlineIcao; }
const QString &getLivery() const { return m_livery; }
void setAircraftIcao(const QString &aircraftIcao); void setAircraftIcao(const QString &aircraftIcao);
void setAirlineIcao(const QString &airlineIcao); void setAirlineIcao(const QString &airlineIcao);
void setVirtualAirlineIcao(const QString &virtualAirlineIcao);
void setLivery(const QString &livery); void setLivery(const QString &livery);
//! @} //! @}
@@ -96,6 +120,11 @@ namespace BlackMisc
void setRerun(bool rerun); void setRerun(bool rerun);
//! @} //! @}
//! Changed values @{
bool hasChangedAircraftIcao(const BlackMisc::Aviation::CAircraftIcaoCode &aircraftIcao) const;
bool hasChangedAirlineIcao(const BlackMisc::Aviation::CAirlineIcaoCode &airlineIcao) const;
//! }
signals: signals:
//! Callsign changed //! Callsign changed
void callsignChanged(); void callsignChanged();
@@ -103,6 +132,7 @@ namespace BlackMisc
//! Livery, airline, aircraft changed @{ //! Livery, airline, aircraft changed @{
void aircraftIcaoChanged(); void aircraftIcaoChanged();
void airlineIcaoChanged(); void airlineIcaoChanged();
void virtualAirlineIcaoChanged();
void liveryChanged(); void liveryChanged();
//! @} //! @}
@@ -125,11 +155,12 @@ namespace BlackMisc
QString m_callsign; QString m_callsign;
QString m_aircraftIcao; QString m_aircraftIcao;
QString m_airlineIcao; QString m_airlineIcao;
QString m_vAirlineIcao;
QString m_livery; QString m_livery;
QString m_logMessage;
int m_dbAircraftIcaoId = -1; int m_dbAircraftIcaoId = -1;
int m_dbAirlineIcaoId = -1; int m_dbAirlineIcaoId = -1;
int m_dbLiveryId = -1; int m_dbLiveryId = -1;
QString m_logMessage;
bool m_modified = false; bool m_modified = false;
bool m_rerun = false; bool m_rerun = false;
}; };