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 @@