comparison src/services/anilist.cpp @ 77:6f7385bd334c

*: update formatted all source files, no more subclassing QThread... many other changes :)
author Paper <mrpapersonic@gmail.com>
date Fri, 06 Oct 2023 06:18:53 -0400
parents 3364fadc8a36
children
comparison
equal deleted inserted replaced
76:3364fadc8a36 77:6f7385bd334c
5 #include "core/http.h" 5 #include "core/http.h"
6 #include "core/json.h" 6 #include "core/json.h"
7 #include "core/session.h" 7 #include "core/session.h"
8 #include "core/strings.h" 8 #include "core/strings.h"
9 #include "gui/translate/anilist.h" 9 #include "gui/translate/anilist.h"
10 #include <QByteArray>
10 #include <QDesktopServices> 11 #include <QDesktopServices>
11 #include <QInputDialog> 12 #include <QInputDialog>
12 #include <QLineEdit> 13 #include <QLineEdit>
13 #include <QMessageBox> 14 #include <QMessageBox>
14 #include <QUrl> 15 #include <QUrl>
38 static Account account; 39 static Account account;
39 40
40 std::string SendRequest(std::string data) { 41 std::string SendRequest(std::string data) {
41 std::vector<std::string> headers = {"Authorization: Bearer " + account.AuthToken(), "Accept: application/json", 42 std::vector<std::string> headers = {"Authorization: Bearer " + account.AuthToken(), "Accept: application/json",
42 "Content-Type: application/json"}; 43 "Content-Type: application/json"};
43 return HTTP::PerformBasicPostRequest("https://graphql.anilist.co", data, headers); 44 return Strings::ToUtf8String(HTTP::Post("https://graphql.anilist.co", data, headers));
44 } 45 }
45 46
46 void ParseListStatus(std::string status, Anime::Anime& anime) { 47 void ParseListStatus(std::string status, Anime::Anime& anime) {
47 std::unordered_map<std::string, Anime::ListStatus> map = { 48 std::unordered_map<std::string, Anime::ListStatus> map = {
48 {"CURRENT", Anime::ListStatus::CURRENT }, 49 {"CURRENT", Anime::ListStatus::CURRENT },
253 * float[] advancedScores, 254 * float[] advancedScores,
254 * Date startedAt, 255 * Date startedAt,
255 * Date completedAt 256 * Date completedAt
256 **/ 257 **/
257 Anime::Anime& anime = Anime::db.items[id]; 258 Anime::Anime& anime = Anime::db.items[id];
258 const std::string query = 259 const std::string query = "mutation ($media_id: Int, $progress: Int, $status: MediaListStatus, $score: Int, "
259 "mutation ($media_id: Int, $progress: Int, $status: MediaListStatus, $score: Int, $notes: String) {\n" 260 "$notes: String, $start: FuzzyDateInput, $comp: FuzzyDateInput) {\n"
260 " SaveMediaListEntry (mediaId: $media_id, progress: $progress, status: $status, scoreRaw: $score, notes: " 261 " SaveMediaListEntry (mediaId: $media_id, progress: $progress, status: $status, "
261 "$notes) {\n" 262 "scoreRaw: $score, notes: $notes, startedAt: $start, completedAt: $comp) {\n"
262 " id\n" 263 " id\n"
263 " }\n" 264 " }\n"
264 "}\n"; 265 "}\n";
265 // clang-format off 266 // clang-format off
266 nlohmann::json json = { 267 nlohmann::json json = {
267 {"query", query}, 268 {"query", query},
268 {"variables", { 269 {"variables", {
269 {"media_id", anime.GetId()}, 270 {"media_id", anime.GetId()},
270 {"progress", anime.GetUserProgress()}, 271 {"progress", anime.GetUserProgress()},
271 {"status", ListStatusToString(anime)}, 272 {"status", ListStatusToString(anime)},
272 {"score", anime.GetUserScore()}, 273 {"score", anime.GetUserScore()},
273 {"notes", anime.GetUserNotes()} 274 {"notes", anime.GetUserNotes()},
275 {"start", anime.GetUserDateStarted().GetAsAniListJson()},
276 {"comp", anime.GetUserDateCompleted().GetAsAniListJson()}
274 }} 277 }}
275 }; 278 };
276 // clang-format on 279 // clang-format on
277 auto ret = nlohmann::json::parse(SendRequest(json.dump())); 280 auto ret = nlohmann::json::parse(SendRequest(json.dump()));
278 return JSON::GetInt(ret, "/data/SaveMediaListEntry/id"_json_pointer); 281 return JSON::GetInt(ret, "/data/SaveMediaListEntry/id"_json_pointer);