plugin/fsm: lazy entriesChanged
Only emit when it actually changes (comparison via paths)
This commit is contained in:
parent
f6c9380e9b
commit
ee0c011822
1 changed files with 32 additions and 15 deletions
|
|
@ -130,19 +130,17 @@ void FileSystemModel::updateWatcher() {
|
||||||
|
|
||||||
void FileSystemModel::updateEntries() {
|
void FileSystemModel::updateEntries() {
|
||||||
if (m_path.isEmpty()) {
|
if (m_path.isEmpty()) {
|
||||||
beginResetModel();
|
if (!m_entries.isEmpty()) {
|
||||||
qDeleteAll(m_entries);
|
beginResetModel();
|
||||||
m_entries.clear();
|
qDeleteAll(m_entries);
|
||||||
emit entriesChanged();
|
m_entries.clear();
|
||||||
endResetModel();
|
emit entriesChanged();
|
||||||
|
endResetModel();
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
beginResetModel();
|
|
||||||
qDeleteAll(m_entries);
|
|
||||||
m_entries.clear();
|
|
||||||
|
|
||||||
const auto flags = m_recursive ? QDirIterator::Subdirectories : QDirIterator::NoIteratorFlags;
|
const auto flags = m_recursive ? QDirIterator::Subdirectories : QDirIterator::NoIteratorFlags;
|
||||||
|
|
||||||
std::optional<QDirIterator> iter;
|
std::optional<QDirIterator> iter;
|
||||||
|
|
@ -160,17 +158,36 @@ void FileSystemModel::updateEntries() {
|
||||||
iter.emplace(m_path, QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot, flags);
|
iter.emplace(m_path, QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList newPaths;
|
||||||
|
|
||||||
while (iter.value().hasNext()) {
|
while (iter.value().hasNext()) {
|
||||||
QString entry = iter.value().next();
|
QString path = iter.value().next();
|
||||||
|
|
||||||
if (m_filter == Images) {
|
if (m_filter == Images) {
|
||||||
QImageReader reader(entry);
|
QImageReader reader(path);
|
||||||
if (reader.canRead()) {
|
if (!reader.canRead()) {
|
||||||
m_entries << new FileSystemEntry(entry, m_dir.relativeFilePath(entry), this);
|
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();
|
emit entriesChanged();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue