plugin/fsm: allow disabling watching

This commit is contained in:
2 * r + 2 * t 2025-09-02 17:41:45 +10:00
parent a841c776d3
commit 74a99d2ac4
2 changed files with 24 additions and 2 deletions

View file

@ -59,6 +59,21 @@ void FileSystemModel::setRecursive(bool recursive) {
update(); update();
} }
bool FileSystemModel::watchChanges() const {
return m_watchChanges;
}
void FileSystemModel::setWatchChanges(bool watchChanges) {
if (m_watchChanges == watchChanges) {
return;
}
m_watchChanges = watchChanges;
emit watchChangesChanged();
update();
}
FileSystemModel::Filter FileSystemModel::filter() const { FileSystemModel::Filter FileSystemModel::filter() const {
return m_filter; return m_filter;
} }
@ -79,7 +94,7 @@ QList<FileSystemEntry*> FileSystemModel::entries() const {
} }
void FileSystemModel::watchDirIfRecursive(const QString& path) { void FileSystemModel::watchDirIfRecursive(const QString& path) {
if (m_recursive) { if (m_recursive && m_watchChanges) {
const auto currentDir = m_dir; const auto currentDir = m_dir;
const auto future = QtConcurrent::run([path]() { const auto future = QtConcurrent::run([path]() {
QDirIterator iter(path, QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories); QDirIterator iter(path, QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
@ -112,7 +127,7 @@ void FileSystemModel::updateWatcher() {
m_watcher.removePaths(m_watcher.directories()); m_watcher.removePaths(m_watcher.directories());
} }
if (m_path.isEmpty()) { if (!m_watchChanges || m_path.isEmpty()) {
return; return;
} }

View file

@ -62,6 +62,7 @@ class FileSystemModel : public QAbstractListModel {
Q_PROPERTY(QString path READ path WRITE setPath NOTIFY pathChanged) Q_PROPERTY(QString path READ path WRITE setPath NOTIFY pathChanged)
Q_PROPERTY(bool recursive READ recursive WRITE setRecursive NOTIFY recursiveChanged) Q_PROPERTY(bool recursive READ recursive WRITE setRecursive NOTIFY recursiveChanged)
Q_PROPERTY(bool watchChanges READ watchChanges WRITE setWatchChanges NOTIFY watchChangesChanged)
Q_PROPERTY(Filter filter READ filter WRITE setFilter NOTIFY filterChanged) Q_PROPERTY(Filter filter READ filter WRITE setFilter NOTIFY filterChanged)
Q_PROPERTY(QList<FileSystemEntry*> entries READ entries NOTIFY entriesChanged) Q_PROPERTY(QList<FileSystemEntry*> entries READ entries NOTIFY entriesChanged)
@ -77,6 +78,7 @@ public:
explicit FileSystemModel(QObject* parent = nullptr) explicit FileSystemModel(QObject* parent = nullptr)
: QAbstractListModel(parent) : QAbstractListModel(parent)
, m_recursive(true) , m_recursive(true)
, m_watchChanges(true)
, m_filter(NoFilter) { , m_filter(NoFilter) {
connect(&m_watcher, &QFileSystemWatcher::directoryChanged, this, &FileSystemModel::watchDirIfRecursive); connect(&m_watcher, &QFileSystemWatcher::directoryChanged, this, &FileSystemModel::watchDirIfRecursive);
connect(&m_watcher, &QFileSystemWatcher::directoryChanged, this, &FileSystemModel::updateEntriesForDir); connect(&m_watcher, &QFileSystemWatcher::directoryChanged, this, &FileSystemModel::updateEntriesForDir);
@ -92,6 +94,9 @@ public:
bool recursive() const; bool recursive() const;
void setRecursive(bool recursive); void setRecursive(bool recursive);
bool watchChanges() const;
void setWatchChanges(bool watchChanges);
Filter filter() const; Filter filter() const;
void setFilter(Filter filter); void setFilter(Filter filter);
@ -100,6 +105,7 @@ public:
signals: signals:
void pathChanged(); void pathChanged();
void recursiveChanged(); void recursiveChanged();
void watchChangesChanged();
void filterChanged(); void filterChanged();
void entriesChanged(); void entriesChanged();
@ -114,6 +120,7 @@ private:
QString m_path; QString m_path;
bool m_recursive; bool m_recursive;
bool m_watchChanges;
Filter m_filter; Filter m_filter;
void watchDirIfRecursive(const QString& path); void watchDirIfRecursive(const QString& path);