Skip to content

Commit 8d1abff

Browse files
sync: from linuxdeepin/dtkcore
Synchronize source files from linuxdeepin/dtkcore. Source-pull-request: linuxdeepin/dtkcore#521
1 parent b0f0e17 commit 8d1abff

File tree

2 files changed

+47
-22
lines changed

2 files changed

+47
-22
lines changed

src/dci/private/ddcifileengine.cpp

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -76,21 +76,20 @@ static DDciFileShared getDciFile(const QString &dciFilePath, bool usePath = true
7676
return shared;
7777
}
7878

79+
#if QT_VERSION < QT_VERSION_CHECK(6, 8, 0)
7980
DDciFileEngineIterator::DDciFileEngineIterator(QDir::Filters filters, const QStringList &nameFilters)
80-
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
81-
: QAbstractFileEngineIterator(nullptr, filters, nameFilters)
82-
#else
8381
: QAbstractFileEngineIterator(filters, nameFilters)
84-
#endif
8582
{
86-
8783
}
88-
89-
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 1)
90-
DDciFileEngineIterator::DDciFileEngineIterator(QDirListing::IteratorFlags filters, const QStringList &nameFilters)
91-
: QAbstractFileEngineIterator(nullptr, filters, nameFilters)
84+
#else
85+
DDciFileEngineIterator::DDciFileEngineIterator(const QString& path, QDir::Filters filters, const QStringList &nameFilters)
86+
: QAbstractFileEngineIterator(path, filters, nameFilters)
9287
{
88+
}
9389

90+
DDciFileEngineIterator::DDciFileEngineIterator(const QString& path, QDirListing::IteratorFlags filters, const QStringList &nameFilters)
91+
: QAbstractFileEngineIterator(path, filters, nameFilters)
92+
{
9493
}
9594
#endif
9695

@@ -116,18 +115,29 @@ bool DDciFileEngineIterator::advance()
116115
list = file->list(paths.second);
117116
}
118117

118+
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
119+
const auto filters = this->m_listingFilters;
120+
const bool excludeDirs = filters.testFlag(QDirListing::IteratorFlag::ExcludeDirs);
121+
const bool excludeFiles = filters.testFlag(QDirListing::IteratorFlag::ExcludeFiles);
122+
const bool excludeSymlinks = filters.testFlags(QDirListing::IteratorFlag::ExcludeSpecial) && !filters.testFlag(QDirListing::IteratorFlag::ResolveSymlinks);
123+
#else
124+
const auto filters = this->filters();
125+
const bool excludeDirs = !filters.testFlag(QDir::Dirs);
126+
const bool excludeFiles = !filters.testFlag(QDir::Files);
127+
const bool excludeSymlinks = filters.testFlag(QDir::NoSymLinks);
128+
#endif
129+
119130
for (int i = current + 1; i < list.count(); ++i) {
120131
// 先检查文件类型
121-
const auto filters = this->filters();
122132
const auto fileType = file->type(list.at(i));
123133
if (fileType == DDciFile::Directory) {
124-
if (!filters.testFlag(QDir::Files))
134+
if (excludeDirs)
125135
continue;
126136
} else if (fileType == DDciFile::File) {
127-
if (!filters.testFlag(QDir::Files))
137+
if (excludeFiles)
128138
continue;
129139
} else if (fileType == DDciFile::Symlink) {
130-
if (filters.testFlag(QDir::NoSymLinks))
140+
if (excludeSymlinks)
131141
continue;
132142
} else { // DDciFile::UnknowFile
133143
continue;
@@ -527,7 +537,8 @@ QString DDciFileEngine::fileName(QAbstractFileEngine::FileName file) const
527537
case AbsolutePathName:
528538
return QDir::cleanPath(DCI_FILE_SCHEME + dciFilePath);
529539
case BaseName:
530-
return QFileInfo(subfilePath).baseName();
540+
// QFileInfo::fileName selects FileEngine's BaseName in qt6.
541+
return QFileInfo(subfilePath).fileName();
531542
#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
532543
case AbsoluteLinkTarget:
533544
#else
@@ -572,22 +583,29 @@ QDateTime DDciFileEngine::fileTime(QAbstractFileEngine::FileTime time) const
572583
return QFileInfo(dciFilePath).fileTime(static_cast<QFile::FileTime>(time));
573584
}
574585
#endif
575-
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 1)
576-
QAbstractFileEngine::IteratorUniquePtr DDciFileEngine::beginEntryList(const QString &path, QDirListing::IteratorFlags filters, const QStringList &filterNames)
577-
#elif QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
586+
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
578587
QAbstractFileEngine::IteratorUniquePtr DDciFileEngine::beginEntryList(const QString &path, QDir::Filters filters, const QStringList &filterNames)
579588
#else
580589
DDciFileEngine::Iterator *DDciFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
581590
#endif
582591
{
583592
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
584593
Q_UNUSED(path);
585-
return QAbstractFileEngine::IteratorUniquePtr(new DDciFileEngineIterator(filters, filterNames));
594+
return QAbstractFileEngine::IteratorUniquePtr(new DDciFileEngineIterator(path, filters, filterNames));
586595
#else
587596
return new DDciFileEngineIterator(filters, filterNames);
588597
#endif
589598
}
590599

