comparison src/anilist.cpp @ 2:23d0d9319a00

Update Also converted everything to LF from CRLF
author Paper <mrpapersonic@gmail.com>
date Sat, 12 Aug 2023 03:16:26 -0400
parents 1ae666fdf9e2
children 190ded9438c0
comparison
equal deleted inserted replaced
1:1ae666fdf9e2 2:23d0d9319a00
107 {"NOVEL", NOVEL}, 107 {"NOVEL", NOVEL},
108 {"ONE_SHOT", ONE_SHOT} 108 {"ONE_SHOT", ONE_SHOT}
109 }; 109 };
110 110
111 int AniList::UpdateAnimeList(std::vector<AnimeList>* anime_lists, int id) { 111 int AniList::UpdateAnimeList(std::vector<AnimeList>* anime_lists, int id) {
112 /* NOTE: these should be in the qrc file */
112 #define QUERY "query ($id: Int) {\n" \ 113 #define QUERY "query ($id: Int) {\n" \
113 " MediaListCollection (userId: $id, type: ANIME) {\n" \ 114 " MediaListCollection (userId: $id, type: ANIME) {\n" \
114 " lists {\n" \ 115 " lists {\n" \
115 " name\n" \ 116 " name\n" \
116 " entries {\n" \ 117 " entries {\n" \
125 " completedAt {\n" \ 126 " completedAt {\n" \
126 " year\n" \ 127 " year\n" \
127 " month\n" \ 128 " month\n" \
128 " day\n" \ 129 " day\n" \
129 " }\n" \ 130 " }\n" \
131 " updatedAt\n" \
130 " media {\n" \ 132 " media {\n" \
131 " id\n" \ 133 " id\n" \
132 " title {\n" \ 134 " title {\n" \
133 " userPreferred\n" \ 135 " romaji\n" \
136 " english\n" \
137 " native\n" \
134 " }\n" \ 138 " }\n" \
135 " format\n" \ 139 " format\n" \
136 " status\n" \ 140 " status\n" \
137 " averageScore\n" \ 141 " averageScore\n" \
138 " season\n" \ 142 " season\n" \
164 if we can just get wide strings back from nlohmann::json */ 168 if we can just get wide strings back from nlohmann::json */
165 for (const auto& list : res["data"]["MediaListCollection"]["lists"].items()) { 169 for (const auto& list : res["data"]["MediaListCollection"]["lists"].items()) {
166 /* why are the .key() values strings?? */ 170 /* why are the .key() values strings?? */
167 int list_key = std::stoi(list.key()); 171 int list_key = std::stoi(list.key());
168 AnimeList anime_list; 172 AnimeList anime_list;
169 anime_list.name = StringUtils::Utf8ToWstr(list.value()["name"].get<std::string>()); 173 anime_list.name = StringUtils::Utf8ToWstr(JSON::GetString(list.value(), "name"));
170 for (const auto& entry : list.value()["entries"].items()) { 174 for (const auto& entry : list.value()["entries"].items()) {
171 int entry_key = std::stoi(entry.key()); 175 int entry_key = std::stoi(entry.key());
172 Anime anime; 176 Anime anime;
173 anime.score = entry.value()["score"].get<int>(); 177 anime.score = JSON::GetInt(entry.value(), "score");
174 anime.progress = entry.value()["progress"].get<int>(); 178 anime.progress = JSON::GetInt(entry.value(), "progress");
175 if (entry.value()["status"].is_string()) 179 anime.status = StringToAnimeWatchingMap[JSON::GetString(entry.value(), "status")];
176 anime.status = StringToAnimeWatchingMap[entry.value()["status"].get<std::string>()]; 180 anime.notes = StringUtils::Utf8ToWstr(JSON::GetString(entry.value(), "notes"));
177 if (entry.value()["notes"].is_string()) 181
178 anime.notes = StringUtils::Utf8ToWstr(entry.value()["notes"].get<std::string>()); 182 anime.started.SetYear(JSON::GetInt(entry.value()["startedAt"], "year"));
179 183 anime.started.SetMonth(JSON::GetInt(entry.value()["startedAt"], "month"));
180 if (ANILIST_DATE_IS_VALID(entry.value()["startedAt"])) 184 anime.started.SetDay(JSON::GetInt(entry.value()["startedAt"], "day"));
181 anime.started = ANILIST_DATE_TO_YMD(entry.value()["startedAt"]); 185
182 if (ANILIST_DATE_IS_VALID(entry.value()["completedAt"])) 186 anime.completed.SetYear(JSON::GetInt(entry.value()["completedAt"], "year"));
183 anime.completed = ANILIST_DATE_TO_YMD(entry.value()["completedAt"]); 187 anime.completed.SetMonth(JSON::GetInt(entry.value()["completedAt"], "month"));
184 188 anime.completed.SetDay(JSON::GetInt(entry.value()["completedAt"], "day"));
185 anime.title = StringUtils::Utf8ToWstr(entry.value()["media"]["title"]["userPreferred"].get<std::string>()); 189
186 anime.id = entry.value()["media"]["id"].get<int>(); 190 anime.updated = JSON::GetInt(entry.value(), "updatedAt");
187 if (!entry.value()["media"]["episodes"].is_null()) 191
188 anime.episodes = entry.value()["media"]["episodes"].get<int>(); 192 anime.title.native = StringUtils::Utf8ToWstr(JSON::GetString(entry.value()["media"]["title"], "native"));
189 else // hasn't aired yet 193 anime.title.english = StringUtils::Utf8ToWstr(JSON::GetString(entry.value()["media"]["title"], "english"));
190 anime.episodes = 0; 194 anime.title.romaji = StringUtils::Utf8ToWstr(JSON::GetString(entry.value()["media"]["title"], "romaji"));
191 195
192 if (!entry.value()["media"]["format"].is_null()) 196 anime.id = JSON::GetInt(entry.value()["media"], "id");
193 anime.type = StringToAnimeFormatMap[entry.value()["media"]["format"].get<std::string>()]; 197 anime.episodes = JSON::GetInt(entry.value()["media"], "episodes");
194 198 anime.type = StringToAnimeFormatMap[JSON::GetString(entry.value()["media"], "format")];
195 anime.airing = StringToAnimeAiringMap[entry.value()["media"]["status"].get<std::string>()]; 199
196 200 anime.airing = StringToAnimeAiringMap[JSON::GetString(entry.value()["media"], "status")];
197 if (ANILIST_DATE_IS_VALID(entry.value()["media"]["startDate"])) 201
198 anime.air_date = ANILIST_DATE_TO_YMD(entry.value()["media"]["startDate"]); 202 anime.air_date.SetYear(JSON::GetInt(entry.value()["media"]["startDate"], "year"));
199 203 anime.air_date.SetMonth(JSON::GetInt(entry.value()["media"]["startDate"], "month"));
200 if (entry.value()["media"]["averageScore"].is_number()) 204 anime.air_date.SetDay(JSON::GetInt(entry.value()["media"]["startDate"], "day"));
201 anime.audience_score = entry.value()["media"]["averageScore"].get<int>(); 205
202 206 anime.audience_score = JSON::GetInt(entry.value()["media"], "averageScore");
203 if (entry.value()["media"]["season"].is_string()) 207 anime.season = StringToAnimeSeasonMap[JSON::GetString(entry.value()["media"], "season")];
204 anime.season = StringToAnimeSeasonMap[entry.value()["media"]["season"].get<std::string>()]; 208 anime.duration = JSON::GetInt(entry.value()["media"], "duration");
205 209 anime.synopsis = StringUtils::TextifySynopsis(StringUtils::Utf8ToWstr(JSON::GetString(entry.value()["media"], "duration")));
206 if (entry.value()["media"]["duration"].is_number())
207 anime.duration = entry.value()["media"]["duration"].get<int>();
208 else
209 anime.duration = 0;
210 210
211 if (entry.value()["media"]["genres"].is_array()) 211 if (entry.value()["media"]["genres"].is_array())
212 anime.genres = entry.value()["media"]["genres"].get<std::vector<std::string>>(); 212 anime.genres = entry.value()["media"]["genres"].get<std::vector<std::string>>();
213 if (entry.value()["media"]["description"].is_string())
214 anime.synopsis = StringUtils::TextifySynopsis(StringUtils::Utf8ToWstr(entry.value()["media"]["description"].get<std::string>()));
215 anime_list.Add(anime); 213 anime_list.Add(anime);
216 } 214 }
217 anime_lists->push_back(anime_list); 215 anime_lists->push_back(anime_list);
218 } 216 }
219 return 1; 217 return 1;
218 #undef QUERY
220 } 219 }
221 220
222 int AniList::Authorize() { 221 int AniList::Authorize() {
223 if (session.config.anilist.auth_token.empty()) { 222 if (session.config.anilist.auth_token.empty()) {
224 /* Prompt for PIN */ 223 /* Prompt for PIN */