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
9#include <PhosphorFsLoader/phosphorfsloader_export.h>
10
11#include <QtCore/QList>
12#include <QtCore/QObject>
13#include <QtCore/QString>
14#include <QtCore/QStringList>
15
16#include <memory>
17
19
50class PHOSPHORFSLOADER_EXPORT DirectoryLoader : public QObject
51{
52 Q_OBJECT
53
54public:
57 struct Entry
58 {
59 QString key;
60 QString sourcePath;
62 };
63
71 explicit DirectoryLoader(IDirectoryLoaderSink& sink, QObject* parent = nullptr);
72 ~DirectoryLoader() override;
73
76
94 int loadFromDirectory(const QString& directory, LiveReload liveReload = LiveReload::Off);
95
115 int loadFromDirectories(const QStringList& directories, LiveReload liveReload = LiveReload::Off,
116 RegistrationOrder order = RegistrationOrder::LowestPriorityFirst);
117
121
123 int registeredCount() const;
124
127 QList<Entry> entries() const;
128
133 static constexpr qint64 kMaxFileBytes = 1 * 1024 * 1024;
134
138 static constexpr int kMaxEntries = 10'000;
139
142
146 void setMaxEntriesForTest(int cap);
147
150 QString watchedAncestorForTest(const QString& target) const;
151
154 bool hasParentWatchForTest(const QString& path) const;
155
156Q_SIGNALS:
177
178private:
179 class JsonScanStrategy;
180 std::unique_ptr<JsonScanStrategy> m_strategy;
181 std::unique_ptr<WatchedDirectorySet> m_watcher;
182};
183
184} // namespace PhosphorFsLoader
Generic JSON-directory loader with debounced live reload.
Definition DirectoryLoader.h:51
void setMaxEntriesForTest(int cap)
Test-only: override the per-rescan entry cap (default kMaxEntries).
void entriesChanged()
Fired after every rescan, coalesced by the 50 ms debounce — regardless of whether the discovered entr...
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 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:18
RegistrationOrder
Caller's declared priority direction for registerDirectories / setDirectories input.
Definition WatchedDirectorySet.h:58
LiveReload
Opt-in policy for directory watching.
Definition WatchedDirectorySet.h:34
Tracked entry — mirrors ParsedEntry minus the payload.
Definition DirectoryLoader.h:58
QString systemSourcePath
Definition DirectoryLoader.h:61
QString key
Definition DirectoryLoader.h:59
QString sourcePath
Definition DirectoryLoader.h:60