diff --git a/fastanime/cli/config.py b/fastanime/cli/config.py index 1aa513c..1a35e1a 100644 --- a/fastanime/cli/config.py +++ b/fastanime/cli/config.py @@ -59,6 +59,7 @@ class Config(object): "normalize_titles": "True", "notification_duration": "2", "max_cache_lifetime": "03:00:00", + "per_page": "15", "player": "mpv", "preferred_history": "local", "preferred_language": "english", @@ -113,9 +114,7 @@ def load_config(self): self.disable_mpv_popen = self.configparser.getboolean( "stream", "disable_mpv_popen" ) - self.discord = self.configparser.getboolean( - "general", "discord" - ) + self.discord = self.configparser.getboolean("general", "discord") self.downloads_dir = self.configparser.get("general", "downloads_dir") self.episode_complete_at = self.configparser.getint( "stream", "episode_complete_at" @@ -148,6 +147,7 @@ def load_config(self): + max_cache_lifetime[1] * 3600 + max_cache_lifetime[2] * 60 ) + self.per_page = self.configparser.get("anilist", "per_page") self.player = self.configparser.get("stream", "player") self.preferred_history = self.configparser.get("stream", "preferred_history") self.preferred_language = self.configparser.get("general", "preferred_language") @@ -568,6 +568,9 @@ def __repr__(self): # since you will miss out on some features if you use the others player = {self.player} +[anilist] +per_page = {self.per_page} + # # HOPE YOU ENJOY FASTANIME AND BE SURE TO STAR THE PROJECT ON GITHUB # https://github.com/Benexl/FastAnime diff --git a/fastanime/libs/anilist/api.py b/fastanime/libs/anilist/api.py index bfca47c..1cf0651 100644 --- a/fastanime/libs/anilist/api.py +++ b/fastanime/libs/anilist/api.py @@ -3,6 +3,7 @@ """ import logging +import os from typing import TYPE_CHECKING import requests @@ -139,7 +140,12 @@ def update_anime_list(self, values_to_update: dict): return self._make_authenticated_request(media_list_mutation, variables) def get_anime_list( - self, status: "AnilistMediaListStatus", type="ANIME", page=1, **kwargs + self, + status: "AnilistMediaListStatus", + type="ANIME", + page=1, + perPage=os.environ.get("FASTANIME_PER_PAGE", 15), + **kwargs, ) -> tuple[bool, "AnilistMediaLists"] | tuple[bool, None]: """gets an anime list from your media list given the list status @@ -154,6 +160,7 @@ def get_anime_list( "userId": self.user_id, "type": type, "page": page, + "perPage": int(perPage), } return self._make_authenticated_request(media_list_query, variables) @@ -354,51 +361,92 @@ def get_anime(self, id: int): variables = {"id": id} return self.get_data(anime_query, variables) - def get_trending(self, type="ANIME", page=1, *_, **kwargs): + def get_trending( + self, + type="ANIME", + page=1, + perPage=os.environ.get("FASTANIME_PER_PAGE", 15), + *_, + **kwargs, + ): """ Gets the currently trending anime """ - variables = {"type": type, "page": page} + variables = {"type": type, "page": page, "perPage": int(perPage)} trending = self.get_data(trending_query, variables) return trending - def get_most_favourite(self, type="ANIME", page=1, *_, **kwargs): + def get_most_favourite( + self, + type="ANIME", + page=1, + perPage=os.environ.get("FASTANIME_PER_PAGE", 15), + *_, + **kwargs, + ): """ Gets the most favoured anime on anilist """ - variables = {"type": type, "page": page} + variables = {"type": type, "page": page, "perPage": int(perPage)} most_favourite = self.get_data(most_favourite_query, variables) return most_favourite - def get_most_scored(self, type="ANIME", page=1, *_, **kwargs): + def get_most_scored( + self, + type="ANIME", + page=1, + perPage=os.environ.get("FASTANIME_PER_PAGE", 15), + *_, + **kwargs, + ): """ Gets most scored anime on anilist """ - variables = {"type": type, "page": page} + variables = {"type": type, "page": page, "perPage": int(perPage)} most_scored = self.get_data(most_scored_query, variables) return most_scored - def get_most_recently_updated(self, type="ANIME", page=1, *_, **kwargs): + def get_most_recently_updated( + self, + type="ANIME", + page=1, + perPage=os.environ.get("FASTANIME_PER_PAGE", 15), + *_, + **kwargs, + ): """ Gets most recently updated anime from anilist """ - variables = {"type": type, "page": page} + variables = {"type": type, "page": page, "perPage": int(perPage)} most_recently_updated = self.get_data(most_recently_updated_query, variables) return most_recently_updated - def get_most_popular(self, type="ANIME", page=1, **kwargs): + def get_most_popular( + self, + type="ANIME", + page=1, + perPage=os.environ.get("FASTANIME_PER_PAGE", 15), + **kwargs, + ): """ Gets most popular anime on anilist """ - variables = {"type": type, "page": page} + variables = {"type": type, "page": page, "perPage": int(perPage)} most_popular = self.get_data(most_popular_query, variables) return most_popular - def get_upcoming_anime(self, type="ANIME", page: int = 1, *_, **kwargs): + def get_upcoming_anime( + self, + type="ANIME", + page: int = 1, + perPage=os.environ.get("FASTANIME_PER_PAGE", 15), + *_, + **kwargs, + ): """ Gets upcoming anime from anilist """ - variables = {"page": page, "type": type} + variables = {"page": page, "type": type, "perPage": int(perPage)} upcoming_anime = self.get_data(upcoming_anime_query, variables) return upcoming_anime diff --git a/fastanime/libs/anilist/queries_graphql.py b/fastanime/libs/anilist/queries_graphql.py index 9925877..21e82d3 100644 --- a/fastanime/libs/anilist/queries_graphql.py +++ b/fastanime/libs/anilist/queries_graphql.py @@ -193,8 +193,8 @@ """ media_list_query = """ -query ($userId: Int, $status: MediaListStatus, $type: MediaType, $page: Int) { - Page(perPage: 15, page: $page) { +query ($userId: Int, $status: MediaListStatus, $type: MediaType, $page: Int, $perPage: Int) { + Page(perPage: $perPage, page: $page) { pageInfo { currentPage total @@ -406,8 +406,8 @@ ) trending_query = """ -query ($type: MediaType, $page: Int) { - Page(perPage: 15, page: $page) { +query ($type: MediaType, $page: Int,$perPage:Int) { + Page(perPage: $perPage, page: $page) { media(sort: TRENDING_DESC, type: $type, genre_not_in: ["hentai"]) { id idMal @@ -471,8 +471,8 @@ # mosts most_favourite_query = """ -query ($type: MediaType, $page: Int) { - Page(perPage: 15, page: $page) { +query ($type: MediaType, $page: Int,$perPage:Int) { + Page(perPage: $perPage, page: $page) { media(sort: FAVOURITES_DESC, type: $type, genre_not_in: ["hentai"]) { id idMal @@ -539,8 +539,8 @@ """ most_scored_query = """ -query ($type: MediaType, $page: Int) { - Page(perPage: 15, page: $page) { +query ($type: MediaType, $page: Int,$perPage:Int) { + Page(perPage: $perPage, page: $page) { media(sort: SCORE_DESC, type: $type, genre_not_in: ["hentai"]) { id idMal @@ -603,8 +603,8 @@ """ most_popular_query = """ -query ($type: MediaType, $page: Int) { - Page(perPage: 15, page: $page) { +query ($type: MediaType, $page: Int,$perPage:Int) { + Page(perPage: $perPage, page: $page) { media(sort: POPULARITY_DESC, type: $type, genre_not_in: ["hentai"]) { id idMal @@ -667,8 +667,8 @@ """ most_recently_updated_query = """ -query ($type: MediaType, $page: Int) { - Page(perPage: 15, page: $page) { +query ($type: MediaType, $page: Int,$perPage:Int) { + Page(perPage: $perPage, page: $page) { media( sort: UPDATED_AT_DESC type: $type @@ -918,8 +918,8 @@ """ upcoming_anime_query = """ -query ($page: Int, $type: MediaType) { - Page(perPage: 15, page: $page) { +query ($page: Int, $type: MediaType,$perPage:Int) { + Page(perPage: $perPage, page: $page) { pageInfo { total perPage