mirror of
https://github.com/Benexl/FastAnime.git
synced 2025-12-28 21:53:20 -08:00
137 lines
4.7 KiB
Python
137 lines
4.7 KiB
Python
from datetime import datetime
|
|
|
|
from kivy.properties import ObjectProperty, DictProperty, StringProperty
|
|
|
|
from Utility import anilist_data_helper
|
|
from libs.anilist import AnilistBaseMediaDataSchema
|
|
|
|
from View.base_screen import BaseScreenView
|
|
from .components import (
|
|
AnimeHeader,
|
|
AnimeSideBar,
|
|
AnimeDescription,
|
|
AnimeReviews,
|
|
AnimeCharacters,
|
|
AnimdlStreamDialog,
|
|
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
|
|
|
|
def update_layout(self, data: AnilistBaseMediaDataSchema, caller_screen_name: str):
|
|
self.caller_screen_name = caller_screen_name
|
|
self.data = data
|
|
# uitlity functions
|
|
|
|
# variables
|
|
english_title = data["title"]["english"]
|
|
jp_title = data["title"]["romaji"]
|
|
studios = data["studios"]["nodes"]
|
|
|
|
# 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 add_to_user_anime_list(self, *args):
|
|
self.app.add_anime_to_user_anime_list(self.model.anime_id)
|