Skip to content

Commit f034d31

Browse files
committed
feat: Implementation of the msfs2024 model mapping is ready for testing
1 parent 6700f66 commit f034d31

File tree

12 files changed

+136
-37
lines changed

12 files changed

+136
-37
lines changed

src/core/aircraftmatcher.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1710,6 +1710,14 @@ namespace swift::core
17101710
const QString &livery)
17111711
{
17121712
Q_UNUSED(livery)
1713+
// TODO TZ remove after testing
1714+
CLogMessage(this).info(u"CAircraftMatcher::onIcaoCodesReceived CHECK:"
1715+
u"callsign %1 "
1716+
u"aircraftIcao %2 "
1717+
u"airlineIcao %3 "
1718+
u"livery %4 ")
1719+
<< callsign << aircraftIcao << airlineIcao << livery;
1720+
17131721
Q_ASSERT_X(sApp && sApp->hasWebDataServices(), Q_FUNC_INFO, "Missing web data services");
17141722
if (m_modelSet.isEmpty()) { return; } // ignore empty sets to not create silly stats
17151723
if (sessionId.isEmpty()) { return; }

src/core/airspacemonitor.cpp

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -773,6 +773,14 @@ namespace swift::core
773773
const QString &aircraftIcaoDesignator,
774774
const QString &combinedAircraftType, const QString &modelString)
775775
{
776+
// TODO TZ remove when testing is done
777+
CLogMessage(this).info(u"CAirspaceMonitor::onCustomFSInnPacketReceived CHECK:"
778+
u"callsign %1 "
779+
u"airlineIcaoDesignator %2 "
780+
u"aircraftIcaoDesignator %3 "
781+
u"modelString %4 ")
782+
<< callsign << airlineIcaoDesignator << aircraftIcaoDesignator << modelString;
783+
776784
// it can happen this is called before any queries
777785
// ES sends FsInn packets for callsigns such as ACCGER1, which are hard to distinguish
778786
// 1) checking if they are already in the list checks again ATC position which is safe
@@ -834,9 +842,9 @@ namespace swift::core
834842
// in order not to override swift livery string data, we ignore those
835843
if (!usedModelString.isEmpty())
836844
{
837-
this->addOrUpdateAircraftInRange(callsign, aircraftIcaoDesignator, airlineIcaoDesignator, QString(),
838-
usedModelString, CAircraftModel::TypeFSInnData,
839-
pReverseLookupMessages);
845+
const CSimulatedAircraft aircraft = this->addOrUpdateAircraftInRange(
846+
callsign, aircraftIcaoDesignator, airlineIcaoDesignator, QString(), usedModelString,
847+
CAircraftModel::TypeFSInnData, pReverseLookupMessages);
840848
this->addReverseLookupMessages(callsign, reverseLookupMessages);
841849
}
842850
this->sendReadyForModelMatching(callsign, ReceivedFsInnPacket); // from FSInn
@@ -846,6 +854,14 @@ namespace swift::core
846854
void CAirspaceMonitor::onIcaoCodesReceived(const CCallsign &callsign, const QString &aircraftIcaoDesignator,
847855
const QString &airlineIcaoDesignator, const QString &livery)
848856
{
857+
// TODO TZ remove when testing is done
858+
CLogMessage(this).info(u"CAirspaceMonitor::onIcaoCodesReceived CHECK:"
859+
u"callsign %1 "
860+
u"aircraftIcaoDesignator %2 "
861+
u"airlineIcaoDesignator %3 "
862+
u"livery %4 ")
863+
<< callsign << aircraftIcaoDesignator << airlineIcaoDesignator << livery;
864+
849865
Q_ASSERT_X(CThreadUtils::isInThisThread(this), Q_FUNC_INFO, "not in main thread");
850866
if (!this->isConnectedAndNotShuttingDown()) { return; }
851867
if (CBuildConfig::isLocalDeveloperDebugBuild())
@@ -865,13 +881,16 @@ namespace swift::core
865881
CAirspaceMonitor::getLogCategories());
866882

867883
const CClient client = this->getClientOrDefaultForCallsign(callsign);
868-
this->addOrUpdateAircraftInRange(callsign, aircraftIcaoDesignator, airlineIcaoDesignator, livery,
869-
client.getQueriedModelString(), CAircraftModel::TypeQueriedFromNetwork,
870-
pReverseLookupMessages);
871-
this->addReverseLookupMessages(callsign, reverseLookupMessages);
872-
this->sendReadyForModelMatching(callsign, ReceivedIcaoCodes); // ICAO codes received
884+
const CSimulatedAircraft aircraft = this->addOrUpdateAircraftInRange(
885+
callsign, aircraftIcaoDesignator, airlineIcaoDesignator, livery, client.getQueriedModelString(),
886+
CAircraftModel::TypeQueriedFromNetwork, pReverseLookupMessages);
887+
if (aircraft.getModel().getModelType() != CAircraftModel::TypeManuallySet)
888+
{
889+
this->addReverseLookupMessages(callsign, reverseLookupMessages);
890+
this->sendReadyForModelMatching(callsign, ReceivedIcaoCodes); // ICAO codes received
873891

874-
emit this->requestedNewAircraft(callsign, aircraftIcaoDesignator, airlineIcaoDesignator, livery);
892+
emit this->requestedNewAircraft(callsign, aircraftIcaoDesignator, airlineIcaoDesignator, livery);
893+
}
875894
}
876895

