feat(anime screen):implement anime dub functionality

This commit is contained in:
Benex254
2024-08-05 09:46:58 +03:00
parent cc228cc38a
commit dbb7502d4a
4 changed files with 28 additions and 11 deletions

View File

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

View File

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

View File

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

View File

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