view src/include/anilist.h @ 1:1ae666fdf9e2

*: initial commit
author Paper <mrpapersonic@gmail.com>
date Tue, 08 Aug 2023 19:49:15 -0400
parents
children 23d0d9319a00
line wrap: on
line source

#ifndef __anilist_h
#define __anilist_h
#include <curl/curl.h>
#include "anime.h"
class AniList {
	public:
		int Authorize();
		int GetUserId(std::string name);
		int UpdateAnimeList(std::vector<AnimeList>* anime_lists, int id);

	private:
		static size_t CurlWriteCallback(void *contents, size_t size, size_t nmemb, void *userdata);
		enum AnimeWatchingStatus ConvertWatchingStatusToEnum(std::string status);
		enum AnimeAiringStatus ConvertAiringStatusToEnum(std::string status);
		enum AnimeFormat ConvertFormatToEnum(std::string format);
		enum AnimeSeason ConvertSeasonToEnum(std::string season);
		std::string SendRequest(std::string data);
		CURL* curl;
		CURLcode res;
};

/* FIXME: at some point, we have to add a separate Date class (which IIRC
   Kitsu actually does as well), because the standard library functions do
   not support any null values. Internally, we could represent null or undefined
   values as... -1?. Also, anything anime-related should probably be in an
   Anime namespace. */
#define ANILIST_DATE_IS_VALID(a) \
	(a["year"].is_number() && a["month"].is_number() && a["day"].is_number())
#define ANILIST_DATE_TO_YMD(a) \
	std::chrono::year_month_day(std::chrono::year(a["year"].get<int>()), \
								std::chrono::month(a["month"].get<int>()), \
								std::chrono::day(a["day"].get<int>()))
#endif // __anilist_h