Skip to content

Commit 7fdc769

Browse files
deepin-ci-robot18202781743
authored andcommitted
sync: from linuxdeepin/dtkcore
Synchronize source files from linuxdeepin/dtkcore. Source-pull-request: linuxdeepin/dtkcore#521
1 parent 71c5534 commit 7fdc769

File tree

2 files changed

+48
-23
lines changed

2 files changed

+48
-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 = false, excludeFiles = false, excludeSymlinks = false;
119+
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
120+
if (this->m_listingFilters) {
121+
const auto filters = this->m_listingFilters.value();
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: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,17 @@ class DDciFileEngineIterator : public QAbstractFileEngineIterator
3737
{
3838
friend class DDciFileEngine;
3939
public:
40+
#if QT_VERSION < QT_VERSION_CHECK(6, 8, 0)
4041
DDciFileEngineIterator(QDir::Filters filters, const QStringList &nameFilters);
42+
#else
43+
DDciFileEngineIterator(const QString &path, QDir::Filters filters, const QStringList &nameFilters);
44+
DDciFileEngineIterator(const QString &path, QDirListing::IteratorFlags filters, const QStringList &nameFilters);
45+
#endif
4146

4247
#if QT_VERSION < QT_VERSION_CHECK(6, 8, 0)
4348
QString next() override;
4449
bool hasNext() const override;
4550
#else
46-
DDciFileEngineIterator(QDirListing::IteratorFlags filters, const QStringList &nameFilters);
4751
bool advance() override;
4852
#endif
4953

@@ -54,6 +58,9 @@ class DDciFileEngineIterator : public QAbstractFileEngineIterator
5458
mutable QStringList list;
5559
mutable int nextValid = -1;
5660
int current = -1;
61+
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
62+
std::optional<QDirListing::IteratorFlags> m_listingFilters {std::nullopt};
63+
#endif
5764
};
5865

5966
class DDciFileEngine : public QAbstractFileEngine
@@ -111,10 +118,8 @@ class DDciFileEngine : public QAbstractFileEngine
111118
#endif
112119

113120
typedef DDciFileEngineIterator Iterator;
114-
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 1)
121+
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
115122
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)
118123
IteratorUniquePtr beginEntryList(const QString &path, QDir::Filters filters, const QStringList &filterNames) override;
119124
IteratorUniquePtr endEntryList() override;
120125
#else

0 commit comments

Comments
 (0)