feat:(anime screen):add basic error handling

This commit is contained in:
Benex254
2024-08-05 09:46:58 +03:00
parent 3e68afc656
commit ed713375ef
13 changed files with 118 additions and 80 deletions

View File

@@ -19,10 +19,12 @@ class AnimeScreenController:
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, is_dub
)
self.view.current_links = self.model.get_episode_streams(episode, is_dub)
if anime_data := self.model.get_anime_data_from_provider(
anime_title, is_dub
):
self.view.current_anime_data = anime_data
if current_links := self.model.get_episode_streams(episode, is_dub):
self.view.current_links = current_links
# TODO: add auto start
#
# self.view.current_link = self.view.current_links[0]["gogoanime"][0]

View File

@@ -1,5 +1,6 @@
from fuzzywuzzy import fuzz
from kivy.cache import Cache
from kivy.logger import Logger
from ..libs.anilist import AniList
from ..libs.anime_provider.allanime.api import anime_provider
@@ -46,55 +47,64 @@ class AnimeScreenModel(BaseScreenModel):
current_title = ""
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
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"]
result = max(
_search_results,
key=lambda x: anime_title_percentage_match(x["name"], anime_title),
try:
if self.current_title == anime_title and self.current_anime_data:
return self.current_anime_data
translation_type = "dub" if is_dub else "sub"
search_results = anime_provider.search_for_anime(
anime_title[0], translation_type
)
self.current_anime_id = result["_id"]
self.current_anime_data = anime_provider.get_anime(result["_id"])
self.current_title = anime_title
return self.current_anime_data
return {}
if search_results:
_search_results = search_results["shows"]["edges"]
result = max(
_search_results,
key=lambda x: anime_title_percentage_match(x["name"], anime_title),
)
self.current_anime_id = result["_id"]
self.current_anime_data = anime_provider.get_anime(result["_id"])
self.current_title = anime_title
return self.current_anime_data
return {}
except Exception as e:
Logger.info("anime_screen error: %s" % e)
return {}
def get_episode_streams(self, episode, is_dub):
translation_type = "dub" if is_dub else "sub"
if cached_episode := Cache.get(
"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, translation_type
)
streams = anime_provider.get_episode_streams(episode_streams)
try:
if cached_episode := Cache.get(
"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, translation_type
)
streams = anime_provider.get_episode_streams(episode_streams)
if streams:
_streams = list(streams)
streams = []
for stream in _streams:
streams.append(
{
f"{stream[0]}": [
_stream["link"] for _stream in stream[1]["links"]
]
}
)
Cache.append(
"streams.anime",
f"{self.current_title}{episode}{is_dub}",
streams,
)
if streams:
_streams = list(streams)
streams = []
for stream in _streams:
streams.append(
{
f"{stream[0]}": [
_stream["link"] for _stream in stream[1]["links"]
]
}
)
Cache.append(
"streams.anime",
f"{self.current_title}{episode}{is_dub}",
streams,
)
return streams
return []
except Exception as e:
Logger.info("anime_screen error: %s" % e)
return []
# should return {type:{provider:streamlink}}

View File

View File

View File

View File

View File

View File

@@ -1,33 +0,0 @@
[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"
[project]
name = "AniXStream"
version = "0.0.1"
authors = [
{ name="Benex254", email="benexprojects@gmail.com" },
]
description = "A wrapper over all and every anime cli or package"
readme = "README.md"
requires-python = ">=3.10"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
dependencies = [
"kivy",
"plyer",
"fuzzywuzzy",
"python-Levenshtein",
"kivymd @ https://github.com/kivymd/KivyMD/archive/master.zip",
"ffpyplayer",
"pytube",
"animdl"
]
[project.urls]
Homepage = "https://github.com/benex254/aniXstream"
Issues = "https://github.com/benex254/aniXstream"
[project.scripts]
anixstream="anixstream.__main__:run_app"

View File

@@ -5,4 +5,3 @@ plyer
https://github.com/kivymd/KivyMD/archive/master.zip
fuzzywuzzy
python-Levenshtein
dotenv

60
setup.py Normal file
View File

@@ -0,0 +1,60 @@
import os
import sys
from setuptools import find_packages, setup
assert sys.version_info >= (3, 10, 0), "FastAnime requires python 3.10+"
path = os.path.abspath(".")
kv_file_paths = []
app_dir = os.path.join(path, "fastanime")
print(app_dir)
views_folder = os.path.join(app_dir, "View")
for dirpath, dirnames, filenames in os.walk(views_folder):
for filename in filenames:
if os.path.splitext(filename)[1] == ".kv":
kv_file = os.path.join(dirpath, filename)
kv_file_paths.append(kv_file)
if __name__ == "__main__":
setup(
version="0.2.0",
packages=[
*find_packages(
include=[
"fastanime",
"fastanime.*",
"fastanime.Utility.*",
"fastanime.libs.*",
]
),
],
package_dir={"fastanime": "fastanime"},
package_data={
"fastanime": [
"assets/*",
"configs/*",
*kv_file_paths,
]
},
install_requires=[
"kivy",
"plyer",
"fuzzywuzzy",
"python-Levenshtein",
"kivymd @ https://github.com/kivymd/KivyMD/archive/master.zip",
"ffpyplayer",
"yt-dlp",
],
setup_requires=[],
python_requires=">=3.10",
entry_points={
"gui_scripts": [
"fastanime = fastanime.__main__:get_hook_dirs",
],
},
)