Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
DirectoryLoader.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 fuddlesworth
2// SPDX-License-Identifier: LGPL-2.1-or-later
3
4#pragma once
5
10#include <PhosphorFsLoader/phosphorfsloader_export.h>
11
12#include <QtCore/QList>
13#include <QtCore/QObject>
14#include <QtCore/QString>
15#include <QtCore/QStringList>
16
17#include <memory>
18
20
51class PHOSPHORFSLOADER_EXPORT DirectoryLoader : public QObject
52{
53 Q_OBJECT
54
55public:
58 struct Entry
59 {
60 QString key;
61 QString sourcePath;
63 };
64
72 explicit DirectoryLoader(IDirectoryLoaderSink& sink, QObject* parent = nullptr);
73 ~DirectoryLoader() override;
74
77
98 int loadFromDirectory(const QString& directory, LiveReload liveReload = LiveReload::Off);
99
120 int loadFromDirectories(const QStringList& directories, LiveReload liveReload = LiveReload::Off,
121 RegistrationOrder order = RegistrationOrder::LowestPriorityFirst);
122
126
148 void rescanNow();
149
151 int registeredCount() const;
152
155 QList<Entry> entries() const;
156
161 static constexpr qint64 kMaxFileBytes = kMaxJsonFileBytes;
162
189 static constexpr int kMaxEntries = 10'000;
190
193
197 void setMaxEntriesForTest(int cap);
198
201 QString watchedAncestorForTest(const QString& target) const;
202
205 bool hasParentWatchForTest(const QString& path) const;
206
207Q_SIGNALS:
236
237private:
238 class JsonScanStrategy;
239 std::unique_ptr<JsonScanStrategy> m_strategy;
240 std::unique_ptr<WatchedDirectorySet> m_watcher;
241};
242
243} // namespace PhosphorFsLoader
Generic JSON-directory loader with debounced live reload.
Definition DirectoryLoader.h:52
void setMaxEntriesForTest(int cap)
Test-only: override the per-rescan entry cap (default kMaxEntries).
void entriesChanged()
Fired after every rescan — regardless of whether the discovered entry set or any underlying payload a...
void setDebounceIntervalForTest(int ms)
Test-only: override the debounce interval (default 50 ms).
DirectoryLoader(IDirectoryLoaderSink &sink, QObject *parent=nullptr)
Construct with a borrowed sink.
bool hasParentWatchForTest(const QString &path) const
Test-only: parent-watch introspection forwarded to the underlying WatchedDirectorySet.
QList< Entry > entries() const
Current entries (post last rescan), sorted by key for deterministic order across platforms and Qt ver...
int registeredCount() const
Count of entries currently tracked by the loader.
int loadFromDirectory(const QString &directory, LiveReload liveReload=LiveReload::Off)
Register a directory for scanning + (optionally) watching.
DirectoryLoader(const DirectoryLoader &)=delete
int loadFromDirectories(const QStringList &directories, LiveReload liveReload=LiveReload::Off, RegistrationOrder order=RegistrationOrder::LowestPriorityFirst)
Register multiple directories in caller-declared priority order.
void rescanNow()
Rescan every registered directory synchronously, on the calling stack, cancelling any pending debounc...
void requestRescan()
Trigger a debounced rescan.
QString watchedAncestorForTest(const QString &target) const
Test-only: ancestor-watch introspection forwarded to the underlying WatchedDirectorySet.
DirectoryLoader & operator=(const DirectoryLoader &)=delete
Consumer-supplied strategy for a DirectoryLoader.
Definition IDirectoryLoaderSink.h:32
Definition DirectoryLoader.h:19
RegistrationOrder
Caller's declared priority direction for registerDirectories / setDirectories input.
Definition WatchedDirectorySet.h:58
constexpr qint64 kMaxJsonFileBytes
Per-file size cap for JSON metadata reads.
Definition FileLimits.h:18
LiveReload
Opt-in policy for directory watching.
Definition WatchedDirectorySet.h:34
Tracked entry — mirrors ParsedEntry minus the payload.
Definition DirectoryLoader.h:59
QString systemSourcePath
Definition DirectoryLoader.h:62
QString key
Definition DirectoryLoader.h:60
QString sourcePath
Definition DirectoryLoader.h:61