from lib.clients.tmdb.base import BaseTmdbClient
from lib.clients.tmdb.utils.utils import (
get_tmdb_movie_details,
get_tmdb_show_details,
)
from lib.db.pickle_db import PickleDatabase
from lib.utils.general.utils import (
Animation,
Anime,
Cartoons,
add_next_button,
execute_thread_pool,
set_media_infoTag,
set_pluging_category,
)
from lib.utils.kodi.utils import (
end_of_directory,
kodilog,
make_list_item,
notification,
show_keyboard,
translation,
)
class TmdbAnimeClient(BaseTmdbClient):
def handle_anime_search_query(self, page):
if page == 1:
query = show_keyboard(id=30241)
if query:
PickleDatabase().set_key("anime_query", query)
return query
return None
return PickleDatabase().get_key("anime_query")
def handle_anime_category_query(self, client, category, submode, page):
if category == Anime.AIRING:
set_pluging_category(translation(90039))
return client.anime_on_the_air(submode, page)
elif category == Anime.POPULAR:
set_pluging_category(translation(90064))
return client.anime_popular(submode, page)
elif category == Anime.POPULAR_RECENT:
set_pluging_category(translation(90038))
return client.anime_popular_recent(submode, page)
elif category == Anime.TOP_RATED:
set_pluging_category(translation(90042))
return client.anime_top_rated(submode, page)
else:
kodilog(f"Invalid category: {category}")
return None
def process_anime_results(self, data, submode, page, mode, category):
if data.total_results == 0:
notification("No results found")
return
execute_thread_pool(data.results, TmdbAnimeClient.show_anime_results, submode)
add_next_button("next_page_anime", page=page, mode=mode, submode=submode, category=category)
end_of_directory()
@staticmethod
def handle_anime_years_or_genres(category, mode, page, submode):
if category == Anime.YEARS:
TmdbAnimeClient.show_years_items(mode, page, submode)
elif category == Anime.GENRES:
TmdbAnimeClient.show_genres_items(mode, page, submode)
else:
kodilog(f"Invalid category: {category}")
return None
@staticmethod
def handle_animation_or_cartoons_query(client, category, submode, page):
if category == Animation().POPULAR:
return client.animation_popular(submode, page)
elif category == Cartoons.POPULAR:
return client.cartoons_popular(submode, page)
else:
kodilog(f"Invalid category: {category}")
return None
@staticmethod
def show_anime_results(res, mode):
tmdb_id = res.get("id", "")
if mode == "movies":
title = res.title
movie_details = get_tmdb_movie_details(tmdb_id)
imdb_id = movie_details.external_ids.get("imdb_id", "")
tvdb_id = ""
elif mode == "tv":
title = res.name
show_details = get_tmdb_show_details(tmdb_id)
external_ids = show_details.external_ids
imdb_id = external_ids.get("imdb_id", "")
tvdb_id = external_ids.get("tvdb_id", "")
else:
kodilog(f"Invalid mode: {mode}")
return None
ids = {"tmdb_id": tmdb_id, "tvdb_id": tvdb_id, "imdb_id": imdb_id}
list_item = make_list_item(label=title)
set_media_infoTag(list_item, data=res, mode=mode)
TmdbAnimeClient.add_media_directory_item(list_item, mode, title, ids)