changeset 388:83aa0ddd1a46

kitsu: implement GetSeason
author Paper <paper@tflc.us>
date Thu, 06 Nov 2025 09:53:06 -0500
parents 04a894e96355
children 1e5d922fe82b
files src/services/kitsu.cc
diffstat 1 files changed, 31 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/services/kitsu.cc	Thu Nov 06 09:46:09 2025 -0500
+++ b/src/services/kitsu.cc	Thu Nov 06 09:53:06 2025 -0500
@@ -575,7 +575,37 @@
 
 bool GetSeason(Anime::Season season)
 {
-	return false;
+	static const std::map<Anime::Season::Name, std::string> map = {
+		{Anime::Season::Name::Winter, "winter"},
+		{Anime::Season::Name::Spring, "spring"},
+		{Anime::Season::Name::Summer, "summer"},
+		{Anime::Season::Name::Autumn, "fall"},
+	};
+
+	session.SetStatusBar(Strings::Translate("Kitsu: Retrieving season data..."));
+
+	std::map<std::string, std::string> params = anime_params;
+	params["filter[season]"] = map.at(season.season);
+	params["filter[seasonYear]"] = Strings::ToUtf8String(season.year);
+	// ... for some reason, this seems to be buggy
+	//AddAnimeFilters(params);
+
+	std::optional<nlohmann::json> response = SendJSONAPIRequest("/anime", params);
+	if (!response)
+		return false;
+
+	const auto &json = response.value();
+
+	if (!json.contains("/data"_json_pointer) || !json["/data"_json_pointer].is_array()) {
+		session.SetStatusBar(
+		    Strings::Translate("Kitsu: Server returned bad data when trying to retrieve search results!"));
+		return false;
+	}
+
+	for (const auto &item : json["/data"_json_pointer])
+		ParseAnimeJson(item);
+
+	return true;
 }
 
 int UpdateAnimeEntry(int id)