diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp index 8e43f703e..ed4da7a0a 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp @@ -13,6 +13,7 @@ #include #include #include +#include VisualDeckStorageWidget::VisualDeckStorageWidget(QWidget *parent) : QWidget(parent), folderWidget(nullptr) { @@ -104,6 +105,33 @@ VisualDeckStorageWidget::VisualDeckStorageWidget(QWidget *parent) : QWidget(pare } else { scrollArea->setWidget(databaseLoadIndicator); } + + addRecursiveWatch(watcher, SettingsCache::instance().getDeckPath()); + + // Signals for changes + connect(&watcher, &QFileSystemWatcher::fileChanged, [this] { + qDebug() << "Modified a file"; + if (scrollArea->widget() != databaseLoadIndicator) { + createRootFolderWidget(); + } + }); + + connect(&watcher, &QFileSystemWatcher::directoryChanged, [this] { + qDebug() << "Modified a folder"; + if (scrollArea->widget() != databaseLoadIndicator) { + createRootFolderWidget(); + } + }); +} + +void VisualDeckStorageWidget::addRecursiveWatch(QFileSystemWatcher &watcher, const QString &dirPath) +{ + QDir dir(dirPath); + watcher.addPath(dirPath); // Watch the root directory + + for (const QFileInfo &entry : dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot)) { + addRecursiveWatch(watcher, entry.absoluteFilePath()); + } } void VisualDeckStorageWidget::showEvent(QShowEvent *event) diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h index b6ced6375..62822d5f6 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h @@ -14,6 +14,7 @@ #include #include +#include class VisualDeckStorageSearchWidget; class VisualDeckStorageSortWidget; @@ -25,6 +26,7 @@ class VisualDeckStorageWidget final : public QWidget Q_OBJECT public: explicit VisualDeckStorageWidget(QWidget *parent); + void addRecursiveWatch(QFileSystemWatcher &watcher, const QString &dirPath); void retranslateUi(); CardSizeWidget *cardSizeWidget; @@ -68,6 +70,7 @@ private: QCheckBox *tagsOnWidgetsVisibilityCheckBox; QScrollArea *scrollArea; VisualDeckStorageFolderDisplayWidget *folderWidget; + QFileSystemWatcher watcher; }; #endif // VISUAL_DECK_STORAGE_WIDGET_H diff --git a/cockatrice/src/deck/deck_loader.cpp b/cockatrice/src/deck/deck_loader.cpp index ed1d8fa71..5249f1bba 100644 --- a/cockatrice/src/deck/deck_loader.cpp +++ b/cockatrice/src/deck/deck_loader.cpp @@ -162,6 +162,10 @@ bool DeckLoader::saveToFile(const QString &fileName, FileFormat fmt) lastFileName = fileName; lastFileFormat = fmt; } + + file.flush(); + file.close(); + return result; }