feat(home screen): implement load more anime functionality to improve start up time

This feature only gets anime of a particular category and only preloads
trending category
This commit is contained in:
Benex254
2024-06-10 11:58:31 +03:00
parent a11a73cf8f
commit 7d0b507b2d
3 changed files with 28 additions and 14 deletions

View File

@@ -1,8 +1,10 @@
from inspect import isgenerator
from kivy.clock import Clock
from kivy.logger import Logger
from ..Model import HomeScreenModel
from ..Utility import show_notification
from ..View import HomeScreenView
@@ -19,12 +21,22 @@ class HomeScreenController:
"""
populate_errors = []
_discover_anime_list = []
def __init__(self, model: HomeScreenModel):
self.model = model # Model.main_screen.MainScreenModel
self.view = HomeScreenView(controller=self, model=self.model)
# if self.view.app.config.get("Preferences","is_startup_anime_enable")=="1": # type: ignore
# Clock.schedule_once(lambda _:self.populate_home_screen())
self._discover_anime_list = [
self.highest_scored_anime,
self.popular_anime,
self.favourite_anime,
self.upcoming_anime,
self.recently_updated_anime,
self.trending_anime,
]
self.get_more_anime()
def get_view(self) -> HomeScreenView:
return self.view
@@ -115,17 +127,17 @@ class HomeScreenController:
Logger.error("Home Screen:Failed to load upcoming anime")
self.populate_errors.append("upcoming Anime")
def populate_home_screen(self):
def get_more_anime(self):
self.populate_errors = []
Clock.schedule_once(lambda _: self.trending_anime(), 1)
Clock.schedule_once(lambda _: self.highest_scored_anime(), 2)
Clock.schedule_once(lambda _: self.recently_updated_anime(), 5)
# Clock.schedule_once(lambda _: self.popular_anime(), 3)
# Clock.schedule_once(lambda _: self.favourite_anime(), 4)
# Clock.schedule_once(lambda _: self.upcoming_anime(), 6)
if self._discover_anime_list:
task = self._discover_anime_list.pop()
Clock.schedule_once(lambda _: task())
else:
show_notification("Home Screen Info", "No more anime to load")
if self.populate_errors:
show_notification(
"Failed to fetch all home screen data",
f"Theres probably a problem with your internet connection or anilist servers are down.\nFailed include:{', '.join(self.populate_errors)}",
)
self.populate_errors = []

View File

@@ -19,5 +19,11 @@
spacing:"10dp"
orientation: 'vertical'
size_hint_y:None
height:max(self.minimum_height,p.height,1800)
height:self.minimum_height
MDButton:
on_press:
if root.controller: root.controller.get_more_anime()
MDButtonText:
text:"Load More Anime"

View File

@@ -128,10 +128,6 @@ class AniXStreamApp(MDApp):
def on_start(self, *args):
self.media_card_popup = MediaPopup()
if self.config.get("Preferences", "is_startup_anime_enable") == "1": # type: ignore
Clock.schedule_once(
lambda _: self.home_screen.controller.populate_home_screen(), 1
)
def generate_application_screens(self) -> None:
for i, name_screen in enumerate(screens.keys()):