diff --git a/fpakman/app.py b/fpakman/app.py index 3ea20fe1..6375c6be 100755 --- a/fpakman/app.py +++ b/fpakman/app.py @@ -12,7 +12,6 @@ from fpakman.util import util from fpakman.core.controller import FlatpakManager, GenericApplicationManager from fpakman.util.cache import Cache from fpakman.util.memory import CacheCleaner -from fpakman.view.qt import common from fpakman.view.qt.systray import TrayIcon app_name = 'fpakman' @@ -54,8 +53,6 @@ if args.update_notification == 0: locale_keys = util.get_locale_keys(args.locale) -common.check_flatpak_installed(locale_keys) - caches = [] flatpak_api_cache = Cache(expiration_time=args.cache_exp) caches.append(flatpak_api_cache) diff --git a/fpakman/core/controller.py b/fpakman/core/controller.py index dc9a366b..d372a911 100755 --- a/fpakman/core/controller.py +++ b/fpakman/core/controller.py @@ -57,6 +57,10 @@ class ApplicationManager(ABC): def install_and_stream(self, app: Application): pass + @abstractmethod + def is_enabled(self) -> bool: + pass + class FlatpakManager(ApplicationManager): @@ -190,6 +194,9 @@ class FlatpakManager(ApplicationManager): def install_and_stream(self, app: FlatpakApplication): return flatpak.install_and_stream(app.base_data.id, app.origin) + def is_enabled(self): + return flatpak.is_installed() + class GenericApplicationManager(ApplicationManager): @@ -200,14 +207,16 @@ class GenericApplicationManager(ApplicationManager): def search(self, word: str) -> List[Application]: apps = [] for man in self.managers: - apps.extend(man.search(word)) + if man.is_enabled(): + apps.extend(man.search(word)) return apps def read_installed(self) -> List[Application]: installed = [] for man in self.managers: - installed.extend(man.read_installed()) + if man.is_enabled(): + installed.extend(man.read_installed()) return installed @@ -215,30 +224,55 @@ class GenericApplicationManager(ApplicationManager): return True def downgrade_app(self, app: Application, root_password: str): - manager = self.map.get(app.__class__) + man = self._get_manager_for(app) - if manager.can_downgrade(): - return manager.downgrade_app(app, root_password) + if man and man.can_downgrade(): + return man.downgrade_app(app, root_password) else: raise Exception("downgrade is not possible for {}".format(app.__class__.__name__)) def clean_cache_for(self, app: Application): - self.map[app.__class__].clean_cache_for(app) + man = self._get_manager_for(app) + + if man: + return man.clean_cache_for(app) def update_and_stream(self, app: Application): - return self.map[app.__class__].update_and_stream(app) + man = self._get_manager_for(app) + + if man: + return man.update_and_stream(app) def uninstall_and_stream(self, app: Application): - return self.map[app.__class__].uninstall_and_stream(app) + man = self._get_manager_for(app) + + if man: + return man.uninstall_and_stream(app) def install_and_stream(self, app: Application): - return self.map[app.__class__].install_and_stream(app) + man = self._get_manager_for(app) + + if man: + return man.install_and_stream(app) def get_info(self, app: Application): - return self.map[app.__class__].get_info(app) + man = self._get_manager_for(app) + + if man: + return man.get_info(app) def get_history(self, app: Application): - return self.map[app.__class__].get_history(app) + man = self._get_manager_for(app) + + if man: + return man.get_history(app) def get_app_type(self): return None + + def is_enabled(self): + return True + + def _get_manager_for(self, app: Application): + man = self.map[app.__class__] + return man if man and man.is_enabled() else None diff --git a/fpakman/core/flatpak.py b/fpakman/core/flatpak.py index 17fbe179..156b50f8 100755 --- a/fpakman/core/flatpak.py +++ b/fpakman/core/flatpak.py @@ -73,7 +73,7 @@ def is_installed(): def get_version(): - res = system.run_cmd('{} --version'.format(BASE_CMD)) + res = system.run_cmd('{} --version'.format(BASE_CMD), print_error=False) return res.split(' ')[1].strip() if res else None diff --git a/fpakman/core/system.py b/fpakman/core/system.py index 462f9a66..96ad7fc3 100644 --- a/fpakman/core/system.py +++ b/fpakman/core/system.py @@ -5,8 +5,17 @@ from typing import List from fpakman.core import resource -def run_cmd(cmd: str, expected_code: int = 0, ignore_return_code: bool = False) -> str: - res = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, env={'LANG': 'en'}) +def run_cmd(cmd: str, expected_code: int = 0, ignore_return_code: bool = False, print_error: bool = True) -> str: + args = { + "shell": True, + "stdout": subprocess.PIPE, + "env": {'LANG': 'en'} + } + + if not print_error: + args["stderr"] = subprocess.DEVNULL + + res = subprocess.run(cmd, **args) return res.stdout.decode() if ignore_return_code or res.returncode == expected_code else None diff --git a/fpakman/resources/locale/en b/fpakman/resources/locale/en index ddc8e8b4..702fa03d 100644 --- a/fpakman/resources/locale/en +++ b/fpakman/resources/locale/en @@ -25,8 +25,6 @@ manage_window.status.installing=Installing manage_window.bt.refresh.tooltip=Reload the data about installed applications manage_window.bt.upgrade.tooltip=Upgrade all selected applications manage_window.checkbox.show_details=Show details -popup.flatpak_not_installed.title=Error -popup.flatpak_not_installed.msg=flatpak seems not to be installed. Exiting popup.root.title=Requires root privileges popup.root.password=Password popup.root.bad_password.title=Error diff --git a/fpakman/resources/locale/es b/fpakman/resources/locale/es index 08040de1..e022cc90 100644 --- a/fpakman/resources/locale/es +++ b/fpakman/resources/locale/es @@ -26,8 +26,6 @@ manage_window.status.installing=Instalando manage_window.bt.refresh.tooltip=Recarga los datos sobre los aplicativos instalados manage_window.bt.upgrade.tooltip=Actualiza todos los aplicativos seleccionados manage_window.checkbox.show_details=Mostrar detalles -popup.flatpak_not_installed.title=Error -popup.flatpak_not_installed.msg=flatpak no parece estar instalado. Saliendo popup.root.title=Requiere privilegios de root popup.root.password=Contraseña popup.root.bad_password.title=Error diff --git a/fpakman/resources/locale/pt b/fpakman/resources/locale/pt index fe8f0ab7..a0e68b75 100644 --- a/fpakman/resources/locale/pt +++ b/fpakman/resources/locale/pt @@ -26,8 +26,6 @@ manage_window.status.installing=Instalando manage_window.bt.refresh.tooltip=Recarrega os dados sobre os aplicativos instalados manage_window.bt.upgrade.tooltip=Atualiza todos os aplicativos selecionados manage_window.checkbox.show_details=Mostrar detalhes -popup.flatpak_not_installed.title=Erro -popup.flatpak_not_installed.msg=flatpak não parece estar instalado. Saindo popup.root.title=Requer privilégios de root popup.root.password=Senha popup.root.bad_password.title=Erro diff --git a/fpakman/view/qt/common.py b/fpakman/view/qt/common.py deleted file mode 100644 index 50240cde..00000000 --- a/fpakman/view/qt/common.py +++ /dev/null @@ -1,10 +0,0 @@ -from fpakman.core import flatpak -from fpakman.view.qt import dialog - - -def check_flatpak_installed(locale_keys: dict): - - if not flatpak.is_installed(): - dialog.show_error(title=locale_keys['popup.flatpak_not_installed.title'], - body=locale_keys['popup.flatpak_not_installed.msg'] + '...') - exit(1) diff --git a/fpakman/view/qt/window.py b/fpakman/view/qt/window.py index c84b673b..f0f10c66 100755 --- a/fpakman/view/qt/window.py +++ b/fpakman/view/qt/window.py @@ -12,7 +12,6 @@ from fpakman.core import resource from fpakman.core.controller import ApplicationManager from fpakman.core.model import Application from fpakman.util.cache import Cache -from fpakman.view.qt import common from fpakman.view.qt.apps_table import AppsTable from fpakman.view.qt.history import HistoryDialog from fpakman.view.qt.info import InfoDialog @@ -39,7 +38,6 @@ class ManageWindow(QWidget): self.icon_cache = icon_cache self.icon_flathub = QIcon(resource.get_path('img/logo.svg')) - self._check_flatpak_installed() self.resize(ManageWindow.__BASE_HEIGHT__, ManageWindow.__BASE_HEIGHT__) self.setWindowTitle(locale_keys['manage_window.title']) self.setWindowIcon(self.icon_flathub) @@ -200,9 +198,6 @@ class ManageWindow(QWidget): self.hide() self._handle_console_option(False) - def _check_flatpak_installed(self): - common.check_flatpak_installed(self.locale_keys) - def _acquire_lock(self): self.thread_lock.acquire() @@ -241,20 +236,16 @@ class ManageWindow(QWidget): def refresh(self): if self._acquire_lock(): - self._check_flatpak_installed() self._begin_action(self.locale_keys['manage_window.status.refreshing']) self.thread_refresh.start() def _finish_refresh(self, apps: List[Application]): - self.update_apps(apps) self.finish_action() self._release_lock() def uninstall_app(self, app: ApplicationView): - self._check_flatpak_installed() - if self._acquire_lock(): self._handle_console_option(True) self._begin_action(self.locale_keys['manage_window.status.uninstalling']) @@ -326,8 +317,6 @@ class ManageWindow(QWidget): self.move(geo.topLeft()) def update_apps(self, apps: List[Application]): - self._check_flatpak_installed() - self.apps = [] napps = 0 # number of apps (not libraries) @@ -408,9 +397,6 @@ class ManageWindow(QWidget): self.label_status.setText('') def downgrade_app(self, app: dict): - - self._check_flatpak_installed() - if self._acquire_lock(): pwd = None @@ -471,15 +457,11 @@ class ManageWindow(QWidget): self.thread_search.start() def _finish_search(self, apps_found: List[Application]): - self._release_lock() self.finish_action() self.update_apps(apps_found) def install_app(self, app: dict): - - self._check_flatpak_installed() - if self._acquire_lock(): self._handle_console_option(True) self._begin_action(self.locale_keys['manage_window.status.installing'])