mirror of
https://github.com/Benexl/FastAnime.git
synced 2026-01-06 17:53:40 -08:00
feat(anime_screen):implement crude streaming with allanime api
This commit is contained in:
@@ -1,134 +1,33 @@
|
||||
from kivy.properties import DictProperty, ObjectProperty, StringProperty
|
||||
from kivy.properties import ListProperty, ObjectProperty, StringProperty
|
||||
|
||||
from ...libs.anilist import AnilistBaseMediaDataSchema
|
||||
from ...Utility import anilist_data_helper
|
||||
from ...View.base_screen import BaseScreenView
|
||||
from .components import (
|
||||
AnimdlStreamDialog,
|
||||
AnimeCharacters,
|
||||
AnimeDescription,
|
||||
AnimeHeader,
|
||||
AnimeReviews,
|
||||
AnimeSideBar,
|
||||
DownloadAnimeDialog,
|
||||
RankingsBar,
|
||||
)
|
||||
|
||||
|
||||
class AnimeScreenView(BaseScreenView):
|
||||
"""The anime screen view"""
|
||||
|
||||
caller_screen_name = StringProperty()
|
||||
header: AnimeHeader = ObjectProperty()
|
||||
side_bar: AnimeSideBar = ObjectProperty()
|
||||
rankings_bar: RankingsBar = ObjectProperty()
|
||||
anime_description: AnimeDescription = ObjectProperty()
|
||||
anime_characters: AnimeCharacters = ObjectProperty()
|
||||
anime_reviews: AnimeReviews = ObjectProperty()
|
||||
data = DictProperty()
|
||||
anime_id = 0
|
||||
current_link = StringProperty(
|
||||
"https://uc951f724c20bbec8df447bac605.dl.dropboxusercontent.com/cd/0/get/CUdx6k2qw-zqY86ftfFHqkmPqGuVrfjpE68B_EkcvZXcZLnjim_ZTHd-qNVb_mEbos9UsuhY8FJGdgf86RUZ-IJqZtz3tt8_CUVTloQAeZ47HtNiKjQ0ESvYdLuwqDjqwK2rNfsfiZI2cXBaKiUyJtljEeRL8whSff2wA9Z4tX1cow/file"
|
||||
)
|
||||
current_links = ListProperty([])
|
||||
current_anime_data = ObjectProperty()
|
||||
caller_screen_name = ObjectProperty()
|
||||
current_title = StringProperty()
|
||||
|
||||
def update_layout(self, data: AnilistBaseMediaDataSchema, caller_screen_name: str):
|
||||
self.caller_screen_name = caller_screen_name
|
||||
self.data = data
|
||||
# uitlity functions
|
||||
return
|
||||
|
||||
# variables
|
||||
english_title = data["title"]["english"]
|
||||
jp_title = data["title"]["romaji"]
|
||||
studios = data["studios"]["nodes"]
|
||||
def update_current_video_stream(self, server, is_dub=False):
|
||||
for link in self.current_links:
|
||||
if stream_link := link.get(server):
|
||||
print(link)
|
||||
self.current_link = stream_link[0]
|
||||
break
|
||||
# print(link)
|
||||
|
||||
# update header
|
||||
self.header.titles = f"{english_title}\n{jp_title}"
|
||||
if banner_image := data["bannerImage"]:
|
||||
self.header.banner_image = banner_image
|
||||
|
||||
# -----side bar-----
|
||||
|
||||
# update image
|
||||
self.side_bar.image = data["coverImage"]["extraLarge"]
|
||||
|
||||
# update alternative titles
|
||||
alternative_titles = {
|
||||
"synonyms": anilist_data_helper.format_list_data_with_comma(
|
||||
data["synonyms"]
|
||||
), # list
|
||||
"japanese": jp_title,
|
||||
"english": english_title,
|
||||
}
|
||||
self.side_bar.alternative_titles = alternative_titles
|
||||
|
||||
# update information
|
||||
information = {
|
||||
"episodes": data["episodes"],
|
||||
"status": data["status"],
|
||||
"nextAiringEpisode": anilist_data_helper.extract_next_airing_episode(
|
||||
data["nextAiringEpisode"]
|
||||
),
|
||||
"aired": f"{anilist_data_helper.format_anilist_date_object(data['startDate'])} to {anilist_data_helper.format_anilist_date_object(data['endDate'])}",
|
||||
"premiered": f"{data['season']} {data['seasonYear']}",
|
||||
"broadcast": data["format"],
|
||||
"countryOfOrigin": data["countryOfOrigin"],
|
||||
"hashtag": data["hashtag"],
|
||||
"studios": anilist_data_helper.format_list_data_with_comma(
|
||||
[studio["name"] for studio in studios if studio["isAnimationStudio"]]
|
||||
), # { "name": "Sunrise", "isAnimationStudio": true }
|
||||
"producers": anilist_data_helper.format_list_data_with_comma(
|
||||
[
|
||||
studio["name"]
|
||||
for studio in studios
|
||||
if not studio["isAnimationStudio"]
|
||||
]
|
||||
),
|
||||
"source": data["source"],
|
||||
"genres": anilist_data_helper.format_list_data_with_comma(data["genres"]),
|
||||
"duration": data["duration"],
|
||||
}
|
||||
self.side_bar.information = information
|
||||
|
||||
# update statistics
|
||||
statistics = [*[(stat["context"], stat["rank"]) for stat in data["rankings"]]]
|
||||
self.side_bar.statistics = statistics
|
||||
|
||||
# update tags
|
||||
self.side_bar.tags = [(tag["name"], tag["rank"]) for tag in data["tags"]]
|
||||
|
||||
# update external links
|
||||
|
||||
external_links = [
|
||||
("AniList", data["siteUrl"]),
|
||||
*[(site["site"], site["url"]) for site in data["externalLinks"]],
|
||||
]
|
||||
self.side_bar.external_links = external_links
|
||||
|
||||
self.rankings_bar.rankings = {
|
||||
"Popularity": data["popularity"],
|
||||
"Favourites": data["favourites"],
|
||||
"AverageScore": data["averageScore"] if data["averageScore"] else 0,
|
||||
}
|
||||
|
||||
self.anime_description.description = data["description"]
|
||||
|
||||
self.anime_characters.characters = [
|
||||
(character["node"], character["voiceActors"])
|
||||
for character in data["characters"]["edges"]
|
||||
] # list (character,actor)
|
||||
|
||||
self.anime_reviews.reviews = data["reviews"]["nodes"]
|
||||
|
||||
def stream_anime_with_custom_cmds_dialog(self, mpv=False):
|
||||
"""
|
||||
Called when user wants to stream with custom commands
|
||||
"""
|
||||
|
||||
AnimdlStreamDialog(self.data, mpv).open()
|
||||
|
||||
def open_download_anime_dialog(self):
|
||||
"""
|
||||
Opens the download anime dialog
|
||||
"""
|
||||
|
||||
DownloadAnimeDialog(self.data).open()
|
||||
def update_current_link(self, field):
|
||||
self.controller.fetch_streams(self.current_title, field.text)
|
||||
|
||||
def add_to_user_anime_list(self, *args):
|
||||
self.app.add_anime_to_user_anime_list(self.model.anime_id)
|
||||
|
||||
Reference in New Issue
Block a user