Mercurial > minori
comparison src/core/anime.cc @ 286:53e3c015a973
anime: initial cross-service support
currently the Kitsu and MAL services don't work when chosen in the
GUI. This is because they haven't been implemented yet :)
| author | Paper <paper@paper.us.eu.org> | 
|---|---|
| date | Wed, 08 May 2024 16:44:27 -0400 | 
| parents | e66ffc338d82 | 
| children | 91ac90a34003 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 285:65df2813d0de | 286:53e3c015a973 | 
|---|---|
| 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::optional<std::string> Anime::GetServiceId(Service service) const { | |
| 174 if (info_.ids.find(service) == info_.ids.end()) | |
| 175 return std::nullopt; | |
| 176 | |
| 177 return info_.ids.at(service); | |
| 178 } | |
| 179 | |
| 173 /* note: this should use std::optional */ | 180 /* note: this should use std::optional */ | 
| 174 std::optional<std::string> Anime::GetTitle(TitleLanguage language) const { | 181 std::optional<std::string> Anime::GetTitle(TitleLanguage language) const { | 
| 175 if (info_.titles.find(language) == info_.titles.end()) | 182 if (info_.titles.find(language) == info_.titles.end()) | 
| 176 return std::nullopt; | 183 return std::nullopt; | 
| 177 | 184 | 
| 237 int Anime::GetDuration() const { | 244 int Anime::GetDuration() const { | 
| 238 return info_.duration; | 245 return info_.duration; | 
| 239 } | 246 } | 
| 240 | 247 | 
| 241 std::string Anime::GetPosterUrl() const { | 248 std::string Anime::GetPosterUrl() const { | 
| 249 /* this isn't really service-specific. this could use | |
| 250 * kitsu, MAL, or anilist, and would achieve basically | |
| 251 * the same effect. */ | |
| 242 return info_.poster_url; | 252 return info_.poster_url; | 
| 243 } | 253 } | 
| 244 | 254 | 
| 245 std::string Anime::GetServiceUrl() const { | 255 std::optional<std::string> Anime::GetServiceUrl(Service service) const { | 
| 246 /* todo: add support for other services... */ | 256 /* todo: add support for other services... */ | 
| 247 switch (session.config.service) { | 257 std::optional<std::string> id = GetServiceId(service); | 
| 248 case Service::AniList: return "https://anilist.co/anime/" + Strings::ToUtf8String(GetId()); | 258 if (!id.has_value()) | 
| 259 return std::nullopt; | |
| 260 | |
| 261 switch (service) { | |
| 262 case Service::AniList: | |
| 263 return "https://anilist.co/anime/" + id.value(); | |
| 249 default: return ""; | 264 default: return ""; | 
| 250 } | 265 } | 
| 251 } | 266 } | 
| 252 | 267 | 
| 253 void Anime::SetId(int id) { | 268 void Anime::SetId(int id) { | 
| 254 info_.id = id; | 269 info_.id = id; | 
| 270 } | |
| 271 | |
| 272 void Anime::SetServiceId(Service service, const std::string& id) { | |
| 273 info_.ids[service] = id; | |
| 255 } | 274 } | 
| 256 | 275 | 
| 257 void Anime::SetTitle(TitleLanguage language, const std::string& title) { | 276 void Anime::SetTitle(TitleLanguage language, const std::string& title) { | 
| 258 info_.titles[language] = title; | 277 info_.titles[language] = title; | 
| 259 } | 278 } | 
