renamed app to anixstream

This commit is contained in:
Benedict Xavier Wanyonyi
2024-05-31 18:12:02 +03:00
parent f24912fd1c
commit 7e9060bb2d
126 changed files with 47 additions and 57 deletions

View File

@@ -0,0 +1,7 @@
from .home_screen import HomeScreenModel
from .search_screen import SearchScreenModel
from .my_list_screen import MyListScreenModel
from .anime_screen import AnimeScreenModel
from .crashlog_screen import CrashLogScreenModel
from .help_screen import HelpScreenModel
from .download_screen import DownloadsScreenModel

View File

@@ -0,0 +1,13 @@
from Model.base_model import BaseScreenModel
from libs.anilist import AniList
class AnimeScreenModel(BaseScreenModel):
"""the Anime screen model
"""
data = {}
anime_id = 0
def get_anime_data(self,id:int):
return AniList.get_anime(id)

View File

@@ -0,0 +1,33 @@
# The model implements the observer pattern. This means that the class must
# support adding, removing, and alerting observers. In this case, the model is
# completely independent of controllers and views. It is important that all
# registered observers implement a specific method that will be called by the
# model when they are notified (in this case, it is the `model_is_changed`
# method). For this, observers must be descendants of an abstract class,
# inheriting which, the `model_is_changed` method must be overridden.
class BaseScreenModel:
"""Implements a base class for model modules."""
_observers = []
def add_observer(self, observer) -> None:
self._observers.append(observer)
def remove_observer(self, observer) -> None:
self._observers.remove(observer)
def notify_observers(self, name_screen: str) -> None:
"""
Method that will be called by the observer when the model data changes.
:param name_screen:
name of the view for which the method should be called
:meth:`model_is_changed`.
"""
for observer in self._observers:
if observer.name == name_screen:
observer.model_is_changed()
break

View File

@@ -0,0 +1,7 @@
from Model.base_model import BaseScreenModel
class CrashLogScreenModel(BaseScreenModel):
"""
Handles the crashlog screen logic
"""

View File

@@ -0,0 +1,8 @@
from Model.base_model import BaseScreenModel
class DownloadsScreenModel(BaseScreenModel):
"""
Handles the download screen logic
"""

View File

@@ -0,0 +1,7 @@
from Model.base_model import BaseScreenModel
class HelpScreenModel(BaseScreenModel):
"""
Handles the help screen logic
"""

View File

@@ -0,0 +1,79 @@
from Model.base_model import BaseScreenModel
from libs.anilist import AniList
from Utility.media_card_loader import MediaCardLoader
class HomeScreenModel(BaseScreenModel):
"""The home screen model"""
def get_trending_anime(self):
success, data = AniList.get_trending()
if success:
def _data_generator():
for anime_item in data["data"]["Page"]["media"]:
yield MediaCardLoader.media_card(anime_item)
return _data_generator()
else:
return data
def get_most_favourite_anime(self):
success, data = AniList.get_most_favourite()
if success:
def _data_generator():
for anime_item in data["data"]["Page"]["media"]:
yield MediaCardLoader.media_card(anime_item)
return _data_generator()
else:
return data
def get_most_recently_updated_anime(self):
success, data = AniList.get_most_recently_updated()
if success:
def _data_generator():
for anime_item in data["data"]["Page"]["media"]:
yield MediaCardLoader.media_card(anime_item)
return _data_generator()
else:
return data
def get_most_popular_anime(self):
success, data = AniList.get_most_popular()
if success:
def _data_generator():
for anime_item in data["data"]["Page"]["media"]:
yield MediaCardLoader.media_card(anime_item)
return _data_generator()
else:
return data
def get_most_scored_anime(self):
success, data = AniList.get_most_scored()
if success:
def _data_generator():
for anime_item in data["data"]["Page"]["media"]:
yield MediaCardLoader.media_card(anime_item)
return _data_generator()
else:
return data
def get_upcoming_anime(self):
success, data = AniList.get_upcoming_anime(1)
if success:
def _data_generator():
for anime_item in data["data"]["Page"]["media"]:
yield MediaCardLoader.media_card(anime_item)
return _data_generator()
else:
return data

View File

@@ -0,0 +1,18 @@
from libs.anilist import AniList
from Model.base_model import BaseScreenModel
from Utility import MediaCardLoader,show_notification
class MyListScreenModel(BaseScreenModel):
already_in_user_anime_list = []
def update_my_anime_list_view(self,not_yet_in_user_anime_list:list,page=None):
success,self.data = AniList.search(id_in=not_yet_in_user_anime_list,page=page,sort="SCORE_DESC")
if success:
return self.media_card_generator()
else:
show_notification(f"Failed to update my list screen view",self.data["Error"])
return None
def media_card_generator(self):
for anime_item in self.data["data"]["Page"]["media"]:
yield MediaCardLoader.media_card(anime_item)

View File

@@ -0,0 +1,29 @@
from Model.base_model import BaseScreenModel
from libs.anilist import AniList
from Utility import MediaCardLoader, show_notification
class SearchScreenModel(BaseScreenModel):
data = {}
def get_trending_anime(self):
success,data = AniList.get_trending()
if success:
def _data_generator():
for anime_item in data["data"]["Page"]["media"]:
yield MediaCardLoader.media_card(anime_item)
return _data_generator()
else:
return data
def search_for_anime(self,anime_title,**kwargs):
success,self.data = AniList.search(query=anime_title,**kwargs)
if success:
return self.media_card_generator()
else:
show_notification(f"Failed to search for {anime_title}",self.data.get("Error"))
def media_card_generator(self):
for anime_item in self.data["data"]["Page"]["media"]:
yield MediaCardLoader.media_card(anime_item)
self.pagination_info = self.data["data"]["Page"]["pageInfo"]