600+
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
601+
QAbstractFileEngine::IteratorUniquePtr DDciFileEngine::beginEntryList(const QString &path, QDirListing::IteratorFlags filters, const QStringList &filterNames)
602+
{
603+
auto iterator = new DDciFileEngineIterator(path, filters, filterNames);
604+
iterator->m_listingFilters = filters;
605+
return QAbstractFileEngine::IteratorUniquePtr(iterator);
606+
}
607+
#endif
608+
591609
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
592610
QAbstractFileEngine::IteratorUniquePtr DDciFileEngine::endEntryList()
593611
#else

src/dci/private/ddcifileengine_p.h

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,22 @@ class DDciFileEngineHandler : public QAbstractFileEngineHandler
3333

3434
class DDciFile;
3535
using DDciFileShared = QSharedPointer<DDciFile>;
36+
class DDciFileEngine;
3637
class DDciFileEngineIterator : public QAbstractFileEngineIterator
3738
{
3839
friend class DDciFileEngine;
3940
public:
41+
#if QT_VERSION < QT_VERSION_CHECK(6, 8, 0)
4042
DDciFileEngineIterator(QDir::Filters filters, const QStringList &nameFilters);
43+
#else
44+
DDciFileEngineIterator(const QString& path, QDir::Filters filters, const QStringList &nameFilters);
45+
DDciFileEngineIterator(const QString& path, QDirListing::IteratorFlags filters, const QStringList &nameFilters);
46+
#endif
4147

4248
#if QT_VERSION < QT_VERSION_CHECK(6, 8, 0)
4349
QString next() override;
4450
bool hasNext() const override;
4551
#else
46-
DDciFileEngineIterator(QDirListing::IteratorFlags filters, const QStringList &nameFilters);
4752
bool advance() override;
4853
#endif
4954

@@ -54,6 +59,10 @@ class DDciFileEngineIterator : public QAbstractFileEngineIterator
5459
mutable QStringList list;
5560
mutable int nextValid = -1;
5661
int current = -1;
62+
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
63+
QDirListing::IteratorFlags m_listingFilters;
64+
#endif
65+
friend class DDciFileEngine;
5766
};
5867

5968
class DDciFileEngine : public QAbstractFileEngine
@@ -111,10 +120,8 @@ class DDciFileEngine : public QAbstractFileEngine
111120
#endif
112121

113122
typedef DDciFileEngineIterator Iterator;
114-
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 1)
123+
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
115124
IteratorUniquePtr beginEntryList(const QString &path, QDirListing::IteratorFlags filters, const QStringList &filterNames) override;
116-
IteratorUniquePtr endEntryList() override;
117-
#elif QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
118125
IteratorUniquePtr beginEntryList(const QString &path, QDir::Filters filters, const QStringList &filterNames) override;
119126
IteratorUniquePtr endEntryList() override;
120127
#else

0 commit comments

Comments
 (0)