Ref T28, new model consolidation function

(updates models with DB data)
This commit is contained in:
Klaus Basan
2017-05-03 02:19:53 +02:00
committed by Mathew Sutcliffe
parent 4d156ad8fc
commit 6a96913974
3 changed files with 56 additions and 8 deletions

View File

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

View File

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

View File

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