Migrate app/manage/tray modules to bearhub namespace with bauh wrappers

This commit is contained in:
Sebastian Palencsar
2026-05-31 15:59:32 +02:00
parent aa943e9cae
commit 15a3cd485a
7 changed files with 185 additions and 181 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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"]

76
bearhub/app_main.py Normal file
View File

@@ -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()

89
bearhub/manage.py Normal file
View File

@@ -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)

16
bearhub/tray.py Normal file
View File

@@ -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