diff --git a/fpakman/app.py b/fpakman/app.py index 4445f443..7972bf51 100755 --- a/fpakman/app.py +++ b/fpakman/app.py @@ -1,5 +1,7 @@ import argparse +import inspect import os +import pkgutil import sys import requests @@ -7,7 +9,7 @@ from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QApplication from colorama import Fore -from fpakman import __version__, __app_name__ +from fpakman import __version__, __app_name__, ROOT_DIR from fpakman.core import resource from fpakman.core.controller import GenericApplicationManager from fpakman_api.util.disk import DiskCacheLoaderFactory @@ -65,42 +67,57 @@ if args.check_packaging_once == 1: locale_keys = util.get_locale_keys(args.locale) + +manager_classes = None + + +def _find_manager(member): + if inspect.isclass(member) and inspect.getmro(member)[1].__name__ == 'ApplicationManager': + return member + elif inspect.ismodule(member): + for name, mod in inspect.getmembers(member): + manager_found = _find_manager(mod) + if manager_found: + return manager_found + + http_session = requests.Session() -caches = [] -cache_map = {} -managers = [] - -# if args.flatpak: -# pass - # flatpak_api_cache = Cache(expiration_time=args.cache_exp) - # cache_map[FlatpakApplication] = flatpak_api_cache - # managers.append(FlatpakManager(app_args=args, api_cache=flatpak_api_cache, disk_cache=args.disk_cache, http_session=http_session, locale_keys=locale_keys)) - # caches.append(flatpak_api_cache) - # - # if args.disk_cache: - # Path(FLATPAK_CACHE_PATH).mkdir(parents=True, exist_ok=True) - -# if args.snap: -# pass - # snap_api_cache = Cache(expiration_time=args.cache_exp) - # cache_map[SnapApplication] = snap_api_cache - # managers.append(SnapManager(app_args=args, disk_cache=args.disk_cache, api_cache=snap_api_cache, http_session=http_session, locale_keys=locale_keys)) - # caches.append(snap_api_cache) - # - # if args.disk_cache: - # Path(SNAP_CACHE_PATH).mkdir(parents=True, exist_ok=True) +caches, cache_map = [], {} +managers = None icon_cache = Cache(expiration_time=args.icon_exp) caches.append(icon_cache) disk_loader_factory = DiskCacheLoaderFactory(disk_cache=args.disk_cache, cache_map=cache_map) + +for m in pkgutil.iter_modules(): + if m.ispkg and m.name and m.name != 'fpakman_api' and m.name.startswith('fpakman_'): + module = pkgutil.find_loader(m.name).load_module() + + manager = _find_manager(module) + + if manager: + if not managers: + managers = [] + + app_cache = Cache(expiration_time=args.cache_exp) + man = manager(app_args=args, + fpakman_root_dir=ROOT_DIR, + http_session=http_session, + locale_keys=locale_keys, + app_cache=app_cache) + cache_map[man.get_app_type()] = app_cache + caches.append(app_cache) + managers.append(man) + + +# if args.snap: + # if args.disk_cache: + # Path(SNAP_CACHE_PATH).mkdir(parents=True, exist_ok=True) + + manager = GenericApplicationManager(managers, disk_loader_factory=disk_loader_factory, app_args=args) -managed_caches = manager.get_managed_caches() - -if managed_caches: - caches.extend(managed_caches) - app = QApplication(sys.argv) app.setApplicationName(__app_name__) app.setApplicationVersion(__version__) diff --git a/fpakman/core/controller.py b/fpakman/core/controller.py index ae33d869..62e5dbc0 100755 --- a/fpakman/core/controller.py +++ b/fpakman/core/controller.py @@ -14,7 +14,7 @@ from fpakman.util.cache import Cache class GenericApplicationManager(ApplicationManager): def __init__(self, managers: List[ApplicationManager], disk_loader_factory: DiskCacheLoaderFactory, app_args: Namespace): - super(GenericApplicationManager, self).__init__(app_args=app_args, cache_factory=None, locale_keys=None, fpakman_root_dir=ROOT_DIR, http_session=None) + super(GenericApplicationManager, self).__init__(app_args=app_args, app_cache=None, locale_keys=None, fpakman_root_dir=ROOT_DIR, http_session=None) self.managers = managers self.map = {m.get_app_type(): m for m in self.managers} self.disk_loader_factory = disk_loader_factory @@ -209,17 +209,3 @@ class GenericApplicationManager(ApplicationManager): warnings.extend(man_warnings) return warnings - - def get_managed_caches(self) -> List[Cache]: - caches = None - - if self.managers: - for man in self.managers: - if self._is_enabled(man): - man_caches = man.get_managed_caches() - if man_caches: - if caches is None: - caches = [] - - caches.extend(man_caches) - return caches