diff --git a/.gitignore b/.gitignore index 452e0a4..69e9099 100644 --- a/.gitignore +++ b/.gitignore @@ -42,6 +42,7 @@ local_settings.py db.sqlite3 db.sqlite3-journal + # Vue stuff: frontend/dist/ frontend/node_modules/ @@ -64,3 +65,5 @@ venv.bak/ # Other Video .idea/ +.vscode/ +.DS_Store diff --git a/Src/Api/Animeunity/Core/Class/EpisodeType.py b/Src/Api/Animeunity/Core/Class/EpisodeType.py index 14b9694..f583914 100644 --- a/Src/Api/Animeunity/Core/Class/EpisodeType.py +++ b/Src/Api/Animeunity/Core/Class/EpisodeType.py @@ -45,6 +45,21 @@ class Episode: def __str__(self): return f"Episode(id={self.id}, number={self.number}, name='{self.name}', plot='{self.plot}', duration={self.duration} sec)" + + def to_dict(self) -> Dict[str, Any]: + return { + "id": self.id, + "number": self.number, + "name": self.name, + "plot": self.plot, + "duration": self.duration, + "scws_id": self.scws_id, + "season_id": self.season_id, + "created_by": self.created_by, + "created_at": self.created_at, + "updated_at": self.updated_at, + "images": [image.__dict__ for image in self.images] + } class EpisodeManager: diff --git a/Src/Api/Animeunity/Core/Class/SearchType.py b/Src/Api/Animeunity/Core/Class/SearchType.py index 6c492bf..4e3c50f 100644 --- a/Src/Api/Animeunity/Core/Class/SearchType.py +++ b/Src/Api/Animeunity/Core/Class/SearchType.py @@ -37,10 +37,33 @@ class MediaItem: self.last_air_date: str = data.get('last_air_date') self.seasons_count: int = data.get('seasons_count') self.images: List[Image] = [Image(image_data) for image_data in data.get('images', [])] + self.comment: str = data.get('comment') + self.plot: str = data.get('plot') def __str__(self): return f"MediaItem(id={self.id}, slug='{self.slug}', name='{self.name}', type='{self.type}', score='{self.score}', sub_ita={self.sub_ita}, last_air_date='{self.last_air_date}', seasons_count={self.seasons_count}, images={self.images})" + @property + def to_dict(self) -> dict: + """ + Convert the MediaItem to a dictionary. + + Returns: + dict: The MediaItem as a dictionary. + """ + return { + "id": self.id, + "slug": self.slug, + "name": self.name, + "type": self.type.upper(), + "score": self.score, + "sub_ita": self.sub_ita, + "last_air_date": self.last_air_date, + "seasons_count": self.seasons_count, + "images": [image.__dict__ for image in self.images], + "comment": self.comment, + "plot": self.plot + } class MediaManager: def __init__(self): diff --git a/Src/Api/Streamingcommunity/Core/Class/EpisodeType.py b/Src/Api/Streamingcommunity/Core/Class/EpisodeType.py index 468e98b..8857726 100644 --- a/Src/Api/Streamingcommunity/Core/Class/EpisodeType.py +++ b/Src/Api/Streamingcommunity/Core/Class/EpisodeType.py @@ -27,6 +27,19 @@ class Image: def __str__(self): return f"Image(id={self.id}, filename='{self.filename}', type='{self.type}', imageable_type='{self.imageable_type}', url='{self.url}')" + + def to_dict(self) -> Dict[str, Any]: + return { + 'id': self.id, + 'filename': self.filename, + 'type': self.type, + 'imageable_type': self.imageable_type, + 'imageable_id': self.imageable_id, + 'created_at': self.created_at, + 'updated_at': self.updated_at, + 'original_url_field': self.original_url_field, + 'url': self.url + } class Episode: @@ -45,6 +58,21 @@ class Episode: def __str__(self): return f"Episode(id={self.id}, number={self.number}, name='{self.name}', plot='{self.plot}', duration={self.duration} sec)" + + def to_dict(self) -> Dict[str, Any]: + return { + 'id': self.id, + 'number': self.number, + 'name': self.name, + 'plot': self.plot, + 'duration': self.duration, + 'scws_id': self.scws_id, + 'season_id': self.season_id, + 'created_by': self.created_by, + 'created_at': self.created_at, + 'updated_at': self.updated_at, + 'images': [image.to_dict() for image in self.images] + } class EpisodeManager: diff --git a/Src/Api/Streamingcommunity/Core/Class/SearchType.py b/Src/Api/Streamingcommunity/Core/Class/SearchType.py index 3c1f747..4e20c1c 100644 --- a/Src/Api/Streamingcommunity/Core/Class/SearchType.py +++ b/Src/Api/Streamingcommunity/Core/Class/SearchType.py @@ -37,6 +37,8 @@ class MediaItem: self.last_air_date: str = data.get('last_air_date') self.seasons_count: int = data.get('seasons_count') self.images: List[Image] = [Image(image_data) for image_data in data.get('images', [])] + self.comment: str = data.get('comment') + self.plot: str = data.get('plot') def __str__(self): return f"MediaItem(id={self.id}, slug='{self.slug}', name='{self.name}', type='{self.type}', score='{self.score}', sub_ita={self.sub_ita}, last_air_date='{self.last_air_date}', seasons_count={self.seasons_count}, images={self.images})" @@ -59,7 +61,8 @@ class MediaItem: "last_air_date": self.last_air_date, "seasons_count": self.seasons_count, "images": [image.__dict__ for image in self.images], - "comment": self.comment + "comment": self.comment, + "plot": self.plot } @property diff --git a/api/endpoints/urls.py b/api/endpoints/urls.py index 8d2802c..184bb2f 100644 --- a/api/endpoints/urls.py +++ b/api/endpoints/urls.py @@ -1,10 +1,10 @@ from rest_framework import routers -from .views import SearchView, DownloadView +from .views import SearchView#, DownloadView router = routers.DefaultRouter() router.register(r"search", SearchView, basename="search") -router.register(r"download", DownloadView, basename="download") +#router.register(r"download", DownloadView, basename="download") urlpatterns = router.urls diff --git a/api/endpoints/views.py b/api/endpoints/views.py index ba7a107..ad285c5 100644 --- a/api/endpoints/views.py +++ b/api/endpoints/views.py @@ -7,15 +7,13 @@ from rest_framework import viewsets from rest_framework.decorators import action 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.film import ROOT_PATH -from Src.Api.series import SERIES_FOLDER, STREAM_SITE_NAME -from Src.Api.site import media_search_manager, anime_search -from Src.Lib.FFmpeg.my_m3u8 import Downloader -from Src.Util.mapper import map_episode_title -from Src.Util.os import remove_special_characters +from Src.Api.Animeunity import title_search as anime_search +from Src.Api.Animeunity.Core.Vix_player.player import VideoSource as anime_source +from Src.Api.Animeunity.site import media_search_manager as anime_media_manager + +from Src.Api.Streamingcommunity import title_search as sc_search, get_version_and_domain +from Src.Api.Streamingcommunity.Core.Vix_player.player import VideoSource as film_video_source +from Src.Api.Streamingcommunity.site import media_search_manager as film_media_manager class SearchView(viewsets.ViewSet): @@ -24,15 +22,16 @@ class SearchView(viewsets.ViewSet): self.search_query = request.query_params.get("search_terms") self.type_search = request.query_params.get("type") - media_search_manager.media_list = [] + media_manager = anime_media_manager if self.type_search == "anime" else film_media_manager + media_manager.media_list = [] self.len_database = 0 if self.type_search == "film": _, self.domain = get_version_and_domain() - self.len_database = search(self.search_query, self.domain) + self.len_database = sc_search(self.search_query, self.domain) elif self.type_search == "anime": self.len_database = anime_search(self.search_query) - media_list = media_search_manager.media_list + media_list = media_manager.media_list if self.len_database != 0: data_to_return = [] @@ -51,7 +50,7 @@ class SearchView(viewsets.ViewSet): @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.media_slug = request.query_params.get("media_slug") self.type_media = request.query_params.get("type_media") try: @@ -59,15 +58,15 @@ class SearchView(viewsets.ViewSet): case "TV": 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) + self.version, self.domain = get_version_and_domain() + video_source = film_video_source() + video_source.setup( + version=self.version, + domain=self.domain, + media_id=self.media_id, + series_name=self.media_slug + ) video_source.collect_info_seasons() seasons_count = video_source.obj_title_manager.get_length() @@ -83,7 +82,7 @@ class SearchView(viewsets.ViewSet): episode = video_source.obj_episode_manager.episodes[ i_episode - 1 ] - episodes[i_season][i_episode] = episode.__dict__ + episodes[i_season][i_episode] = episode.to_dict() yield f'{json.dumps({"episodes": episodes})}\n\n' @@ -93,17 +92,16 @@ class SearchView(viewsets.ViewSet): return response case "TV_ANIME": - def stream_episodes(): - episodes_downloader = EpisodeDownloader( - self.media_id, self.media_slug + video_source = anime_source() + video_source.setup( + media_id = self.media_id, + series_name = self.media_slug ) - episoded_count = episodes_downloader.get_count_episodes() + episoded_count = video_source.get_count_episodes() - for i in range(1, episoded_count + 1): - episode_info = episodes_downloader.get_info_episode( - index_ep=i - ) + for i in range(0, episoded_count): + episode_info = video_source.get_info_episode(i).to_dict() episode_info["episode_id"] = i episode_info["episode_total"] = episoded_count print(f"Getting episode {i} of {episoded_count} info...") @@ -125,6 +123,7 @@ class SearchView(viewsets.ViewSet): return Response({"error": "No media found with that search query"}) +''' class DownloadView(viewsets.ViewSet): def create(self, request): @@ -211,3 +210,4 @@ class DownloadView(viewsets.ViewSet): } return Response(response_dict) +''' diff --git a/frontend/src/components/Toggle.vue b/frontend/src/components/Toggle.vue index 4c28a3f..1f31799 100644 --- a/frontend/src/components/Toggle.vue +++ b/frontend/src/components/Toggle.vue @@ -19,12 +19,12 @@ const toggleOption = () => { - Film/Serie TV + Film/Serie TV - Anime + Anime diff --git a/frontend/src/views/Details.vue b/frontend/src/views/Details.vue index 390c0ce..53c99cd 100644 --- a/frontend/src/views/Details.vue +++ b/frontend/src/views/Details.vue @@ -24,6 +24,7 @@ const selectingEpisodes = ref(false) const selectedEpisodes = ref([]) onMounted(async () => { + console.log(item) if (['MOVIE', 'OVA', 'SPECIAL'].includes(item.type)) { return } else { @@ -127,8 +128,7 @@ const downloadAllItems = async () => { {{ item.name }} ★ {{ item.score }} - {{ item.plot }} - {{ tvShowEpisodes[0][0].plot }} + {{ item.plot }} Numero episodi: {{ totalEpisodes }} Numero stagioni: {{ tvShowEpisodes.length }} @@ -167,7 +167,7 @@ const downloadAllItems = async () => { @click="selectingEpisodes ? toggleEpisodeSelect(episode) : null"> Episodio {{ episode.number }} - + Stagione {{ index + 1 }}
{{ item.plot }}
{{ tvShowEpisodes[0][0].plot }}