From e09b3f1fc828da3eed59b929354b90d14d42602c Mon Sep 17 00:00:00 2001 From: Benex254 Date: Wed, 12 Jun 2024 17:27:26 +0300 Subject: [PATCH] fix(my list):make my list screen work with new media cards --- fastanime/Controller/my_list_screen.py | 43 +++++++------------ fastanime/Model/anime_screen.py | 6 ++- fastanime/Model/my_list_screen.py | 4 +- fastanime/Utility/data.py | 5 ++- fastanime/Utility/media_card_loader.py | 2 + fastanime/View/MylistScreen/my_list_screen.kv | 18 +++++--- fastanime/View/MylistScreen/my_list_screen.py | 4 +- 7 files changed, 40 insertions(+), 42 deletions(-) diff --git a/fastanime/Controller/my_list_screen.py b/fastanime/Controller/my_list_screen.py index 86e640c..eac9627 100644 --- a/fastanime/Controller/my_list_screen.py +++ b/fastanime/Controller/my_list_screen.py @@ -1,5 +1,5 @@ from inspect import isgenerator - +from math import ceil from kivy.logger import Logger # from kivy.clock import Clock @@ -22,38 +22,25 @@ class MyListScreenController: self.model = model self.view = MyListScreenView(controller=self, model=self.model) # if len(self.requested_update_my_list_screen()) > 30: - # self.requested_update_my_list_screen(2) + self.requested_update_my_list_screen() def get_view(self) -> MyListScreenView: return self.view - def requested_update_my_list_screen(self, page=None): - user_anime_list = user_data_helper.get_user_anime_list() + def requested_update_my_list_screen(self): + _user_anime_list = user_data_helper.get_user_anime_list() if animes_to_add := difference( - user_anime_list, self.model.already_in_user_anime_list + _user_anime_list, self.model.already_in_user_anime_list ): - Logger.info("My List Screen:User anime list change;updating screen") - # if thirty:=len(animes_to_add)>30: - # self.model.already_in_user_anime_list = user_anime_list[:30] - # else: + no_of_updates = ceil(len(animes_to_add) / 30) + Logger.info("MyList Screen:Change detected updating screen") + for i in range(no_of_updates): + _animes_to_add = animes_to_add[i * 30 : (i + 1) * 30] + anime_cards = self.model.update_my_anime_list_view(_animes_to_add) - anime_cards = self.model.update_my_anime_list_view(animes_to_add, page) - self.model.already_in_user_anime_list = user_anime_list - - if isgenerator(anime_cards): - for result_card in anime_cards: - result_card.screen = self.view - self.view.update_layout(result_card) + if isgenerator(anime_cards): + for result_card in anime_cards: + result_card["screen"] = self.view + self.view.update_layout(result_card) + self.model.already_in_user_anime_list = _user_anime_list return animes_to_add - elif page: - anime_cards = self.model.update_my_anime_list_view( - self.model.already_in_user_anime_list, page - ) - # self.model.already_in_user_anime_list = user_anime_list - if isgenerator(anime_cards): - for result_card in anime_cards: - result_card.screen = self.view - self.view.update_layout(result_card) - return [] - else: - return [] diff --git a/fastanime/Model/anime_screen.py b/fastanime/Model/anime_screen.py index b008dc5..9986695 100644 --- a/fastanime/Model/anime_screen.py +++ b/fastanime/Model/anime_screen.py @@ -4,7 +4,7 @@ from kivy.cache import Cache from ..libs.anilist import AniList from ..libs.anime_provider.allanime.api import anime_provider from .base_model import BaseScreenModel -from ..Utility.data import anime_maps +from ..Utility.data import anime_normalizer def anime_title_percentage_match( @@ -19,7 +19,9 @@ def anime_title_percentage_match( Returns: int: the percentage match """ - if normalized_anime_title := anime_maps.get(possible_user_requested_anime_title): + if normalized_anime_title := anime_normalizer.get( + possible_user_requested_anime_title + ): possible_user_requested_anime_title = normalized_anime_title print(locals()) # compares both the romaji and english names and gets highest Score diff --git a/fastanime/Model/my_list_screen.py b/fastanime/Model/my_list_screen.py index b2fcfce..e145713 100644 --- a/fastanime/Model/my_list_screen.py +++ b/fastanime/Model/my_list_screen.py @@ -7,9 +7,9 @@ from .base_model import BaseScreenModel class MyListScreenModel(BaseScreenModel): already_in_user_anime_list = [] - def update_my_anime_list_view(self, not_yet_in_user_anime_list: list, page=None): + def update_my_anime_list_view(self, not_yet_in_user_anime_list: list): success, self.data = AniList.search( - id_in=not_yet_in_user_anime_list, page=page, sort="SCORE_DESC" + id_in=not_yet_in_user_anime_list, sort="SCORE_DESC" ) if success: return self.media_card_generator() diff --git a/fastanime/Utility/data.py b/fastanime/Utility/data.py index ef4e3ac..9939482 100644 --- a/fastanime/Utility/data.py +++ b/fastanime/Utility/data.py @@ -2,7 +2,10 @@ Just contains some useful data used across the codebase """ -anime_maps = {"1P": "one piece"} +anime_normalizer = { + "1P": "one piece", + "Magia Record: Mahou Shoujo Madoka☆Magica Gaiden (TV)": "Mahou Shoujo Madoka☆Magica", +} themes_available = [ diff --git a/fastanime/Utility/media_card_loader.py b/fastanime/Utility/media_card_loader.py index e5d99a5..52edd6a 100644 --- a/fastanime/Utility/media_card_loader.py +++ b/fastanime/Utility/media_card_loader.py @@ -87,6 +87,8 @@ class MediaCardDataLoader(object): if anime_id in user_data_helper.get_user_anime_list(): media_card_data["is_in_my_list"] = True + else: + media_card_data["is_in_my_list"] = False if anime_item["averageScore"]: stars = int(anime_item["averageScore"] / 100 * 6) diff --git a/fastanime/View/MylistScreen/my_list_screen.kv b/fastanime/View/MylistScreen/my_list_screen.kv index 1c2e659..3c23ab3 100644 --- a/fastanime/View/MylistScreen/my_list_screen.kv +++ b/fastanime/View/MylistScreen/my_list_screen.kv @@ -14,15 +14,19 @@ orientation: 'vertical' size_hint:.95,1 SearchBar: - MDScrollView: + MDRecycleView: pos_hint:{"center_x":.5} size_hint:1,1 - MDGridLayout: + id:user_anime_list_container + key_viewclass:"viewclass" + MDRecycleGridLayout: + pos_hint: {'center_x': 0.5} spacing: '40dp' - padding: "100dp","50dp","10dp","200dp" - id:user_anime_list_container - cols:4 if root.width<=1100 else 5 + padding: "25dp","50dp","75dp","200dp" + default_size_hint:None,None + default_size:dp(100),dp(150) + cols:3 if root.width <= 1100 else 5 size_hint_y:None - height:self.minimum_height + height:max(self.parent.parent.height,self.minimum_height) - \ No newline at end of file + diff --git a/fastanime/View/MylistScreen/my_list_screen.py b/fastanime/View/MylistScreen/my_list_screen.py index 8ab430b..598becb 100644 --- a/fastanime/View/MylistScreen/my_list_screen.py +++ b/fastanime/View/MylistScreen/my_list_screen.py @@ -1,5 +1,5 @@ from kivy.clock import Clock -from kivy.properties import DictProperty, ObjectProperty, StringProperty +from kivy.properties import ObjectProperty from ...View.base_screen import BaseScreenView @@ -18,4 +18,4 @@ class MyListScreenView(BaseScreenView): Clock.schedule_once(lambda _: self.controller.requested_update_my_list_screen()) def update_layout(self, widget): - self.user_anime_list_container.add_widget(widget) + self.user_anime_list_container.data.append(widget)