Mercurial > minori
diff src/services/anilist.cpp @ 75:d3e9310598b1
*: refactor some stuff
text: "TextParagraph"s are now called sections, because that's the
actual word for it :P
text: new classes: Line and OneLineSection, solves many problems with
paragraphs that are only one line long (ex. going out of bounds)
http: reworked http stuff to allow threaded get requests, also moved it
to its own file to (hopefully) remove clutter
eventually I'll make a threaded post request method and use that in
the "basic" function
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Wed, 04 Oct 2023 01:42:30 -0400 |
parents | 5ccb99bfa605 |
children | 3364fadc8a36 |
line wrap: on
line diff
--- a/src/services/anilist.cpp Tue Oct 03 06:12:43 2023 -0400 +++ b/src/services/anilist.cpp Wed Oct 04 01:42:30 2023 -0400 @@ -3,6 +3,7 @@ #include "core/anime_db.h" #include "core/config.h" #include "core/json.h" +#include "core/http.h" #include "core/session.h" #include "core/strings.h" #include "gui/translate/anilist.h" @@ -12,7 +13,6 @@ #include <QMessageBox> #include <QUrl> #include <chrono> -#include <curl/curl.h> #include <exception> #define CLIENT_ID "13706" @@ -37,41 +37,13 @@ static Account account; -static size_t CurlWriteCallback(void* contents, size_t size, size_t nmemb, void* userdata) { - reinterpret_cast<std::string*>(userdata)->append(reinterpret_cast<char*>(contents), size * nmemb); - return size * nmemb; -} - -/* A wrapper around cURL to send requests to AniList */ std::string SendRequest(std::string data) { - struct curl_slist* list = NULL; - std::string userdata; - CURL* curl = curl_easy_init(); - if (curl) { - std::string bearer = "Authorization: Bearer " + account.AuthToken(); - list = curl_slist_append(list, "Accept: application/json"); - list = curl_slist_append(list, "Content-Type: application/json"); - list = curl_slist_append(list, bearer.c_str()); - curl_easy_setopt(curl, CURLOPT_URL, "https://graphql.anilist.co"); - curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str()); - curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &userdata); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &CurlWriteCallback); - /* Use system certs... useful on Windows. */ - curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA); - CURLcode res = curl_easy_perform(curl); - session.IncrementRequests(); - curl_slist_free_all(list); - curl_easy_cleanup(curl); - if (res != CURLE_OK) { - QMessageBox box(QMessageBox::Icon::Critical, "", - QString("curl_easy_perform(curl) failed!: ") + QString(curl_easy_strerror(res))); - box.exec(); - return ""; - } - return userdata; - } - return ""; + std::vector<std::string> headers = { + "Authorization: Bearer " + account.AuthToken(), + "Accept: application/json", + "Content-Type: application/json" + }; + return HTTP::PerformBasicPostRequest("https://graphql.anilist.co", data, headers); } void ParseListStatus(std::string status, Anime::Anime& anime) {