start implementing download for tv series

This commit is contained in:
Francesco Grazioso 2024-04-20 18:56:36 +02:00
parent a7ae9c590b
commit fbdb3207be

View File

@ -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 import search, get_version_and_domain, download_film, anime_download_film
from Src.Api.anime import EpisodeDownloader from Src.Api.anime import EpisodeDownloader
from Src.Api.Class.Video import VideoSource 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 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"}) 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): def get_episodes_info(self, request):
self.media_id = request.query_params.get("media_id") self.media_id = request.query_params.get("media_id")
self.media_slug = request.data.get("media_slug") self.media_slug = request.data.get("media_slug")
self.type_media = request.query_params.get("type_media") self.type_media = request.query_params.get("type_media")
self.page = self.request.query_params.get("page") self.page = self.request.query_params.get("page")
match self.type_media: match self.type_media:
case "TV": case "TV":
self.site_version, self.domain = get_version_and_domain() self.site_version, self.domain = get_version_and_domain()
@ -62,7 +61,6 @@ class SearchView(viewsets.ViewSet):
video_source.collect_info_seasons() video_source.collect_info_seasons()
seasons_count = video_source.obj_title_manager.get_length() seasons_count = video_source.obj_title_manager.get_length()
episodes = {} episodes = {}
for i_season in range(1, seasons_count + 1): for i_season in range(1, seasons_count + 1):
video_source.obj_episode_manager.clear() video_source.obj_episode_manager.clear()
@ -70,7 +68,9 @@ class SearchView(viewsets.ViewSet):
episodes_count = video_source.obj_episode_manager.get_length() episodes_count = video_source.obj_episode_manager.get_length()
episodes[i_season] = {} episodes[i_season] = {}
for i_episode in range(1, episodes_count + 1): 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__ episodes[i_season][i_episode] = episode.__dict__
return Response({"episodes": episodes}) return Response({"episodes": episodes})
@ -86,12 +86,17 @@ class SearchView(viewsets.ViewSet):
page_indices = paginator.page(page_number) page_indices = paginator.page(page_number)
for i in page_indices: for i in page_indices:
print(f"Getting info for episode {i}")
episode_info = episodes_downloader.get_info_episode(index_ep=i) episode_info = episodes_downloader.get_info_episode(index_ep=i)
episode_info["episode_id"] = i
episodes.append(episode_info) episodes.append(episode_info)
return Response({"episodes": episodes}) return Response({"episodes": episodes})
except Exception as e: 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"}) 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_id = request.data.get("media_id")
self.media_slug = request.data.get("media_slug") self.media_slug = request.data.get("media_slug")
self.type_media = request.data.get("type_media").upper() 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() self.site_version, self.domain = get_version_and_domain()
@ -110,18 +115,36 @@ class DownloadView(viewsets.ViewSet):
if self.type_media == "MOVIE": if self.type_media == "MOVIE":
download_film(self.media_id, self.media_slug, self.domain) 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": 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": elif self.type_media == "TV_ANIME":
# TODO test this
episodes_downloader = EpisodeDownloader(self.media_id, self.media_slug) 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": elif self.type_media == "OVA":
anime_download_film( anime_download_film(id_film=self.media_id, title_name=self.media_slug)
id_film=self.media_id, response_dict = {
title_name=self.media_slug "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"}
return Response(response_dict) return Response(response_dict)