From 3f030fe2dc9a55c4002371c8c8c3bb5b9ee4f3b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Wed, 29 Apr 2026 09:18:15 +0200 Subject: [PATCH] Reload card db and notify enabled sets change on "Manage Sets" dialog save Took 1 hour 18 minutes Took 6 seconds --- .../widgets/dialogs/dlg_manage_sets.cpp | 12 ++++++++++++ .../database/card_database_display_model.cpp | 18 ++++++++++++++++++ .../database/card_database_display_model.h | 1 + 3 files changed, 31 insertions(+) diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.cpp index a4f54564f..28091585c 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -253,6 +254,17 @@ void WndSets::actSave() model->save(CardDatabaseManager::getInstance()); SettingsCache::instance().setIncludeRebalancedCards(includeRebalancedCards); CardPictureLoader::clearPixmapCache(); + const auto reloadOk1 = QtConcurrent::run([this] { + CardDatabaseManager::getInstance()->loadCardDatabases(); + QMetaObject::Connection conn; + + conn = connect(CardDatabaseManager::getInstance(), &CardDatabase::cardDatabaseLoadingFinished, this, + [conn]() mutable { + CardDatabaseManager::getInstance()->notifyEnabledSetsChanged(); + QObject::disconnect(conn); + }); + SettingsCache::instance().downloads().sync(); + }); close(); } diff --git a/libcockatrice_models/libcockatrice/models/database/card_database_display_model.cpp b/libcockatrice_models/libcockatrice/models/database/card_database_display_model.cpp index 5ce63a939..826bec581 100644 --- a/libcockatrice_models/libcockatrice/models/database/card_database_display_model.cpp +++ b/libcockatrice_models/libcockatrice/models/database/card_database_display_model.cpp @@ -15,6 +15,24 @@ CardDatabaseDisplayModel::CardDatabaseDisplayModel(QObject *parent) loadedRowCount = 0; } +void CardDatabaseDisplayModel::setSourceModel(QAbstractItemModel *model) +{ + QSortFilterProxyModel::setSourceModel(model); + + connect(model, &QAbstractItemModel::rowsInserted, this, [this]() { + dirty(); + }); + + connect(model, &QAbstractItemModel::rowsRemoved, this, [this]() { + dirty(); + }); + + connect(model, &QAbstractItemModel::modelReset, this, [this]() { + loadedRowCount = 0; + dirty(); + }); +} + QMap CardDatabaseDisplayModel::characterTranslation = {{L'“', L'\"'}, {L'”', L'\"'}, {L'‘', L'\''}, diff --git a/libcockatrice_models/libcockatrice/models/database/card_database_display_model.h b/libcockatrice_models/libcockatrice/models/database/card_database_display_model.h index 0c5994a3a..b1d3c0f22 100644 --- a/libcockatrice_models/libcockatrice/models/database/card_database_display_model.h +++ b/libcockatrice_models/libcockatrice/models/database/card_database_display_model.h @@ -38,6 +38,7 @@ private: public: explicit CardDatabaseDisplayModel(QObject *parent = nullptr); + void setSourceModel(QAbstractItemModel *model) override; void setFilterTree(FilterTree *_filterTree); void setIsToken(FilterBool _isToken) {