Files
FastAnime/fastanime/View/AnimeScreen/anime_screen.py

82 lines
2.7 KiB
Python

from kivy.properties import ListProperty, ObjectProperty, StringProperty
from kivy.uix.widget import Factory
from kivymd.uix.button import MDButton
from ...View.base_screen import BaseScreenView
class EpisodeButton(MDButton):
text = StringProperty()
change_episode_callback = ObjectProperty()
Factory.register("EpisodeButton", cls=EpisodeButton)
class AnimeScreenView(BaseScreenView):
"""The anime screen view"""
current_link = StringProperty()
current_links = ListProperty([])
current_anime_data = ObjectProperty()
caller_screen_name = ObjectProperty()
current_title = ()
episodes_container = ObjectProperty()
total_episodes = 0
current_episode = 1
video_player = ObjectProperty()
current_server = "dropbox"
is_dub = ObjectProperty()
def __init__(self, **kwargs):
super().__init__(**kwargs)
# self.update_episodes(100)
def update_episodes(self, episodes_list):
self.episodes_container.data = []
self.total_episodes = len(episodes_list)
for episode in episodes_list:
self.episodes_container.data.append(
{
"viewclass": "EpisodeButton",
"text": str(episode),
"change_episode_callback": lambda x=episode: self.update_current_episode(
x
),
}
)
def next_episode(self):
next_episode = self.current_episode + 1
if next_episode <= self.total_episodes:
self.update_current_episode(str(next_episode))
def previous_episode(self):
previous_episode = self.current_episode - 1
if previous_episode > 0:
self.update_current_episode(str(previous_episode))
def on_current_anime_data(self, instance, value):
data = value["show"]
self.update_episodes(data["availableEpisodesDetail"]["sub"][::-1])
self.current_episode = int("1")
self.update_current_video_stream(self.current_server)
self.video_player.state = "play"
def update_current_episode(self, episode):
self.current_episode = int(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"
def update_current_video_stream(self, server, is_dub=False):
for link in self.current_links:
if stream_link := link.get(server):
self.current_server = server
self.current_link = stream_link[0]
break
def add_to_user_anime_list(self, *args):
self.app.add_anime_to_user_anime_list(self.model.anime_id)