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
|
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)
|
CAircraftModel CDatabaseUtils::consolidateOwnAircraftModelWithDbData(const CAircraftModel &model, bool force, bool *modified)
|
||||||
{
|
{
|
||||||
bool myModified = false;
|
bool myModified = false;
|
||||||
@@ -43,24 +49,33 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
|
|
||||||
CAircraftModel CDatabaseUtils::consolidateModelWithDbData(const CAircraftModel &model, bool force, bool *modified)
|
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, Q_FUNC_INFO, "Missing application object");
|
||||||
Q_ASSERT_X(sApp->hasWebDataServices(), Q_FUNC_INFO, "No web services");
|
Q_ASSERT_X(sApp->hasWebDataServices(), Q_FUNC_INFO, "No web services");
|
||||||
|
|
||||||
if (modified) { *modified = false; }
|
if (modified) { *modified = false; }
|
||||||
if (!hasDbAircraftData()) { return model; }
|
|
||||||
if (!model.hasModelString()) { return model; }
|
if (!model.hasModelString()) { return model; }
|
||||||
if (!force && model.hasValidDbKey()) { return model; }
|
if (!force && model.hasValidDbKey()) { return model; }
|
||||||
const int distributorOrder = model.getDistributorOrder(); // later restore that order
|
const int distributorOrder = model.getDistributorOrder(); // later restore that order
|
||||||
|
|
||||||
CAircraftModel dbModel(sApp->getWebDataServices()->getModelForModelString(model.getModelString()));
|
|
||||||
if (dbModel.isLoadedFromDb())
|
if (dbModel.isLoadedFromDb())
|
||||||
{
|
{
|
||||||
// take the db model as original
|
// take the db model as original
|
||||||
if (modified) { *modified = true; }
|
if (modified) { *modified = true; }
|
||||||
dbModel.updateMissingParts(model);
|
CAircraftModel dbModelModified(dbModel);
|
||||||
dbModel.setDistributorOrder(distributorOrder);
|
dbModelModified.updateMissingParts(model);
|
||||||
return dbModel;
|
dbModelModified.setDistributorOrder(distributorOrder);
|
||||||
|
return dbModelModified;
|
||||||
}
|
}
|
||||||
|
|
||||||
// we try our best to update by DB data here
|
// we try our best to update by DB data here
|
||||||
@@ -122,7 +137,7 @@ namespace BlackCore
|
|||||||
if (!allOwnModelsModelStrings.contains(ms)) { continue; }
|
if (!allOwnModelsModelStrings.contains(ms)) { continue; }
|
||||||
consolidatedModels.push_back(model);
|
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;
|
return consolidatedModels;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,7 +158,30 @@ namespace BlackCore
|
|||||||
if (processEvents && c % 125 == 0) { sApp->processEventsFor(25); }
|
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;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,12 +32,18 @@ namespace BlackCore
|
|||||||
//! No constructor
|
//! No constructor
|
||||||
CDatabaseUtils() = delete;
|
CDatabaseUtils() = delete;
|
||||||
|
|
||||||
|
//! Log categories
|
||||||
|
static const BlackMisc::CLogCategoryList &getLogCategories();
|
||||||
|
|
||||||
//! Consolidate own (aircraft) model data with DB data
|
//! Consolidate own (aircraft) model data with DB data
|
||||||
static BlackMisc::Simulation::CAircraftModel consolidateOwnAircraftModelWithDbData(const BlackMisc::Simulation::CAircraftModel &model, bool force, bool *modified = nullptr);
|
static BlackMisc::Simulation::CAircraftModel consolidateOwnAircraftModelWithDbData(const BlackMisc::Simulation::CAircraftModel &model, bool force, bool *modified = nullptr);
|
||||||
|
|
||||||
//! Consolidate model data with DB data
|
//! Consolidate model data with DB data
|
||||||
static BlackMisc::Simulation::CAircraftModel consolidateModelWithDbData(const BlackMisc::Simulation::CAircraftModel &model, bool force, bool *modified = nullptr);
|
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
|
//! Consolidate models with DB data
|
||||||
static int consolidateModelsWithDbData(BlackMisc::Simulation::CAircraftModelList &models, bool force);
|
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
|
//! \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);
|
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
|
//! Consolidate models with DB data
|
||||||
static int consolidateModelsWithDbDataAllowsGuiRefresh(BlackMisc::Simulation::CAircraftModelList &models, bool force, bool processEvents);
|
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();
|
CLogMessage(this).info("Starting loading for %1") << simulator.toQString();
|
||||||
ui->tvp_OwnAircraftModels->showLoadIndicator();
|
ui->tvp_OwnAircraftModels->showLoadIndicator();
|
||||||
Q_ASSERT_X(sGui && sGui->getWebDataServices(), Q_FUNC_INFO, "missing web data services");
|
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)
|
void CDbOwnModelsComponent::ps_onOwnModelsLoadingFinished(const CStatusMessage &status, const CSimulatorInfo &simulator)
|
||||||
|
|||||||
Reference in New Issue
Block a user