Mercurial > minori
annotate include/core/anime.h @ 262:8e282d0dc282
automake: update osx header files
| author | Paper <paper@paper.us.eu.org> | 
|---|---|
| date | Wed, 03 Apr 2024 20:26:03 -0400 | 
| parents | 3ec7804abf17 | 
| children | 9a04802848c0 | 
| rev | line source | 
|---|---|
| 
261
 
3ec7804abf17
include: make header guards more sane
 
Paper <paper@paper.us.eu.org> 
parents: 
260 
diff
changeset
 | 
1 #ifndef MINORI_CORE_ANIME_H_ | 
| 
 
3ec7804abf17
include: make header guards more sane
 
Paper <paper@paper.us.eu.org> 
parents: 
260 
diff
changeset
 | 
2 #define MINORI_CORE_ANIME_H_ | 
| 
 
3ec7804abf17
include: make header guards more sane
 
Paper <paper@paper.us.eu.org> 
parents: 
260 
diff
changeset
 | 
3 | 
| 9 | 4 #include "core/date.h" | 
| 5 #include <array> | |
| 6 #include <map> | |
| 7 #include <vector> | |
| 8 | |
| 9 namespace Anime { | |
| 10 | |
| 11 enum class ListStatus { | |
| 12 NOT_IN_LIST, | |
| 13 CURRENT, | |
| 14 COMPLETED, | |
| 51 | 15 PAUSED, | 
| 9 | 16 DROPPED, | 
| 51 | 17 PLANNING | 
| 9 | 18 }; | 
| 19 | |
| 15 | 20 constexpr std::array<ListStatus, 5> ListStatuses{ListStatus::CURRENT, ListStatus::COMPLETED, ListStatus::PAUSED, | 
| 21 ListStatus::DROPPED, ListStatus::PLANNING}; | |
| 9 | 22 | 
| 23 enum class SeriesStatus { | |
| 24 UNKNOWN, | |
| 25 FINISHED, | |
| 26 RELEASING, | |
| 27 NOT_YET_RELEASED, | |
| 28 CANCELLED, | |
| 29 HIATUS | |
| 30 }; | |
| 31 | |
| 32 enum class SeriesFormat { | |
| 33 UNKNOWN, | |
| 34 TV, | |
| 35 TV_SHORT, | |
| 36 MOVIE, | |
| 37 SPECIAL, | |
| 38 OVA, | |
| 39 ONA, | |
| 40 MUSIC, | |
| 41 MANGA, | |
| 42 NOVEL, | |
| 43 ONE_SHOT | |
| 44 }; | |
| 45 | |
| 46 enum class SeriesSeason { | |
| 47 UNKNOWN, | |
| 48 WINTER, | |
| 49 SPRING, | |
| 50 SUMMER, | |
| 51 FALL | |
| 52 }; | |
| 53 | |
| 
260
 
dd211ff68b36
pages/seasons: add initial functionality
 
Paper <paper@paper.us.eu.org> 
parents: 
258 
diff
changeset
 | 
54 constexpr std::array<SeriesSeason, 4> SeriesSeasons{ | 
| 
 
dd211ff68b36
pages/seasons: add initial functionality
 
Paper <paper@paper.us.eu.org> 
parents: 
258 
diff
changeset
 | 
55 SeriesSeason::WINTER, SeriesSeason::SPRING, | 
| 
 
dd211ff68b36
pages/seasons: add initial functionality
 
Paper <paper@paper.us.eu.org> 
parents: 
258 
diff
changeset
 | 
56 SeriesSeason::SUMMER, SeriesSeason::FALL | 
| 
 
dd211ff68b36
pages/seasons: add initial functionality
 
Paper <paper@paper.us.eu.org> 
parents: 
258 
diff
changeset
 | 
57 }; | 
| 
 
dd211ff68b36
pages/seasons: add initial functionality
 
Paper <paper@paper.us.eu.org> 
parents: 
258 
diff
changeset
 | 
58 | 
| 9 | 59 enum class TitleLanguage { | 
| 60 ROMAJI, | |
| 61 NATIVE, | |
| 62 ENGLISH | |
| 63 }; | |
| 64 | |
| 65 enum class Services { | |
| 66 NONE, | |
| 67 ANILIST, | |
| 68 NB_SERVICES | |
| 69 }; | |
| 70 | |
| 
185
 
62e336597bb7
anime list: add support for different score formats
 
Paper <mrpapersonic@gmail.com> 
parents: 
184 
diff
changeset
 | 
71 enum class ScoreFormat { | 
| 258 | 72 POINT_100, // 0-100 | 
| 
185
 
62e336597bb7
anime list: add support for different score formats
 
Paper <mrpapersonic@gmail.com> 
parents: 
184 
diff
changeset
 | 
73 POINT_10_DECIMAL, // 0.0-10.0 | 
| 258 | 74 POINT_10, // 0-10 | 
| 75 POINT_5, // 0-5, should be represented in stars | |
| 76 POINT_3 // 1-3, should be represented in smileys | |
| 
185
 
62e336597bb7
anime list: add support for different score formats
 
Paper <mrpapersonic@gmail.com> 
parents: 
184 
diff
changeset
 | 
77 }; | 
| 
 
62e336597bb7
anime list: add support for different score formats
 
Paper <mrpapersonic@gmail.com> 
parents: 
184 
diff
changeset
 | 
78 | 
| 258 | 79 constexpr std::array<ScoreFormat, 5> ScoreFormats{ScoreFormat::POINT_100, ScoreFormat::POINT_10_DECIMAL, | 
| 80 ScoreFormat::POINT_10, ScoreFormat::POINT_5, ScoreFormat::POINT_3}; | |
| 189 | 81 | 
| 9 | 82 struct ListInformation { | 
| 258 | 83 int id = 0; | 
| 84 int progress = 0; | |
| 85 int score = 0; // note that this will ALWAYS be in POINT_100 format and must be converted | |
| 86 ListStatus status = ListStatus::NOT_IN_LIST; | |
| 87 Date started; | |
| 88 Date completed; | |
| 89 bool is_private = false; | |
| 90 unsigned int rewatched_times = 0; | |
| 91 bool rewatching = false; | |
| 92 uint64_t updated = 0; | |
| 93 std::string notes; | |
| 9 | 94 }; | 
| 95 | |
| 96 struct SeriesInformation { | |
| 258 | 97 int id; | 
| 98 struct { | |
| 99 std::string romaji; | |
| 100 std::string english; | |
| 101 std::string native; | |
| 102 } title; | |
| 103 std::vector<std::string> synonyms; | |
| 104 int episodes = 0; | |
| 105 SeriesStatus status = SeriesStatus::UNKNOWN; | |
| 106 Date air_date; | |
| 107 std::vector<std::string> genres; | |
| 108 std::vector<std::string> producers; | |
| 109 SeriesFormat format = SeriesFormat::UNKNOWN; | |
| 110 SeriesSeason season = SeriesSeason::UNKNOWN; | |
| 111 int audience_score = 0; | |
| 112 std::string synopsis; | |
| 113 int duration = 0; | |
| 114 std::string poster_url; | |
| 9 | 115 }; | 
| 116 | |
| 117 class Anime { | |
| 258 | 118 public: | 
| 119 /* User list data */ | |
| 120 ListStatus GetUserStatus() const; | |
| 121 int GetUserProgress() const; | |
| 122 int GetUserScore() const; | |
| 123 std::string GetUserPresentableScore() const; | |
| 124 Date GetUserDateStarted() const; | |
| 125 Date GetUserDateCompleted() const; | |
| 126 bool GetUserIsPrivate() const; | |
| 127 unsigned int GetUserRewatchedTimes() const; | |
| 128 bool GetUserIsRewatching() const; | |
| 129 uint64_t GetUserTimeUpdated() const; | |
| 130 std::string GetUserNotes() const; | |
| 9 | 131 | 
| 258 | 132 void SetUserStatus(ListStatus status); | 
| 133 void SetUserScore(int score); | |
| 134 void SetUserProgress(int progress); | |
| 135 void SetUserDateStarted(Date const& started); | |
| 136 void SetUserDateCompleted(Date const& completed); | |
| 137 void SetUserIsPrivate(bool is_private); | |
| 138 void SetUserRewatchedTimes(int rewatched); | |
| 139 void SetUserIsRewatching(bool rewatching); | |
| 140 void SetUserTimeUpdated(uint64_t updated); | |
| 141 void SetUserNotes(std::string const& notes); | |
| 9 | 142 | 
| 258 | 143 /* Series data */ | 
| 144 int GetId() const; | |
| 145 std::string GetRomajiTitle() const; | |
| 146 std::string GetEnglishTitle() const; | |
| 147 std::string GetNativeTitle() const; | |
| 148 std::vector<std::string> GetTitleSynonyms() const; | |
| 149 int GetEpisodes() const; | |
| 150 SeriesStatus GetAiringStatus() const; | |
| 151 Date GetAirDate() const; | |
| 152 std::vector<std::string> GetGenres() const; | |
| 153 std::vector<std::string> GetProducers() const; | |
| 154 SeriesFormat GetFormat() const; | |
| 155 SeriesSeason GetSeason() const; | |
| 156 int GetAudienceScore() const; | |
| 157 std::string GetSynopsis() const; | |
| 158 int GetDuration() const; | |
| 159 std::string GetPosterUrl() const; | |
| 160 std::string GetServiceUrl() const; | |
| 9 | 161 | 
| 258 | 162 void SetId(int id); | 
| 163 void SetRomajiTitle(std::string const& title); | |
| 164 void SetEnglishTitle(std::string const& title); | |
| 165 void SetNativeTitle(std::string const& title); | |
| 166 void SetTitleSynonyms(std::vector<std::string> const& synonyms); | |
| 167 void AddTitleSynonym(std::string const& synonym); | |
| 168 void SetEpisodes(int episodes); | |
| 169 void SetAiringStatus(SeriesStatus status); | |
| 170 void SetAirDate(Date const& date); | |
| 171 void SetGenres(std::vector<std::string> const& genres); | |
| 172 void SetProducers(std::vector<std::string> const& producers); | |
| 173 void SetFormat(SeriesFormat format); | |
| 174 void SetSeason(SeriesSeason season); | |
| 175 void SetAudienceScore(int audience_score); | |
| 176 void SetSynopsis(std::string synopsis); | |
| 177 void SetDuration(int duration); | |
| 178 void SetPosterUrl(std::string poster); | |
| 9 | 179 | 
| 258 | 180 std::string GetUserPreferredTitle() const; | 
| 9 | 181 | 
| 258 | 182 /* User stuff */ | 
| 183 void AddToUserList(); | |
| 184 bool IsInUserList() const; | |
| 185 void RemoveFromUserList(); | |
| 9 | 186 | 
| 258 | 187 private: | 
| 188 SeriesInformation info_; | |
| 189 std::shared_ptr<struct ListInformation> list_info_; | |
| 9 | 190 }; | 
| 191 | |
| 192 } // namespace Anime | |
| 193 | |
| 
261
 
3ec7804abf17
include: make header guards more sane
 
Paper <paper@paper.us.eu.org> 
parents: 
260 
diff
changeset
 | 
194 #endif // MINORI_CORE_ANIME_H_ | 
