From c9f95e1df1506dee5011f62734334fa72c896848 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Fri, 7 Mar 2025 15:05:31 +0100 Subject: [PATCH] Change the filters path to not be hardcoded anymore. --- ...tabase_display_filter_save_load_widget.cpp | 12 ++--- ...database_display_filter_save_load_widget.h | 5 +- .../visual_database_display_widget.cpp | 3 +- cockatrice/src/dialogs/dlg_settings.cpp | 54 +++++++++++++------ cockatrice/src/dialogs/dlg_settings.h | 3 ++ cockatrice/src/settings/cache_settings.cpp | 7 +++ cockatrice/src/settings/cache_settings.h | 7 ++- dbconverter/src/mocks.cpp | 3 ++ tests/carddatabase/mocks.cpp | 3 ++ 9 files changed, 67 insertions(+), 30 deletions(-) diff --git a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp index cc5506c0f..995158f44 100644 --- a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp @@ -1,15 +1,15 @@ #include "visual_database_display_filter_save_load_widget.h" #include "../../../../game/filters/filter_tree.h" +#include "../../../../settings/cache_settings.h" #include #include #include VisualDatabaseDisplayFilterSaveLoadWidget::VisualDatabaseDisplayFilterSaveLoadWidget(QWidget *parent, - FilterTreeModel *_filterModel, - const QString &savePath) - : QWidget(parent), filterModel(_filterModel), saveDirectory(savePath) + FilterTreeModel *_filterModel) + : QWidget(parent), filterModel(_filterModel) { setMinimumWidth(300); setMaximumHeight(300); @@ -40,7 +40,7 @@ void VisualDatabaseDisplayFilterSaveLoadWidget::saveFilter() if (filename.isEmpty()) return; - QString filePath = saveDirectory + QDir::separator() + filename + ".json"; + QString filePath = SettingsCache::instance().getFiltersPath() + QDir::separator() + filename + ".json"; // Serialize the filter model to JSON QJsonArray filtersArray; @@ -65,7 +65,7 @@ void VisualDatabaseDisplayFilterSaveLoadWidget::saveFilter() void VisualDatabaseDisplayFilterSaveLoadWidget::loadFilter(const QString &filename) { - QString filePath = saveDirectory + "/" + filename; + QString filePath = SettingsCache::instance().getFiltersPath() + "/" + filename; QFile file(filePath); if (!file.open(QIODevice::ReadOnly)) @@ -111,7 +111,7 @@ void VisualDatabaseDisplayFilterSaveLoadWidget::refreshFilterList() } fileButtons.clear(); - QDir dir(saveDirectory); + QDir dir(SettingsCache::instance().getFiltersPath()); QStringList filterFiles = dir.entryList(QStringList() << "*.json", QDir::Files, QDir::Time); for (const QString &filename : filterFiles) { diff --git a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_filter_save_load_widget.h b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_filter_save_load_widget.h index d76602252..261e5786d 100644 --- a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_filter_save_load_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_filter_save_load_widget.h @@ -19,9 +19,7 @@ class VisualDatabaseDisplayFilterSaveLoadWidget : public QWidget { Q_OBJECT public: - explicit VisualDatabaseDisplayFilterSaveLoadWidget(QWidget *parent, - FilterTreeModel *filterModel, - const QString &savePath); + explicit VisualDatabaseDisplayFilterSaveLoadWidget(QWidget *parent, FilterTreeModel *filterModel); void saveFilter(); void loadFilter(const QString &filename); @@ -29,7 +27,6 @@ public: private: FilterTreeModel *filterModel; - QString saveDirectory; QVBoxLayout *layout; QLineEdit *filenameInput; diff --git a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_widget.cpp b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_widget.cpp index 9f7d03bd2..0f25b92a5 100644 --- a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_widget.cpp @@ -91,8 +91,7 @@ VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent, quickFilterWidget = new SettingsButtonWidget(this); - saveLoadWidget = - new VisualDatabaseDisplayFilterSaveLoadWidget(this, filterModel, "/home/ascor/Cockatrice_presets/"); + saveLoadWidget = new VisualDatabaseDisplayFilterSaveLoadWidget(this, filterModel); nameFilterWidget = new VisualDatabaseDisplayNameFilterWidget(this, deckEditor, filterModel); mainTypeFilterWidget = new VisualDatabaseDisplayMainTypeFilterWidget(this, filterModel); subTypeFilterWidget = new VisualDatabaseDisplaySubTypeFilterWidget(this, filterModel); diff --git a/cockatrice/src/dialogs/dlg_settings.cpp b/cockatrice/src/dialogs/dlg_settings.cpp index 0d5ea6d92..c0c07d426 100644 --- a/cockatrice/src/dialogs/dlg_settings.cpp +++ b/cockatrice/src/dialogs/dlg_settings.cpp @@ -101,6 +101,11 @@ GeneralSettingsPage::GeneralSettingsPage() QPushButton *deckPathButton = new QPushButton("..."); connect(deckPathButton, SIGNAL(clicked()), this, SLOT(deckPathButtonClicked())); + filtersPathEdit = new QLineEdit(settings.getFiltersPath()); + filtersPathEdit->setReadOnly(true); + QPushButton *filtersPathButton = new QPushButton("..."); + connect(filtersPathButton, SIGNAL(clicked()), this, SLOT(filtersPathButtonClicked())); + replaysPathEdit = new QLineEdit(settings.getReplaysPath()); replaysPathEdit->setReadOnly(true); QPushButton *replaysPathButton = new QPushButton("..."); @@ -132,6 +137,7 @@ GeneralSettingsPage::GeneralSettingsPage() bool isPortable = settings.getIsPortableBuild(); if (isPortable) { deckPathEdit->setEnabled(false); + filtersPathEdit->setEnabled(false); replaysPathEdit->setEnabled(false); picsPathEdit->setEnabled(false); cardDatabasePathEdit->setEnabled(false); @@ -154,24 +160,27 @@ GeneralSettingsPage::GeneralSettingsPage() pathsGrid->addWidget(&deckPathLabel, 0, 0); pathsGrid->addWidget(deckPathEdit, 0, 1); pathsGrid->addWidget(deckPathButton, 0, 2); - pathsGrid->addWidget(&replaysPathLabel, 1, 0); - pathsGrid->addWidget(replaysPathEdit, 1, 1); - pathsGrid->addWidget(replaysPathButton, 1, 2); - pathsGrid->addWidget(&picsPathLabel, 2, 0); - pathsGrid->addWidget(picsPathEdit, 2, 1); - pathsGrid->addWidget(picsPathButton, 2, 2); - pathsGrid->addWidget(&cardDatabasePathLabel, 3, 0); - pathsGrid->addWidget(cardDatabasePathEdit, 3, 1); - pathsGrid->addWidget(cardDatabasePathButton, 3, 2); - pathsGrid->addWidget(&customCardDatabasePathLabel, 4, 0); - pathsGrid->addWidget(customCardDatabasePathEdit, 4, 1); - pathsGrid->addWidget(customCardDatabasePathButton, 4, 2); - pathsGrid->addWidget(&tokenDatabasePathLabel, 5, 0); - pathsGrid->addWidget(tokenDatabasePathEdit, 5, 1); - pathsGrid->addWidget(tokenDatabasePathButton, 5, 2); + pathsGrid->addWidget(&filtersPathLabel, 1, 0); + pathsGrid->addWidget(filtersPathEdit, 1, 1); + pathsGrid->addWidget(filtersPathButton, 1, 2); + pathsGrid->addWidget(&replaysPathLabel, 2, 0); + pathsGrid->addWidget(replaysPathEdit, 2, 1); + pathsGrid->addWidget(replaysPathButton, 2, 2); + pathsGrid->addWidget(&picsPathLabel, 3, 0); + pathsGrid->addWidget(picsPathEdit, 3, 1); + pathsGrid->addWidget(picsPathButton, 3, 2); + pathsGrid->addWidget(&cardDatabasePathLabel, 4, 0); + pathsGrid->addWidget(cardDatabasePathEdit, 4, 1); + pathsGrid->addWidget(cardDatabasePathButton, 4, 2); + pathsGrid->addWidget(&customCardDatabasePathLabel, 5, 0); + pathsGrid->addWidget(customCardDatabasePathEdit, 5, 1); + pathsGrid->addWidget(customCardDatabasePathButton, 5, 2); + pathsGrid->addWidget(&tokenDatabasePathLabel, 6, 0); + pathsGrid->addWidget(tokenDatabasePathEdit, 6, 1); + pathsGrid->addWidget(tokenDatabasePathButton, 6, 2); if (!isPortable) { - pathsGrid->addWidget(resetAllPathsButton, 6, 0); - pathsGrid->addWidget(allPathsResetLabel, 6, 1); + pathsGrid->addWidget(resetAllPathsButton, 7, 0); + pathsGrid->addWidget(allPathsResetLabel, 7, 1); } pathsGroupBox = new QGroupBox; pathsGroupBox->setLayout(pathsGrid); @@ -226,6 +235,16 @@ void GeneralSettingsPage::deckPathButtonClicked() SettingsCache::instance().setDeckPath(path); } +void GeneralSettingsPage::filtersPathButtonClicked() +{ + QString path = QFileDialog::getExistingDirectory(this, tr("Choose path"), filtersPathEdit->text()); + if (path.isEmpty()) + return; + + filtersPathEdit->setText(path); + SettingsCache::instance().setFiltersPath(path); +} + void GeneralSettingsPage::replaysPathButtonClicked() { QString path = QFileDialog::getExistingDirectory(this, tr("Choose path"), replaysPathEdit->text()); @@ -307,6 +326,7 @@ void GeneralSettingsPage::retranslateUi() advertiseTranslationPageLabel.setText( QString("%2").arg(WIKI_TRANSLATION_FAQ).arg(tr("How to help with translations"))); deckPathLabel.setText(tr("Decks directory:")); + filtersPathLabel.setText(tr("Filters directory:")); replaysPathLabel.setText(tr("Replays directory:")); picsPathLabel.setText(tr("Pictures directory:")); cardDatabasePathLabel.setText(tr("Card database:")); diff --git a/cockatrice/src/dialogs/dlg_settings.h b/cockatrice/src/dialogs/dlg_settings.h index 95ae17979..ff73d48ab 100644 --- a/cockatrice/src/dialogs/dlg_settings.h +++ b/cockatrice/src/dialogs/dlg_settings.h @@ -46,6 +46,7 @@ public: private slots: void deckPathButtonClicked(); + void filtersPathButtonClicked(); void replaysPathButtonClicked(); void picsPathButtonClicked(); void cardDatabasePathButtonClicked(); @@ -58,6 +59,7 @@ private: QStringList findQmFiles(); QString languageName(const QString &lang); QLineEdit *deckPathEdit; + QLineEdit *filtersPathEdit; QLineEdit *replaysPathEdit; QLineEdit *picsPathEdit; QLineEdit *cardDatabasePathEdit; @@ -74,6 +76,7 @@ private: QComboBox updateReleaseChannelBox; QLabel languageLabel; QLabel deckPathLabel; + QLabel filtersPathLabel; QLabel replaysPathLabel; QLabel picsPathLabel; QLabel cardDatabasePathLabel; diff --git a/cockatrice/src/settings/cache_settings.cpp b/cockatrice/src/settings/cache_settings.cpp index d7a9dac75..b0a72fb9e 100644 --- a/cockatrice/src/settings/cache_settings.cpp +++ b/cockatrice/src/settings/cache_settings.cpp @@ -451,6 +451,12 @@ void SettingsCache::setDeckPath(const QString &_deckPath) settings->setValue("paths/decks", deckPath); } +void SettingsCache::setFiltersPath(const QString &_filtersPath) +{ + filtersPath = _filtersPath; + settings->setValue("paths/filters", filtersPath); +} + void SettingsCache::setReplaysPath(const QString &_replaysPath) { replaysPath = _replaysPath; @@ -1312,6 +1318,7 @@ void SettingsCache::loadPaths() { QString dataPath = getDataPath(); deckPath = getSafeConfigPath("paths/decks", dataPath + "/decks/"); + filtersPath = getSafeConfigPath("paths/filters", dataPath + "/filters/"); replaysPath = getSafeConfigPath("paths/replays", dataPath + "/replays/"); themesPath = getSafeConfigPath("paths/themes", dataPath + "/themes/"); picsPath = getSafeConfigPath("paths/pics", dataPath + "/pics/"); diff --git a/cockatrice/src/settings/cache_settings.h b/cockatrice/src/settings/cache_settings.h index 4440ca0ac..d4ec7f286 100644 --- a/cockatrice/src/settings/cache_settings.h +++ b/cockatrice/src/settings/cache_settings.h @@ -103,7 +103,7 @@ private: QByteArray tokenDialogGeometry; QByteArray setsDialogGeometry; QString lang; - QString deckPath, replaysPath, picsPath, redirectCachePath, customPicsPath, cardDatabasePath, + QString deckPath, filtersPath, replaysPath, picsPath, redirectCachePath, customPicsPath, cardDatabasePath, customCardDatabasePath, themesPath, spoilerDatabasePath, tokenDatabasePath, themeName; bool tabVisualDeckStorageOpen, tabServerOpen, tabAccountOpen, tabDeckStorageOpen, tabReplaysOpen, tabAdminOpen, tabLogOpen; @@ -233,6 +233,10 @@ public: { return deckPath; } + QString getFiltersPath() const + { + return filtersPath; + } QString getReplaysPath() const { return replaysPath; @@ -754,6 +758,7 @@ public slots: void setShowTipsOnStartup(bool _showTipsOnStartup); void setSeenTips(const QList &_seenTips); void setDeckPath(const QString &_deckPath); + void setFiltersPath(const QString &_filtersPath); void setReplaysPath(const QString &_replaysPath); void setThemesPath(const QString &_themesPath); void setCustomCardDatabasePath(const QString &_customCardDatabasePath); diff --git a/dbconverter/src/mocks.cpp b/dbconverter/src/mocks.cpp index 80a83e202..1b0f16b55 100644 --- a/dbconverter/src/mocks.cpp +++ b/dbconverter/src/mocks.cpp @@ -106,6 +106,9 @@ void SettingsCache::setSeenTips(const QList & /* _seenTips */) void SettingsCache::setDeckPath(const QString & /* _deckPath */) { } +void SettingsCache::setFiltersPath(const QString & /*_filtersPath */) +{ +} void SettingsCache::setReplaysPath(const QString & /* _replaysPath */) { } diff --git a/tests/carddatabase/mocks.cpp b/tests/carddatabase/mocks.cpp index 184de3727..2b67dd66d 100644 --- a/tests/carddatabase/mocks.cpp +++ b/tests/carddatabase/mocks.cpp @@ -110,6 +110,9 @@ void SettingsCache::setSeenTips(const QList & /* _seenTips */) void SettingsCache::setDeckPath(const QString & /* _deckPath */) { } +void SettingsCache::setFiltersPath(const QString & /*_filtersPath */) +{ +} void SettingsCache::setReplaysPath(const QString & /* _replaysPath */) { }