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 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 |