mirror of
https://github.com/Benexl/FastAnime.git
synced 2026-01-09 11:45:02 -08:00
renamed app to anixstream
This commit is contained in:
7
anixstream/Model/__init__.py
Normal file
7
anixstream/Model/__init__.py
Normal 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
|
||||
13
anixstream/Model/anime_screen.py
Normal file
13
anixstream/Model/anime_screen.py
Normal 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)
|
||||
|
||||
|
||||
33
anixstream/Model/base_model.py
Normal file
33
anixstream/Model/base_model.py
Normal 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
|
||||
7
anixstream/Model/crashlog_screen.py
Normal file
7
anixstream/Model/crashlog_screen.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from Model.base_model import BaseScreenModel
|
||||
|
||||
|
||||
class CrashLogScreenModel(BaseScreenModel):
|
||||
"""
|
||||
Handles the crashlog screen logic
|
||||
"""
|
||||
8
anixstream/Model/download_screen.py
Normal file
8
anixstream/Model/download_screen.py
Normal file
@@ -0,0 +1,8 @@
|
||||
from Model.base_model import BaseScreenModel
|
||||
|
||||
|
||||
class DownloadsScreenModel(BaseScreenModel):
|
||||
"""
|
||||
Handles the download screen logic
|
||||
"""
|
||||
|
||||
7
anixstream/Model/help_screen.py
Normal file
7
anixstream/Model/help_screen.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from Model.base_model import BaseScreenModel
|
||||
|
||||
|
||||
class HelpScreenModel(BaseScreenModel):
|
||||
"""
|
||||
Handles the help screen logic
|
||||
"""
|
||||
79
anixstream/Model/home_screen.py
Normal file
79
anixstream/Model/home_screen.py
Normal 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
|
||||
18
anixstream/Model/my_list_screen.py
Normal file
18
anixstream/Model/my_list_screen.py
Normal 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)
|
||||
29
anixstream/Model/search_screen.py
Normal file
29
anixstream/Model/search_screen.py
Normal 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"]
|
||||
Reference in New Issue
Block a user