Mercurial > minori
annotate include/core/filesystem.h @ 382:0265e125f680
filesystem: implement filesystem watcher
I also ported the library code to use it as well. Once we implement
proper directory watching on Windows (and maybe others) this will
be fairly useful :)
| author | Paper <paper@tflc.us> |
|---|---|
| date | Thu, 06 Nov 2025 03:16:55 -0500 |
| parents | 5eaafed6c10b |
| children |
| rev | line source |
|---|---|
|
261
3ec7804abf17
include: make header guards more sane
Paper <paper@paper.us.eu.org>
parents:
258
diff
changeset
|
1 #ifndef MINORI_CORE_FILESYSTEM_H_ |
|
3ec7804abf17
include: make header guards more sane
Paper <paper@paper.us.eu.org>
parents:
258
diff
changeset
|
2 #define MINORI_CORE_FILESYSTEM_H_ |
| 258 | 3 #include <filesystem> |
| 11 | 4 #include <string> |
|
382
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
5 #include <functional> |
| 11 | 6 |
| 7 namespace Filesystem { | |
| 8 | |
| 369 | 9 void CreateDirectories(const std::filesystem::path &path); |
| 258 | 10 std::filesystem::path GetDotPath(); // %APPDATA%/minori/, ~/Library/Application Support/minori/, ~/.config/minori/... |
| 11 std::filesystem::path GetConfigPath(); // (dotpath)/config.json | |
| 379 | 12 std::filesystem::path GetAnimeDBPath(); // (dotpath)/anime/db.json |
| 13 std::filesystem::path GetTorrentsPath(); // (dotpath)/torrents/... | |
| 378 | 14 std::filesystem::path GetAnimePostersPath(); // (dotpath)/anime/posters/ |
| 11 | 15 |
|
382
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
16 /* ------------------------------------------------------------------------ */ |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
17 /* Filesystem watcher interface. This is implemented differently on |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
18 * different platforms :) */ |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
19 |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
20 struct IWatcher { |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
21 enum Event { |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
22 /* File/directory 'path' was created */ |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
23 Created, |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
24 /* File/directory 'path' was deleted */ |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
25 Deleted, |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
26 }; |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
27 |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
28 using EventHandler = std::function<void(void *opaque, const std::filesystem::path &path, Event event)>; |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
29 |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
30 virtual ~IWatcher() = default; |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
31 virtual void Process() = 0; |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
32 }; |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
33 |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
34 /* Constructor functions. Yes, I'm doing this the C way :) */ |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
35 IWatcher *GetRecursiveFilesystemWatcher(void *opaque, |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
36 const std::filesystem::path &path, IWatcher::EventHandler handler); |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
37 IWatcher *GetFilesystemWatcher(void *opaque, const std::filesystem::path &path, IWatcher::EventHandler handler); |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
38 |
| 36 | 39 } // namespace Filesystem |
| 11 | 40 |
|
261
3ec7804abf17
include: make header guards more sane
Paper <paper@paper.us.eu.org>
parents:
258
diff
changeset
|
41 #endif // MINORI_CORE_FILESYSTEM_H_ |
