Mercurial > minori
annotate include/core/anime.h @ 187:9613d72b097e
*: multiple performance improvements
like marking `static const` when it makes sense...
date: change old stupid heap-based method to a structure which should
make copying the thing actually make a copy.
also many performance-based changes, like removing the std::tie
dependency and forward-declaring nlohmann json
*: replace every instance of QString::fromUtf8 to Strings::ToQString.
the main difference is that our function will always convert exactly
what is in the string, while some other times it would only convert
up to the nearest NUL byte
| author | Paper <mrpapersonic@gmail.com> |
|---|---|
| date | Wed, 06 Dec 2023 13:43:54 -0500 |
| parents | 62e336597bb7 |
| children | 649786bae914 |
| rev | line source |
|---|---|
| 9 | 1 #ifndef __core__anime_h |
| 2 #define __core__anime_h | |
| 3 #include "core/date.h" | |
| 4 #include <array> | |
| 5 #include <map> | |
| 6 #include <vector> | |
| 7 | |
| 8 namespace Anime { | |
| 9 | |
| 10 enum class ListStatus { | |
| 11 NOT_IN_LIST, | |
| 12 CURRENT, | |
| 13 COMPLETED, | |
| 51 | 14 PAUSED, |
| 9 | 15 DROPPED, |
| 51 | 16 PLANNING |
| 9 | 17 }; |
| 18 | |
| 15 | 19 constexpr std::array<ListStatus, 5> ListStatuses{ListStatus::CURRENT, ListStatus::COMPLETED, ListStatus::PAUSED, |
| 20 ListStatus::DROPPED, ListStatus::PLANNING}; | |
| 9 | 21 |
| 22 enum class SeriesStatus { | |
| 23 UNKNOWN, | |
| 24 FINISHED, | |
| 25 RELEASING, | |
| 26 NOT_YET_RELEASED, | |
| 27 CANCELLED, | |
| 28 HIATUS | |
| 29 }; | |
| 30 | |
| 31 enum class SeriesFormat { | |
| 32 UNKNOWN, | |
| 33 TV, | |
| 34 TV_SHORT, | |
| 35 MOVIE, | |
| 36 SPECIAL, | |
| 37 OVA, | |
| 38 ONA, | |
| 39 MUSIC, | |
| 40 MANGA, | |
| 41 NOVEL, | |
| 42 ONE_SHOT | |
| 43 }; | |
| 44 | |
| 45 enum class SeriesSeason { | |
| 46 UNKNOWN, | |
| 47 WINTER, | |
| 48 SPRING, | |
| 49 SUMMER, | |
| 50 FALL | |
| 51 }; | |
| 52 | |
| 53 enum class TitleLanguage { | |
| 54 ROMAJI, | |
| 55 NATIVE, | |
| 56 ENGLISH | |
| 57 }; | |
| 58 | |
| 59 enum class Services { | |
| 60 NONE, | |
| 61 ANILIST, | |
| 62 NB_SERVICES | |
| 63 }; | |
| 64 | |
|
185
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
184
diff
changeset
|
65 enum class ScoreFormat { |
|
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
184
diff
changeset
|
66 POINT_100, // 0-100 |
|
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
184
diff
changeset
|
67 POINT_10_DECIMAL, // 0.0-10.0 |
|
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
184
diff
changeset
|
68 POINT_10, // 0-10 |
|
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
184
diff
changeset
|
69 POINT_5, // 0-5, should be represented in stars |
|
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
184
diff
changeset
|
70 POINT_3 // 1-3, should be represented in smileys |
|
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
184
diff
changeset
|
71 }; |
|
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
184
diff
changeset
|
72 |
| 9 | 73 struct ListInformation { |
| 15 | 74 int id = 0; |
| 75 int progress = 0; | |
|
185
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
184
diff
changeset
|
76 int score = 0; // note that this will ALWAYS be in POINT_100 format and must be converted |
| 15 | 77 ListStatus status = ListStatus::NOT_IN_LIST; |
| 78 Date started; | |
| 79 Date completed; | |
| 80 bool is_private = false; | |
| 81 unsigned int rewatched_times = 0; | |
| 82 bool rewatching = false; | |
| 83 uint64_t updated = 0; | |
| 84 std::string notes; | |
| 9 | 85 }; |
| 86 | |
| 87 struct SeriesInformation { | |
| 15 | 88 int id; |
| 89 struct { | |
| 90 std::string romaji; | |
| 91 std::string english; | |
| 92 std::string native; | |
| 93 } title; | |
| 94 std::vector<std::string> synonyms; | |
| 95 int episodes = 0; | |
| 96 SeriesStatus status = SeriesStatus::UNKNOWN; | |
| 97 Date air_date; | |
| 98 std::vector<std::string> genres; | |
| 99 std::vector<std::string> producers; | |
| 100 SeriesFormat format = SeriesFormat::UNKNOWN; | |
| 101 SeriesSeason season = SeriesSeason::UNKNOWN; | |
| 102 int audience_score = 0; | |
| 103 std::string synopsis; | |
| 104 int duration = 0; | |
|
66
6481c5aed3e1
posters: add poster widget...
Paper <mrpapersonic@gmail.com>
parents:
51
diff
changeset
|
105 std::string poster_url; |
| 9 | 106 }; |
| 107 | |
| 108 class Anime { | |
| 109 public: | |
| 110 /* User list data */ | |
| 111 ListStatus GetUserStatus() const; | |
| 112 int GetUserProgress() const; | |
| 113 int GetUserScore() const; | |
|
185
62e336597bb7
anime list: add support for different score formats
Paper <mrpapersonic@gmail.com>
parents:
184
diff
changeset
|
114 std::string GetUserPresentableScore() const; |
| 9 | 115 Date GetUserDateStarted() const; |
| 116 Date GetUserDateCompleted() const; | |
| 117 bool GetUserIsPrivate() const; | |
| 118 unsigned int GetUserRewatchedTimes() const; | |
| 119 bool GetUserIsRewatching() const; | |
| 120 uint64_t GetUserTimeUpdated() const; | |
| 121 std::string GetUserNotes() const; | |
| 122 | |
| 123 void SetUserStatus(ListStatus status); | |
| 10 | 124 void SetUserScore(int score); |
| 9 | 125 void SetUserProgress(int progress); |
| 126 void SetUserDateStarted(Date const& started); | |
| 127 void SetUserDateCompleted(Date const& completed); | |
| 128 void SetUserIsPrivate(bool is_private); | |
| 129 void SetUserRewatchedTimes(int rewatched); | |
| 130 void SetUserIsRewatching(bool rewatching); | |
| 131 void SetUserTimeUpdated(uint64_t updated); | |
| 132 void SetUserNotes(std::string const& notes); | |
| 133 | |
| 134 /* Series data */ | |
| 135 int GetId() const; | |
| 136 std::string GetRomajiTitle() const; | |
| 137 std::string GetEnglishTitle() const; | |
| 138 std::string GetNativeTitle() const; | |
| 139 std::vector<std::string> GetTitleSynonyms() const; | |
| 140 int GetEpisodes() const; | |
| 141 SeriesStatus GetAiringStatus() const; | |
| 142 Date GetAirDate() const; | |
| 143 std::vector<std::string> GetGenres() const; | |
| 144 std::vector<std::string> GetProducers() const; | |
| 145 SeriesFormat GetFormat() const; | |
| 146 SeriesSeason GetSeason() const; | |
| 147 int GetAudienceScore() const; /* should be double once MAL and Kitsu are implemented */ | |
| 148 std::string GetSynopsis() const; | |
| 149 int GetDuration() const; | |
|
66
6481c5aed3e1
posters: add poster widget...
Paper <mrpapersonic@gmail.com>
parents:
51
diff
changeset
|
150 std::string GetPosterUrl() const; |
|
67
442065432549
poster: make posters link to AniList
Paper <mrpapersonic@gmail.com>
parents:
66
diff
changeset
|
151 std::string GetServiceUrl() const; |
| 9 | 152 |
| 153 void SetId(int id); | |
| 154 void SetRomajiTitle(std::string const& title); | |
| 155 void SetEnglishTitle(std::string const& title); | |
| 156 void SetNativeTitle(std::string const& title); | |
| 157 void SetTitleSynonyms(std::vector<std::string> const& synonyms); | |
| 158 void AddTitleSynonym(std::string const& synonym); | |
| 159 void SetEpisodes(int episodes); | |
| 160 void SetAiringStatus(SeriesStatus status); | |
| 161 void SetAirDate(Date const& date); | |
| 162 void SetGenres(std::vector<std::string> const& genres); | |
| 163 void SetProducers(std::vector<std::string> const& producers); | |
| 164 void SetFormat(SeriesFormat format); | |
| 165 void SetSeason(SeriesSeason season); | |
| 166 void SetAudienceScore(int audience_score); | |
| 167 void SetSynopsis(std::string synopsis); | |
| 168 void SetDuration(int duration); | |
|
66
6481c5aed3e1
posters: add poster widget...
Paper <mrpapersonic@gmail.com>
parents:
51
diff
changeset
|
169 void SetPosterUrl(std::string poster); |
| 9 | 170 |
| 171 std::string GetUserPreferredTitle() const; | |
| 172 | |
| 173 /* User stuff */ | |
| 174 void AddToUserList(); | |
| 175 bool IsInUserList() const; | |
| 176 void RemoveFromUserList(); | |
| 177 | |
| 178 private: | |
| 179 SeriesInformation info_; | |
| 10 | 180 std::shared_ptr<struct ListInformation> list_info_; |
| 9 | 181 }; |
| 182 | |
| 183 } // namespace Anime | |
| 184 | |
| 51 | 185 #endif // __core__anime_h |
