summaryrefslogtreecommitdiff
path: root/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'plugin')
-rw-r--r--plugin/src/Caelestia/filesystemmodel.cpp47
1 files changed, 32 insertions, 15 deletions
diff --git a/plugin/src/Caelestia/filesystemmodel.cpp b/plugin/src/Caelestia/filesystemmodel.cpp
index 8722cc0..3fb20d9 100644
--- a/plugin/src/Caelestia/filesystemmodel.cpp
+++ b/plugin/src/Caelestia/filesystemmodel.cpp
@@ -130,19 +130,17 @@ void FileSystemModel::updateWatcher() {
void FileSystemModel::updateEntries() {
if (m_path.isEmpty()) {
- beginResetModel();
- qDeleteAll(m_entries);
- m_entries.clear();
- emit entriesChanged();
- endResetModel();
+ if (!m_entries.isEmpty()) {
+ beginResetModel();
+ qDeleteAll(m_entries);
+ m_entries.clear();
+ emit entriesChanged();
+ endResetModel();
+ }
return;
}
- beginResetModel();
- qDeleteAll(m_entries);
- m_entries.clear();
-
const auto flags = m_recursive ? QDirIterator::Subdirectories : QDirIterator::NoIteratorFlags;
std::optional<QDirIterator> iter;
@@ -160,17 +158,36 @@ void FileSystemModel::updateEntries() {
iter.emplace(m_path, QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot, flags);
}
+ QStringList newPaths;
+
while (iter.value().hasNext()) {
- QString entry = iter.value().next();
+ QString path = iter.value().next();
if (m_filter == Images) {
- QImageReader reader(entry);
- if (reader.canRead()) {
- m_entries << new FileSystemEntry(entry, m_dir.relativeFilePath(entry), this);
+ QImageReader reader(path);
+ if (!reader.canRead()) {
+ continue;
}
- } else {
- m_entries << new FileSystemEntry(entry, m_dir.relativeFilePath(entry), this);
}
+
+ newPaths << path;
+ }
+
+ QStringList oldPaths;
+ for (const auto& entry : m_entries) {
+ oldPaths << entry->path();
+ }
+
+ if (newPaths == oldPaths) {
+ return;
+ }
+
+ beginResetModel();
+ qDeleteAll(m_entries);
+ m_entries.clear();
+
+ for (const auto& path : newPaths) {
+ m_entries << new FileSystemEntry(path, m_dir.relativeFilePath(path), this);
}
emit entriesChanged();