32class QPollingFileSystemWatcherEngine :
public QFileSystemWatcherEngine
40 QFile::Permissions permissions;
41 QDateTime lastModified;
44 static QStringList dirEntryList(
const QFileInfo &fileInfo)
46 Q_ASSERT(fileInfo.isDir());
48 QStringList fileNames;
49 using F = QDirListing::IteratorFlag;
50 constexpr auto flags = F::ExcludeOther | F::IncludeDotAndDotDot;
51 for (
const auto &entry : QDirListing(fileInfo.absoluteFilePath(), flags))
52 fileNames.emplace_back(entry.fileName());
57 FileInfo(
const QFileInfo &fileInfo)
58 : ownerId(fileInfo.ownerId()),
59 groupId(fileInfo.groupId()),
60 permissions(fileInfo.permissions()),
61 lastModified(fileInfo.lastModified(QTimeZone::UTC))
64 entries = dirEntryList(fileInfo);
66 FileInfo &operator=(
const QFileInfo &fileInfo)
68 *
this = FileInfo(fileInfo);
72 bool operator!=(
const QFileInfo &fileInfo)
const
74 if (fileInfo.isDir() && entries != dirEntryList(fileInfo))
76 return (ownerId != fileInfo.ownerId()
77 || groupId != fileInfo.groupId()
78 || permissions != fileInfo.permissions()
79 || lastModified != fileInfo.lastModified(QTimeZone::UTC));
83 QHash<QString, FileInfo> files, directories;
86 QPollingFileSystemWatcherEngine(QObject *parent);
88 QStringList addPaths(
const QStringList &paths, QStringList *files, QStringList *directories) override;
89 QStringList removePaths(
const QStringList &paths, QStringList *files, QStringList *directories) override;
92 void timerEvent(QTimerEvent *) final;
size_t qHash(const QSet< T > &key, size_t seed=0) noexcept(noexcept(qHashRangeCommutative(key.begin(), key.end(), seed)))