From fbdb3207be6bf545a8c77bb9ebed82dd21619020 Mon Sep 17 00:00:00 2001 From: Francesco Grazioso Date: Sat, 20 Apr 2024 18:56:36 +0200 Subject: [PATCH] start implementing download for tv series --- api/endpoints/views.py | 57 +++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/api/endpoints/views.py b/api/endpoints/views.py index fd55801..6cb59c1 100644 --- a/api/endpoints/views.py +++ b/api/endpoints/views.py @@ -9,7 +9,7 @@ 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.series import STREAM_SITE_NAME, donwload_video from Src.Api.site import media_search_manager, anime_search @@ -40,14 +40,13 @@ class SearchView(viewsets.ViewSet): return Response({"error": "No media found with that search query"}) - @action(detail=False, methods=['get']) + @action(detail=False, methods=["get"]) def get_episodes_info(self, request): 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") - match self.type_media: case "TV": self.site_version, self.domain = get_version_and_domain() @@ -62,7 +61,6 @@ class SearchView(viewsets.ViewSet): 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() @@ -70,7 +68,9 @@ class SearchView(viewsets.ViewSet): 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] + episode = video_source.obj_episode_manager.episodes[ + i_episode - 1 + ] episodes[i_season][i_episode] = episode.__dict__ return Response({"episodes": episodes}) @@ -86,12 +86,17 @@ class SearchView(viewsets.ViewSet): 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) + episode_info["episode_id"] = i episodes.append(episode_info) return Response({"episodes": episodes}) except Exception as e: - return Response({"error": "Error while getting episodes info", "message": str(e)}) + return Response( + { + "error": "Error while getting episodes info", + "message": str(e), + } + ) return Response({"error": "No media found with that search query"}) @@ -102,7 +107,7 @@ class DownloadView(viewsets.ViewSet): self.media_id = request.data.get("media_id") self.media_slug = request.data.get("media_slug") self.type_media = request.data.get("type_media").upper() - self.episode_id = request.data.get("episode_id") + self.download_id = request.data.get("download_id") self.site_version, self.domain = get_version_and_domain() @@ -110,18 +115,36 @@ class DownloadView(viewsets.ViewSet): if self.type_media == "MOVIE": download_film(self.media_id, self.media_slug, self.domain) - response_dict = {"message": "Download done, it is saved in Video folder inside project root"} + response_dict = { + "message": "Download done, it is saved in Video folder inside project root" + } elif self.type_media == "TV": - pass + 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() + video_source.obj_episode_manager.clear() + + video_source.collect_title_season(self.download_id) + episodes_count = video_source.obj_episode_manager.get_length() + for i_episode in range(1, episodes_count + 1): + donwload_video(self.media_slug, self.download_id, i_episode) + # FIXME - This is not working properly + elif self.type_media == "TV_ANIME": - # TODO test this episodes_downloader = EpisodeDownloader(self.media_id, self.media_slug) - episodes_downloader.download_episode(self.episode_id) + episodes_downloader.download_episode(self.download_id) + response_dict = { + "message": "Download done, it is saved in Video folder inside project root" + } elif self.type_media == "OVA": - anime_download_film( - id_film=self.media_id, - title_name=self.media_slug - ) - response_dict = {"message": "Download done, it is saved in Video folder inside project root"} + anime_download_film(id_film=self.media_id, title_name=self.media_slug) + response_dict = { + "message": "Download done, it is saved in Video folder inside project root" + } return Response(response_dict)