mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-30 11:55:35 +08:00
refs #791, further improve reverse lookup
* utility function if web data are already available * moved setOwnAircraftModel as reverseLookupAndUpdateOwnAircraftModel to CSimulatorCommon * reverseLookupAndUpdateOwnAircraftModel also handles async lookup when data are not yet available * removed context ps_allSwiftWebDataRead reverse lookup, done in CSimulatorCommon now
This commit is contained in:
@@ -324,11 +324,8 @@ namespace BlackCore
|
|||||||
|
|
||||||
void CContextOwnAircraft::ps_allSwiftWebDataRead()
|
void CContextOwnAircraft::ps_allSwiftWebDataRead()
|
||||||
{
|
{
|
||||||
const CAircraftModel model = this->getOwnAircraftModel();
|
// we should already receive a reverse lookup model
|
||||||
if (model.isLoadedFromDb()) { return; }
|
// from the driver
|
||||||
|
|
||||||
// a reverse lookup of the model could make sense
|
|
||||||
this->updateOwnModel(model); // force reverse lookup
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CContextOwnAircraft::setAudioVoiceRoomOverrideUrls(const QString &voiceRoom1Url, const QString &voiceRoom2Url)
|
void CContextOwnAircraft::setAudioVoiceRoomOverrideUrls(const QString &voiceRoom1Url, const QString &voiceRoom2Url)
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ namespace BlackCore
|
|||||||
Q_ASSERT_X(sApp->hasWebDataServices(), Q_FUNC_INFO, "No web services");
|
Q_ASSERT_X(sApp->hasWebDataServices(), Q_FUNC_INFO, "No web services");
|
||||||
|
|
||||||
if (modified) { *modified = false; }
|
if (modified) { *modified = false; }
|
||||||
|
if (!hasDbAircraftData()) { return model; }
|
||||||
if (!model.hasModelString()) { return model; }
|
if (!model.hasModelString()) { return model; }
|
||||||
if (!force && model.hasValidDbKey()) { return model; }
|
if (!force && model.hasValidDbKey()) { return model; }
|
||||||
const int distributorOrder = model.getDistributorOrder(); // later restore that order
|
const int distributorOrder = model.getDistributorOrder(); // later restore that order
|
||||||
@@ -213,5 +214,10 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
return stashModels;
|
return stashModels;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CDatabaseUtils::hasDbAircraftData()
|
||||||
|
{
|
||||||
|
return sApp && sApp->hasWebDataServices() && sApp->getWebDataServices()->hasDbAircraftData();
|
||||||
|
}
|
||||||
} // ns
|
} // ns
|
||||||
} // ns
|
} // ns
|
||||||
|
|||||||
@@ -50,6 +50,9 @@ namespace BlackCore
|
|||||||
|
|
||||||
//! Create stash models if the DB models miss that simulator
|
//! Create stash models if the DB models miss that simulator
|
||||||
static BlackMisc::Simulation::CAircraftModelList updateSimulatorForFsFamily(const BlackMisc::Simulation::CAircraftModelList &ownModels, int maxToStash = -1, BlackCore::IProgressIndicator *progressIndicator = nullptr, bool processEvents = true);
|
static BlackMisc::Simulation::CAircraftModelList updateSimulatorForFsFamily(const BlackMisc::Simulation::CAircraftModelList &ownModels, int maxToStash = -1, BlackCore::IProgressIndicator *progressIndicator = nullptr, bool processEvents = true);
|
||||||
|
|
||||||
|
//! Convenience function
|
||||||
|
static bool hasDbAircraftData();
|
||||||
};
|
};
|
||||||
} // ns
|
} // ns
|
||||||
} // ns
|
} // ns
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
|
|
||||||
#include "blackcore/simulatorcommon.h"
|
#include "blackcore/simulatorcommon.h"
|
||||||
#include "blackcore/db/databaseutils.h"
|
#include "blackcore/db/databaseutils.h"
|
||||||
|
#include "blackcore/db/databaseutils.h"
|
||||||
|
#include "blackcore/webdataservices.h"
|
||||||
#include "blackmisc/aviation/aircraftsituation.h"
|
#include "blackmisc/aviation/aircraftsituation.h"
|
||||||
#include "blackmisc/aviation/callsign.h"
|
#include "blackmisc/aviation/callsign.h"
|
||||||
#include "blackmisc/interpolator.h"
|
#include "blackmisc/interpolator.h"
|
||||||
@@ -31,6 +33,7 @@ using namespace BlackMisc::Simulation;
|
|||||||
using namespace BlackMisc::PhysicalQuantities;
|
using namespace BlackMisc::PhysicalQuantities;
|
||||||
using namespace BlackMisc::Simulation;
|
using namespace BlackMisc::Simulation;
|
||||||
using namespace BlackMisc::Weather;
|
using namespace BlackMisc::Weather;
|
||||||
|
using namespace BlackCore;
|
||||||
using namespace BlackCore::Db;
|
using namespace BlackCore::Db;
|
||||||
|
|
||||||
namespace BlackCore
|
namespace BlackCore
|
||||||
@@ -63,6 +66,12 @@ namespace BlackCore
|
|||||||
connect(&m_oneSecondTimer, &QTimer::timeout, this, &CSimulatorCommon::ps_oneSecondTimer);
|
connect(&m_oneSecondTimer, &QTimer::timeout, this, &CSimulatorCommon::ps_oneSecondTimer);
|
||||||
this->m_oneSecondTimer.start(1000);
|
this->m_oneSecondTimer.start(1000);
|
||||||
|
|
||||||
|
// swift data
|
||||||
|
if (sApp && sApp->getWebDataServices())
|
||||||
|
{
|
||||||
|
connect(sApp->getWebDataServices(), &CWebDataServices::allSwiftDbDataRead, this, &CSimulatorCommon::ps_allSwiftDataRead);
|
||||||
|
}
|
||||||
|
|
||||||
// info
|
// info
|
||||||
CLogMessage(this).info("Initialized simulator driver %1") << m_simulatorPluginInfo.toQString();
|
CLogMessage(this).info("Initialized simulator driver %1") << m_simulatorPluginInfo.toQString();
|
||||||
}
|
}
|
||||||
@@ -164,6 +173,41 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSimulatorCommon::reverseLookupAndUpdateOwnAircraftModel(const QString &modelString)
|
||||||
|
{
|
||||||
|
CAircraftModel model = getOwnAircraftModel();
|
||||||
|
model.setModelString(modelString);
|
||||||
|
this->reverseLookupAndUpdateOwnAircraftModel(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSimulatorCommon::reverseLookupAndUpdateOwnAircraftModel(const BlackMisc::Simulation::CAircraftModel &model)
|
||||||
|
{
|
||||||
|
Q_ASSERT_X(sApp, Q_FUNC_INFO, "Missing sApp");
|
||||||
|
Q_ASSERT_X(sApp->hasWebDataServices(), Q_FUNC_INFO, "Missing web services");
|
||||||
|
|
||||||
|
if (!model.hasModelString()) { return; }
|
||||||
|
if (this->getOwnAircraftModel() != model)
|
||||||
|
{
|
||||||
|
if (CDatabaseUtils::hasDbAircraftData())
|
||||||
|
{
|
||||||
|
const CAircraftModel newModel = reverseLookupModel(model);
|
||||||
|
const bool updated = this->updateOwnModel(newModel); // update in provider (normally the context)
|
||||||
|
if (updated)
|
||||||
|
{
|
||||||
|
emit this->ownAircraftModelChanged(this->getOwnAircraftModel());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// we wait for the data
|
||||||
|
connect(sApp->getWebDataServices(), &CWebDataServices::allSwiftDbDataRead, this, [ = ]
|
||||||
|
{
|
||||||
|
this->reverseLookupAndUpdateOwnAircraftModel(model);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CAircraftModel CSimulatorCommon::reverseLookupModel(const CAircraftModel &model)
|
CAircraftModel CSimulatorCommon::reverseLookupModel(const CAircraftModel &model)
|
||||||
{
|
{
|
||||||
bool modified = false;
|
bool modified = false;
|
||||||
@@ -171,6 +215,11 @@ namespace BlackCore
|
|||||||
return reverseModel;
|
return reverseModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSimulatorCommon::ps_allSwiftDataRead()
|
||||||
|
{
|
||||||
|
// void
|
||||||
|
}
|
||||||
|
|
||||||
CAircraftModel CSimulatorCommon::getDefaultModel() const
|
CAircraftModel CSimulatorCommon::getDefaultModel() const
|
||||||
{
|
{
|
||||||
return m_defaultModel;
|
return m_defaultModel;
|
||||||
|
|||||||
@@ -125,6 +125,12 @@ namespace BlackCore
|
|||||||
//! Override situation from current interpolator values, if any!
|
//! Override situation from current interpolator values, if any!
|
||||||
bool setInitialAircraftSituation(BlackMisc::Simulation::CSimulatedAircraft &aircraft) const;
|
bool setInitialAircraftSituation(BlackMisc::Simulation::CSimulatedAircraft &aircraft) const;
|
||||||
|
|
||||||
|
//! Set own model
|
||||||
|
void reverseLookupAndUpdateOwnAircraftModel(const BlackMisc::Simulation::CAircraftModel &model);
|
||||||
|
|
||||||
|
//! Set own model
|
||||||
|
void reverseLookupAndUpdateOwnAircraftModel(const QString &modelString);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
BlackMisc::IInterpolator *m_interpolator = nullptr; //!< interpolator instance
|
BlackMisc::IInterpolator *m_interpolator = nullptr; //!< interpolator instance
|
||||||
bool m_pausedSimFreezesInterpolation = false; //!< paused simulator will also pause interpolation (so AI aircraft will hold)
|
bool m_pausedSimFreezesInterpolation = false; //!< paused simulator will also pause interpolation (so AI aircraft will hold)
|
||||||
@@ -137,6 +143,10 @@ namespace BlackCore
|
|||||||
//! Lookup against DB data
|
//! Lookup against DB data
|
||||||
static BlackMisc::Simulation::CAircraftModel reverseLookupModel(const BlackMisc::Simulation::CAircraftModel &model);
|
static BlackMisc::Simulation::CAircraftModel reverseLookupModel(const BlackMisc::Simulation::CAircraftModel &model);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
//! All swift data read from DB
|
||||||
|
void ps_allSwiftDataRead();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_debugMessages = false; //!< Display debug messages
|
bool m_debugMessages = false; //!< Display debug messages
|
||||||
bool m_blinkCycle = false; //!< use for highlighting
|
bool m_blinkCycle = false; //!< use for highlighting
|
||||||
|
|||||||
@@ -170,6 +170,11 @@ namespace BlackCore
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CWebDataServices::hasDbAircraftData() const
|
||||||
|
{
|
||||||
|
return (this->getModelsCount() > 0) && (this->getLiveriesCount() > 0) && (this->getDistributorsCount() > 0) && (this->getAircraftIcaoCodesCount() > 0);
|
||||||
|
}
|
||||||
|
|
||||||
void CWebDataServices::synchronizeDbCaches(CEntityFlags::Entity entities)
|
void CWebDataServices::synchronizeDbCaches(CEntityFlags::Entity entities)
|
||||||
{
|
{
|
||||||
if (this->m_infoDataReader) { this->m_infoDataReader->synchronizeCaches(entities); }
|
if (this->m_infoDataReader) { this->m_infoDataReader->synchronizeCaches(entities); }
|
||||||
|
|||||||
@@ -336,6 +336,9 @@ namespace BlackCore
|
|||||||
//! Can connect to swift DB?
|
//! Can connect to swift DB?
|
||||||
bool canConnectSwiftDb() const;
|
bool canConnectSwiftDb() const;
|
||||||
|
|
||||||
|
//! All DB data for an aircraft entity available?
|
||||||
|
bool hasDbAircraftData() const;
|
||||||
|
|
||||||
//! Synchronize all DB caches
|
//! Synchronize all DB caches
|
||||||
void synchronizeDbCaches(BlackMisc::Network::CEntityFlags::Entity entities);
|
void synchronizeDbCaches(BlackMisc::Network::CEntityFlags::Entity entities);
|
||||||
|
|
||||||
|
|||||||
@@ -320,7 +320,7 @@ namespace BlackSimPlugin
|
|||||||
{
|
{
|
||||||
MPChangePlayerPlane mpChangePlayerPlane;
|
MPChangePlayerPlane mpChangePlayerPlane;
|
||||||
MultiPlayerPacketParser::readMessage(message, mpChangePlayerPlane);
|
MultiPlayerPacketParser::readMessage(message, mpChangePlayerPlane);
|
||||||
setOwnAircraftModel(mpChangePlayerPlane.aircraft_name);
|
reverseLookupAndUpdateOwnAircraftModel(mpChangePlayerPlane.aircraft_name);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CFs9Sdk::MULTIPLAYER_PACKET_ID_POSITION_VELOCITY:
|
case CFs9Sdk::MULTIPLAYER_PACKET_ID_POSITION_VELOCITY:
|
||||||
|
|||||||
@@ -67,27 +67,6 @@ namespace BlackSimPlugin
|
|||||||
return m_airportsInRange;
|
return m_airportsInRange;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSimulatorFsCommon::setOwnAircraftModel(const QString &modelName)
|
|
||||||
{
|
|
||||||
CAircraftModel model = getOwnAircraftModel();
|
|
||||||
model.setModelString(modelName);
|
|
||||||
this->setOwnAircraftModel(model);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CSimulatorFsCommon::setOwnAircraftModel(const BlackMisc::Simulation::CAircraftModel &model)
|
|
||||||
{
|
|
||||||
if (!model.hasModelString()) { return; }
|
|
||||||
if (this->getOwnAircraftModel() != model)
|
|
||||||
{
|
|
||||||
const CAircraftModel newModel = reverseLookupModel(model);
|
|
||||||
const bool updated = this->updateOwnModel(newModel); // update in provider (normally the context)
|
|
||||||
if (updated)
|
|
||||||
{
|
|
||||||
emit this->ownAircraftModelChanged(this->getOwnAircraftModel());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CSimulatorFsCommon::changeRemoteAircraftModel(const CSimulatedAircraft &aircraft)
|
bool CSimulatorFsCommon::changeRemoteAircraftModel(const CSimulatedAircraft &aircraft)
|
||||||
{
|
{
|
||||||
// remove upfront, and then enable / disable again
|
// remove upfront, and then enable / disable again
|
||||||
|
|||||||
@@ -66,12 +66,6 @@ namespace BlackSimPlugin
|
|||||||
BlackMisc::Aviation::CComSystem m_simCom1; //!< cockpit COM1 state in simulator
|
BlackMisc::Aviation::CComSystem m_simCom1; //!< cockpit COM1 state in simulator
|
||||||
BlackMisc::Aviation::CComSystem m_simCom2; //!< cockpit COM2 state in simulator
|
BlackMisc::Aviation::CComSystem m_simCom2; //!< cockpit COM2 state in simulator
|
||||||
BlackMisc::Aviation::CTransponder m_simTransponder; //!< cockpit xpdr state in simulator
|
BlackMisc::Aviation::CTransponder m_simTransponder; //!< cockpit xpdr state in simulator
|
||||||
|
|
||||||
//! Set own model
|
|
||||||
void setOwnAircraftModel(const BlackMisc::Simulation::CAircraftModel &model);
|
|
||||||
|
|
||||||
//! Set own model
|
|
||||||
void setOwnAircraftModel(const QString &modelName);
|
|
||||||
};
|
};
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ namespace BlackSimPlugin
|
|||||||
CAircraftModel model;
|
CAircraftModel model;
|
||||||
model.setModelString(dataDefinitionModel->title);
|
model.setModelString(dataDefinitionModel->title);
|
||||||
model.setModelType(CAircraftModel::TypeOwnSimulatorModel);
|
model.setModelType(CAircraftModel::TypeOwnSimulatorModel);
|
||||||
simulatorFsx->setOwnAircraftModel(model);
|
simulatorFsx->reverseLookupAndUpdateOwnAircraftModel(model);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CSimConnectDefinitions::RequestSimEnvironment:
|
case CSimConnectDefinitions::RequestSimEnvironment:
|
||||||
|
|||||||
@@ -310,9 +310,7 @@ namespace BlackSimPlugin
|
|||||||
model.setFileName(path + "/" + filename);
|
model.setFileName(path + "/" + filename);
|
||||||
model.setLivery(CLivery("XPLANE." + livery, airlineIcaoCode, "XP livery", "", "", false));
|
model.setLivery(CLivery("XPLANE." + livery, airlineIcaoCode, "XP livery", "", "", false));
|
||||||
|
|
||||||
// updated model.
|
this->reverseLookupAndUpdateOwnAircraftModel(model);
|
||||||
// Hint: will update in own model context by using reverse lookup
|
|
||||||
emit ownAircraftModelChanged(model);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSimulatorXPlane::displayStatusMessage(const BlackMisc::CStatusMessage &message) const
|
void CSimulatorXPlane::displayStatusMessage(const BlackMisc::CStatusMessage &message) const
|
||||||
|
|||||||
Reference in New Issue
Block a user