Mercurial > minori
annotate src/core/anime.cc @ 198:bc1ae1810855
dep/animia: switch from using classes to global functions
the old idea was ok, but sort of hackish; this method doesn't use classes
at all, and this way (especially important!) we can do wayland stuff AND x11
at the same time, which wasn't really possible without stupid workarounds in
the other method
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Sun, 24 Dec 2023 02:59:42 -0500 |
parents | 975a3f0965e2 |
children | 7cf53145de11 |
rev | line source |
---|---|
9 | 1 /* |
2 * anime.cpp: defining of custom anime-related | |
3 * datatypes & variables | |
4 */ | |
5 #include "core/anime.h" | |
6 #include "core/date.h" | |
7 #include "core/session.h" | |
178
bc8d2ccff09c
win32/dark: use existing STL classes for dwmapi
Paper <mrpapersonic@gmail.com>
parents:
81
diff
changeset
|
8 |
9 | 9 #include <algorithm> |
10 #include <string> | |
11 #include <vector> | |
12 | |
13 namespace Anime { | |
14 | |
15 /* User list data */ | |
16 bool Anime::IsInUserList() const { | |
17 if (list_info_.get()) | |
18 return true; | |
19 return false; | |
20 } | |
21 | |
22 void Anime::AddToUserList() { | |
23 list_info_.reset(new ListInformation); | |
24 } | |
25 | |
26 void Anime::RemoveFromUserList() { | |
27 list_info_.reset(); | |
28 } | |
29 | |
30 ListStatus Anime::GetUserStatus() const { | |
31 assert(list_info_.get()); | |
32 return list_info_->status; | |
33 } | |
34 | |
35 int Anime::GetUserProgress() const { | |
36 assert(list_info_.get()); | |
37 return list_info_->progress; | |
38 } | |
39 | |
40 int Anime::GetUserScore() const { | |
41 assert(list_info_.get()); | |
42 return list_info_->score; | |
43 } | |
44 | |
185
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
45 std::string Anime::GetUserPresentableScore() const { |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
46 assert(list_info_.get()); |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
47 const int score = list_info_->score; |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
48 if (score == 0) |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
49 return ""; |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
50 |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
51 switch (session.config.anime_list.score_format) { |
186
6ef31dbb90ca
anime: no unnecessary conversion to floating point
Paper <mrpapersonic@gmail.com>
parents:
185
diff
changeset
|
52 case ScoreFormat::POINT_10_DECIMAL: |
6ef31dbb90ca
anime: no unnecessary conversion to floating point
Paper <mrpapersonic@gmail.com>
parents:
185
diff
changeset
|
53 return std::to_string(score / 10) + "." + std::to_string(score % 10); |
185
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
54 case ScoreFormat::POINT_10: |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
55 return std::to_string(score / 10); |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
56 case ScoreFormat::POINT_5: { |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
57 std::string stars = ""; |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
58 |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
59 for (int i = 0; i < 100; i += 20) |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
60 stars.append((i <= score) ? "★" : "☆"); |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
61 |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
62 return stars; |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
63 } |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
64 case ScoreFormat::POINT_3: { |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
65 if (score >= 100) |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
66 return ":)"; |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
67 else if (score >= 66) |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
68 return ":|"; |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
69 else if (score >= 33) |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
70 return ":("; |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
71 else |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
72 return ""; |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
73 } |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
74 default: |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
75 case ScoreFormat::POINT_100: |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
76 return std::to_string(score); |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
77 } |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
78 } |
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
183
diff
changeset
|
79 |
9 | 80 Date Anime::GetUserDateStarted() const { |
81 assert(list_info_.get()); | |
82 return list_info_->started; | |
83 } | |
84 | |
85 Date Anime::GetUserDateCompleted() const { | |
86 assert(list_info_.get()); | |
87 return list_info_->completed; | |
88 } | |
89 | |
90 bool Anime::GetUserIsPrivate() const { | |
91 assert(list_info_.get()); | |
92 return list_info_->is_private; | |
93 } | |
94 | |
95 unsigned int Anime::GetUserRewatchedTimes() const { | |
96 assert(list_info_.get()); | |
97 return list_info_->rewatched_times; | |
98 } | |
99 | |
100 bool Anime::GetUserIsRewatching() const { | |
101 assert(list_info_.get()); | |
102 return list_info_->rewatching; | |
103 } | |
104 | |
105 uint64_t Anime::GetUserTimeUpdated() const { | |
106 assert(list_info_.get()); | |
107 return list_info_->updated; | |
108 } | |
109 | |
110 std::string Anime::GetUserNotes() const { | |
111 assert(list_info_.get()); | |
112 return list_info_->notes; | |
113 } | |
114 | |
115 void Anime::SetUserStatus(ListStatus status) { | |
116 assert(list_info_.get()); | |
117 list_info_->status = status; | |
118 } | |
119 | |
10 | 120 void Anime::SetUserScore(int score) { |
121 assert(list_info_.get()); | |
122 list_info_->score = score; | |
123 } | |
124 | |
9 | 125 void Anime::SetUserProgress(int progress) { |
126 assert(list_info_.get()); | |
127 list_info_->progress = progress; | |
128 } | |
129 | |
130 void Anime::SetUserDateStarted(Date const& started) { | |
131 assert(list_info_.get()); | |
132 list_info_->started = started; | |
133 } | |
134 | |
135 void Anime::SetUserDateCompleted(Date const& completed) { | |
136 assert(list_info_.get()); | |
137 list_info_->completed = completed; | |
138 } | |
139 | |
140 void Anime::SetUserIsPrivate(bool is_private) { | |
141 assert(list_info_.get()); | |
142 list_info_->is_private = is_private; | |
143 } | |
144 | |
145 void Anime::SetUserRewatchedTimes(int rewatched) { | |
146 assert(list_info_.get()); | |
147 list_info_->rewatched_times = rewatched; | |
148 } | |
149 | |
150 void Anime::SetUserIsRewatching(bool rewatching) { | |
151 assert(list_info_.get()); | |
152 list_info_->rewatching = rewatching; | |
153 } | |
154 | |
155 void Anime::SetUserTimeUpdated(uint64_t updated) { | |
156 assert(list_info_.get()); | |
157 list_info_->updated = updated; | |
158 } | |
159 | |
160 void Anime::SetUserNotes(std::string const& notes) { | |
161 assert(list_info_.get()); | |
162 list_info_->notes = notes; | |
163 } | |
164 | |
165 /* Series data */ | |
166 int Anime::GetId() const { | |
167 return info_.id; | |
168 } | |
169 | |
170 std::string Anime::GetRomajiTitle() const { | |
171 return info_.title.romaji; | |
172 } | |
173 | |
174 std::string Anime::GetEnglishTitle() const { | |
175 return info_.title.english; | |
176 } | |
177 | |
178 std::string Anime::GetNativeTitle() const { | |
179 return info_.title.native; | |
180 } | |
181 | |
182 std::vector<std::string> Anime::GetTitleSynonyms() const { | |
183 std::vector<std::string> result; | |
195
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
186
diff
changeset
|
184 |
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
186
diff
changeset
|
185 auto add_to_synonyms = [this](std::vector<std::string>& vec, std::string key) { |
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
186
diff
changeset
|
186 if (!key.empty() && !std::count(vec.begin(), vec.end(), key) && key != GetUserPreferredTitle()) |
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
186
diff
changeset
|
187 vec.push_back(key); |
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
186
diff
changeset
|
188 }; |
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
186
diff
changeset
|
189 |
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
186
diff
changeset
|
190 add_to_synonyms(result, info_.title.english); |
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
186
diff
changeset
|
191 add_to_synonyms(result, info_.title.romaji); |
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
186
diff
changeset
|
192 add_to_synonyms(result, info_.title.native); |
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
186
diff
changeset
|
193 |
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
186
diff
changeset
|
194 for (auto& synonym : info_.synonyms) |
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
186
diff
changeset
|
195 add_to_synonyms(result, synonym); |
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
186
diff
changeset
|
196 |
9 | 197 return result; |
198 } | |
199 | |
200 int Anime::GetEpisodes() const { | |
201 return info_.episodes; | |
202 } | |
203 | |
204 SeriesStatus Anime::GetAiringStatus() const { | |
205 return info_.status; | |
206 } | |
207 | |
208 Date Anime::GetAirDate() const { | |
209 return info_.air_date; | |
210 } | |
211 | |
212 std::vector<std::string> Anime::GetGenres() const { | |
213 return info_.genres; | |
214 } | |
215 | |
216 std::vector<std::string> Anime::GetProducers() const { | |
217 return info_.producers; | |
218 } | |
219 | |
220 SeriesFormat Anime::GetFormat() const { | |
221 return info_.format; | |
222 } | |
223 | |
224 SeriesSeason Anime::GetSeason() const { | |
225 return info_.season; | |
226 } | |
227 | |
228 int Anime::GetAudienceScore() const { | |
229 return info_.audience_score; | |
230 } | |
231 | |
232 std::string Anime::GetSynopsis() const { | |
233 return info_.synopsis; | |
234 } | |
235 | |
236 int Anime::GetDuration() const { | |
237 return info_.duration; | |
238 } | |
239 | |
66
6481c5aed3e1
posters: add poster widget...
Paper <mrpapersonic@gmail.com>
parents:
36
diff
changeset
|
240 std::string Anime::GetPosterUrl() const { |
6481c5aed3e1
posters: add poster widget...
Paper <mrpapersonic@gmail.com>
parents:
36
diff
changeset
|
241 return info_.poster_url; |
6481c5aed3e1
posters: add poster widget...
Paper <mrpapersonic@gmail.com>
parents:
36
diff
changeset
|
242 } |
6481c5aed3e1
posters: add poster widget...
Paper <mrpapersonic@gmail.com>
parents:
36
diff
changeset
|
243 |
67
442065432549
poster: make posters link to AniList
Paper <mrpapersonic@gmail.com>
parents:
66
diff
changeset
|
244 std::string Anime::GetServiceUrl() const { |
183
01d259b9c89f
pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents:
178
diff
changeset
|
245 /* todo: add support for other services... */ |
67
442065432549
poster: make posters link to AniList
Paper <mrpapersonic@gmail.com>
parents:
66
diff
changeset
|
246 return "https://anilist.co/anime/" + std::to_string(GetId()); |
442065432549
poster: make posters link to AniList
Paper <mrpapersonic@gmail.com>
parents:
66
diff
changeset
|
247 } |
442065432549
poster: make posters link to AniList
Paper <mrpapersonic@gmail.com>
parents:
66
diff
changeset
|
248 |
9 | 249 void Anime::SetId(int id) { |
250 info_.id = id; | |
251 } | |
252 | |
253 void Anime::SetRomajiTitle(std::string const& title) { | |
254 info_.title.romaji = title; | |
255 } | |
256 | |
257 void Anime::SetEnglishTitle(std::string const& title) { | |
258 info_.title.english = title; | |
259 } | |
260 | |
261 void Anime::SetNativeTitle(std::string const& title) { | |
262 info_.title.native = title; | |
263 } | |
264 | |
265 void Anime::SetTitleSynonyms(std::vector<std::string> const& synonyms) { | |
266 info_.synonyms = synonyms; | |
267 } | |
268 | |
269 void Anime::AddTitleSynonym(std::string const& synonym) { | |
270 info_.synonyms.push_back(synonym); | |
271 } | |
272 | |
273 void Anime::SetEpisodes(int episodes) { | |
274 info_.episodes = episodes; | |
275 } | |
276 | |
277 void Anime::SetAiringStatus(SeriesStatus status) { | |
278 info_.status = status; | |
279 } | |
280 | |
281 void Anime::SetAirDate(Date const& date) { | |
282 info_.air_date = date; | |
283 } | |
284 | |
285 void Anime::SetGenres(std::vector<std::string> const& genres) { | |
286 info_.genres = genres; | |
287 } | |
288 | |
289 void Anime::SetProducers(std::vector<std::string> const& producers) { | |
290 info_.producers = producers; | |
291 } | |
292 | |
293 void Anime::SetFormat(SeriesFormat format) { | |
294 info_.format = format; | |
295 } | |
296 | |
297 void Anime::SetSeason(SeriesSeason season) { | |
298 info_.season = season; | |
299 } | |
300 | |
301 void Anime::SetAudienceScore(int audience_score) { | |
302 info_.audience_score = audience_score; | |
303 } | |
304 | |
305 void Anime::SetSynopsis(std::string synopsis) { | |
306 info_.synopsis = synopsis; | |
307 } | |
308 | |
309 void Anime::SetDuration(int duration) { | |
310 info_.duration = duration; | |
311 } | |
312 | |
66
6481c5aed3e1
posters: add poster widget...
Paper <mrpapersonic@gmail.com>
parents:
36
diff
changeset
|
313 void Anime::SetPosterUrl(std::string url) { |
6481c5aed3e1
posters: add poster widget...
Paper <mrpapersonic@gmail.com>
parents:
36
diff
changeset
|
314 info_.poster_url = url; |
6481c5aed3e1
posters: add poster widget...
Paper <mrpapersonic@gmail.com>
parents:
36
diff
changeset
|
315 } |
6481c5aed3e1
posters: add poster widget...
Paper <mrpapersonic@gmail.com>
parents:
36
diff
changeset
|
316 |
9 | 317 std::string Anime::GetUserPreferredTitle() const { |
318 switch (session.config.anime_list.language) { | |
319 case TitleLanguage::NATIVE: return (GetNativeTitle().empty()) ? GetRomajiTitle() : GetNativeTitle(); | |
320 case TitleLanguage::ENGLISH: return (GetEnglishTitle().empty()) ? GetRomajiTitle() : GetEnglishTitle(); | |
321 default: break; | |
322 } | |
323 return GetRomajiTitle(); | |
324 } | |
325 | |
326 } // namespace Anime |