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