Skip to content

Commit 9d77dc0

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

File tree

2 files changed

+49
-23
lines changed

2 files changed

+49
-23
lines changed

src/dci/private/ddcifileengine.cpp

Lines changed: 39 additions & 19 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,33 @@ bool DDciFileEngineIterator::advance()
116115
list = file->list(paths.second);
117116
}
118117

118+
bool excludeDirs, excludeFiles, excludeSymlinks;
119+
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
120+
if (this->m_listingFilters != -1) {
121+
const auto filters = this->m_listingFilters;
122+
excludeDirs = filters.testFlag(QDirListing::IteratorFlag::ExcludeDirs);
123+
excludeFiles = filters.testFlag(QDirListing::IteratorFlag::ExcludeFiles);
124+
excludeSymlinks = filters.testFlag(QDirListing::IteratorFlag::ExcludeSpecial) && !filters.testFlag(QDirListing::IteratorFlag::ResolveSymlinks);
125+
} else
126+
#endif
127+
{
128+
const auto filters = this->filters();
129+
excludeDirs = !filters.testFlag(QDir::Dirs);
130+
excludeFiles = !filters.testFlag(QDir::Files);
131+
excludeSymlinks = filters.testFlag(QDir::NoSymLinks);
132+
}
133+
119134
for (int i = current + 1; i < list.count(); ++i) {
120135
// 先检查文件类型
121-
const auto filters = this->filters();
122136
const auto fileType = file->type(list.at(i));
123137
if (fileType == DDciFile::Directory) {
124-
if (!filters.testFlag(QDir::Files))
138+
if (excludeDirs)
125139
continue;
126140
} else if (fileType == DDciFile::File) {
127-
if (!filters.testFlag(QDir::Files))
141+
if (excludeFiles)
128142
continue;
129143
} else if (fileType == DDciFile::Symlink) {
130-
if (filters.testFlag(QDir::NoSymLinks))
144+
if (excludeSymlinks)
131145
continue;
132146
} else { // DDciFile::UnknowFile
133147
continue;
@@ -527,7 +541,7 @@ QString DDciFileEngine::fileName(QAbstractFileEngine::FileName file) const
527541
case AbsolutePathName:
528542
return QDir::cleanPath(DCI_FILE_SCHEME + dciFilePath);
529543
case BaseName:
530-
return QFileInfo(subfilePath).baseName();
544+
return QFileInfo(subfilePath).fileName();
531545
#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
532546
case AbsoluteLinkTarget:
533547
#else
@@ -572,22 +586,28 @@ QDateTime DDciFileEngine::fileTime(QAbstractFileEngine::FileTime time) const
572586
return QFileInfo(dciFilePath).fileTime(static_cast<QFile::FileTime>(time));
573587
}
574588
#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)
589+
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
578590
QAbstractFileEngine::IteratorUniquePtr DDciFileEngine::beginEntryList(const QString &path, QDir::Filters filters, const QStringList &filterNames)
579591
#else
580592
DDciFileEngine::Iterator *DDciFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
581593
#endif
582594
{
583595
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
584-
Q_UNUSED(path);
585-
return QAbstractFileEngine::IteratorUniquePtr(new DDciFileEngineIterator(filters, filterNames));
596+
return QAbstractFileEngine::IteratorUniquePtr(new DDciFileEngineIterator(path, filters, filterNames));
586597
#else
587598
return new DDciFileEngineIterator(filters, filterNames);
588599
#endif
589600
}
590601

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

src/dci/private/ddcifileengine_p.h

Lines changed: 10 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,9 @@ 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 {-1};
64+
#endif
5765
};
5866

5967
class DDciFileEngine : public QAbstractFileEngine
@@ -111,10 +119,8 @@ class DDciFileEngine : public QAbstractFileEngine
111119
#endif
112120

113121
typedef DDciFileEngineIterator Iterator;
114-
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 1)
122+
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
115123
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)
118124
IteratorUniquePtr beginEntryList(const QString &path, QDir::Filters filters, const QStringList &filterNames) override;
119125
IteratorUniquePtr endEntryList() override;
120126
#else

0 commit comments

Comments
 (0)