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/verify.h"
#include "blackmisc/simulation/data/modelcaches.h"
#include <QtGlobal>
using namespace BlackMisc;
@@ -48,6 +47,25 @@ namespace BlackMisc
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)
{
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)
{
this->synchronizeCacheImpl(simulator);
@@ -205,6 +240,38 @@ namespace BlackMisc
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)
{
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)
{
this->synchronizeCacheImpl(simulator);
@@ -340,6 +424,38 @@ namespace BlackMisc
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)
{
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");

View File

@@ -147,6 +147,12 @@ namespace BlackMisc
//! Count of models for simulator
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
CAircraftModelList getSynchronizedCachedModels(const BlackMisc::Simulation::CSimulatorInfo &simulator);
@@ -158,6 +164,13 @@ namespace BlackMisc
//! \threadsafe
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?
//! \threadsafe
BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedCache() const;
@@ -242,10 +255,13 @@ namespace BlackMisc
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 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 admitCache(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
virtual BlackMisc::Simulation::CSimulatorInfo getCurrentSimulator() const override { return this->m_currentSimulator.get(); }
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:
@@ -281,10 +297,13 @@ namespace BlackMisc
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 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 admitCache(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
virtual BlackMisc::Simulation::CSimulatorInfo getCurrentSimulator() const override { return this->m_currentSimulator.get(); }
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: