annotate include/library/library.h @ 409:8d06825d96d1

library: refresh in a separate thread this is fugly but it works
author Paper <paper@tflc.us>
date Thu, 02 Apr 2026 00:18:56 -0400
parents e561b7542b7b
children eb554255ea5f
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_LIBRARY_LIBRARY_H_
3ec7804abf17 include: make header guards more sane
Paper <paper@paper.us.eu.org>
parents: 258
diff changeset
2 #define MINORI_LIBRARY_LIBRARY_H_
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
3
393
963047512d34 *: clang-format
Paper <paper@tflc.us>
parents: 382
diff changeset
4 #include "core/filesystem.h"
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
5 #include "library/library.h"
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
6
369
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 366
diff changeset
7 #include <filesystem>
366
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 328
diff changeset
8 #include <optional>
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
9 #include <unordered_map>
409
8d06825d96d1 library: refresh in a separate thread
Paper <paper@tflc.us>
parents: 404
diff changeset
10 #include <thread>
8d06825d96d1 library: refresh in a separate thread
Paper <paper@tflc.us>
parents: 404
diff changeset
11 #include <mutex>
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
12
223
84e0a3c4737a library: implement menu bar buttons
Paper <mrpapersonic@gmail.com>
parents: 222
diff changeset
13 namespace Library {
84e0a3c4737a library: implement menu bar buttons
Paper <mrpapersonic@gmail.com>
parents: 222
diff changeset
14
366
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 328
diff changeset
15 class Database final {
328
71396ecb6f7e library: convert to class + database
Paper <paper@paper.us.eu.org>
parents: 261
diff changeset
16 public:
382
0265e125f680 filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents: 369
diff changeset
17 Database();
0265e125f680 filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents: 369
diff changeset
18
0265e125f680 filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents: 369
diff changeset
19 /* Update watchers from current library paths */
0265e125f680 filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents: 369
diff changeset
20 void UpdateWatchers();
0265e125f680 filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents: 369
diff changeset
21
0265e125f680 filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents: 369
diff changeset
22 bool GetPathAnimeAndEpisode(const std::string &basename, int *aid, int *ep);
0265e125f680 filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents: 369
diff changeset
23
0265e125f680 filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents: 369
diff changeset
24 void EventHandler(const std::filesystem::path &path, Filesystem::IWatcher::Event event);
0265e125f680 filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents: 369
diff changeset
25 static void StaticEventHandler(void *opaque, const std::filesystem::path &path, Filesystem::IWatcher::Event event);
0265e125f680 filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents: 369
diff changeset
26
366
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 328
diff changeset
27 std::optional<std::filesystem::path> GetAnimeFolder(int id);
328
71396ecb6f7e library: convert to class + database
Paper <paper@paper.us.eu.org>
parents: 261
diff changeset
28 void Refresh();
366
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 328
diff changeset
29 void Refresh(int id);
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
30
409
8d06825d96d1 library: refresh in a separate thread
Paper <paper@tflc.us>
parents: 404
diff changeset
31 std::optional<std::filesystem::path> GetAnimeEpisodePath(int anime, int episode);
366
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 328
diff changeset
32
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 328
diff changeset
33 private:
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 328
diff changeset
34 void Refresh(std::optional<int> find_id);
409
8d06825d96d1 library: refresh in a separate thread
Paper <paper@tflc.us>
parents: 404
diff changeset
35 /* refresh_thread entry point */
8d06825d96d1 library: refresh in a separate thread
Paper <paper@tflc.us>
parents: 404
diff changeset
36 void RefreshThread();
382
0265e125f680 filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents: 369
diff changeset
37
404
e561b7542b7b *: fix build on mac os x
Paper <paper@tflc.us>
parents: 393
diff changeset
38 Filesystem::PathMap<std::unique_ptr<Filesystem::IWatcher>> watchers_;
382
0265e125f680 filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents: 369
diff changeset
39
409
8d06825d96d1 library: refresh in a separate thread
Paper <paper@tflc.us>
parents: 404
diff changeset
40 /* ID we're looking for (This is terrible, but other ways are also terrible in their own unique ways) */
382
0265e125f680 filesystem: implement filesystem watcher
Paper <paper@tflc.us>
parents: 369
diff changeset
41 std::optional<int> find_id_;
409
8d06825d96d1 library: refresh in a separate thread
Paper <paper@tflc.us>
parents: 404
diff changeset
42
8d06825d96d1 library: refresh in a separate thread
Paper <paper@tflc.us>
parents: 404
diff changeset
43 /* Anime episodes. Indexed as `folders[id][episode]' */
8d06825d96d1 library: refresh in a separate thread
Paper <paper@tflc.us>
parents: 404
diff changeset
44 std::unordered_map<int, std::unordered_map<int, std::filesystem::path>> items;
8d06825d96d1 library: refresh in a separate thread
Paper <paper@tflc.us>
parents: 404
diff changeset
45 std::recursive_mutex items_mutex_;
8d06825d96d1 library: refresh in a separate thread
Paper <paper@tflc.us>
parents: 404
diff changeset
46
8d06825d96d1 library: refresh in a separate thread
Paper <paper@tflc.us>
parents: 404
diff changeset
47 /* Thread that runs the refreshing.
8d06825d96d1 library: refresh in a separate thread
Paper <paper@tflc.us>
parents: 404
diff changeset
48 * When Refresh() is called, if this is a valid thread, then it will be
8d06825d96d1 library: refresh in a separate thread
Paper <paper@tflc.us>
parents: 404
diff changeset
49 * join()'d. This stinks, and a better method would be to have the
8d06825d96d1 library: refresh in a separate thread
Paper <paper@tflc.us>
parents: 404
diff changeset
50 * thread running in the background waiting on a queue. Oh well. */
8d06825d96d1 library: refresh in a separate thread
Paper <paper@tflc.us>
parents: 404
diff changeset
51 std::thread refresh_thread_;
328
71396ecb6f7e library: convert to class + database
Paper <paper@paper.us.eu.org>
parents: 261
diff changeset
52 };
71396ecb6f7e library: convert to class + database
Paper <paper@paper.us.eu.org>
parents: 261
diff changeset
53
71396ecb6f7e library: convert to class + database
Paper <paper@paper.us.eu.org>
parents: 261
diff changeset
54 extern Database db;
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
55
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 223
diff changeset
56 } // namespace Library
223
84e0a3c4737a library: implement menu bar buttons
Paper <mrpapersonic@gmail.com>
parents: 222
diff changeset
57
261
3ec7804abf17 include: make header guards more sane
Paper <paper@paper.us.eu.org>
parents: 258
diff changeset
58 #endif // MINORI_LIBRARY_LIBRARY_H_