KFileItemModelRolesUpdater: Skip directory item count if it isSlow()

This makes the behavior of kernel cifs/nfs mounts the same as with kio's
smb://. It also helps reduce the chance of the UI hanging due to
opendir/readdir slowing down stat calls on the UI thread.

Signed-off-by: Andrew Gunnerson <accounts+kde@chiller3.com>
This commit is contained in:
Andrew Gunnerson 2023-02-05 21:44:23 -05:00 committed by Méven Car
parent 24cc1483bc
commit 34e0a5488e

View file

@ -1209,7 +1209,7 @@ void KFileItemModelRolesUpdater::applySortRole(int index)
}
data.insert("type", item.mimeComment());
} else if (m_model->sortRole() == "size" && item.isLocalFile() && item.isDir()) {
} else if (m_model->sortRole() == "size" && item.isLocalFile() && !item.isSlow() && item.isDir()) {
const QString path = item.localPath();
if (m_scanDirectories) {
m_directoryContentsCounter->scanDirectory(path);
@ -1280,7 +1280,7 @@ QHash<QByteArray, QVariant> KFileItemModelRolesUpdater::rolesData(const KFileIte
const bool getSizeRole = m_roles.contains("size");
const bool getIsExpandableRole = m_roles.contains("isExpandable");
if ((getSizeRole || getIsExpandableRole) && item.isDir()) {
if ((getSizeRole || getIsExpandableRole) && !item.isSlow() && item.isDir()) {
if (item.isLocalFile()) {
// Tell m_directoryContentsCounter that we want to count the items
// inside the directory. The result will be received in slotDirectoryContentsCountReceived.