From c287465011c517b25a8b310994cedf33d5202b20 Mon Sep 17 00:00:00 2001 From: FrancescoGrazioso Date: Thu, 18 Apr 2024 23:20:57 +0200 Subject: [PATCH] finished get_episodes_info --- api/endpoints/views.py | 52 +++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/api/endpoints/views.py b/api/endpoints/views.py index 2d3a7f0..40ca5fa 100644 --- a/api/endpoints/views.py +++ b/api/endpoints/views.py @@ -1,11 +1,15 @@ import json +from django.core.paginator import Paginator + from rest_framework import viewsets from rest_framework.decorators import action from rest_framework.response import Response from Src.Api import search, get_version_and_domain, download_film, anime_download_film from Src.Api.anime import EpisodeDownloader +from Src.Api.Class.Video import VideoSource +from Src.Api.series import STREAM_SITE_NAME from Src.Api.site import media_search_manager, anime_search @@ -41,21 +45,53 @@ class SearchView(viewsets.ViewSet): self.media_id = request.query_params.get("media_id") self.media_slug = request.data.get("media_slug") self.type_media = request.query_params.get("type_media") + self.page = self.request.query_params.get("page") - self.site_version, self.domain = get_version_and_domain() - match self.type_media.upper(): + match self.type_media: case "TV": - pass + self.site_version, self.domain = get_version_and_domain() + + video_source = VideoSource() + video_source.set_url_base_name(STREAM_SITE_NAME) + video_source.set_version(self.site_version) + video_source.set_domain(self.domain) + video_source.set_series_name(self.media_slug) + video_source.set_media_id(self.media_id) + + video_source.collect_info_seasons() + seasons_count = video_source.obj_title_manager.get_length() + + + episodes = {} + for i_season in range(1, seasons_count + 1): + video_source.obj_episode_manager.clear() + video_source.collect_title_season(i_season) + episodes_count = video_source.obj_episode_manager.get_length() + episodes[i_season] = {} + for i_episode in range(1, episodes_count + 1): + episode = video_source.obj_episode_manager.episodes[i_episode - 1] + episodes[i_season][i_episode] = episode.__dict__ + + return Response({"episodes_count": episodes}) case "TV_ANIME": episodes = [] episodes_downloader = EpisodeDownloader(self.media_id, self.media_slug) episoded_count = episodes_downloader.get_count_episodes() - for i in range(0, episoded_count - 210): # TODO: need to implement pagination, more than 5/6 episodes is slow - print(f"Getting info for episode {i}") - episode_info = episodes_downloader.get_info_episode(index_ep=i) - episodes.append(episode_info) - return Response({"episodes_count": episodes}) + items_per_page = 5 + try: + paginator = Paginator(range(episoded_count), items_per_page) + + page_number = self.page if self.page else 1 + page_indices = paginator.page(page_number) + + for i in page_indices: + print(f"Getting info for episode {i}") + episode_info = episodes_downloader.get_info_episode(index_ep=i) + episodes.append(episode_info) + return Response({"episodes_count": episodes}) + except Exception as e: + return Response({"error": "Error while getting episodes info", "message": str(e)}) return Response({"error": "No media found with that search query"})