Mercurial > minori
annotate include/core/filesystem.h @ 406:31ce85df55a8 default tip
filesystem: add mac os x directory watcher
this code is incredibly stinky
tbh we should probably be using C++ threads everywhere else just
because they are SO much easier to code for than the shitty Qt
threads API
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 19 Jan 2026 22:48:56 -0500 |
| parents | e561b7542b7b |
| 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> |
| 393 | 4 #include <functional> |
| 11 | 5 #include <string> |
| 404 | 6 #include <unordered_map> |
| 11 | 7 |
| 8 namespace Filesystem { | |
| 9 | |
| 369 | 10 void CreateDirectories(const std::filesystem::path &path); |
| 258 | 11 std::filesystem::path GetDotPath(); // %APPDATA%/minori/, ~/Library/Application Support/minori/, ~/.config/minori/... |
| 12 std::filesystem::path GetConfigPath(); // (dotpath)/config.json | |
| 379 | 13 std::filesystem::path GetAnimeDBPath(); // (dotpath)/anime/db.json |
| 14 std::filesystem::path GetTorrentsPath(); // (dotpath)/torrents/... | |
| 378 | 15 std::filesystem::path GetAnimePostersPath(); // (dotpath)/anime/posters/ |
| 11 | 16 |
| 404 | 17 struct PathHash { |
| 18 auto operator()(const std::filesystem::path &p) const noexcept { | |
| 19 return std::filesystem::hash_value(p); | |
| 20 } | |
| 21 }; | |
| 22 | |
| 23 template<typename T> | |
| 24 using PathMap = std::unordered_map<std::filesystem::path, T, PathHash>; | |
| 25 | |
|
382
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 /* Filesystem watcher interface. This is implemented differently on |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
28 * different platforms :) */ |
|
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 struct IWatcher { |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
31 enum Event { |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
32 /* File/directory 'path' was created */ |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
33 Created, |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
34 /* File/directory 'path' was deleted */ |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
35 Deleted, |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
36 }; |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
37 |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
38 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
|
39 |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
40 virtual ~IWatcher() = default; |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
41 virtual void Process() = 0; |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
42 }; |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
43 |
|
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
44 /* Constructor functions. Yes, I'm doing this the C way :) */ |
| 393 | 45 IWatcher *GetRecursiveFilesystemWatcher(void *opaque, const std::filesystem::path &path, |
| 46 IWatcher::EventHandler handler); | |
|
382
0265e125f680
filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents:
379
diff
changeset
|
47 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
|
48 |
| 36 | 49 } // namespace Filesystem |
| 11 | 50 |
|
261
3ec7804abf17
include: make header guards more sane
Paper <paper@paper.us.eu.org>
parents:
258
diff
changeset
|
51 #endif // MINORI_CORE_FILESYSTEM_H_ |
