From 9d3c299c0ab9515a72944376ce53000bc0bc0b01 Mon Sep 17 00:00:00 2001 From: liyigang Date: Wed, 25 Sep 2024 20:18:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Mimetype=20loading=20optimization=20sol?= =?UTF-8?q?ution=20turns=20to=20mainline=EF=BC=8CModify=20the=20introduced?= =?UTF-8?q?=20ABI=20compatibility=20issue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modify the introduced ABI compatibility issue Log: Mimetype loading optimization solution turns to mainline,Modify the introduced ABI compatibility issue Task: https://pms.uniontech.com/task-view-361145.html --- .../dfm-base/interfaces/abstractdiriterator.h | 9 ------- src/dfm-base/file/local/localdiriterator.cpp | 26 ++++++++++++------- src/dfm-base/file/local/localdiriterator.h | 3 --- .../file/local/private/localdiriterator_p.h | 1 + src/dfm-base/utils/filestatisticsjob.cpp | 2 +- src/dfm-base/utils/traversaldirthread.cpp | 2 +- .../fileoperatebaseworker.cpp | 1 + .../utils/traversaldirthreadmanager.cpp | 2 +- .../searcher/iterator/iteratorsearcher.cpp | 2 +- 9 files changed, 22 insertions(+), 26 deletions(-) diff --git a/include/dfm-base/interfaces/abstractdiriterator.h b/include/dfm-base/interfaces/abstractdiriterator.h index 05d5723dd0..ffe0965825 100644 --- a/include/dfm-base/interfaces/abstractdiriterator.h +++ b/include/dfm-base/interfaces/abstractdiriterator.h @@ -121,15 +121,6 @@ class AbstractDirIterator : public QObject { return {}; } - virtual void setQueryAttributes(const QString &attributes) { - queryFileAttributes = attributes; - } - virtual QString queryAttributes() const - { - return queryFileAttributes; - } -private: - QString queryFileAttributes; // isempty or * is query all file attributes }; } diff --git a/src/dfm-base/file/local/localdiriterator.cpp b/src/dfm-base/file/local/localdiriterator.cpp index f186587790..b15ffc79d9 100644 --- a/src/dfm-base/file/local/localdiriterator.cpp +++ b/src/dfm-base/file/local/localdiriterator.cpp @@ -59,17 +59,19 @@ FileInfoPointer LocalDirIteratorPrivate::fileInfo(const QSharedPointerattribute(dfmio::DFileInfo::AttributeID::kStandardSymlinkTarget).toString(); if (FileUtils::isLocalDevice(url) && (targetPath.isEmpty() || FileUtils::isLocalDevice(QUrl::fromLocalFile(targetPath)))) { info = QSharedPointer(new SyncFileInfo(url)); } else { info = QSharedPointer(new AsyncFileInfo(url, dfmInfo)); info->setExtendedAttributes(ExtInfoType::kFileIsHid, isHidden); - info.dynamicCast()->cacheAsyncAttributes(q->queryAttributes()); + info.dynamicCast()->cacheAsyncAttributes(q->property("QueryAttributes").toString()); } if (info) { - if (!q->queryAttributes().isEmpty() && q->queryAttributes() != "*") { + if (!q->property("QueryAttributes").toString().isEmpty() + && q->property("QueryAttributes").toString() != "*") { info->setExtendedAttributes(ExtInfoType::kFileNeedUpdate, true); info->setExtendedAttributes(ExtInfoType::kFileNeedTransInfo, true); } @@ -134,6 +136,12 @@ QUrl LocalDirIterator::next() */ bool LocalDirIterator::hasNext() const { + if (!d->initQuerry && d->dfmioDirIterator) { + d->initQuerry = true; + auto querry = property("QueryAttributes").toString(); + if (!querry.isEmpty()) + d->dfmioDirIterator->setQueryAttributes(querry); + } if (d->dfmioDirIterator) return d->dfmioDirIterator->hasNext(); @@ -269,6 +277,12 @@ bool LocalDirIterator::initIterator() DEnumeratorFuture *LocalDirIterator::asyncIterator() { + if (!d->initQuerry && d->dfmioDirIterator) { + d->initQuerry = true; + auto querry = property("QueryAttributes").toString(); + if (!querry.isEmpty()) + d->dfmioDirIterator->setQueryAttributes(querry); + } if (d->dfmioDirIterator) return d->dfmioDirIterator->asyncIterator(); return nullptr; @@ -280,11 +294,3 @@ QList LocalDirIterator::fileInfos() const return {}; return d->fileInfos(); } - - -void LocalDirIterator::setQueryAttributes(const QString &attributes) -{ - if (d->dfmioDirIterator) - d->dfmioDirIterator->setQueryAttributes(attributes); - return AbstractDirIterator::setQueryAttributes(attributes); -} diff --git a/src/dfm-base/file/local/localdiriterator.h b/src/dfm-base/file/local/localdiriterator.h index 75767c2a46..1bdfc4a7e4 100644 --- a/src/dfm-base/file/local/localdiriterator.h +++ b/src/dfm-base/file/local/localdiriterator.h @@ -48,9 +48,6 @@ class LocalDirIterator : public AbstractDirIterator DFMIO::DEnumeratorFuture *asyncIterator(); // get all sub file's fileinfo virtual QList fileInfos() const override; - - // AbstractDirIterator interface - virtual void setQueryAttributes(const QString &attributes) override; }; } diff --git a/src/dfm-base/file/local/private/localdiriterator_p.h b/src/dfm-base/file/local/private/localdiriterator_p.h index 971ac48b7c..6ec8fcb5ef 100644 --- a/src/dfm-base/file/local/private/localdiriterator_p.h +++ b/src/dfm-base/file/local/private/localdiriterator_p.h @@ -46,6 +46,7 @@ class LocalDirIteratorPrivate : public QObject QSet hideFileList; bool isLocalDevice = false; bool isCdRomDevice = false; + bool initQuerry = false; }; } #endif // ABSTRACTDIRITERATOR_P_H diff --git a/src/dfm-base/utils/filestatisticsjob.cpp b/src/dfm-base/utils/filestatisticsjob.cpp index bc9b8cac8d..0e68f394ab 100644 --- a/src/dfm-base/utils/filestatisticsjob.cpp +++ b/src/dfm-base/utils/filestatisticsjob.cpp @@ -511,7 +511,7 @@ void FileStatisticsJob::statistcsOtherFileSystem() qCWarning(logDFMBase) << "Failed on create dir iterator, for url:" << directory_url; continue; } - d->iterator->setQueryAttributes("standard::name,standard::type,standard::size,\ + d->iterator->setProperty("QueryAttributes","standard::name,standard::type,standard::size,\ standard::size,standard::is-symlink,standard::symlink-target,access::*,unix::inode"); d->iteratorCanStop = true; while (d->iterator->hasNext()) { diff --git a/src/dfm-base/utils/traversaldirthread.cpp b/src/dfm-base/utils/traversaldirthread.cpp index ef47506b67..0842c450c2 100644 --- a/src/dfm-base/utils/traversaldirthread.cpp +++ b/src/dfm-base/utils/traversaldirthread.cpp @@ -71,7 +71,7 @@ void TraversalDirThread::setQueryAttributes(const QString &fileAttributes) return; fileInfoQueryAttributes = fileAttributes; if (fileInfoQueryAttributes.isEmpty() && fileInfoQueryAttributes != "*") - dirIterator->setQueryAttributes(fileInfoQueryAttributes); + dirIterator->setProperty("QueryAttributes", fileInfoQueryAttributes); } void TraversalDirThread::run() diff --git a/src/plugins/common/core/dfmplugin-fileoperations/fileoperations/fileoperationutils/fileoperatebaseworker.cpp b/src/plugins/common/core/dfmplugin-fileoperations/fileoperations/fileoperationutils/fileoperatebaseworker.cpp index 68f16022f6..473b319d0e 100644 --- a/src/plugins/common/core/dfmplugin-fileoperations/fileoperations/fileoperationutils/fileoperatebaseworker.cpp +++ b/src/plugins/common/core/dfmplugin-fileoperations/fileoperations/fileoperationutils/fileoperatebaseworker.cpp @@ -708,6 +708,7 @@ bool FileOperateBaseWorker::checkAndCopyDir(const DFileInfoPointer &fromInfo, co } bool self = true; + iterator->setProperty("QueryAttributes", "standard::name"); while (iterator->hasNext()) { if (!stateCheck()) { return false; diff --git a/src/plugins/filemanager/core/dfmplugin-workspace/utils/traversaldirthreadmanager.cpp b/src/plugins/filemanager/core/dfmplugin-workspace/utils/traversaldirthreadmanager.cpp index 18902c46ee..8932d3bb11 100644 --- a/src/plugins/filemanager/core/dfmplugin-workspace/utils/traversaldirthreadmanager.cpp +++ b/src/plugins/filemanager/core/dfmplugin-workspace/utils/traversaldirthreadmanager.cpp @@ -72,7 +72,7 @@ void TraversalDirThreadManager::start() running = true; if (this->sortRole != dfmio::DEnumerator::SortRoleCompareFlag::kSortRoleCompareDefault && dirIterator->oneByOne()) - dirIterator->setQueryAttributes("standard::name,standard::type,standard::size,\ + dirIterator->setProperty("QueryAttributes","standard::name,standard::type,standard::size,\ standard::size,standard::is-symlink,standard::symlink-target,access::*,time::*"); auto local = dirIterator.dynamicCast(); if (local && local->oneByOne()) { diff --git a/src/plugins/filemanager/dfmplugin-search/searchmanager/searcher/iterator/iteratorsearcher.cpp b/src/plugins/filemanager/dfmplugin-search/searchmanager/searcher/iterator/iteratorsearcher.cpp index bcc70af255..154216d01a 100644 --- a/src/plugins/filemanager/dfmplugin-search/searchmanager/searcher/iterator/iteratorsearcher.cpp +++ b/src/plugins/filemanager/dfmplugin-search/searchmanager/searcher/iterator/iteratorsearcher.cpp @@ -81,7 +81,7 @@ void IteratorSearcher::doSearch() if (!iterator) continue; - iterator->setQueryAttributes("standard::name,standard::type,standard::size,\ + iterator->setProperty("QueryAttributes","standard::name,standard::type,standard::size,\ standard::size,standard::is-symlink,standard::symlink-target,access::*,time::*"); // 仅在过滤目录下进行搜索时,过滤目录下的内容才能被检索