Mercurial > minori
comparison src/core/anime.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 | 9b6e12c14a1e |
| children | 53e3c015a973 |
comparison
equal
deleted
inserted
replaced
| 283:969a3e8c79c5 | 284:e66ffc338d82 |
|---|---|
| 168 /* Series data */ | 168 /* Series data */ |
| 169 int Anime::GetId() const { | 169 int Anime::GetId() const { |
| 170 return info_.id; | 170 return info_.id; |
| 171 } | 171 } |
| 172 | 172 |
| 173 std::string Anime::GetRomajiTitle() const { | 173 /* note: this should use std::optional */ |
| 174 return info_.title.romaji; | 174 std::optional<std::string> Anime::GetTitle(TitleLanguage language) const { |
| 175 } | 175 if (info_.titles.find(language) == info_.titles.end()) |
| 176 | 176 return std::nullopt; |
| 177 std::string Anime::GetEnglishTitle() const { | 177 |
| 178 return info_.title.english; | 178 return info_.titles.at(language); |
| 179 } | |
| 180 | |
| 181 std::string Anime::GetNativeTitle() const { | |
| 182 return info_.title.native; | |
| 183 } | 179 } |
| 184 | 180 |
| 185 std::vector<std::string> Anime::GetTitleSynonyms() const { | 181 std::vector<std::string> Anime::GetTitleSynonyms() const { |
| 182 /* mainly for the GUI */ | |
| 186 std::vector<std::string> result; | 183 std::vector<std::string> result; |
| 187 | 184 |
| 188 auto add_to_synonyms = [this](std::vector<std::string>& vec, std::string key) { | 185 auto add_to_synonyms = [this](std::vector<std::string>& vec, std::string key) { |
| 189 if (!key.empty() && !std::count(vec.begin(), vec.end(), key) && key != GetUserPreferredTitle()) | 186 if (!key.empty() && !std::count(vec.begin(), vec.end(), key) && key != GetUserPreferredTitle()) |
| 190 vec.push_back(key); | 187 vec.push_back(key); |
| 191 }; | 188 }; |
| 192 | 189 |
| 193 add_to_synonyms(result, info_.title.english); | 190 for (const auto& lang : TitleLanguages) |
| 194 add_to_synonyms(result, info_.title.romaji); | 191 if (info_.titles.find(lang) != info_.titles.end()) |
| 195 add_to_synonyms(result, info_.title.native); | 192 add_to_synonyms(result, info_.titles.at(lang)); |
| 196 | 193 |
| 197 for (auto& synonym : info_.synonyms) | 194 for (auto& synonym : info_.synonyms) |
| 198 add_to_synonyms(result, synonym); | 195 add_to_synonyms(result, synonym); |
| 199 | 196 |
| 200 return result; | 197 return result; |
| 255 | 252 |
| 256 void Anime::SetId(int id) { | 253 void Anime::SetId(int id) { |
| 257 info_.id = id; | 254 info_.id = id; |
| 258 } | 255 } |
| 259 | 256 |
| 260 void Anime::SetRomajiTitle(std::string const& title) { | 257 void Anime::SetTitle(TitleLanguage language, const std::string& title) { |
| 261 info_.title.romaji = title; | 258 info_.titles[language] = title; |
| 262 } | |
| 263 | |
| 264 void Anime::SetEnglishTitle(std::string const& title) { | |
| 265 info_.title.english = title; | |
| 266 } | |
| 267 | |
| 268 void Anime::SetNativeTitle(std::string const& title) { | |
| 269 info_.title.native = title; | |
| 270 } | 259 } |
| 271 | 260 |
| 272 void Anime::SetTitleSynonyms(std::vector<std::string> const& synonyms) { | 261 void Anime::SetTitleSynonyms(std::vector<std::string> const& synonyms) { |
| 273 info_.synonyms = synonyms; | 262 info_.synonyms = synonyms; |
| 274 } | 263 } |
| 316 void Anime::SetPosterUrl(std::string url) { | 305 void Anime::SetPosterUrl(std::string url) { |
| 317 info_.poster_url = url; | 306 info_.poster_url = url; |
| 318 } | 307 } |
| 319 | 308 |
| 320 std::string Anime::GetUserPreferredTitle() const { | 309 std::string Anime::GetUserPreferredTitle() const { |
| 321 switch (session.config.anime_list.language) { | 310 std::optional<std::string> title = GetTitle(session.config.anime_list.language); |
| 322 case TitleLanguage::Native: return (GetNativeTitle().empty()) ? GetRomajiTitle() : GetNativeTitle(); | 311 if (title.has_value()) |
| 323 case TitleLanguage::Romaji: return (GetEnglishTitle().empty()) ? GetRomajiTitle() : GetEnglishTitle(); | 312 return title.value(); |
| 324 default: break; | 313 |
| 325 } | 314 title = GetTitle(TitleLanguage::Romaji); |
| 326 return GetRomajiTitle(); | 315 if (title.has_value()) |
| 316 return title.value(); | |
| 317 | |
| 318 /* what? */ | |
| 319 return std::string(); | |
| 327 } | 320 } |
| 328 | 321 |
| 329 } // namespace Anime | 322 } // namespace Anime |
