Mercurial > minori
comparison src/anilist.cpp @ 6:1d82f6e04d7d
Update: add first parts to the settings dialog
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Wed, 16 Aug 2023 00:49:17 -0400 |
parents | 5af270662505 |
children | 07a9095eaeed |
comparison
equal
deleted
inserted
replaced
5:51ae25154b70 | 6:1d82f6e04d7d |
---|---|
63 {"variables", { | 63 {"variables", { |
64 {"name", name} | 64 {"name", name} |
65 }} | 65 }} |
66 }; | 66 }; |
67 auto ret = nlohmann::json::parse(SendRequest(json.dump())); | 67 auto ret = nlohmann::json::parse(SendRequest(json.dump())); |
68 return ret["data"]["User"]["id"].get<int>(); | 68 return JSON::GetInt(ret, "/data/User/id"_json_pointer); |
69 #undef QUERY | 69 #undef QUERY |
70 } | 70 } |
71 | 71 |
72 /* Maps to convert string forms to our internal enums */ | 72 /* Maps to convert string forms to our internal enums */ |
73 | 73 |
167 /* TODO: make sure that we actually need the wstring converter and see | 167 /* TODO: make sure that we actually need the wstring converter and see |
168 if we can just get wide strings back from nlohmann::json */ | 168 if we can just get wide strings back from nlohmann::json */ |
169 for (const auto& list : res["data"]["MediaListCollection"]["lists"].items()) { | 169 for (const auto& list : res["data"]["MediaListCollection"]["lists"].items()) { |
170 /* why are the .key() values strings?? */ | 170 /* why are the .key() values strings?? */ |
171 AnimeList anime_list; | 171 AnimeList anime_list; |
172 anime_list.name = StringUtils::Utf8ToWstr(JSON::GetString(list.value(), "name")); | 172 anime_list.name = JSON::GetString(list.value(), "/name"_json_pointer); |
173 for (const auto& entry : list.value()["entries"].items()) { | 173 for (const auto& entry : list.value()["entries"].items()) { |
174 Anime anime; | 174 Anime anime; |
175 anime.score = JSON::GetInt(entry.value(), "score"); | 175 anime.score = JSON::GetInt(entry.value(), "/score"_json_pointer); |
176 anime.progress = JSON::GetInt(entry.value(), "progress"); | 176 anime.progress = JSON::GetInt(entry.value(), "/progress"_json_pointer); |
177 anime.status = StringToAnimeWatchingMap[JSON::GetString(entry.value(), "status")]; | 177 anime.status = StringToAnimeWatchingMap[JSON::GetString(entry.value(), "/status"_json_pointer)]; |
178 anime.notes = StringUtils::Utf8ToWstr(JSON::GetString(entry.value(), "notes")); | 178 anime.notes = JSON::GetString(entry.value(), "/notes"_json_pointer); |
179 | 179 |
180 anime.started.SetYear(JSON::GetInt(entry.value()["startedAt"], "year")); | 180 anime.started.SetYear(JSON::GetInt(entry.value(), "/startedAt/year"_json_pointer)); |
181 anime.started.SetMonth(JSON::GetInt(entry.value()["startedAt"], "month")); | 181 anime.started.SetMonth(JSON::GetInt(entry.value(), "/startedAt/month"_json_pointer)); |
182 anime.started.SetDay(JSON::GetInt(entry.value()["startedAt"], "day")); | 182 anime.started.SetDay(JSON::GetInt(entry.value(), "/startedAt/day"_json_pointer)); |
183 | 183 |
184 anime.completed.SetYear(JSON::GetInt(entry.value()["completedAt"], "year")); | 184 anime.completed.SetYear(JSON::GetInt(entry.value(), "/completedAt/year"_json_pointer)); |
185 anime.completed.SetMonth(JSON::GetInt(entry.value()["completedAt"], "month")); | 185 anime.completed.SetMonth(JSON::GetInt(entry.value(), "/completedAt/month"_json_pointer)); |
186 anime.completed.SetDay(JSON::GetInt(entry.value()["completedAt"], "day")); | 186 anime.completed.SetDay(JSON::GetInt(entry.value(), "/completedAt/day"_json_pointer)); |
187 | 187 |
188 anime.updated = JSON::GetInt(entry.value(), "updatedAt"); | 188 anime.updated = JSON::GetInt(entry.value(), "/updatedAt"_json_pointer); |
189 | 189 |
190 anime.title.native = StringUtils::Utf8ToWstr(JSON::GetString(entry.value()["media"]["title"], "native")); | 190 anime.title.native = JSON::GetString(entry.value(), "/media/title/native"_json_pointer); |
191 anime.title.english = StringUtils::Utf8ToWstr(JSON::GetString(entry.value()["media"]["title"], "english")); | 191 anime.title.english = JSON::GetString(entry.value(), "/media/title/english"_json_pointer); |
192 anime.title.romaji = StringUtils::Utf8ToWstr(JSON::GetString(entry.value()["media"]["title"], "romaji")); | 192 anime.title.romaji = JSON::GetString(entry.value(), "/media/title/romaji"_json_pointer); |
193 | 193 /* fallback to romaji if english is not available |
194 anime.id = JSON::GetInt(entry.value()["media"], "id"); | 194 note that this takes up more space in memory and is stinky */ |
195 anime.episodes = JSON::GetInt(entry.value()["media"], "episodes"); | 195 if (anime.title.english.empty()) |
196 anime.type = StringToAnimeFormatMap[JSON::GetString(entry.value()["media"], "format")]; | 196 anime.title.english = anime.title.romaji; |
197 | 197 |
198 anime.airing = StringToAnimeAiringMap[JSON::GetString(entry.value()["media"], "status")]; | 198 anime.id = JSON::GetInt(entry.value(), "/media/id"_json_pointer); |
199 | 199 anime.episodes = JSON::GetInt(entry.value(), "/media/episodes"_json_pointer); |
200 anime.air_date.SetYear(JSON::GetInt(entry.value()["media"]["startDate"], "year")); | 200 anime.type = StringToAnimeFormatMap[JSON::GetString(entry.value()["media"], "/media/format"_json_pointer)]; |
201 anime.air_date.SetMonth(JSON::GetInt(entry.value()["media"]["startDate"], "month")); | 201 |
202 anime.air_date.SetDay(JSON::GetInt(entry.value()["media"]["startDate"], "day")); | 202 anime.airing = StringToAnimeAiringMap[JSON::GetString(entry.value()["media"], "/media/status"_json_pointer)]; |
203 | 203 |
204 anime.audience_score = JSON::GetInt(entry.value()["media"], "averageScore"); | 204 anime.air_date.SetYear(JSON::GetInt(entry.value(), "/media/startDate/year"_json_pointer)); |
205 anime.season = StringToAnimeSeasonMap[JSON::GetString(entry.value()["media"], "season")]; | 205 anime.air_date.SetMonth(JSON::GetInt(entry.value(), "/media/startDate/month"_json_pointer)); |
206 anime.duration = JSON::GetInt(entry.value()["media"], "duration"); | 206 anime.air_date.SetDay(JSON::GetInt(entry.value(), "/media/startDate/day"_json_pointer)); |
207 anime.synopsis = StringUtils::TextifySynopsis(StringUtils::Utf8ToWstr(JSON::GetString(entry.value()["media"], "duration"))); | 207 |
208 anime.audience_score = JSON::GetInt(entry.value(), "/media/averageScore"_json_pointer); | |
209 anime.season = StringToAnimeSeasonMap[JSON::GetString(entry.value(), "/media/season"_json_pointer)]; | |
210 anime.duration = JSON::GetInt(entry.value(), "/media/duration"_json_pointer); | |
211 anime.synopsis = StringUtils::TextifySynopsis(JSON::GetString(entry.value(), "/media/description"_json_pointer)); | |
208 | 212 |
209 if (entry.value()["media"]["genres"].is_array()) | 213 if (entry.value()["media"]["genres"].is_array()) |
210 anime.genres = entry.value()["media"]["genres"].get<std::vector<std::string>>(); | 214 anime.genres = entry.value()["media"]["genres"].get<std::vector<std::string>>(); |
211 anime_list.Add(anime); | 215 anime_list.Add(anime); |
212 } | 216 } |
215 return 1; | 219 return 1; |
216 #undef QUERY | 220 #undef QUERY |
217 } | 221 } |
218 | 222 |
219 int AniList::Authorize() { | 223 int AniList::Authorize() { |
220 if (session.config.anilist.auth_token.empty()) { | 224 /* Prompt for PIN */ |
221 /* Prompt for PIN */ | 225 QDesktopServices::openUrl(QUrl("https://anilist.co/api/v2/oauth/authorize?client_id=" CLIENT_ID "&response_type=token")); |
222 QDesktopServices::openUrl(QUrl("https://anilist.co/api/v2/oauth/authorize?client_id=" CLIENT_ID "&response_type=token")); | 226 bool ok; |
223 bool ok; | 227 QString token = QInputDialog::getText(0, "Credentials needed!", "Please enter the code given to you after logging in to AniList:", QLineEdit::Normal, "", &ok); |
224 QString token = QInputDialog::getText(0, "Credentials needed!", "Please enter the code given to you after logging in to AniList:", QLineEdit::Normal, "", &ok); | 228 if (ok && !token.isEmpty()) { |
225 if (ok && !token.isEmpty()) { | 229 session.config.anilist.auth_token = token.toStdString(); |
226 session.config.anilist.auth_token = token.toStdString(); | 230 } else { // fail |
227 } else { // fail | 231 return 0; |
228 return 0; | |
229 } | |
230 } | 232 } |
231 return 1; | 233 return 1; |
232 } | 234 } |