Mercurial > minori
changeset 387:04a894e96355
kitsu: implement anime search
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Thu, 06 Nov 2025 09:46:09 -0500 |
| parents | e89901683d72 |
| children | 83aa0ddd1a46 |
| files | src/gui/pages/now_playing.cc src/services/kitsu.cc |
| diffstat | 2 files changed, 42 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/gui/pages/now_playing.cc Thu Nov 06 08:59:44 2025 -0500 +++ b/src/gui/pages/now_playing.cc Thu Nov 06 09:46:09 2025 -0500 @@ -27,6 +27,7 @@ QVBoxLayout *layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); + // TODO this has more text in it in Taiga... title_.SetText(Strings::Translate("Now Playing")); layout->addWidget(&title_);
--- a/src/services/kitsu.cc Thu Nov 06 08:59:44 2025 -0500 +++ b/src/services/kitsu.cc Thu Nov 06 09:46:09 2025 -0500 @@ -496,6 +496,16 @@ return 1; } +/* :) */ +static const std::map<std::string, std::string> anime_params = { + {"include", Strings::Implode( + { + "categories", + "animeProductions", + "animeProductions.producer", + }, ",")} +}; + bool RetrieveAnimeMetadata(int id) { /* TODO: the genres should *probably* be a std::optional */ @@ -509,16 +519,7 @@ session.SetStatusBar(Strings::Translate("Kitsu: Retrieving anime metadata...")); - static const std::map<std::string, std::string> params = { - {"include", Strings::Implode( - { - "categories", - "animeProductions", - "animeProductions.producer", - }, ",")} - }; - - std::optional<nlohmann::json> response = SendJSONAPIRequest("/anime/" + service_id.value(), params); + std::optional<nlohmann::json> response = SendJSONAPIRequest("/anime/" + service_id.value(), anime_params); if (!response) return false; @@ -540,7 +541,36 @@ /* unimplemented for now */ std::vector<int> Search(const std::string &search) { - return {}; + session.SetStatusBar(Strings::Translate("Kitsu: Retrieving search results...")); + + std::map<std::string, std::string> params = anime_params; + params["filter[text]"] = search; + // ... for some reason, this seems to be buggy + //AddAnimeFilters(params); + + std::optional<nlohmann::json> response = SendJSONAPIRequest("/anime", params); + if (!response) + return {}; + + 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 {}; + } + + std::vector<int> ids; + + for (const auto &item : json["/data"_json_pointer]) { + int id = ParseAnimeJson(item); + if (!id) + return {}; + + ids.push_back(id); + } + + return ids; } bool GetSeason(Anime::Season season)
