From dbb7502d4aae1136939893400b2f97bdcb51f82d Mon Sep 17 00:00:00 2001 From: Benex254 Date: Mon, 5 Aug 2024 09:46:58 +0300 Subject: [PATCH] feat(anime screen):implement anime dub functionality --- fastanime/Controller/anime_screen.py | 8 +++++--- fastanime/Model/anime_screen.py | 21 ++++++++++++++------- fastanime/View/AnimeScreen/anime_screen.kv | 7 +++++++ fastanime/View/AnimeScreen/anime_screen.py | 3 ++- 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/fastanime/Controller/anime_screen.py b/fastanime/Controller/anime_screen.py index 3742768..1656fbe 100644 --- a/fastanime/Controller/anime_screen.py +++ b/fastanime/Controller/anime_screen.py @@ -16,11 +16,13 @@ class AnimeScreenController: def get_view(self) -> AnimeScreenView: return self.view - def fetch_streams(self, anime_title, episode="1"): + def fetch_streams(self, anime_title, is_dub=False, episode="1"): + if self.view.is_dub: + is_dub = self.view.is_dub.active self.view.current_anime_data = self.model.get_anime_data_from_provider( - anime_title + anime_title, is_dub ) - self.view.current_links = self.model.get_episode_streams(episode) + self.view.current_links = self.model.get_episode_streams(episode, is_dub) # TODO: add auto start # # self.view.current_link = self.view.current_links[0]["gogoanime"][0] diff --git a/fastanime/Model/anime_screen.py b/fastanime/Model/anime_screen.py index 9986695..c69e52e 100644 --- a/fastanime/Model/anime_screen.py +++ b/fastanime/Model/anime_screen.py @@ -45,11 +45,13 @@ class AnimeScreenModel(BaseScreenModel): current_anime_id = "0" current_title = "" - def get_anime_data_from_provider(self, anime_title: tuple, id=None): + def get_anime_data_from_provider(self, anime_title: tuple, is_dub, id=None): if self.current_title == anime_title and self.current_anime_data: return self.current_anime_data - - search_results = anime_provider.search_for_anime(anime_title[0]) + translation_type = "dub" if is_dub else "sub" + search_results = anime_provider.search_for_anime( + anime_title[0], translation_type + ) if search_results: _search_results = search_results["shows"]["edges"] @@ -61,15 +63,18 @@ class AnimeScreenModel(BaseScreenModel): self.current_anime_data = anime_provider.get_anime(result["_id"]) self.current_title = anime_title return self.current_anime_data + return {} + + def get_episode_streams(self, episode, is_dub): + translation_type = "dub" if is_dub else "sub" - def get_episode_streams(self, episode): if cached_episode := Cache.get( - "streams.anime", f"{self.current_title}{episode}" + "streams.anime", f"{self.current_title}{episode}{is_dub}" ): return cached_episode if self.current_anime_data: episode_streams = anime_provider.get_anime_episode( - self.current_anime_id, episode + self.current_anime_id, episode, translation_type ) streams = anime_provider.get_episode_streams(episode_streams) @@ -85,7 +90,9 @@ class AnimeScreenModel(BaseScreenModel): } ) Cache.append( - "streams.anime", f"{self.current_title}{episode}", streams + "streams.anime", + f"{self.current_title}{episode}{is_dub}", + streams, ) return streams diff --git a/fastanime/View/AnimeScreen/anime_screen.kv b/fastanime/View/AnimeScreen/anime_screen.kv index 3691a10..8ca9014 100644 --- a/fastanime/View/AnimeScreen/anime_screen.kv +++ b/fastanime/View/AnimeScreen/anime_screen.kv @@ -19,6 +19,7 @@ md_bg_color: self.theme_cls.backgroundColor episodes_container:episodes_container video_player:video_player + is_dub:is_dub MDBoxLayout: padding:"10dp" orientation: 'vertical' @@ -54,6 +55,12 @@ if root.current_link: app.play_on_mpv(root.current_link) MDButtonText: text:"Play on MPV" + AnimeLabel: + text:"Dub: " + padding: "10dp" + adaptive_width:True + MDSwitch: + id:is_dub AnimeBoxLayout: AnimeLabel: text:"servers: " diff --git a/fastanime/View/AnimeScreen/anime_screen.py b/fastanime/View/AnimeScreen/anime_screen.py index 94aa425..57d1830 100644 --- a/fastanime/View/AnimeScreen/anime_screen.py +++ b/fastanime/View/AnimeScreen/anime_screen.py @@ -27,6 +27,7 @@ class AnimeScreenView(BaseScreenView): current_episode = 1 video_player = ObjectProperty() current_server = "dropbox" + is_dub = ObjectProperty() def __init__(self, **kwargs): super().__init__(**kwargs) @@ -65,7 +66,7 @@ class AnimeScreenView(BaseScreenView): def update_current_episode(self, episode): self.current_episode = int(episode) - self.controller.fetch_streams(self.current_title, episode) + self.controller.fetch_streams(self.current_title, self.is_dub.active, episode) self.update_current_video_stream(self.current_server) self.video_player.state = "play"