annotate src/library/library.cc @ 373:fbc8c617de80

dep/animone: exception handling is the worst c++ anti-feature
author Paper <paper@tflc.us>
date Fri, 25 Jul 2025 11:03:05 -0400
parents 47c9f8502269
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
1 #include "library/library.h"
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
2 #include "core/anime_db.h"
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 228
diff changeset
3 #include "core/session.h"
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
4 #include "core/strings.h"
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
5
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
6 #include "anitomy/anitomy.h"
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
7
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
8 #include <filesystem>
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 228
diff changeset
9 #include <string>
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
10 #include <unordered_map>
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
11
223
84e0a3c4737a library: implement menu bar buttons
Paper <mrpapersonic@gmail.com>
parents: 222
diff changeset
12 #include <iostream>
84e0a3c4737a library: implement menu bar buttons
Paper <mrpapersonic@gmail.com>
parents: 222
diff changeset
13
84e0a3c4737a library: implement menu bar buttons
Paper <mrpapersonic@gmail.com>
parents: 222
diff changeset
14 namespace Library {
84e0a3c4737a library: implement menu bar buttons
Paper <mrpapersonic@gmail.com>
parents: 222
diff changeset
15
369
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 366
diff changeset
16 std::optional<std::filesystem::path> Database::GetAnimeFolder(int id)
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 366
diff changeset
17 {
366
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
18 // this function sucks, but it's the most I can really do for now.
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
19 //
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
20 // in the future the Refresh() function should look for directories
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
21 // as well that fit the anime name and *also* have episodes in them.
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
22 // it should give each of these directories a rating by how many
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
23 // episodes are contained in them. whichever directory has more episodes
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
24 // wins, or the first found if there is an equal amount.
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
25
369
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 366
diff changeset
26 for (const auto &[anime_id, episodes] : items) {
366
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
27 if (id != anime_id)
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
28 continue;
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
29
369
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 366
diff changeset
30 for (const auto &[episode, path] : episodes) {
366
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
31 return path.parent_path();
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
32 break;
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
33 }
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
34
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
35 break;
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
36 }
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
37
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
38 return std::nullopt;
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
39 }
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
40
369
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 366
diff changeset
41 void Database::Refresh(std::optional<int> find_id)
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 366
diff changeset
42 {
328
71396ecb6f7e library: convert to class + database
Paper <paper@paper.us.eu.org>
parents: 319
diff changeset
43 items.clear();
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
44
369
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 366
diff changeset
45 for (const auto &folder : session.config.library.paths) {
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 366
diff changeset
46 for (const auto &entry : std::filesystem::recursive_directory_iterator(folder)) {
228
d030b30526d5 config: remove unused username parameter from anilist auth
Paper <mrpapersonic@gmail.com>
parents: 227
diff changeset
47 const std::filesystem::path path = entry.path();
d030b30526d5 config: remove unused username parameter from anilist auth
Paper <mrpapersonic@gmail.com>
parents: 227
diff changeset
48 if (!std::filesystem::is_regular_file(path))
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
49 continue;
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
50
228
d030b30526d5 config: remove unused username parameter from anilist auth
Paper <mrpapersonic@gmail.com>
parents: 227
diff changeset
51 const std::string basename = path.filename().u8string();
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
52
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
53 anitomy::Anitomy anitomy;
347
a0aa8c8c4307 dep/anitomy: port to use UCS-4 rather than wide strings
Paper <paper@paper.us.eu.org>
parents: 328
diff changeset
54 anitomy.Parse(basename);
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
55
369
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 366
diff changeset
56 const auto &elements = anitomy.elements();
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
57
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
58 const std::string title = Strings::ToUtf8String(elements.get(anitomy::kElementAnimeTitle));
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
59
319
d928ec7b6a0d services/kitsu: implement GetAnimeList()
Paper <paper@paper.us.eu.org>
parents: 258
diff changeset
60 const int id = Anime::db.LookupAnimeTitle(title);
366
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
61 if (id <= 0 || (find_id && find_id.value() != id))
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
62 continue;
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
63
369
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 366
diff changeset
64 const int episode =
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 366
diff changeset
65 Strings::ToInt<int>(Strings::ToUtf8String(elements.get(anitomy::kElementEpisodeNumber)));
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
66
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
67 // we have an ID now!
328
71396ecb6f7e library: convert to class + database
Paper <paper@paper.us.eu.org>
parents: 319
diff changeset
68 items[id][episode] = path;
222
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
69 }
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
70 }
b9f111d84d95 *: move to semver, remove old macos build, add library files
Paper <paper@paper.us.eu.org>
parents:
diff changeset
71 }
223
84e0a3c4737a library: implement menu bar buttons
Paper <mrpapersonic@gmail.com>
parents: 222
diff changeset
72
369
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 366
diff changeset
73 void Database::Refresh()
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 366
diff changeset
74 {
366
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
75 Refresh(std::nullopt);
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
76 }
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
77
369
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 366
diff changeset
78 void Database::Refresh(int id)
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 366
diff changeset
79 {
366
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
80 Refresh(std::optional<int>(id));
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
81 }
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
82
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
83 // TODO export to JSON
886f66775f31 animone: add preliminary AT-SPI stuff
Paper <paper@tflc.us>
parents: 347
diff changeset
84
328
71396ecb6f7e library: convert to class + database
Paper <paper@paper.us.eu.org>
parents: 319
diff changeset
85 Database db;
71396ecb6f7e library: convert to class + database
Paper <paper@paper.us.eu.org>
parents: 319
diff changeset
86
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 228
diff changeset
87 } // namespace Library