diff --git a/api/endpoints/views.py b/api/endpoints/views.py index 932f20e..330b0d9 100644 --- a/api/endpoints/views.py +++ b/api/endpoints/views.py @@ -55,44 +55,51 @@ class SearchView(viewsets.ViewSet): try: match self.type_media: case "TV": - self.site_version, self.domain = get_version_and_domain() + def stream_episodes(): + 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 = 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() + 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__ + 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__ + + yield f'{json.dumps({"episodes": episodes})}\n\n' + + response = StreamingHttpResponse(stream_episodes(), content_type='text/event-stream') + return response - return Response({"episodes": episodes}) case "TV_ANIME": def stream_episodes(): episodes_downloader = EpisodeDownloader(self.media_id, self.media_slug) episoded_count = episodes_downloader.get_count_episodes() - for i in range(1, episoded_count+1): + for i in range(1, episoded_count + 1): episode_info = episodes_downloader.get_info_episode(index_ep=i) episode_info["episode_id"] = i + episode_info["episode_total"] = episoded_count print(f"Getting episode {i} of {episoded_count} info...") - yield f'data: {json.dumps(episode_info)}\n\n' + yield f'{json.dumps(episode_info)}\n\n' response = StreamingHttpResponse(stream_episodes(), content_type='text/event-stream') return response + except Exception as e: return Response( { @@ -112,7 +119,8 @@ class DownloadView(viewsets.ViewSet): self.type_media = request.data.get("type_media").upper() self.download_id = request.data.get("download_id") - self.site_version, self.domain = get_version_and_domain() + if self.type_media in ["TV", "MOVIE"]: + self.site_version, self.domain = get_version_and_domain() response_dict = {"error": "No media found with that search query"} diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 0155bb0..c9129ab 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -3,71 +3,14 @@ import { RouterLink, RouterView } from 'vue-router' - diff --git a/frontend/src/api/api.ts b/frontend/src/api/api.ts index 22f86ed..f2aac81 100644 --- a/frontend/src/api/api.ts +++ b/frontend/src/api/api.ts @@ -17,15 +17,12 @@ export default function search(query: string, type: string) : Promise { const url = `${BASE_URL}/search/get_episodes_info?media_id=${mediaId}&media_slug=${mediaSlug}&type_media=${mediaType}`; - if (mediaType === 'TV_ANIME') { - return await fetch(url, { - method: 'GET', - headers: { - 'Content-Type': 'text/event-stream' - } - }); - } else { - return Promise.resolve(new Response()); - } + return await fetch(url, { + method: 'GET', + headers: { + 'Content-Type': 'text/event-stream' + } + }); + } \ No newline at end of file diff --git a/frontend/src/api/interfaces.ts b/frontend/src/api/interfaces.ts index 4652fa3..b13418c 100644 --- a/frontend/src/api/interfaces.ts +++ b/frontend/src/api/interfaces.ts @@ -24,7 +24,7 @@ export interface MediaItemResponse { media: MediaItem[]; } -export interface EpisodeAnime { +export interface Episode { id: number; anime_id: number; user_id: number | null; @@ -38,8 +38,21 @@ export interface EpisodeAnime { file_name: string; tg_post: number; episode_id: number; + episode_total: number; + name: string; // TV Show exclusive + plot: string; // TV Show exclusive + duration: number; // TV Show exclusive + season_id: number; // TV Show exclusive + created_by: any; // TV Show exclusive + updated_at: string; // TV Show exclusive } -export interface EpisodeAnimeResponse { - episodes: EpisodeAnime[]; +export interface Season { + [key: string]: { + [key: string]: Episode; + }; +} + +export interface SeasonResponse { + episodes: Season; } \ No newline at end of file diff --git a/frontend/src/views/Details.vue b/frontend/src/views/Details.vue index 1cd0a1d..d146686 100644 --- a/frontend/src/views/Details.vue +++ b/frontend/src/views/Details.vue @@ -1,32 +1,47 @@