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
// 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";
}
)

View File

@@ -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<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())
{
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;
}

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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 <QString>
@@ -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;
};