refs #906, utility functions in simulator info and model caches

This commit is contained in:
Klaus Basan
2017-03-21 16:29:06 +01:00
committed by Mathew Sutcliffe
parent b0aa713a2e
commit 2b50fe1fdb
4 changed files with 145 additions and 1 deletions

View File

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

View File

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

View File

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

View File

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