877896
CAircraftModel CAirspaceMonitor::reverseLookupModelWithFlightplanData(
@@ -1178,9 +1197,26 @@ namespace swift::core
11781197
const CSimulatedAircraft aircraft = this->getAircraftInRangeForCallsign(callsign);
11791198
if (aircraft.hasValidCallsign())
11801199
{
1200+
// TODO TZ at this point we have a poblem if the model has no DB key yet (msfs2024 liveries)
11811201
// only if we do not have a DB model yet
1182-
if (!aircraft.getModel().hasValidDbKey())
1202+
// int testType = aircraft.getModelType();1
1203+
CLogMessage(this).info(u"CAirspaceMonitor::addOrUpdateAircraftInRange CHECK:"
1204+
u"aircraft.getModelType %1 "
1205+
u"callsign %2 "
1206+
u"aircraftIcao %3 "
1207+
u"incomming modelType %4 ")
1208+
<< aircraft.getModelType() << callsign.toQString() << aircraftIcao << modelType;
1209+
1210+
if (!aircraft.getModel().hasValidDbKey() && aircraft.getModelType() != CAircraftModel::TypeManuallySet)
11831211
{
1212+
1213+
CLogMessage(this).warning(u"CAirspaceMonitor::reverseLookupModelWithFlightplanData "
1214+
u"aircraft.getModelType %1 "
1215+
u"callsign %2 "
1216+
u"aircraftIcao %3 "
1217+
u"incomming modelType %4 ")
1218+
<< aircraft.getModelType() << callsign.toQString() << aircraftIcao << modelType;
1219+
11841220
CAircraftModel model = this->reverseLookupModelWithFlightplanData(callsign, aircraftIcao, airlineIcao,
11851221
livery, modelString, modelType, log);
11861222
model.updateMissingParts(aircraft.getModel());

src/core/context/contextnetworkimpl.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,6 +1142,11 @@ namespace swift::core::context
11421142
if (c)
11431143
{
11441144
const CSimulatedAircraft aircraft(this->getAircraftInRangeForCallsign(callsign));
1145+
// TODO TZ
1146+
CLogMessage(this).info(u"CContextNetwork::updateAircraftModel model.getModelString %1 model.getModelLivery "
1147+
u"%2 model.getModelType %3 aircraft.getModelType '%4'")
1148+
<< model.getModelString() << model.getModelLivery() << model.getModelType() << aircraft.getModelType();
1149+
11451150
Q_ASSERT_X(!aircraft.getCallsign().isEmpty(), Q_FUNC_INFO, "missing callsign");
11461151
emit this->changedRemoteAircraftModel(aircraft, originator); // update aircraft model
11471152
}

src/core/simulator.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -981,6 +981,15 @@ namespace swift::core
981981
bool ISimulator::changeRemoteAircraftEnabled(const CSimulatedAircraft &aircraft)
982982
{
983983
if (this->isShuttingDown()) { return false; }
984+
985+
// TODO TZ remove after testing
986+
CLogMessage(this).info(u"ISimulator::changeRemoteAircraftEnabled CHECK:"
987+
u"aircraft.getModelType %1 "
988+
u"aircraft.getModelString %2 "
989+
u"aircraft.getLiveryString %3 ")
990+
<< aircraft.getModelType() << aircraft.getModelString() << aircraft.getLiveryString();
991+
;
992+
984993
return aircraft.isEnabled() ? this->physicallyAddRemoteAircraft(aircraft) :
985994
this->physicallyRemoveRemoteAircraft(aircraft.getCallsign());
986995
}

src/gui/components/logincomponent.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@
4141
#include "misc/logmessage.h"
4242
#include "misc/network/connectionstatus.h"
4343
#include "misc/network/entityflags.h"
44+
// TODO TZ remove afte testing
45+
#include "misc/network/server.h"
46+
// TODO TZ end remove afte testing
4447
#include "misc/network/serverlist.h"
4548
#include "misc/simulation/aircraftmodel.h"
4649
#include "misc/simulation/simulatedaircraft.h"
@@ -298,8 +301,14 @@ namespace swift::gui::components
298301
{
299302
if (!m_updatePilotOnServerChanges) { return; }
300303
const bool vatsim = this->isVatsimNetworkTabSelected();
301-
const CUser user = vatsim ? this->getCurrentVatsimServer().getUser() : server.getUser();
302-
ui->form_Pilot->setUser(user);
304+
// TODO TZ remove after testing
305+
// const CUser user = vatsim ? this->getCurrentVatsimServer().getUser() : server.getUser();
306+
const CUser user =
307+
server.getServerType() != CServer::FSDServer ? this->getCurrentVatsimServer().getUser() : server.getUser();
308+
if ((vatsim && server.getServerType() != CServer::FSDServer) ||
309+
(!vatsim && server.getServerType() == CServer::FSDServer))
310+
// End remove after testing
311+
ui->form_Pilot->setUser(user);
303312
}
304313

305314
void CLoginComponent::onSimulatorStatusChanged(int status)

src/gui/components/mappingcomponent.cpp

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ namespace swift::gui::components
8484
&CMappingComponent::onModelsUpdateRequested);
8585
connect(ui->tvp_AircraftModels, &CAircraftModelView::modelDataChanged, this,
8686
&CMappingComponent::onRowCountChanged);
87+
connect(ui->tvp_AircraftModels, &CAircraftModelView::clicked, this, &CMappingComponent::onModelSelectedInView);
8788
connect(ui->tvp_AircraftModels, &CAircraftModelView::requestTempDisableModelsForMatching, this,
8889
&CMappingComponent::onTempDisableModelsForMatchingRequested);
8990

@@ -258,6 +259,12 @@ namespace swift::gui::components
258259
ui->completer_ModelStrings->setModel(simAircraft.getModel());
259260
}
260261

262+
void CMappingComponent::onModelSelectedInView(const QModelIndex &index)
263+
{
264+
const CAircraftModel model = ui->tvp_AircraftModels->at(index);
265+
ui->completer_ModelStrings->setModel(model);
266+
}
267+
261268
CCallsign CMappingComponent::validateRenderedCallsign()
262269
{
263270
const QString cs = ui->le_Callsign->text().trimmed();
@@ -326,7 +333,10 @@ namespace swift::gui::components
326333
}
327334
const CCallsign callsign(this->validateRenderedCallsign());
328335
if (callsign.isEmpty()) { return; }
336+
337+
// Because of msfs2024, the model string contains the combination of title and livery.
329338
const QString modelString = ui->completer_ModelStrings->getModelString();
339+
330340
if (modelString.isEmpty())
331341
{
332342
this->showOverlayHTMLMessage(CStatusMessage(this).validationError(u"Missing model for mapping"),
@@ -359,6 +369,13 @@ namespace swift::gui::components
359369
if (aircraftFromBackend.getModelString() != modelString)
360370
{
361371
const CAircraftModelList models = sGui->getIContextSimulator()->getModelSetModelsStartingWith(modelString);
372+
373+
// TODO TZ DEBUG only for testing
374+
const CStatusMessage msg = CStatusMessage(this).validationInfo(u"Found: %1 models for %2")
375+
<< models.size() << modelString;
376+
this->showOverlayMessage(msg, OverlayMessageMs);
377+
// END testing
378+
362379
if (models.isEmpty())
363380
{
364381
const CStatusMessage msg = CStatusMessage(this).validationError(u"No model for title: '%1'")
@@ -368,6 +385,7 @@ namespace swift::gui::components
368385
}
369386

370387
CAircraftModel model(models.front());
388+
// found more than one model?
371389
if (models.size() > 1)
372390
{
373391
if (models.containsModelString(modelString))
@@ -384,8 +402,10 @@ namespace swift::gui::components
384402
model.setModelType(CAircraftModel::TypeManuallySet);
385403
CLogMessage(this).info(u"Requesting changes for '%1'") << callsign.asString();
386404

387-
// enable in any case
405+
// rendering-flag enable in any case
388406
sGui->getIContextNetwork()->updateAircraftEnabled(aircraftFromBackend.getCallsign(), true);
407+
408+
// trigger model change
389409
changed =
390410
sGui->getIContextNetwork()->updateAircraftModel(aircraftFromBackend.getCallsign(), model, identifier());
391411
}

src/gui/components/mappingcomponent.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ namespace swift::gui
113113
//! Aircraft selected (in view)
114114
void onAircraftSelectedInView(const QModelIndex &index);
115115

116+
//! Model selected (in view)
117+
void onModelSelectedInView(const QModelIndex &index);
118+
116119
//! Save changed aircraft
117120
void onSaveAircraft();
118121

src/misc/simulation/simulatedaircraft.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ namespace swift::misc
412412
//! Get model Livery MSFS2024
413413
const QString &getLiveryString() const { return m_models[CurrentModel].getModelLivery(); }
414414

415-
//! Get short model string (without livery)
415+
//! Get short model string (without livery msfs2024)
416416
const QString getShortModelString() const { return m_models[CurrentModel].getShortModelString(); }
417417

418418
//! Set model string
@@ -492,6 +492,9 @@ namespace swift::misc
492492
//! \copydoc swift::misc::mixin::Icon::toIcon()
493493
CIcons::IconIndex toIcon() const { return m_callsign.toIcon(); }
494494

495+
//! Get model type
496+
int getModelType() const { return m_models[CurrentModel].getModelType(); }
497+
495498
private:
496499
static constexpr int CurrentModel = 0; //!< m_models
497500
static constexpr int NetworkModel = 1; //!< m_models

src/plugins/simulator/msfs2024/simconnectdatadefinitionmsfs2024.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ namespace swift::simplugin::msfs2024common
8686
struct DataDefinitionOwnAircraftModel
8787
{
8888
char title[256]; //!< Aircraft model string
89-
char livery[256]; //!< Aircraft model string
89+
char livery[256]; //!< Aircraft livery string msfs2024
9090
};
9191

9292
//! Data struct of aircraft model data
@@ -107,6 +107,7 @@ namespace swift::simplugin::msfs2024common
107107
char atcAirlineNumber[64]; //!< airline number
108108
char atcFlightNumber[8]; //!< flight number (168)
109109
char title[256]; //!< Aircraft model string
110+
char livery[256]; //!< Aircraft livery string msfs2024
110111
};
111112

112113
//! Data struct of aircraft data (setable)

0 commit comments

Comments
 (0)