diff --git a/bauh/app.py b/bauh/app.py index 8dcb57b2..c1e0190a 100755 --- a/bauh/app.py +++ b/bauh/app.py @@ -1,75 +1 @@ -import faulthandler -import locale -import os -import sys -import traceback - -import urllib3 -from PyQt5.QtCore import QCoreApplication, Qt - -from bauh import __app_name__, app_args -from bauh.view.core.config import CoreConfigManager -from bauh.view.util import logs - - -def main(tray: bool = False): - if not os.getenv('PYTHONUNBUFFERED'): - os.environ['PYTHONUNBUFFERED'] = '1' - - if not os.getenv('XDG_RUNTIME_DIR'): - os.environ['XDG_RUNTIME_DIR'] = f'/run/user/{os.getuid()}' - - faulthandler.enable() - urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) - - args = app_args.read() - - logger = logs.new_logger(__app_name__, bool(args.logs)) - - try: - locale.setlocale(locale.LC_NUMERIC, '') - except Exception: - logger.error("Could not set locale 'LC_NUMBERIC' to '' to display localized numbers") - traceback.print_exc() - - if args.offline: - logger.warning("offline mode activated") - - app_config = CoreConfigManager().get_config() - - if bool(app_config['ui']['auto_scale']): - os.environ['QT_AUTO_SCREEN_SCALE_FACTOR'] = '1' - logger.info("Auto screen scale factor activated") - - try: - scale_factor = float(app_config['ui']['scale_factor']) - os.environ['QT_SCALE_FACTOR'] = str(scale_factor) - logger.info("Scale factor set to {}".format(scale_factor)) - except Exception: - traceback.print_exc() - - if bool(app_config['ui']['hdpi']): - logger.info("HDPI settings activated") - QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps) - QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling) - - if bool(args.suggestions): - logger.info("Forcing loading software suggestions after the initialization process") - - if tray or bool(args.tray): - from bauh.tray import new_tray_icon - app, widget = new_tray_icon(app_config, logger) - else: - from bauh.manage import new_manage_panel - app, widget = new_manage_panel(args, app_config, logger) - - widget.show() - sys.exit(app.exec_()) - - -def tray(): - main(tray=True) - - -if __name__ == '__main__': - main() +from bearhub.app_main import * # noqa: F401,F403 diff --git a/bauh/manage.py b/bauh/manage.py index 469aefb5..30a73ceb 100644 --- a/bauh/manage.py +++ b/bauh/manage.py @@ -1,89 +1 @@ -import logging -from argparse import Namespace -from typing import Tuple - -from PyQt5.QtWidgets import QApplication, QWidget - -from bauh import ROOT_DIR, __app_name__, __version__ -from bauh.api import user -from bauh.api.abstract.context import ApplicationContext -from bauh.api.http import HttpClient -from bauh.commons.internet import InternetChecker -from bauh.context import generate_i18n, DEFAULT_I18N_KEY, new_qt_application -from bauh.view.core import gems -from bauh.view.core.controller import GenericSoftwareManager -from bauh.view.core.downloader import AdaptableFileDownloader -from bauh.view.core.suggestions import read_suggestions_mapping -from bauh.view.qt.prepare import PreparePanel -from bauh.view.qt.settings import SettingsWindow -from bauh.view.qt.window import ManageWindow -from bauh.view.util import resource, util -from bauh.view.util.cache import DefaultMemoryCacheFactory -from bauh.view.util.disk import DefaultDiskCacheLoaderFactory - - -def new_manage_panel(app_args: Namespace, app_config: dict, logger: logging.Logger) -> Tuple[QApplication, QWidget]: - i18n = generate_i18n(app_config, resource.get_path('locale')) - - cache_factory = DefaultMemoryCacheFactory(expiration_time=int(app_config['memory_cache']['data_expiration'])) - icon_cache = cache_factory.new(int(app_config['memory_cache']['icon_expiration'])) - - http_client = HttpClient(logger) - - downloader = AdaptableFileDownloader(logger=logger, multithread_enabled=app_config['download']['multithreaded'], - multithread_client=app_config['download']['multithreaded_client'], - i18n=i18n, http_client=http_client, - check_ssl=app_config['download']['check_ssl']) - - context = ApplicationContext(i18n=i18n, - http_client=http_client, - download_icons=bool(app_config['download']['icons']), - app_root_dir=ROOT_DIR, - cache_factory=cache_factory, - disk_loader_factory=DefaultDiskCacheLoaderFactory(logger), - logger=logger, - distro=util.get_distro(), - file_downloader=downloader, - app_name=__app_name__, - app_version=__version__, - internet_checker=InternetChecker(offline=app_args.offline), - suggestions_mapping=read_suggestions_mapping(), - root_user=user.is_root()) - - managers = gems.load_managers(context=context, locale=i18n.current_key, config=app_config, - default_locale=DEFAULT_I18N_KEY, logger=logger) - - if app_args.reset: - util.clean_app_files(managers) - exit(0) - - force_suggestions = bool(app_args.suggestions) - manager = GenericSoftwareManager(managers, context=context, config=app_config, force_suggestions=force_suggestions) - - app = new_qt_application(app_config=app_config, logger=logger, quit_on_last_closed=True) - - screen_size = app.primaryScreen().size() - context.screen_width, context.screen_height = screen_size.width(), screen_size.height() - logger.info(f"Screen: {screen_size.width()} x {screen_size.height()} " - f"(DPI: {int(app.primaryScreen().logicalDotsPerInch())})") - - if app_args.settings: # only settings window - manager.cache_available_managers() - return app, SettingsWindow(manager=manager, i18n=i18n, window=None) - else: - manage_window = ManageWindow(i18n=i18n, - manager=manager, - icon_cache=icon_cache, - config=app_config, - context=context, - http_client=http_client, - icon=util.get_default_icon()[1], - force_suggestions=force_suggestions, - logger=logger) - - return app, PreparePanel(context=context, - manager=manager, - i18n=i18n, - manage_window=manage_window, - app_config=app_config, - force_suggestions=force_suggestions) +from bearhub.manage import * # noqa: F401,F403 diff --git a/bauh/tray.py b/bauh/tray.py index dc579652..194e14df 100644 --- a/bauh/tray.py +++ b/bauh/tray.py @@ -1,16 +1 @@ -from logging import Logger -from typing import Tuple - -from PyQt5.QtCore import QObject -from PyQt5.QtWidgets import QApplication - -from bauh.context import new_qt_application -from bauh.view.qt.systray import TrayIcon - - -def new_tray_icon(app_config: dict, logger: Logger) -> Tuple[QApplication, QObject]: - app = new_qt_application(app_config=app_config, logger=logger, quit_on_last_closed=True) - tray_icon = TrayIcon(screen_size=app.primaryScreen().size(), config=app_config, logger=logger) - tray_icon.show() - - return app, tray_icon +from bearhub.tray import * # noqa: F401,F403 diff --git a/bearhub/app.py b/bearhub/app.py index 693f86dd..021d205a 100644 --- a/bearhub/app.py +++ b/bearhub/app.py @@ -2,6 +2,6 @@ Temporary namespace migration shim for application entry points. """ -from bauh.app import main, tray +from bearhub.app_main import main, tray __all__ = ["main", "tray"] diff --git a/bearhub/app_main.py b/bearhub/app_main.py new file mode 100644 index 00000000..e5e08267 --- /dev/null +++ b/bearhub/app_main.py @@ -0,0 +1,76 @@ +import faulthandler +import locale +import os +import sys +import traceback + +import urllib3 +from PyQt5.QtCore import QCoreApplication, Qt + +from bauh import __app_name__ +from bearhub import app_args +from bauh.view.core.config import CoreConfigManager +from bauh.view.util import logs + + +def main(tray: bool = False): + if not os.getenv('PYTHONUNBUFFERED'): + os.environ['PYTHONUNBUFFERED'] = '1' + + if not os.getenv('XDG_RUNTIME_DIR'): + os.environ['XDG_RUNTIME_DIR'] = f'/run/user/{os.getuid()}' + + faulthandler.enable() + urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) + + args = app_args.read() + + logger = logs.new_logger(__app_name__, bool(args.logs)) + + try: + locale.setlocale(locale.LC_NUMERIC, '') + except Exception: + logger.error("Could not set locale 'LC_NUMBERIC' to '' to display localized numbers") + traceback.print_exc() + + if args.offline: + logger.warning("offline mode activated") + + app_config = CoreConfigManager().get_config() + + if bool(app_config['ui']['auto_scale']): + os.environ['QT_AUTO_SCREEN_SCALE_FACTOR'] = '1' + logger.info("Auto screen scale factor activated") + + try: + scale_factor = float(app_config['ui']['scale_factor']) + os.environ['QT_SCALE_FACTOR'] = str(scale_factor) + logger.info("Scale factor set to {}".format(scale_factor)) + except Exception: + traceback.print_exc() + + if bool(app_config['ui']['hdpi']): + logger.info("HDPI settings activated") + QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps) + QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling) + + if bool(args.suggestions): + logger.info("Forcing loading software suggestions after the initialization process") + + if tray or bool(args.tray): + from bearhub.tray import new_tray_icon + app, widget = new_tray_icon(app_config, logger) + else: + from bearhub.manage import new_manage_panel + app, widget = new_manage_panel(args, app_config, logger) + + widget.show() + sys.exit(app.exec_()) + + +def tray(): + main(tray=True) + + +if __name__ == '__main__': + main() diff --git a/bearhub/manage.py b/bearhub/manage.py new file mode 100644 index 00000000..e1df40a0 --- /dev/null +++ b/bearhub/manage.py @@ -0,0 +1,89 @@ +import logging +from argparse import Namespace +from typing import Tuple + +from PyQt5.QtWidgets import QApplication, QWidget + +from bauh import ROOT_DIR, __app_name__, __version__ +from bauh.api import user +from bauh.api.abstract.context import ApplicationContext +from bauh.api.http import HttpClient +from bauh.commons.internet import InternetChecker +from bearhub.context import generate_i18n, DEFAULT_I18N_KEY, new_qt_application +from bauh.view.core import gems +from bauh.view.core.controller import GenericSoftwareManager +from bauh.view.core.downloader import AdaptableFileDownloader +from bauh.view.core.suggestions import read_suggestions_mapping +from bauh.view.qt.prepare import PreparePanel +from bauh.view.qt.settings import SettingsWindow +from bauh.view.qt.window import ManageWindow +from bauh.view.util import resource, util +from bauh.view.util.cache import DefaultMemoryCacheFactory +from bauh.view.util.disk import DefaultDiskCacheLoaderFactory + + +def new_manage_panel(app_args: Namespace, app_config: dict, logger: logging.Logger) -> Tuple[QApplication, QWidget]: + i18n = generate_i18n(app_config, resource.get_path('locale')) + + cache_factory = DefaultMemoryCacheFactory(expiration_time=int(app_config['memory_cache']['data_expiration'])) + icon_cache = cache_factory.new(int(app_config['memory_cache']['icon_expiration'])) + + http_client = HttpClient(logger) + + downloader = AdaptableFileDownloader(logger=logger, multithread_enabled=app_config['download']['multithreaded'], + multithread_client=app_config['download']['multithreaded_client'], + i18n=i18n, http_client=http_client, + check_ssl=app_config['download']['check_ssl']) + + context = ApplicationContext(i18n=i18n, + http_client=http_client, + download_icons=bool(app_config['download']['icons']), + app_root_dir=ROOT_DIR, + cache_factory=cache_factory, + disk_loader_factory=DefaultDiskCacheLoaderFactory(logger), + logger=logger, + distro=util.get_distro(), + file_downloader=downloader, + app_name=__app_name__, + app_version=__version__, + internet_checker=InternetChecker(offline=app_args.offline), + suggestions_mapping=read_suggestions_mapping(), + root_user=user.is_root()) + + managers = gems.load_managers(context=context, locale=i18n.current_key, config=app_config, + default_locale=DEFAULT_I18N_KEY, logger=logger) + + if app_args.reset: + util.clean_app_files(managers) + exit(0) + + force_suggestions = bool(app_args.suggestions) + manager = GenericSoftwareManager(managers, context=context, config=app_config, force_suggestions=force_suggestions) + + app = new_qt_application(app_config=app_config, logger=logger, quit_on_last_closed=True) + + screen_size = app.primaryScreen().size() + context.screen_width, context.screen_height = screen_size.width(), screen_size.height() + logger.info(f"Screen: {screen_size.width()} x {screen_size.height()} " + f"(DPI: {int(app.primaryScreen().logicalDotsPerInch())})") + + if app_args.settings: # only settings window + manager.cache_available_managers() + return app, SettingsWindow(manager=manager, i18n=i18n, window=None) + else: + manage_window = ManageWindow(i18n=i18n, + manager=manager, + icon_cache=icon_cache, + config=app_config, + context=context, + http_client=http_client, + icon=util.get_default_icon()[1], + force_suggestions=force_suggestions, + logger=logger) + + return app, PreparePanel(context=context, + manager=manager, + i18n=i18n, + manage_window=manage_window, + app_config=app_config, + force_suggestions=force_suggestions) diff --git a/bearhub/tray.py b/bearhub/tray.py new file mode 100644 index 00000000..90a3544d --- /dev/null +++ b/bearhub/tray.py @@ -0,0 +1,16 @@ +from logging import Logger +from typing import Tuple + +from PyQt5.QtCore import QObject +from PyQt5.QtWidgets import QApplication + +from bearhub.context import new_qt_application +from bauh.view.qt.systray import TrayIcon + + +def new_tray_icon(app_config: dict, logger: Logger) -> Tuple[QApplication, QObject]: + app = new_qt_application(app_config=app_config, logger=logger, quit_on_last_closed=True) + tray_icon = TrayIcon(screen_size=app.primaryScreen().size(), config=app_config, logger=logger) + tray_icon.show() + + return app, tray_icon