comparison src/gui/translate/anime.cc @ 370:ea3a74ed2ef9

*: hm, last commit wasn't quite finished?
author Paper <paper@tflc.us>
date Fri, 25 Jul 2025 10:22:04 -0400
parents 5980a960f3e1
children
comparison
equal deleted inserted replaced
369:47c9f8502269 370:ea3a74ed2ef9
8 8
9 #include <fmt/core.h> 9 #include <fmt/core.h>
10 10
11 namespace Translate { 11 namespace Translate {
12 12
13 std::string ToString(const Anime::ListStatus status) { 13 std::string ToString(const Anime::ListStatus status)
14 {
14 switch (status) { 15 switch (status) {
15 case Anime::ListStatus::Current: return "Currently watching"; 16 case Anime::ListStatus::Current: return "Currently watching";
16 case Anime::ListStatus::Planning: return "Plan to watch"; 17 case Anime::ListStatus::Planning: return "Plan to watch";
17 case Anime::ListStatus::Completed: return "Completed"; 18 case Anime::ListStatus::Completed: return "Completed";
18 case Anime::ListStatus::Dropped: return "Dropped"; 19 case Anime::ListStatus::Dropped: return "Dropped";
20 default: 21 default:
21 case Anime::ListStatus::NotInList: return "Not in list"; 22 case Anime::ListStatus::NotInList: return "Not in list";
22 } 23 }
23 } 24 }
24 25
25 std::string ToString(const Anime::SeriesFormat format) { 26 std::string ToString(const Anime::SeriesFormat format)
27 {
26 switch (format) { 28 switch (format) {
27 case Anime::SeriesFormat::Tv: return "TV"; 29 case Anime::SeriesFormat::Tv: return "TV";
28 case Anime::SeriesFormat::TvShort: return "TV short"; 30 case Anime::SeriesFormat::TvShort: return "TV short";
29 case Anime::SeriesFormat::Ova: return "OVA"; 31 case Anime::SeriesFormat::Ova: return "OVA";
30 case Anime::SeriesFormat::Movie: return "Movie"; 32 case Anime::SeriesFormat::Movie: return "Movie";
34 default: 36 default:
35 case Anime::SeriesFormat::Unknown: return "Unknown"; 37 case Anime::SeriesFormat::Unknown: return "Unknown";
36 } 38 }
37 } 39 }
38 40
39 std::string ToString(const Anime::Season::Name season) { 41 std::string ToString(const Anime::Season::Name season)
42 {
40 switch (season) { 43 switch (season) {
41 case Anime::Season::Name::Winter: return "Winter"; 44 case Anime::Season::Name::Winter: return "Winter";
42 case Anime::Season::Name::Summer: return "Summer"; 45 case Anime::Season::Name::Summer: return "Summer";
43 case Anime::Season::Name::Autumn: return "Autumn"; 46 case Anime::Season::Name::Autumn: return "Autumn";
44 case Anime::Season::Name::Spring: return "Spring"; 47 case Anime::Season::Name::Spring: return "Spring";
45 default: 48 default:
46 case Anime::Season::Name::Unknown: return "Unknown"; 49 case Anime::Season::Name::Unknown: return "Unknown";
47 } 50 }
48 } 51 }
49 52
50 std::string ToString(const Anime::SeriesStatus status) { 53 std::string ToString(const Anime::SeriesStatus status)
54 {
51 switch (status) { 55 switch (status) {
52 case Anime::SeriesStatus::Releasing: return "Currently airing"; 56 case Anime::SeriesStatus::Releasing: return "Currently airing";
53 case Anime::SeriesStatus::Finished: return "Finished airing"; 57 case Anime::SeriesStatus::Finished: return "Finished airing";
54 case Anime::SeriesStatus::NotYetReleased: return "Not yet aired"; 58 case Anime::SeriesStatus::NotYetReleased: return "Not yet aired";
55 case Anime::SeriesStatus::Cancelled: return "Cancelled"; 59 case Anime::SeriesStatus::Cancelled: return "Cancelled";
57 default: 61 default:
58 case Anime::SeriesStatus::Unknown: return "Unknown"; 62 case Anime::SeriesStatus::Unknown: return "Unknown";
59 } 63 }
60 } 64 }
61 65
62 std::string ToString(const Anime::Service service) { 66 std::string ToString(const Anime::Service service)
67 {
63 switch (service) { 68 switch (service) {
64 case Anime::Service::AniList: return "AniList"; 69 case Anime::Service::AniList: return "AniList";
65 case Anime::Service::MyAnimeList: return "MyAnimeList"; 70 case Anime::Service::MyAnimeList: return "MyAnimeList";
66 case Anime::Service::Kitsu: return "Kitsu"; 71 case Anime::Service::Kitsu: return "Kitsu";
67 default: 72 default:
68 case Anime::Service::None: return "None"; 73 case Anime::Service::None: return "None";
69 } 74 }
70 } 75 }
71 76
72 std::string ToString(const Anime::TitleLanguage language) { 77 std::string ToString(const Anime::TitleLanguage language)
78 {
73 switch (language) { 79 switch (language) {
74 case Anime::TitleLanguage::Native: return "Native"; 80 case Anime::TitleLanguage::Native: return "Native";
75 case Anime::TitleLanguage::English: return "English"; 81 case Anime::TitleLanguage::English: return "English";
76 default: 82 default:
77 case Anime::TitleLanguage::Romaji: return "Romaji"; 83 case Anime::TitleLanguage::Romaji: return "Romaji";
78 } 84 }
79 } 85 }
80 86
81 std::string ToString(const Anime::ScoreFormat format) { 87 std::string ToString(const Anime::ScoreFormat format)
88 {
82 switch (format) { 89 switch (format) {
83 case Anime::ScoreFormat::Point3: return "3-point"; 90 case Anime::ScoreFormat::Point3: return "3-point";
84 case Anime::ScoreFormat::Point5: return "5-point"; 91 case Anime::ScoreFormat::Point5: return "5-point";
85 case Anime::ScoreFormat::Point10: return "10-point"; 92 case Anime::ScoreFormat::Point10: return "10-point";
86 case Anime::ScoreFormat::Point10Decimal: return "10-point Decimal"; 93 case Anime::ScoreFormat::Point10Decimal: return "10-point Decimal";
87 default: 94 default:
88 case Anime::ScoreFormat::Point100: return "100-point"; 95 case Anime::ScoreFormat::Point100: return "100-point";
89 } 96 }
90 } 97 }
91 98
92 Anime::ListStatus ToListStatus(const std::string& str) { 99 Anime::ListStatus ToListStatus(const std::string &str)
100 {
93 static const std::unordered_map<std::string, Anime::ListStatus> map = { 101 static const std::unordered_map<std::string, Anime::ListStatus> map = {
94 {"currently watching", Anime::ListStatus::Current }, 102 {"currently watching", Anime::ListStatus::Current },
95 {"plan to watch", Anime::ListStatus::Planning }, 103 {"plan to watch", Anime::ListStatus::Planning },
96 {"completed", Anime::ListStatus::Completed}, 104 {"completed", Anime::ListStatus::Completed},
97 {"dropped", Anime::ListStatus::Dropped }, 105 {"dropped", Anime::ListStatus::Dropped },
98 {"on hold", Anime::ListStatus::Paused } 106 {"on hold", Anime::ListStatus::Paused }
99 }; 107 };
100 108
101 std::string lower = Strings::ToLower(str); 109 std::string lower = Strings::ToLower(str);
102 110
103 if (map.find(lower) == map.end()) 111 if (map.find(lower) == map.end())
104 return Anime::ListStatus::NotInList; 112 return Anime::ListStatus::NotInList;
105 return map.at(lower); 113 return map.at(lower);
106 } 114 }
107 115
108 Anime::SeriesStatus ToSeriesStatus(const std::string& str) { 116 Anime::SeriesStatus ToSeriesStatus(const std::string &str)
117 {
109 static const std::unordered_map<std::string, Anime::SeriesStatus> map = { 118 static const std::unordered_map<std::string, Anime::SeriesStatus> map = {
110 {"currently airing", Anime::SeriesStatus::Releasing }, 119 {"currently airing", Anime::SeriesStatus::Releasing },
111 {"finished airing", Anime::SeriesStatus::Finished }, 120 {"finished airing", Anime::SeriesStatus::Finished },
112 {"not yet aired", Anime::SeriesStatus::NotYetReleased}, 121 {"not yet aired", Anime::SeriesStatus::NotYetReleased},
113 {"cancelled", Anime::SeriesStatus::Cancelled }, 122 {"cancelled", Anime::SeriesStatus::Cancelled },
114 {"on hiatus", Anime::SeriesStatus::Hiatus } 123 {"on hiatus", Anime::SeriesStatus::Hiatus }
115 }; 124 };
116 125
117 std::string lower = Strings::ToLower(str); 126 std::string lower = Strings::ToLower(str);
118 127
119 if (map.find(str) == map.end()) 128 if (map.find(str) == map.end())
120 return Anime::SeriesStatus::Unknown; 129 return Anime::SeriesStatus::Unknown;
121 return map.at(str); 130 return map.at(str);
122 } 131 }
123 132
124 Anime::Season::Name ToSeriesSeason(const std::string& str) { 133 Anime::Season::Name ToSeriesSeason(const std::string &str)
134 {
125 static const std::unordered_map<std::string, Anime::Season::Name> map = { 135 static const std::unordered_map<std::string, Anime::Season::Name> map = {
126 {"winter", Anime::Season::Name::Winter}, 136 {"winter", Anime::Season::Name::Winter},
127 {"summer", Anime::Season::Name::Summer}, 137 {"summer", Anime::Season::Name::Summer},
128 {"fall", Anime::Season::Name::Autumn}, 138 {"fall", Anime::Season::Name::Autumn},
129 {"autumn", Anime::Season::Name::Autumn}, 139 {"autumn", Anime::Season::Name::Autumn},
130 {"spring", Anime::Season::Name::Spring}, 140 {"spring", Anime::Season::Name::Spring},
131 }; 141 };
132 142
133 std::string lower = Strings::ToLower(str); 143 std::string lower = Strings::ToLower(str);
134 144
135 if (map.find(lower) == map.end()) 145 if (map.find(lower) == map.end())
136 return Anime::Season::Name::Unknown; 146 return Anime::Season::Name::Unknown;
137 return map.at(lower); 147 return map.at(lower);
138 } 148 }
139 149
140 Anime::SeriesFormat ToSeriesFormat(const std::string& str) { 150 Anime::SeriesFormat ToSeriesFormat(const std::string &str)
151 {
141 static const std::unordered_map<std::string, Anime::SeriesFormat> map = { 152 static const std::unordered_map<std::string, Anime::SeriesFormat> map = {
142 {"tv", Anime::SeriesFormat::Tv }, 153 {"tv", Anime::SeriesFormat::Tv },
143 {"tv short", Anime::SeriesFormat::TvShort}, 154 {"tv short", Anime::SeriesFormat::TvShort},
144 {"ova", Anime::SeriesFormat::Ova }, 155 {"ova", Anime::SeriesFormat::Ova },
145 {"movie", Anime::SeriesFormat::Movie }, 156 {"movie", Anime::SeriesFormat::Movie },
146 {"special", Anime::SeriesFormat::Special }, 157 {"special", Anime::SeriesFormat::Special},
147 {"ona", Anime::SeriesFormat::Ona }, 158 {"ona", Anime::SeriesFormat::Ona },
148 {"music", Anime::SeriesFormat::Music } 159 {"music", Anime::SeriesFormat::Music }
160 };
161
162 std::string lower = Strings::ToLower(str);
163
164 if (map.find(lower) == map.end())
165 return Anime::SeriesFormat::Unknown;
166 return map.at(lower);
167 }
168
169 Anime::Service ToService(const std::string &str)
170 {
171 static const std::unordered_map<std::string, Anime::Service> map = {
172 {"anilist", Anime::Service::AniList },
173 {"myanimelist", Anime::Service::MyAnimeList},
174 {"kitsu", Anime::Service::Kitsu }
175 };
176
177 std::string lower = Strings::ToLower(str);
178
179 if (map.find(lower) == map.end())
180 return Anime::Service::None;
181 return map.at(lower);
182 }
183
184 Anime::TitleLanguage ToLanguage(const std::string &str)
185 {
186 static const std::unordered_map<std::string, Anime::TitleLanguage> map = {
187 {"romaji", Anime::TitleLanguage::Romaji },
188 {"native", Anime::TitleLanguage::Native },
189 {"english", Anime::TitleLanguage::English}
190 };
191
192 std::string lower = Strings::ToLower(str);
193
194 if (map.find(lower) == map.end())
195 return Anime::TitleLanguage::Romaji;
196 return map.at(lower);
197 }
198
199 Anime::ScoreFormat ToScoreFormat(const std::string &str)
200 {
201 static const std::unordered_map<std::string, Anime::ScoreFormat> map = {
202 {"3-point", Anime::ScoreFormat::Point3 },
203 {"5-point", Anime::ScoreFormat::Point5 },
204 {"10-point", Anime::ScoreFormat::Point10 },
205 {"10-point decimal", Anime::ScoreFormat::Point10Decimal},
206 {"100-point", Anime::ScoreFormat::Point100 },
207 /* old values, provided for compatibility */
208 {"point_3", Anime::ScoreFormat::Point3 },
209 {"point_5", Anime::ScoreFormat::Point5 },
210 {"point_10", Anime::ScoreFormat::Point10 },
211 {"point_10_decimal", Anime::ScoreFormat::Point10Decimal},
212 {"point_100", Anime::ScoreFormat::Point100 },
149 }; 213 };
150 214
151 std::string lower = Strings::ToLower(str); 215 std::string lower = Strings::ToLower(str);
152 216
153 if (map.find(lower) == map.end()) 217 if (map.find(lower) == map.end())
154 return Anime::SeriesFormat::Unknown;
155 return map.at(lower);
156 }
157
158 Anime::Service ToService(const std::string& str) {
159 static const std::unordered_map<std::string, Anime::Service> map = {
160 {"anilist", Anime::Service::AniList},
161 {"myanimelist", Anime::Service::MyAnimeList},
162 {"kitsu", Anime::Service::Kitsu}
163 };
164
165 std::string lower = Strings::ToLower(str);
166
167 if (map.find(lower) == map.end())
168 return Anime::Service::None;
169 return map.at(lower);
170 }
171
172 Anime::TitleLanguage ToLanguage(const std::string& str) {
173 static const std::unordered_map<std::string, Anime::TitleLanguage> map = {
174 {"romaji", Anime::TitleLanguage::Romaji },
175 {"native", Anime::TitleLanguage::Native },
176 {"english", Anime::TitleLanguage::English}
177 };
178
179 std::string lower = Strings::ToLower(str);
180
181 if (map.find(lower) == map.end())
182 return Anime::TitleLanguage::Romaji;
183 return map.at(lower);
184 }
185
186 Anime::ScoreFormat ToScoreFormat(const std::string& str) {
187 static const std::unordered_map<std::string, Anime::ScoreFormat> map = {
188 {"3-point", Anime::ScoreFormat::Point3},
189 {"5-point", Anime::ScoreFormat::Point5},
190 {"10-point", Anime::ScoreFormat::Point10 },
191 {"10-point decimal", Anime::ScoreFormat::Point10Decimal},
192 {"100-point", Anime::ScoreFormat::Point100 },
193 /* old values, provided for compatibility */
194 {"point_3", Anime::ScoreFormat::Point3 },
195 {"point_5", Anime::ScoreFormat::Point5 },
196 {"point_10", Anime::ScoreFormat::Point10 },
197 {"point_10_decimal", Anime::ScoreFormat::Point10Decimal},
198 {"point_100", Anime::ScoreFormat::Point100 },
199 };
200
201 std::string lower = Strings::ToLower(str);
202
203 if (map.find(lower) == map.end())
204 return Anime::ScoreFormat::Point100; 218 return Anime::ScoreFormat::Point100;
205 return map.at(lower); 219 return map.at(lower);
206 } 220 }
207 221
208 /* Localized versions of ToString() functions. Meant for display to the user. */ 222 /* Localized versions of ToString() functions. Meant for display to the user. */
209 223
210 std::string ToLocalString(const Anime::ListStatus status) { 224 std::string ToLocalString(const Anime::ListStatus status)
225 {
211 switch (status) { 226 switch (status) {
212 case Anime::ListStatus::Current: return Strings::Translate("Currently watching"); 227 case Anime::ListStatus::Current: return Strings::Translate("Currently watching");
213 case Anime::ListStatus::Planning: return Strings::Translate("Plan to watch"); 228 case Anime::ListStatus::Planning: return Strings::Translate("Plan to watch");
214 case Anime::ListStatus::Completed: return Strings::Translate("Completed"); 229 case Anime::ListStatus::Completed: return Strings::Translate("Completed");
215 case Anime::ListStatus::Dropped: return Strings::Translate("Dropped"); 230 case Anime::ListStatus::Dropped: return Strings::Translate("Dropped");
217 default: 232 default:
218 case Anime::ListStatus::NotInList: return Strings::Translate("Not in list"); 233 case Anime::ListStatus::NotInList: return Strings::Translate("Not in list");
219 } 234 }
220 } 235 }
221 236
222 std::string ToLocalString(const Anime::SeriesFormat format) { 237 std::string ToLocalString(const Anime::SeriesFormat format)
238 {
223 switch (format) { 239 switch (format) {
224 case Anime::SeriesFormat::Tv: return Strings::Translate("TV"); 240 case Anime::SeriesFormat::Tv: return Strings::Translate("TV");
225 case Anime::SeriesFormat::TvShort: return Strings::Translate("TV short"); 241 case Anime::SeriesFormat::TvShort: return Strings::Translate("TV short");
226 case Anime::SeriesFormat::Ova: return Strings::Translate("OVA"); 242 case Anime::SeriesFormat::Ova: return Strings::Translate("OVA");
227 case Anime::SeriesFormat::Movie: return Strings::Translate("Movie"); 243 case Anime::SeriesFormat::Movie: return Strings::Translate("Movie");
231 default: 247 default:
232 case Anime::SeriesFormat::Unknown: return Strings::Translate("Unknown"); 248 case Anime::SeriesFormat::Unknown: return Strings::Translate("Unknown");
233 } 249 }
234 } 250 }
235 251
236 static std::string ToLocalString(const Anime::Season::Name season) { 252 static std::string ToLocalString(const Anime::Season::Name season)
253 {
237 switch (season) { 254 switch (season) {
238 case Anime::Season::Name::Winter: return Strings::Translate("Winter"); 255 case Anime::Season::Name::Winter: return Strings::Translate("Winter");
239 case Anime::Season::Name::Summer: return Strings::Translate("Summer"); 256 case Anime::Season::Name::Summer: return Strings::Translate("Summer");
240 case Anime::Season::Name::Autumn: return Strings::Translate("Autumn"); 257 case Anime::Season::Name::Autumn: return Strings::Translate("Autumn");
241 case Anime::Season::Name::Spring: return Strings::Translate("Spring"); 258 case Anime::Season::Name::Spring: return Strings::Translate("Spring");
242 default: 259 default:
243 case Anime::Season::Name::Unknown: return Strings::Translate("Unknown"); 260 case Anime::Season::Name::Unknown: return Strings::Translate("Unknown");
244 } 261 }
245 } 262 }
246 263
247 std::string ToLocalString(const Anime::Season& season) { 264 std::string ToLocalString(const Anime::Season &season)
265 {
248 std::string year = (season.year) ? Strings::ToUtf8String(season.year) : Strings::Translate("Unknown"); 266 std::string year = (season.year) ? Strings::ToUtf8String(season.year) : Strings::Translate("Unknown");
249 267
250 return fmt::format(Strings::Translate("{} {}"), ToLocalString(season.season), year); 268 return fmt::format(Strings::Translate("{} {}"), ToLocalString(season.season), year);
251 } 269 }
252 270
253 std::string ToLocalString(const Anime::SeriesStatus status) { 271 std::string ToLocalString(const Anime::SeriesStatus status)
272 {
254 switch (status) { 273 switch (status) {
255 case Anime::SeriesStatus::Releasing: return Strings::Translate("Currently airing"); 274 case Anime::SeriesStatus::Releasing: return Strings::Translate("Currently airing");
256 case Anime::SeriesStatus::Finished: return Strings::Translate("Finished airing"); 275 case Anime::SeriesStatus::Finished: return Strings::Translate("Finished airing");
257 case Anime::SeriesStatus::NotYetReleased: return Strings::Translate("Not yet aired"); 276 case Anime::SeriesStatus::NotYetReleased: return Strings::Translate("Not yet aired");
258 case Anime::SeriesStatus::Cancelled: return Strings::Translate("Cancelled"); 277 case Anime::SeriesStatus::Cancelled: return Strings::Translate("Cancelled");
260 default: 279 default:
261 case Anime::SeriesStatus::Unknown: return Strings::Translate("Unknown"); 280 case Anime::SeriesStatus::Unknown: return Strings::Translate("Unknown");
262 } 281 }
263 } 282 }
264 283
265 std::string ToLocalString(const Anime::Service service) { 284 std::string ToLocalString(const Anime::Service service)
285 {
266 switch (service) { 286 switch (service) {
267 case Anime::Service::AniList: return Strings::Translate("AniList"); 287 case Anime::Service::AniList: return Strings::Translate("AniList");
268 case Anime::Service::MyAnimeList: return Strings::Translate("MyAnimeList"); 288 case Anime::Service::MyAnimeList: return Strings::Translate("MyAnimeList");
269 case Anime::Service::Kitsu: return Strings::Translate("Kitsu"); 289 case Anime::Service::Kitsu: return Strings::Translate("Kitsu");
270 default: 290 default:
271 case Anime::Service::None: return Strings::Translate("None"); 291 case Anime::Service::None: return Strings::Translate("None");
272 } 292 }
273 } 293 }
274 294
275 std::string ToLocalString(const Anime::TitleLanguage language) { 295 std::string ToLocalString(const Anime::TitleLanguage language)
296 {
276 switch (language) { 297 switch (language) {
277 case Anime::TitleLanguage::Native: return Strings::Translate("Native"); 298 case Anime::TitleLanguage::Native: return Strings::Translate("Native");
278 case Anime::TitleLanguage::English: return Strings::Translate("English"); 299 case Anime::TitleLanguage::English: return Strings::Translate("English");
279 default: 300 default:
280 case Anime::TitleLanguage::Romaji: return Strings::Translate("Romaji"); 301 case Anime::TitleLanguage::Romaji: return Strings::Translate("Romaji");
281 } 302 }
282 } 303 }
283 304
284 std::string ToLocalString(const Anime::ScoreFormat format) { 305 std::string ToLocalString(const Anime::ScoreFormat format)
306 {
285 switch (format) { 307 switch (format) {
286 case Anime::ScoreFormat::Point3: return Strings::Translate("3-point"); 308 case Anime::ScoreFormat::Point3: return Strings::Translate("3-point");
287 case Anime::ScoreFormat::Point5: return Strings::Translate("5-point"); 309 case Anime::ScoreFormat::Point5: return Strings::Translate("5-point");
288 case Anime::ScoreFormat::Point10: return Strings::Translate("10-point"); 310 case Anime::ScoreFormat::Point10: return Strings::Translate("10-point");
289 case Anime::ScoreFormat::Point10Decimal: 311 case Anime::ScoreFormat::Point10Decimal: return Strings::Translate("10-point Decimal");
290 return Strings::Translate("10-point Decimal");
291 default: 312 default:
292 case Anime::ScoreFormat::Point100: return Strings::Translate("100-point"); 313 case Anime::ScoreFormat::Point100: return Strings::Translate("100-point");
293 } 314 }
294 } 315 }
295 316