mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-30 20:15:35 +08:00
refs #906, utility functions in simulator info and model caches
This commit is contained in:
committed by
Mathew Sutcliffe
parent
b0aa713a2e
commit
2b50fe1fdb
@@ -10,7 +10,6 @@
|
|||||||
#include "blackmisc/logmessage.h"
|
#include "blackmisc/logmessage.h"
|
||||||
#include "blackmisc/verify.h"
|
#include "blackmisc/verify.h"
|
||||||
#include "blackmisc/simulation/data/modelcaches.h"
|
#include "blackmisc/simulation/data/modelcaches.h"
|
||||||
|
|
||||||
#include <QtGlobal>
|
#include <QtGlobal>
|
||||||
|
|
||||||
using namespace BlackMisc;
|
using namespace BlackMisc;
|
||||||
@@ -48,6 +47,25 @@ namespace BlackMisc
|
|||||||
return this->getCachedModels(simulator).size();
|
return this->getCachedModels(simulator).size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CSimulatorInfo IMultiSimulatorModelCaches::getSimulatorForFilename(const QString &filename) const
|
||||||
|
{
|
||||||
|
if (filename.isEmpty()) return CSimulatorInfo();
|
||||||
|
CSimulatorInfo sims;
|
||||||
|
const QString compareFileName(QFileInfo(filename).fileName());
|
||||||
|
for (const CSimulatorInfo &singleSim : CSimulatorInfo::allSimulatorsSet())
|
||||||
|
{
|
||||||
|
const QString singleSimFile(getFilename(singleSim));
|
||||||
|
if (singleSimFile.isEmpty()) continue;
|
||||||
|
const QString singleSimFileName(QFileInfo(singleSimFile).fileName());
|
||||||
|
if (singleSimFileName == compareFileName)
|
||||||
|
{
|
||||||
|
sims.add(singleSim);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sims;
|
||||||
|
}
|
||||||
|
|
||||||
CAircraftModelList IMultiSimulatorModelCaches::getSynchronizedCachedModels(const CSimulatorInfo &simulator)
|
CAircraftModelList IMultiSimulatorModelCaches::getSynchronizedCachedModels(const CSimulatorInfo &simulator)
|
||||||
{
|
{
|
||||||
BLACK_VERIFY_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "need single simulator");
|
BLACK_VERIFY_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "need single simulator");
|
||||||
@@ -185,6 +203,23 @@ namespace BlackMisc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CStatusMessage CModelCaches::setCacheTimestamp(const QDateTime &ts, const CSimulatorInfo &simulator)
|
||||||
|
{
|
||||||
|
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");
|
||||||
|
if (!ts.isValid()) { return CStatusMessage(this).error("Invalid timestamp for '%1'") << simulator.toQString() ; }
|
||||||
|
switch (simulator.getSimulator())
|
||||||
|
{
|
||||||
|
case CSimulatorInfo::FS9: return this->m_modelCacheFs9.set(m_modelCacheFs9.get(), ts.toMSecsSinceEpoch());
|
||||||
|
case CSimulatorInfo::FSX: return this->m_modelCacheFsx.set(m_modelCacheFsx.get(), ts.toMSecsSinceEpoch());
|
||||||
|
case CSimulatorInfo::P3D: return this->m_modelCacheP3D.set(m_modelCacheP3D.get(), ts.toMSecsSinceEpoch());
|
||||||
|
case CSimulatorInfo::XPLANE: return this->m_modelCacheXP.set(m_modelCacheXP.get(), ts.toMSecsSinceEpoch());
|
||||||
|
default:
|
||||||
|
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return CStatusMessage();
|
||||||
|
}
|
||||||
|
|
||||||
void CModelCaches::synchronizeCache(const CSimulatorInfo &simulator)
|
void CModelCaches::synchronizeCache(const CSimulatorInfo &simulator)
|
||||||
{
|
{
|
||||||
this->synchronizeCacheImpl(simulator);
|
this->synchronizeCacheImpl(simulator);
|
||||||
@@ -205,6 +240,38 @@ namespace BlackMisc
|
|||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString CModelCaches::getFilename(const CSimulatorInfo &simulator) const
|
||||||
|
{
|
||||||
|
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");
|
||||||
|
switch (simulator.getSimulator())
|
||||||
|
{
|
||||||
|
case CSimulatorInfo::FS9: return this->m_modelCacheFs9.getFilename();
|
||||||
|
case CSimulatorInfo::FSX: return this->m_modelCacheFsx.getFilename();
|
||||||
|
case CSimulatorInfo::P3D: return this->m_modelCacheP3D.getFilename();
|
||||||
|
case CSimulatorInfo::XPLANE: return this->m_modelCacheXP.getFilename();
|
||||||
|
default:
|
||||||
|
Q_ASSERT_X(false, Q_FUNC_INFO, "wrong simulator");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CModelCaches::isSaved(const CSimulatorInfo &simulator) const
|
||||||
|
{
|
||||||
|
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");
|
||||||
|
switch (simulator.getSimulator())
|
||||||
|
{
|
||||||
|
case CSimulatorInfo::FS9: return this->m_modelCacheFs9.isSaved();
|
||||||
|
case CSimulatorInfo::FSX: return this->m_modelCacheFsx.isSaved();
|
||||||
|
case CSimulatorInfo::P3D: return this->m_modelCacheP3D.isSaved();
|
||||||
|
case CSimulatorInfo::XPLANE: return this->m_modelCacheXP.isSaved();
|
||||||
|
default:
|
||||||
|
Q_ASSERT_X(false, Q_FUNC_INFO, "wrong simulator");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void CModelCaches::synchronizeCacheImpl(const CSimulatorInfo &simulator)
|
void CModelCaches::synchronizeCacheImpl(const CSimulatorInfo &simulator)
|
||||||
{
|
{
|
||||||
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");
|
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");
|
||||||
@@ -320,6 +387,23 @@ namespace BlackMisc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CStatusMessage CModelSetCaches::setCacheTimestamp(const QDateTime &ts, const CSimulatorInfo &simulator)
|
||||||
|
{
|
||||||
|
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");
|
||||||
|
if (!ts.isValid()) { return CStatusMessage(this).error("Invalid timestamp for '%1'") << simulator.toQString() ; }
|
||||||
|
switch (simulator.getSimulator())
|
||||||
|
{
|
||||||
|
case CSimulatorInfo::FS9: return this->m_modelCacheFs9.set(m_modelCacheFs9.get(), ts.toMSecsSinceEpoch());
|
||||||
|
case CSimulatorInfo::FSX: return this->m_modelCacheFsx.set(m_modelCacheFsx.get(), ts.toMSecsSinceEpoch());
|
||||||
|
case CSimulatorInfo::P3D: return this->m_modelCacheP3D.set(m_modelCacheP3D.get(), ts.toMSecsSinceEpoch());
|
||||||
|
case CSimulatorInfo::XPLANE: return this->m_modelCacheXP.set(m_modelCacheXP.get(), ts.toMSecsSinceEpoch());
|
||||||
|
default:
|
||||||
|
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return CStatusMessage();
|
||||||
|
}
|
||||||
|
|
||||||
void CModelSetCaches::synchronizeCache(const CSimulatorInfo &simulator)
|
void CModelSetCaches::synchronizeCache(const CSimulatorInfo &simulator)
|
||||||
{
|
{
|
||||||
this->synchronizeCacheImpl(simulator);
|
this->synchronizeCacheImpl(simulator);
|
||||||
@@ -340,6 +424,38 @@ namespace BlackMisc
|
|||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString CModelSetCaches::getFilename(const CSimulatorInfo &simulator) const
|
||||||
|
{
|
||||||
|
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");
|
||||||
|
switch (simulator.getSimulator())
|
||||||
|
{
|
||||||
|
case CSimulatorInfo::FS9: return this->m_modelCacheFs9.getFilename();
|
||||||
|
case CSimulatorInfo::FSX: return this->m_modelCacheFsx.getFilename();
|
||||||
|
case CSimulatorInfo::P3D: return this->m_modelCacheP3D.getFilename();
|
||||||
|
case CSimulatorInfo::XPLANE: return this->m_modelCacheXP.getFilename();
|
||||||
|
default:
|
||||||
|
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CModelSetCaches::isSaved(const CSimulatorInfo &simulator) const
|
||||||
|
{
|
||||||
|
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");
|
||||||
|
switch (simulator.getSimulator())
|
||||||
|
{
|
||||||
|
case CSimulatorInfo::FS9: return this->m_modelCacheFs9.isSaved();
|
||||||
|
case CSimulatorInfo::FSX: return this->m_modelCacheFsx.isSaved();
|
||||||
|
case CSimulatorInfo::P3D: return this->m_modelCacheP3D.isSaved();
|
||||||
|
case CSimulatorInfo::XPLANE: return this->m_modelCacheXP.isSaved();
|
||||||
|
default:
|
||||||
|
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void CModelSetCaches::synchronizeCacheImpl(const CSimulatorInfo &simulator)
|
void CModelSetCaches::synchronizeCacheImpl(const CSimulatorInfo &simulator)
|
||||||
{
|
{
|
||||||
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");
|
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");
|
||||||
|
|||||||
@@ -147,6 +147,12 @@ namespace BlackMisc
|
|||||||
//! Count of models for simulator
|
//! Count of models for simulator
|
||||||
int getCachedModelsCount(const BlackMisc::Simulation::CSimulatorInfo &simulator) const;
|
int getCachedModelsCount(const BlackMisc::Simulation::CSimulatorInfo &simulator) const;
|
||||||
|
|
||||||
|
//! Get filename for simulator cache file
|
||||||
|
virtual QString getFilename(const BlackMisc::Simulation::CSimulatorInfo &simulator) const = 0;
|
||||||
|
|
||||||
|
//! Simulator which uses cache with filename
|
||||||
|
BlackMisc::Simulation::CSimulatorInfo getSimulatorForFilename(const QString &filename) const;
|
||||||
|
|
||||||
//! Models
|
//! Models
|
||||||
CAircraftModelList getSynchronizedCachedModels(const BlackMisc::Simulation::CSimulatorInfo &simulator);
|
CAircraftModelList getSynchronizedCachedModels(const BlackMisc::Simulation::CSimulatorInfo &simulator);
|
||||||
|
|
||||||
@@ -158,6 +164,13 @@ namespace BlackMisc
|
|||||||
//! \threadsafe
|
//! \threadsafe
|
||||||
virtual QDateTime getCacheTimestamp(const BlackMisc::Simulation::CSimulatorInfo &simulator) const = 0;
|
virtual QDateTime getCacheTimestamp(const BlackMisc::Simulation::CSimulatorInfo &simulator) const = 0;
|
||||||
|
|
||||||
|
//! Set cache timestamp
|
||||||
|
virtual BlackMisc::CStatusMessage setCacheTimestamp(const QDateTime &ts, const BlackMisc::Simulation::CSimulatorInfo &simulator) = 0;
|
||||||
|
|
||||||
|
//! Cache saved?
|
||||||
|
//! \threadsafe
|
||||||
|
virtual bool isSaved(const BlackMisc::Simulation::CSimulatorInfo &simulator) const = 0;
|
||||||
|
|
||||||
//! Initialized caches for which simulator?
|
//! Initialized caches for which simulator?
|
||||||
//! \threadsafe
|
//! \threadsafe
|
||||||
BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedCache() const;
|
BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedCache() const;
|
||||||
@@ -242,10 +255,13 @@ namespace BlackMisc
|
|||||||
virtual CAircraftModelList getCachedModels(const BlackMisc::Simulation::CSimulatorInfo &simulator) const override;
|
virtual CAircraftModelList getCachedModels(const BlackMisc::Simulation::CSimulatorInfo &simulator) const override;
|
||||||
virtual BlackMisc::CStatusMessage setCachedModels(const BlackMisc::Simulation::CAircraftModelList &models, const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
virtual BlackMisc::CStatusMessage setCachedModels(const BlackMisc::Simulation::CAircraftModelList &models, const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
||||||
virtual QDateTime getCacheTimestamp(const BlackMisc::Simulation::CSimulatorInfo &simulator) const override;
|
virtual QDateTime getCacheTimestamp(const BlackMisc::Simulation::CSimulatorInfo &simulator) const override;
|
||||||
|
virtual CStatusMessage setCacheTimestamp(const QDateTime &ts, const CSimulatorInfo &simulator) override;
|
||||||
virtual void synchronizeCache(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
virtual void synchronizeCache(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
||||||
virtual void admitCache(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
virtual void admitCache(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
||||||
virtual BlackMisc::Simulation::CSimulatorInfo getCurrentSimulator() const override { return this->m_currentSimulator.get(); }
|
virtual BlackMisc::Simulation::CSimulatorInfo getCurrentSimulator() const override { return this->m_currentSimulator.get(); }
|
||||||
virtual BlackMisc::CStatusMessage setCurrentSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
virtual BlackMisc::CStatusMessage setCurrentSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
||||||
|
virtual QString getFilename(const BlackMisc::Simulation::CSimulatorInfo &simulator) const override;
|
||||||
|
virtual bool isSaved(const BlackMisc::Simulation::CSimulatorInfo &simulator) const;
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -281,10 +297,13 @@ namespace BlackMisc
|
|||||||
virtual CAircraftModelList getCachedModels(const BlackMisc::Simulation::CSimulatorInfo &simulator) const override;
|
virtual CAircraftModelList getCachedModels(const BlackMisc::Simulation::CSimulatorInfo &simulator) const override;
|
||||||
virtual BlackMisc::CStatusMessage setCachedModels(const BlackMisc::Simulation::CAircraftModelList &models, const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
virtual BlackMisc::CStatusMessage setCachedModels(const BlackMisc::Simulation::CAircraftModelList &models, const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
||||||
virtual QDateTime getCacheTimestamp(const BlackMisc::Simulation::CSimulatorInfo &simulator) const override;
|
virtual QDateTime getCacheTimestamp(const BlackMisc::Simulation::CSimulatorInfo &simulator) const override;
|
||||||
|
virtual CStatusMessage setCacheTimestamp(const QDateTime &ts, const CSimulatorInfo &simulator) override;
|
||||||
virtual void synchronizeCache(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
virtual void synchronizeCache(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
||||||
virtual void admitCache(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
virtual void admitCache(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
||||||
virtual BlackMisc::Simulation::CSimulatorInfo getCurrentSimulator() const override { return this->m_currentSimulator.get(); }
|
virtual BlackMisc::Simulation::CSimulatorInfo getCurrentSimulator() const override { return this->m_currentSimulator.get(); }
|
||||||
virtual BlackMisc::CStatusMessage setCurrentSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
virtual BlackMisc::CStatusMessage setCurrentSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
||||||
|
virtual QString getFilename(const BlackMisc::Simulation::CSimulatorInfo &simulator) const override;
|
||||||
|
virtual bool isSaved(const BlackMisc::Simulation::CSimulatorInfo &simulator) const;
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -216,6 +216,12 @@ namespace BlackMisc
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const QSet<CSimulatorInfo> &CSimulatorInfo::allSimulatorsSet()
|
||||||
|
{
|
||||||
|
static const QSet<CSimulatorInfo> all(allSimulators().asSingleSimulatorSet());
|
||||||
|
return all;
|
||||||
|
}
|
||||||
|
|
||||||
const CSimulatorInfo &CSimulatorInfo::allFsFamilySimulators()
|
const CSimulatorInfo &CSimulatorInfo::allFsFamilySimulators()
|
||||||
{
|
{
|
||||||
static const CSimulatorInfo s(CSimulatorInfo::AllFsFamily);
|
static const CSimulatorInfo s(CSimulatorInfo::AllFsFamily);
|
||||||
|
|||||||
@@ -162,6 +162,9 @@ namespace BlackMisc
|
|||||||
//! All simulators
|
//! All simulators
|
||||||
static const CSimulatorInfo &allSimulators();
|
static const CSimulatorInfo &allSimulators();
|
||||||
|
|
||||||
|
//! All simulators as set
|
||||||
|
static const QSet<CSimulatorInfo> &allSimulatorsSet();
|
||||||
|
|
||||||
//! All simulators of the FS family (P3D FSX, FS9)
|
//! All simulators of the FS family (P3D FSX, FS9)
|
||||||
static const CSimulatorInfo &allFsFamilySimulators();
|
static const CSimulatorInfo &allFsFamilySimulators();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user