From ad132b7c5375db34e0f1139c20ff3c6dc9abc4a6 Mon Sep 17 00:00:00 2001 From: Francesco Grazioso Date: Mon, 27 May 2024 10:00:40 +0200 Subject: [PATCH] start implementing preview endpoint --- Src/Api/Animeunity/Core/Class/PreviewType.py | 13 +++++++++ .../Core/Class/PreviewType.py | 13 +++++++++ api/endpoints/views.py | 28 +++++++++++++++++++ frontend/src/api/api.ts | 9 ++++++ frontend/src/views/Details.vue | 18 ++++++++---- 5 files changed, 76 insertions(+), 5 deletions(-) diff --git a/Src/Api/Animeunity/Core/Class/PreviewType.py b/Src/Api/Animeunity/Core/Class/PreviewType.py index 28d741e..7b80b0a 100644 --- a/Src/Api/Animeunity/Core/Class/PreviewType.py +++ b/Src/Api/Animeunity/Core/Class/PreviewType.py @@ -60,4 +60,17 @@ class PreviewManager: images_str = "\n".join(str(image) for image in self.images) return f"Title: ID={self.id}, Type={self.type}, Runtime={self.runtime}, Release Date={self.release_date}, Quality={self.quality}, Plot={self.plot}, Seasons Count={self.seasons_count}\nGenres:\n{genres_str}\nPreview:\n{self.preview}\nImages:\n{images_str}" + def to_dict(self): + return { + "id": self.id, + "type": self.type, + "runtime": self.runtime, + "release_date": self.release_date, + "quality": self.quality, + "plot": self.plot, + "seasons_count": self.seasons_count, + "genres": [genre.__dict__ for genre in self.genres], + "preview": self.preview.__dict__, + "images": [image.__dict__ for image in self.images] + } diff --git a/Src/Api/Streamingcommunity/Core/Class/PreviewType.py b/Src/Api/Streamingcommunity/Core/Class/PreviewType.py index 28d741e..7b80b0a 100644 --- a/Src/Api/Streamingcommunity/Core/Class/PreviewType.py +++ b/Src/Api/Streamingcommunity/Core/Class/PreviewType.py @@ -60,4 +60,17 @@ class PreviewManager: images_str = "\n".join(str(image) for image in self.images) return f"Title: ID={self.id}, Type={self.type}, Runtime={self.runtime}, Release Date={self.release_date}, Quality={self.quality}, Plot={self.plot}, Seasons Count={self.seasons_count}\nGenres:\n{genres_str}\nPreview:\n{self.preview}\nImages:\n{images_str}" + def to_dict(self): + return { + "id": self.id, + "type": self.type, + "runtime": self.runtime, + "release_date": self.release_date, + "quality": self.quality, + "plot": self.plot, + "seasons_count": self.seasons_count, + "genres": [genre.__dict__ for genre in self.genres], + "preview": self.preview.__dict__, + "images": [image.__dict__ for image in self.images] + } diff --git a/api/endpoints/views.py b/api/endpoints/views.py index ad285c5..0df7062 100644 --- a/api/endpoints/views.py +++ b/api/endpoints/views.py @@ -121,6 +121,34 @@ class SearchView(viewsets.ViewSet): ) return Response({"error": "No media found with that search query"}) + + @action(detail=False, methods=["get"]) + def get_preview(self, request): + self.media_id = request.query_params.get("media_id") + self.media_slug = request.query_params.get("media_slug") + self.type_media = request.query_params.get("type_media") + + try: + if self.type_media in ["TV", "MOVIE"]: + version, domain = get_version_and_domain() + video_source = film_video_source() + video_source.setup(media_id=self.media_id, version=version, domain=domain, series_name=self.media_slug) + video_source.get_preview() + return Response(video_source.obj_preview.to_dict()) + if self.type_media in ["TV_ANIME", "OVA", "SPECIAL"]: + video_source = anime_source() + video_source.setup(media_id=self.media_id, series_name=self.media_slug) + video_source.get_preview() + return Response(video_source.obj_preview.to_dict()) + except Exception as e: + return Response( + { + "error": "Error while getting preview info", + "message": str(e), + } + ) + + return Response({"error": "No media found with that search query"}) ''' diff --git a/frontend/src/api/api.ts b/frontend/src/api/api.ts index 244cb66..7ec0039 100644 --- a/frontend/src/api/api.ts +++ b/frontend/src/api/api.ts @@ -37,6 +37,15 @@ export async function getEpisodesInfo( }); } +export async function getPreview( + mediaId: number, + mediaSlug: string, + mediaType: string +): Promise> { + const url = `/search/get_preview?media_id=${mediaId}&media_slug=${mediaSlug}&type_media=${mediaType}`; + return get(url); +} + async function downloadMedia( mediaId: number, mediaSlug: string, diff --git a/frontend/src/views/Details.vue b/frontend/src/views/Details.vue index 53c99cd..5880730 100644 --- a/frontend/src/views/Details.vue +++ b/frontend/src/views/Details.vue @@ -1,8 +1,8 @@