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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 230
diff changeset
3 #include <filesystem>
393
963047512d34 *: clang-format
Paper <paper@tflc.us>
parents: 382
diff changeset
4 #include <functional>
11
fc1bf97c528b *: use C++11 standard
Paper <mrpapersonic@gmail.com>
parents: 9
diff changeset
5 #include <string>
404
e561b7542b7b *: fix build on mac os x
Paper <paper@tflc.us>
parents: 393
diff changeset
6 #include <unordered_map>
11
fc1bf97c528b *: use C++11 standard
Paper <mrpapersonic@gmail.com>
parents: 9
diff changeset
7
fc1bf97c528b *: use C++11 standard
Paper <mrpapersonic@gmail.com>
parents: 9
diff changeset
8 namespace Filesystem {
fc1bf97c528b *: use C++11 standard
Paper <mrpapersonic@gmail.com>
parents: 9
diff changeset
9
369
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 261
diff changeset
10 void CreateDirectories(const std::filesystem::path &path);
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 230
diff changeset
11 std::filesystem::path GetDotPath(); // %APPDATA%/minori/, ~/Library/Application Support/minori/, ~/.config/minori/...
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 230
diff changeset
12 std::filesystem::path GetConfigPath(); // (dotpath)/config.json
379
5eaafed6c10b *: clang-format
Paper <paper@tflc.us>
parents: 378
diff changeset
13 std::filesystem::path GetAnimeDBPath(); // (dotpath)/anime/db.json
5eaafed6c10b *: clang-format
Paper <paper@tflc.us>
parents: 378
diff changeset
14 std::filesystem::path GetTorrentsPath(); // (dotpath)/torrents/...
378
5912dafc6e28 anime: add poster cache
Paper <paper@tflc.us>
parents: 369
diff changeset
15 std::filesystem::path GetAnimePostersPath(); // (dotpath)/anime/posters/
11
fc1bf97c528b *: use C++11 standard
Paper <mrpapersonic@gmail.com>
parents: 9
diff changeset
16
404
e561b7542b7b *: fix build on mac os x
Paper <paper@tflc.us>
parents: 393
diff changeset
17 struct PathHash {
e561b7542b7b *: fix build on mac os x
Paper <paper@tflc.us>
parents: 393
diff changeset
18 auto operator()(const std::filesystem::path &p) const noexcept {
e561b7542b7b *: fix build on mac os x
Paper <paper@tflc.us>
parents: 393
diff changeset
19 return std::filesystem::hash_value(p);
e561b7542b7b *: fix build on mac os x
Paper <paper@tflc.us>
parents: 393
diff changeset
20 }
e561b7542b7b *: fix build on mac os x
Paper <paper@tflc.us>
parents: 393
diff changeset
21 };
e561b7542b7b *: fix build on mac os x
Paper <paper@tflc.us>
parents: 393
diff changeset
22
e561b7542b7b *: fix build on mac os x
Paper <paper@tflc.us>
parents: 393
diff changeset
23 template<typename T>
e561b7542b7b *: fix build on mac os x
Paper <paper@tflc.us>
parents: 393
diff changeset
24 using PathMap = std::unordered_map<std::filesystem::path, T, PathHash>;
e561b7542b7b *: fix build on mac os x
Paper <paper@tflc.us>
parents: 393
diff changeset
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
963047512d34 *: clang-format
Paper <paper@tflc.us>
parents: 382
diff changeset
45 IWatcher *GetRecursiveFilesystemWatcher(void *opaque, const std::filesystem::path &path,
963047512d34 *: clang-format
Paper <paper@tflc.us>
parents: 382
diff changeset
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
2743011a6042 *: mass update
Paper <mrpapersonic@gmail.com>
parents: 11
diff changeset
49 } // namespace Filesystem
11
fc1bf97c528b *: use C++11 standard
Paper <mrpapersonic@gmail.com>
parents: 9
diff changeset
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_