Plasma Engine  2.0
Loading...
Searching...
No Matches
DirectoryWatcher.h
1#pragma once
2
3#include <Foundation/Basics.h>
4
5#if PL_ENABLED(PL_SUPPORTS_DIRECTORY_WATCHER)
6
7# include <Foundation/Basics.h>
8# include <Foundation/Strings/String.h>
9# include <Foundation/Types/Bitflags.h>
10# include <Foundation/Types/Delegate.h>
11
13
15enum class plDirectoryWatcherAction
16{
17 None,
18 Added,
19 Removed,
20 Modified,
21 RenamedOldName,
22 RenamedNewName,
23};
24
25enum class plDirectoryWatcherType
26{
27 File,
28 Directory
29};
30
33class PL_FOUNDATION_DLL plDirectoryWatcher
34{
35public:
37 struct Watch
38 {
39 using StorageType = plUInt8;
40 constexpr static plUInt8 Default = 0;
41
43 enum Enum
44 {
45 Writes = PL_BIT(0),
46 Creates = PL_BIT(1),
47 Deletes = PL_BIT(2),
48 Renames = PL_BIT(3),
49 Subdirectories = PL_BIT(4),
50 };
51
52 struct Bits
53 {
54 StorageType Writes : 1;
55 StorageType Creates : 1;
56 StorageType Deletes : 1;
57 StorageType Renames : 1;
58 StorageType Subdirectories : 1;
59 };
60 };
61
62 plDirectoryWatcher();
63 plDirectoryWatcher(const plDirectoryWatcher&) = delete;
64 plDirectoryWatcher(plDirectoryWatcher&&) noexcept = delete;
65 ~plDirectoryWatcher();
66
67 plDirectoryWatcher& operator=(const plDirectoryWatcher&) = delete;
68 plDirectoryWatcher& operator=(plDirectoryWatcher&&) noexcept = delete;
69
74 plResult OpenDirectory(plStringView sAbsolutePath, plBitflags<Watch> whatToWatch);
75
78 void CloseDirectory();
79
82 plStringView GetDirectory() const { return m_sDirectoryPath; }
83
84 using EnumerateChangesFunction = plDelegate<void(plStringView sFilename, plDirectoryWatcherAction action, plDirectoryWatcherType type), 48>;
85
92 void EnumerateChanges(EnumerateChangesFunction func, plTime waitUpTo = plTime::MakeZero());
93
96 static void EnumerateChanges(plArrayPtr<plDirectoryWatcher*> watchers, EnumerateChangesFunction func, plTime waitUpTo = plTime::MakeZero());
97
98private:
99 plString m_sDirectoryPath;
100 plDirectoryWatcherImpl* m_pImpl = nullptr;
101};
102
103PL_DECLARE_FLAGS_OPERATORS(plDirectoryWatcher::Watch);
104
105#endif
This class encapsulates an array and it's size. It is recommended to use this class instead of plain ...
Definition ArrayPtr.h:37
plStringView represent a read-only sub-string of a larger string, as it can store a dedicated string ...
Definition StringView.h:34
The plBitflags class allows you to work with type-safe bitflags.
Definition Bitflags.h:82
A generic delegate class which supports static functions and member functions.
Definition Delegate.h:76
Definition DirectoryWatcher_Posix.h:677
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54
The time class encapsulates a double value storing the time in seconds.
Definition Time.h:12
PL_ALWAYS_INLINE static constexpr plTime MakeZero()
Creates an instance of plTime that was initialized with zero.
Definition Time.h:42