diff --git a/src/blackcore/db/databaseutils.cpp b/src/blackcore/db/databaseutils.cpp index 2d7afcd3d..6233eadb4 100644 --- a/src/blackcore/db/databaseutils.cpp +++ b/src/blackcore/db/databaseutils.cpp @@ -159,7 +159,7 @@ namespace BlackCore return c; } - CAircraftModelList CDatabaseUtils::consolidateModelsWithSimulatorModelsAllowsGuiRefresh(const CAircraftModelList &models, const CAircraftModelList &simulatorModels, bool processEvents) + CAircraftModelList CDatabaseUtils::consolidateModelsWithSimulatorModelsAllowsGuiRefresh(const CAircraftModelList &models, const CAircraftModelList &simulatorModels, QStringList &removedModelStrings, bool processEvents) { if (models.isEmpty() || simulatorModels.isEmpty()) { return models; } @@ -167,19 +167,37 @@ namespace BlackCore timer.start(); const QSet allOwnModelsModelStrings = simulatorModels.getModelStringSet(); CAircraftModelList consolidatedModels; + removedModelStrings.clear(); int c = 0; for (const CAircraftModel &model : models) { c++; - if (processEvents && c % 125 == 0) { sApp->processEventsFor(25); } + if (processEvents && c % 125 == 0) + { + if (!sApp || sApp->isShuttingDown()) { return models; } + sApp->processEventsFor(25); + } const QString ms(model.getModelString()); if (ms.isEmpty()) { continue; } - if (!allOwnModelsModelStrings.contains(ms)) { continue; } - consolidatedModels.push_back(model); + if (!allOwnModelsModelStrings.contains(ms)) + { + removedModelStrings.push_back(ms); + continue; + } + CAircraftModel consolidated = simulatorModels.findFirstByModelStringOrDefault(ms); + if (consolidated.hasModelString()) + { + CDatabaseUtils::consolidateModelWithDbData(consolidated, true); + consolidatedModels.push_back(consolidated); + } + else + { + consolidatedModels.push_back(model); + } } - CLogMessage(static_cast(nullptr)).info("Consolidated %1 vs. %2 in %3 ms") << models.size() << simulatorModels.size() << timer.elapsed() << "ms"; + CLogMessage(static_cast(nullptr)).info("Consolidated %1 vs. %2 in %3 ms") << models.size() << simulatorModels.size() << timer.elapsed() << "ms"; return consolidatedModels; } diff --git a/src/blackcore/db/databaseutils.h b/src/blackcore/db/databaseutils.h index fa756f464..9d0cadbf2 100644 --- a/src/blackcore/db/databaseutils.h +++ b/src/blackcore/db/databaseutils.h @@ -35,6 +35,10 @@ namespace BlackCore //! Log categories static const BlackMisc::CLogCategoryList &getLogCategories(); + //! Consolidate models with simulator model data (aka "models on disk") + //! \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, QStringList &removedModelStrings, bool processEvents); + //! Consolidate own (aircraft) model data with DB data static BlackMisc::Simulation::CAircraftModel consolidateOwnAircraftModelWithDbData(const BlackMisc::Simulation::CAircraftModel &model, bool force, bool *modified = nullptr); @@ -47,10 +51,6 @@ namespace BlackCore //! Consolidate models with DB data static int consolidateModelsWithDbData(BlackMisc::Simulation::CAircraftModelList &models, bool force); - //! Consolidate models with simulator model data (aka "models on disk") - //! \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);