comparison include/core/anime.h @ 9:5c0397762b53

INCOMPLETE: megacommit :)
author Paper <mrpapersonic@gmail.com>
date Sun, 10 Sep 2023 03:59:16 -0400
parents
children 4b198a111713
comparison
equal deleted inserted replaced
8:b1f73678ef61 9:5c0397762b53
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 PLANNING,
14 COMPLETED,
15 DROPPED,
16 PAUSED
17 };
18
19 constexpr std::array<ListStatus, 5> ListStatuses{ListStatus::CURRENT, ListStatus::PLANNING, ListStatus::COMPLETED,
20 ListStatus::DROPPED, ListStatus::PAUSED};
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
65 struct ListInformation {
66 int id = 0;
67 int progress = 0;
68 int score = 0;
69 ListStatus status = ListStatus::NOT_IN_LIST;
70 Date started;
71 Date completed;
72 bool is_private = false;
73 unsigned int rewatched_times = 0;
74 bool rewatching = false;
75 uint64_t updated = 0;
76 std::string notes;
77 };
78
79 struct SeriesInformation {
80 int id;
81 struct {
82 std::string romaji;
83 std::string english;
84 std::string native;
85 } title;
86 std::vector<std::string> synonyms;
87 int episodes = 0;
88 SeriesStatus status = SeriesStatus::UNKNOWN;
89 Date air_date;
90 std::vector<std::string> genres;
91 std::vector<std::string> producers;
92 SeriesFormat format = SeriesFormat::UNKNOWN;
93 SeriesSeason season = SeriesSeason::UNKNOWN;
94 int audience_score = 0;
95 std::string synopsis;
96 int duration = 0;
97 };
98
99 class Anime {
100 public:
101 /* User list data */
102 ListStatus GetUserStatus() const;
103 int GetUserProgress() const;
104 int GetUserScore() const;
105 Date GetUserDateStarted() const;
106 Date GetUserDateCompleted() const;
107 bool GetUserIsPrivate() const;
108 unsigned int GetUserRewatchedTimes() const;
109 bool GetUserIsRewatching() const;
110 uint64_t GetUserTimeUpdated() const;
111 std::string GetUserNotes() const;
112
113 void SetUserStatus(ListStatus status);
114 void SetUserProgress(int progress);
115 void SetUserDateStarted(Date const& started);
116 void SetUserDateCompleted(Date const& completed);
117 void SetUserIsPrivate(bool is_private);
118 void SetUserRewatchedTimes(int rewatched);
119 void SetUserIsRewatching(bool rewatching);
120 void SetUserTimeUpdated(uint64_t updated);
121 void SetUserNotes(std::string const& notes);
122
123 /* Series data */
124 int GetId() const;
125 std::string GetRomajiTitle() const;
126 std::string GetEnglishTitle() const;
127 std::string GetNativeTitle() const;
128 std::vector<std::string> GetTitleSynonyms() const;
129 int GetEpisodes() const;
130 SeriesStatus GetAiringStatus() const;
131 Date GetAirDate() const;
132 std::vector<std::string> GetGenres() const;
133 std::vector<std::string> GetProducers() const;
134 SeriesFormat GetFormat() const;
135 SeriesSeason GetSeason() const;
136 int GetAudienceScore() const; /* should be double once MAL and Kitsu are implemented */
137 std::string GetSynopsis() const;
138 int GetDuration() const;
139
140 void SetId(int id);
141 void SetRomajiTitle(std::string const& title);
142 void SetEnglishTitle(std::string const& title);
143 void SetNativeTitle(std::string const& title);
144 void SetTitleSynonyms(std::vector<std::string> const& synonyms);
145 void AddTitleSynonym(std::string const& synonym);
146 void SetEpisodes(int episodes);
147 void SetAiringStatus(SeriesStatus status);
148 void SetAirDate(Date const& date);
149 void SetGenres(std::vector<std::string> const& genres);
150 void SetProducers(std::vector<std::string> const& producers);
151 void SetFormat(SeriesFormat format);
152 void SetSeason(SeriesSeason season);
153 void SetAudienceScore(int audience_score);
154 void SetSynopsis(std::string synopsis);
155 void SetDuration(int duration);
156
157 std::string GetUserPreferredTitle() const;
158
159 /* User stuff */
160 void AddToUserList();
161 bool IsInUserList() const;
162 void RemoveFromUserList();
163
164 private:
165 SeriesInformation info_;
166 std::unique_ptr<struct ListInformation> list_info_;
167 };
168
169 } // namespace Anime
170
171 #endif // __core__anime_h