Mercurial > minori
comparison src/core/anime_db.cc @ 284:e66ffc338d82
anime: refactor title structure to a map
| author | Paper <paper@paper.us.eu.org> |
|---|---|
| date | Wed, 08 May 2024 16:21:05 -0400 |
| parents | 657fda1b9cac |
| children | 53e3c015a973 |
comparison
equal
deleted
inserted
replaced
| 283:969a3e8c79c5 | 284:e66ffc338d82 |
|---|---|
| 155 | 155 |
| 156 static bool GetAnimeAsJSON(const Anime& anime, nlohmann::json& json) { | 156 static bool GetAnimeAsJSON(const Anime& anime, nlohmann::json& json) { |
| 157 // clang-format off | 157 // clang-format off |
| 158 json = { | 158 json = { |
| 159 {"id", anime.GetId()}, | 159 {"id", anime.GetId()}, |
| 160 {"title", { | |
| 161 {"native", anime.GetNativeTitle()}, | |
| 162 {"romaji", anime.GetRomajiTitle()}, | |
| 163 {"english", anime.GetEnglishTitle()} | |
| 164 }}, | |
| 165 {"synonyms", anime.GetTitleSynonyms()}, | 160 {"synonyms", anime.GetTitleSynonyms()}, |
| 166 {"episodes", anime.GetEpisodes()}, | 161 {"episodes", anime.GetEpisodes()}, |
| 167 {"airing_status", Translate::ToString(anime.GetAiringStatus())}, | 162 {"airing_status", Translate::ToString(anime.GetAiringStatus())}, |
| 168 {"air_date", anime.GetAirDate().GetAsAniListJson()}, | 163 {"air_date", anime.GetAirDate().GetAsAniListJson()}, |
| 169 {"genres", anime.GetGenres()}, | 164 {"genres", anime.GetGenres()}, |
| 175 {"duration", anime.GetDuration()}, | 170 {"duration", anime.GetDuration()}, |
| 176 {"poster_url", anime.GetPosterUrl()} | 171 {"poster_url", anime.GetPosterUrl()} |
| 177 }; | 172 }; |
| 178 // clang-format on | 173 // clang-format on |
| 179 | 174 |
| 175 /* now for dynamically-filled stuff */ | |
| 176 for (const auto& lang : TitleLanguages) { | |
| 177 std::optional<std::string> title = anime.GetTitle(lang); | |
| 178 if (title.has_value()) | |
| 179 json["title"][Strings::ToLower(Translate::ToString(lang))] = title.value(); | |
| 180 } | |
| 181 | |
| 180 nlohmann::json user; | 182 nlohmann::json user; |
| 181 if (GetListDataAsJSON(anime, user)) | 183 if (GetListDataAsJSON(anime, user)) |
| 182 json.push_back({"list_data", user}); | 184 json.push_back({"list_data", user}); |
| 183 | 185 |
| 184 return true; | 186 return true; |
| 234 return false; | 236 return false; |
| 235 | 237 |
| 236 Anime& anime = database.items[id]; | 238 Anime& anime = database.items[id]; |
| 237 | 239 |
| 238 anime.SetId(id); | 240 anime.SetId(id); |
| 239 anime.SetNativeTitle(JSON::GetString<std::string>(json, "/title/native"_json_pointer, "")); | 241 for (const auto& lang : TitleLanguages) { |
| 240 anime.SetRomajiTitle(JSON::GetString<std::string>(json, "/title/romaji"_json_pointer, "")); | 242 nlohmann::json::json_pointer p("/title/" + Strings::ToLower(Translate::ToString(lang))); |
| 241 anime.SetEnglishTitle(JSON::GetString<std::string>(json, "/title/english"_json_pointer, "")); | 243 |
| 244 if (json.contains(p) && json[p].is_string()) | |
| 245 anime.SetTitle(lang, json[p].get<std::string>()); | |
| 246 } | |
| 242 anime.SetTitleSynonyms(JSON::GetArray<std::vector<std::string>>(json, "/synonyms"_json_pointer, {})); | 247 anime.SetTitleSynonyms(JSON::GetArray<std::vector<std::string>>(json, "/synonyms"_json_pointer, {})); |
| 243 anime.SetEpisodes(JSON::GetNumber(json, "/episodes"_json_pointer, 0)); | 248 anime.SetEpisodes(JSON::GetNumber(json, "/episodes"_json_pointer, 0)); |
| 244 anime.SetAiringStatus( | 249 anime.SetAiringStatus( |
| 245 Translate::ToSeriesStatus(JSON::GetString<std::string>(json, "/airing_status"_json_pointer, ""))); | 250 Translate::ToSeriesStatus(JSON::GetString<std::string>(json, "/airing_status"_json_pointer, ""))); |
| 246 anime.SetAirDate(Date(JSON::GetValue(json, "/air_date"_json_pointer))); | 251 anime.SetAirDate(Date(JSON::GetValue(json, "/air_date"_json_pointer))); |
