mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-05 09:15:34 +08:00
Ref T292, Ref T285 model loader and cache improvements
* multi caches also emit when values are set and synchronized * model loader detects cache changed * added CCentralMultiSimulatorModelCachesAware
This commit is contained in:
@@ -184,18 +184,19 @@ namespace BlackMisc
|
||||
CStatusMessage CModelCaches::setCachedModels(const CAircraftModelList &models, const CSimulatorInfo &simulator)
|
||||
{
|
||||
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");
|
||||
CStatusMessage msg;
|
||||
switch (simulator.getSimulator())
|
||||
{
|
||||
case CSimulatorInfo::FS9: return m_modelCacheFs9.set(models);
|
||||
case CSimulatorInfo::FSX: return m_modelCacheFsx.set(models);
|
||||
case CSimulatorInfo::P3D: return m_modelCacheP3D.set(models);
|
||||
case CSimulatorInfo::XPLANE: return m_modelCacheXP.set(models);
|
||||
case CSimulatorInfo::FS9: msg = m_modelCacheFs9.set(models); break;
|
||||
case CSimulatorInfo::FSX: msg = m_modelCacheFsx.set(models); break;
|
||||
case CSimulatorInfo::P3D: msg = m_modelCacheP3D.set(models); break;
|
||||
case CSimulatorInfo::XPLANE: msg = m_modelCacheXP.set(models); break;
|
||||
default:
|
||||
Q_ASSERT_X(false, Q_FUNC_INFO, "wrong simulator");
|
||||
return CStatusMessage();
|
||||
}
|
||||
|
||||
this->emitCacheChanged(simulator);
|
||||
this->emitCacheChanged(simulator); // set
|
||||
return msg;
|
||||
}
|
||||
|
||||
CStatusMessage IMultiSimulatorModelCaches::clearCachedModels(const CSimulatorInfo &simulator)
|
||||
@@ -307,6 +308,7 @@ namespace BlackMisc
|
||||
Q_ASSERT_X(false, Q_FUNC_INFO, "wrong simulator");
|
||||
break;
|
||||
}
|
||||
this->emitCacheChanged(simulator); // sync
|
||||
}
|
||||
|
||||
void CModelCaches::admitCacheImpl(const CSimulatorInfo &simulator)
|
||||
@@ -375,18 +377,19 @@ namespace BlackMisc
|
||||
orderedModels.sortAscendingByOrder();
|
||||
}
|
||||
|
||||
CStatusMessage msg;
|
||||
switch (simulator.getSimulator())
|
||||
{
|
||||
case CSimulatorInfo::FS9: return m_modelCacheFs9.set(orderedModels);
|
||||
case CSimulatorInfo::FSX: return m_modelCacheFsx.set(orderedModels);
|
||||
case CSimulatorInfo::P3D: return m_modelCacheP3D.set(orderedModels);
|
||||
case CSimulatorInfo::XPLANE: return m_modelCacheXP.set(orderedModels);
|
||||
case CSimulatorInfo::FS9: msg = m_modelCacheFs9.set(orderedModels); break;
|
||||
case CSimulatorInfo::FSX: msg = m_modelCacheFsx.set(orderedModels); break;
|
||||
case CSimulatorInfo::P3D: msg = m_modelCacheP3D.set(orderedModels); break;
|
||||
case CSimulatorInfo::XPLANE: msg = m_modelCacheXP.set(orderedModels); break;
|
||||
default:
|
||||
Q_ASSERT_X(false, Q_FUNC_INFO, "wrong simulator");
|
||||
return CStatusMessage();
|
||||
}
|
||||
|
||||
this->emitCacheChanged(simulator);
|
||||
this->emitCacheChanged(simulator); // set
|
||||
return msg;
|
||||
}
|
||||
|
||||
QDateTime CModelSetCaches::getCacheTimestamp(const CSimulatorInfo &simulator) const
|
||||
@@ -476,6 +479,7 @@ namespace BlackMisc
|
||||
Q_ASSERT_X(false, Q_FUNC_INFO, "Wrong simulator");
|
||||
break;
|
||||
}
|
||||
this->emitCacheChanged(simulator); // sync
|
||||
}
|
||||
|
||||
void CModelSetCaches::admitCacheImpl(const CSimulatorInfo &simulator)
|
||||
|
||||
@@ -249,6 +249,7 @@ namespace BlackMisc
|
||||
|
||||
signals:
|
||||
//! Cache has been changed
|
||||
//! \note this detects caches changed elsewhere or set here (the normal caches detect only "elsewhere"
|
||||
void cacheChanged(const CSimulatorInfo &simulator);
|
||||
|
||||
protected:
|
||||
@@ -367,7 +368,11 @@ namespace BlackMisc
|
||||
|
||||
protected:
|
||||
//! Ctor
|
||||
CCentralMultiSimulatorModelCachesProviderBase(QObject *parent = nullptr) : IMultiSimulatorModelCaches(parent) { }
|
||||
CCentralMultiSimulatorModelCachesProviderBase(const QString &name, QObject *parent = nullptr) : IMultiSimulatorModelCaches(parent)
|
||||
{
|
||||
this->setObjectName(name);
|
||||
connect(&m_caches, &IMultiSimulatorModelCaches::cacheChanged, this, &CCentralMultiSimulatorModelCachesProviderBase::cacheChanged);
|
||||
}
|
||||
|
||||
private:
|
||||
TCaches m_caches { false, this }; //!< used caches
|
||||
@@ -379,6 +384,7 @@ namespace BlackMisc
|
||||
const TCaches &instanceCaches() const { return this->isInstance() ? m_caches : Derived::modelCachesInstance().m_caches; }
|
||||
|
||||
//! Is this object the central instance?
|
||||
//! \remark would also allow do direct inherit this class
|
||||
bool isInstance() const { return this == &Derived::modelCachesInstance(); }
|
||||
};
|
||||
|
||||
@@ -393,13 +399,44 @@ namespace BlackMisc
|
||||
//! Central instance
|
||||
static CCentralMultiSimulatorModelCachesProvider &modelCachesInstance()
|
||||
{
|
||||
static CCentralMultiSimulatorModelCachesProvider c;
|
||||
static CCentralMultiSimulatorModelCachesProvider c("Central model caches provider");
|
||||
return c;
|
||||
}
|
||||
|
||||
protected:
|
||||
//! Ctor
|
||||
CCentralMultiSimulatorModelCachesProvider(QObject *parent = nullptr) : CCentralMultiSimulatorModelCachesProviderBase(parent) {}
|
||||
CCentralMultiSimulatorModelCachesProvider(const QString &name, QObject *parent = nullptr) : CCentralMultiSimulatorModelCachesProviderBase(name, parent) {}
|
||||
};
|
||||
|
||||
//! Basically a QObject free (delegate based) version of CCentralMultiSimulatorModelCachesProvider
|
||||
class BLACKMISC_EXPORT CCentralMultiSimulatorModelCachesAware:
|
||||
public IModelsForSimulatorSetable,
|
||||
public IModelsForSimulatorUpdatable
|
||||
{
|
||||
public:
|
||||
//! \name Look like IMultiSimulatorModelCaches interface
|
||||
//! @{
|
||||
CAircraftModelList getCachedModels(const CSimulatorInfo &simulator) const { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().getCachedModels(simulator); }
|
||||
int getCachedModelsCount(const CSimulatorInfo &simulator) const { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().getCachedModelsCount(simulator); }
|
||||
QString getCacheCountAndTimestamp(const CSimulatorInfo &simulator) const { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().getCacheCountAndTimestamp(simulator); }
|
||||
CStatusMessage setCachedModels(const CAircraftModelList &models, const CSimulatorInfo &simulator) { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().setCachedModels(models, simulator); }
|
||||
CStatusMessage clearCachedModels(const CSimulatorInfo &simulator) { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().clearCachedModels(simulator); }
|
||||
QDateTime getCacheTimestamp(const CSimulatorInfo &simulator) const { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().getCacheTimestamp(simulator); }
|
||||
CStatusMessage setCacheTimestamp(const QDateTime &ts, const CSimulatorInfo &simulator) { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().setCacheTimestamp(ts, simulator); }
|
||||
void synchronizeCache(const CSimulatorInfo &simulator) { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().synchronizeCache(simulator); }
|
||||
void admitCache(const CSimulatorInfo &simulator) { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().admitCache(simulator); }
|
||||
QString getFilename(const CSimulatorInfo &simulator) const { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().getFilename(simulator); }
|
||||
bool isSaved(const CSimulatorInfo &simulator) const { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().isSaved(simulator); }
|
||||
QString getDescription() const { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().getDescription(); }
|
||||
QString getInfoString() const { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().getInfoString(); }
|
||||
QString getInfoStringFsFamily() const { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().getInfoStringFsFamily(); }
|
||||
//! @}
|
||||
|
||||
//! \copydoc IModelsForSimulatorSetable::setModelsForSimulator
|
||||
virtual void setModelsForSimulator(const CAircraftModelList &models, const CSimulatorInfo &simulator) override { CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().setModelsForSimulator(models, simulator); }
|
||||
|
||||
//! \copydoc IModelsForSimulatorUpdatable::updateModelsForSimulator
|
||||
virtual int updateModelsForSimulator(const CAircraftModelList &models, const CSimulatorInfo &simulator) override { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().updateModelsForSimulator(models, simulator); }
|
||||
};
|
||||
|
||||
//! One central instance of the model set caches
|
||||
@@ -413,13 +450,13 @@ namespace BlackMisc
|
||||
//! Central instance
|
||||
static CCentralMultiSimulatorModelSetCachesProvider &modelCachesInstance()
|
||||
{
|
||||
static CCentralMultiSimulatorModelSetCachesProvider c;
|
||||
static CCentralMultiSimulatorModelSetCachesProvider c("Central model sets provider");
|
||||
return c;
|
||||
}
|
||||
|
||||
protected:
|
||||
//! Ctor
|
||||
CCentralMultiSimulatorModelSetCachesProvider(QObject *parent = nullptr) : CCentralMultiSimulatorModelCachesProviderBase(parent) {}
|
||||
CCentralMultiSimulatorModelSetCachesProvider(const QString &name, QObject *parent = nullptr) : CCentralMultiSimulatorModelCachesProviderBase(name, parent) {}
|
||||
};
|
||||
|
||||
//! Basically a QObject free (delegate based) version of CCentralMultiSimulatorModelSetCachesProvider
|
||||
@@ -432,7 +469,9 @@ namespace BlackMisc
|
||||
//! @{
|
||||
CAircraftModelList getCachedModels(const CSimulatorInfo &simulator) const { return CCentralMultiSimulatorModelSetCachesProvider::modelCachesInstance().getCachedModels(simulator); }
|
||||
int getCachedModelsCount(const CSimulatorInfo &simulator) const { return CCentralMultiSimulatorModelSetCachesProvider::modelCachesInstance().getCachedModelsCount(simulator); }
|
||||
QString getCacheCountAndTimestamp(const CSimulatorInfo &simulator) const { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().getCacheCountAndTimestamp(simulator); }
|
||||
CStatusMessage setCachedModels(const CAircraftModelList &models, const CSimulatorInfo &simulator) { return CCentralMultiSimulatorModelSetCachesProvider::modelCachesInstance().setCachedModels(models, simulator); }
|
||||
CStatusMessage clearCachedModels(const CSimulatorInfo &simulator) { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().clearCachedModels(simulator); }
|
||||
QDateTime getCacheTimestamp(const CSimulatorInfo &simulator) const { return CCentralMultiSimulatorModelSetCachesProvider::modelCachesInstance().getCacheTimestamp(simulator); }
|
||||
CStatusMessage setCacheTimestamp(const QDateTime &ts, const CSimulatorInfo &simulator) { return CCentralMultiSimulatorModelSetCachesProvider::modelCachesInstance().setCacheTimestamp(ts, simulator); }
|
||||
void synchronizeCache(const CSimulatorInfo &simulator) { return CCentralMultiSimulatorModelSetCachesProvider::modelCachesInstance().synchronizeCache(simulator); }
|
||||
@@ -440,6 +479,8 @@ namespace BlackMisc
|
||||
QString getFilename(const CSimulatorInfo &simulator) const { return CCentralMultiSimulatorModelSetCachesProvider::modelCachesInstance().getFilename(simulator); }
|
||||
bool isSaved(const CSimulatorInfo &simulator) const { return CCentralMultiSimulatorModelSetCachesProvider::modelCachesInstance().isSaved(simulator); }
|
||||
QString getDescription() const { return CCentralMultiSimulatorModelSetCachesProvider::modelCachesInstance().getDescription(); }
|
||||
QString getInfoString() const { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().getInfoString(); }
|
||||
QString getInfoStringFsFamily() const { return CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().getInfoStringFsFamily(); }
|
||||
//! @}
|
||||
|
||||
//! \copydoc IModelsForSimulatorSetable::setModelsForSimulator
|
||||
|
||||
Reference in New Issue
Block a user