mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-30 11:55:35 +08:00
Ref T28, new model consolidation function
(updates models with DB data)
This commit is contained in:
committed by
Mathew Sutcliffe
parent
4d156ad8fc
commit
6a96913974
@@ -21,6 +21,12 @@ namespace BlackCore
|
||||
{
|
||||
namespace Db
|
||||
{
|
||||
const CLogCategoryList &CDatabaseUtils::getLogCategories()
|
||||
{
|
||||
static const BlackMisc::CLogCategoryList cats { CLogCategory::modelCache(), CLogCategory::modelSetCache() };
|
||||
return cats;
|
||||
}
|
||||
|
||||
CAircraftModel CDatabaseUtils::consolidateOwnAircraftModelWithDbData(const CAircraftModel &model, bool force, bool *modified)
|
||||
{
|
||||
bool myModified = false;
|
||||
@@ -43,24 +49,33 @@ namespace BlackCore
|
||||
}
|
||||
|
||||
CAircraftModel CDatabaseUtils::consolidateModelWithDbData(const CAircraftModel &model, bool force, bool *modified)
|
||||
{
|
||||
if (modified) { *modified = false; }
|
||||
if (!model.hasModelString()) { return model; }
|
||||
if (!hasDbAircraftData()) { return model; }
|
||||
|
||||
CAircraftModel dbModel(sApp->getWebDataServices()->getModelForModelString(model.getModelString()));
|
||||
return CDatabaseUtils::consolidateModelWithDbData(model, dbModel, force, modified);
|
||||
}
|
||||
|
||||
CAircraftModel CDatabaseUtils::consolidateModelWithDbData(const CAircraftModel &model, const CAircraftModel &dbModel, bool force, bool *modified)
|
||||
{
|
||||
Q_ASSERT_X(sApp, Q_FUNC_INFO, "Missing application object");
|
||||
Q_ASSERT_X(sApp->hasWebDataServices(), Q_FUNC_INFO, "No web services");
|
||||
|
||||
if (modified) { *modified = false; }
|
||||
if (!hasDbAircraftData()) { return model; }
|
||||
if (!model.hasModelString()) { return model; }
|
||||
if (!force && model.hasValidDbKey()) { return model; }
|
||||
const int distributorOrder = model.getDistributorOrder(); // later restore that order
|
||||
|
||||
CAircraftModel dbModel(sApp->getWebDataServices()->getModelForModelString(model.getModelString()));
|
||||
if (dbModel.isLoadedFromDb())
|
||||
{
|
||||
// take the db model as original
|
||||
if (modified) { *modified = true; }
|
||||
dbModel.updateMissingParts(model);
|
||||
dbModel.setDistributorOrder(distributorOrder);
|
||||
return dbModel;
|
||||
CAircraftModel dbModelModified(dbModel);
|
||||
dbModelModified.updateMissingParts(model);
|
||||
dbModelModified.setDistributorOrder(distributorOrder);
|
||||
return dbModelModified;
|
||||
}
|
||||
|
||||
// we try our best to update by DB data here
|
||||
@@ -122,7 +137,7 @@ namespace BlackCore
|
||||
if (!allOwnModelsModelStrings.contains(ms)) { continue; }
|
||||
consolidatedModels.push_back(model);
|
||||
}
|
||||
CLogMessage().debug() << "Consolidated " << models.size() << " vs. " << simulatorModels.size() << " in " << timer.elapsed() << "ms";
|
||||
CLogMessage(getLogCategories()).info("Consolidated %1 vs. %2 in %3 ms") << models.size() << simulatorModels.size() << timer.elapsed() << "ms";
|
||||
return consolidatedModels;
|
||||
}
|
||||
|
||||
@@ -143,7 +158,30 @@ namespace BlackCore
|
||||
if (processEvents && c % 125 == 0) { sApp->processEventsFor(25); }
|
||||
}
|
||||
}
|
||||
CLogMessage().debug() << "Consolidated " << models.size() << " in " << timer.elapsed() << "ms";
|
||||
CLogMessage(getLogCategories()).info("Consolidated %1 models in %2 ms") << models.size() << timer.elapsed();
|
||||
return c;
|
||||
}
|
||||
|
||||
int CDatabaseUtils::consolidateModelsWithDbData(const CAircraftModelList &dbModels, CAircraftModelList &simulatorModels, bool force)
|
||||
{
|
||||
QTime timer;
|
||||
timer.start();
|
||||
if (dbModels.isEmpty() || simulatorModels.isEmpty()) { return 0; }
|
||||
const QSet<QString> dbModelsModelStrings = dbModels.getModelStringSet();
|
||||
|
||||
int c = 0;
|
||||
for (CAircraftModel &model : simulatorModels)
|
||||
{
|
||||
const QString ms(model.getModelString());
|
||||
if (ms.isEmpty()) { continue; }
|
||||
if (!dbModelsModelStrings.contains(ms)) { continue; }
|
||||
bool modified = false;
|
||||
const CAircraftModel consolidated = CDatabaseUtils::consolidateModelWithDbData(model, dbModels.findFirstByModelStringOrDefault(ms), force, &modified);
|
||||
if (!modified) { continue; }
|
||||
model = consolidated;
|
||||
c++;
|
||||
}
|
||||
CLogMessage(getLogCategories()).info("Consolidated %1 models in %2 ms") << simulatorModels.size() << timer.elapsed();
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
@@ -32,12 +32,18 @@ namespace BlackCore
|
||||
//! No constructor
|
||||
CDatabaseUtils() = delete;
|
||||
|
||||
//! Log categories
|
||||
static const BlackMisc::CLogCategoryList &getLogCategories();
|
||||
|
||||
//! Consolidate own (aircraft) model data with DB data
|
||||
static BlackMisc::Simulation::CAircraftModel consolidateOwnAircraftModelWithDbData(const BlackMisc::Simulation::CAircraftModel &model, bool force, bool *modified = nullptr);
|
||||
|
||||
//! Consolidate model data with DB data
|
||||
static BlackMisc::Simulation::CAircraftModel consolidateModelWithDbData(const BlackMisc::Simulation::CAircraftModel &model, bool force, bool *modified = nullptr);
|
||||
|
||||
//! Consolidate model data with DB data
|
||||
static BlackMisc::Simulation::CAircraftModel consolidateModelWithDbData(const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::Simulation::CAircraftModel &dbModel, bool force, bool *modified);
|
||||
|
||||
//! Consolidate models with DB data
|
||||
static int consolidateModelsWithDbData(BlackMisc::Simulation::CAircraftModelList &models, bool force);
|
||||
|
||||
@@ -45,6 +51,10 @@ namespace BlackCore
|
||||
//! \remark kept here with the other consolidate functions, but actually DB independent
|
||||
static BlackMisc::Simulation::CAircraftModelList consolidateModelsWithSimulatorModelsAllowsGuiRefresh(const BlackMisc::Simulation::CAircraftModelList &models, const BlackMisc::Simulation::CAircraftModelList &simulatorModels, bool processEvents);
|
||||
|
||||
//! Consolidate models with simulator model data (aka "models on disk")
|
||||
//! \remark kept here with the other consolidate functions, but actually DB independent
|
||||
static int consolidateModelsWithDbData(const BlackMisc::Simulation::CAircraftModelList &dbModels, BlackMisc::Simulation::CAircraftModelList &simulatorModels, bool force);
|
||||
|
||||
//! Consolidate models with DB data
|
||||
static int consolidateModelsWithDbDataAllowsGuiRefresh(BlackMisc::Simulation::CAircraftModelList &models, bool force, bool processEvents);
|
||||
|
||||
|
||||
@@ -442,7 +442,7 @@ namespace BlackGui
|
||||
CLogMessage(this).info("Starting loading for %1") << simulator.toQString();
|
||||
ui->tvp_OwnAircraftModels->showLoadIndicator();
|
||||
Q_ASSERT_X(sGui && sGui->getWebDataServices(), Q_FUNC_INFO, "missing web data services");
|
||||
this->m_modelLoader->startLoading(mode, &CDatabaseUtils::consolidateModelsWithDbData, directory);
|
||||
this->m_modelLoader->startLoading(mode, static_cast<int (*)(CAircraftModelList &, bool)>(&CDatabaseUtils::consolidateModelsWithDbData), directory);
|
||||
}
|
||||
|
||||
void CDbOwnModelsComponent::ps_onOwnModelsLoadingFinished(const CStatusMessage &status, const CSimulatorInfo &simulator)
|
||||
|
||||
Reference in New Issue
Block a user