diff --git a/src/blackcore/db/databaseutils.cpp b/src/blackcore/db/databaseutils.cpp index ef4cb21ff..4c6f3ca88 100644 --- a/src/blackcore/db/databaseutils.cpp +++ b/src/blackcore/db/databaseutils.cpp @@ -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 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; } diff --git a/src/blackcore/db/databaseutils.h b/src/blackcore/db/databaseutils.h index 4f1e5ba1a..c3050a159 100644 --- a/src/blackcore/db/databaseutils.h +++ b/src/blackcore/db/databaseutils.h @@ -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); diff --git a/src/blackgui/components/dbownmodelscomponent.cpp b/src/blackgui/components/dbownmodelscomponent.cpp index 4ac17df2c..2b1993e9d 100644 --- a/src/blackgui/components/dbownmodelscomponent.cpp +++ b/src/blackgui/components/dbownmodelscomponent.cpp @@ -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(&CDatabaseUtils::consolidateModelsWithDbData), directory); } void CDbOwnModelsComponent::ps_onOwnModelsLoadingFinished(const CStatusMessage &status, const CSimulatorInfo &simulator)