From 4a1f0d4809c4bf8bdfb822dd9716d6c7d04b8dd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Moreira?= Date: Fri, 10 Jan 2020 19:37:26 -0300 Subject: [PATCH] [feature][flatpak] installation level --- CHANGELOG.md | 5 +++++ bauh/gems/flatpak/controller.py | 26 ++++++++++++++++++++------ bauh/gems/flatpak/flatpak.py | 19 ++++++++++++++----- bauh/gems/flatpak/model.py | 2 +- bauh/gems/flatpak/resources/locale/ca | 4 ++++ bauh/gems/flatpak/resources/locale/de | 6 +++++- bauh/gems/flatpak/resources/locale/en | 6 +++++- bauh/gems/flatpak/resources/locale/es | 6 +++++- bauh/gems/flatpak/resources/locale/it | 5 +++++ bauh/gems/flatpak/resources/locale/pt | 6 +++++- bauh/view/qt/apps_table.py | 2 +- 11 files changed, 70 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a375d40..7cf35811 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [0.8.1] +### Features: +- Flatpak: + - allow the user to choose the installation level: user or system + - able to deal with user and system applications / runtimes + ### Improvements - All icons are now SVG files - HDPI support improvements ( by [octopusSD](https://github.com/octopusSD) ) diff --git a/bauh/gems/flatpak/controller.py b/bauh/gems/flatpak/controller.py index 4fe698ab..0232d98d 100644 --- a/bauh/gems/flatpak/controller.py +++ b/bauh/gems/flatpak/controller.py @@ -10,7 +10,7 @@ from bauh.api.abstract.model import PackageHistory, PackageUpdate, SoftwarePacka SuggestionPriority from bauh.api.abstract.view import MessageType from bauh.commons.html import strip_html, bold -from bauh.commons.system import SystemProcess, ProcessHandler +from bauh.commons.system import SystemProcess, ProcessHandler, SimpleProcess from bauh.gems.flatpak import flatpak, SUGGESTIONS_FILE from bauh.gems.flatpak.constants import FLATHUB_API_URL from bauh.gems.flatpak.model import FlatpakApplication @@ -158,10 +158,10 @@ class FlatpakManager(SoftwareManager): self.api_cache.delete(pkg.id) def update(self, pkg: FlatpakApplication, root_password: str, watcher: ProcessWatcher) -> bool: - return ProcessHandler(watcher).handle(SystemProcess(subproc=flatpak.update(pkg.ref))) + return ProcessHandler(watcher).handle(SystemProcess(subproc=flatpak.update(pkg.ref, pkg.installation))) def uninstall(self, pkg: FlatpakApplication, root_password: str, watcher: ProcessWatcher) -> bool: - uninstalled = ProcessHandler(watcher).handle(SystemProcess(subproc=flatpak.uninstall(pkg.ref))) + uninstalled = ProcessHandler(watcher).handle(SystemProcess(subproc=flatpak.uninstall(pkg.ref, pkg.installation))) if self.suggestions_cache: self.suggestions_cache.delete(pkg.id) @@ -219,11 +219,25 @@ class FlatpakManager(SoftwareManager): return PackageHistory(pkg=pkg, history=commits, pkg_status_idx=status_idx) def install(self, pkg: FlatpakApplication, root_password: str, watcher: ProcessWatcher) -> bool: - res = ProcessHandler(watcher).handle(SystemProcess(subproc=flatpak.install(pkg.id, pkg.origin, pkg.installation), wrong_error_phrase='Warning')) + + user_level = watcher.request_confirmation(title=self.i18n['flatpak.install.install_level.title'], + body=self.i18n['flatpak.install.install_level.body'].format(bold(pkg.name)), + confirmation_label=self.i18n['no'].capitalize(), + deny_label=self.i18n['yes'].capitalize()) + + pkg.installation = 'user' if user_level else 'system' + + handler = ProcessHandler(watcher) + + if user_level: + if not handler.handle_simple(flatpak.register_flathub('user')): + return False + + res = handler.handle(SystemProcess(subproc=flatpak.install(str(pkg.id), pkg.origin, pkg.installation), wrong_error_phrase='Warning')) if res: try: - fields = flatpak.get_fields(pkg.id, pkg.branch, ['Ref', 'Branch']) + fields = flatpak.get_fields(str(pkg.id), pkg.branch, ['Ref', 'Branch']) if fields: pkg.ref = fields[0] @@ -324,7 +338,7 @@ class FlatpakManager(SoftwareManager): def is_default_enabled(self) -> bool: return True - def launch(self, pkg: SoftwarePackage): + def launch(self, pkg: FlatpakApplication): flatpak.run(str(pkg.id)) def get_screenshots(self, pkg: SoftwarePackage) -> List[str]: diff --git a/bauh/gems/flatpak/flatpak.py b/bauh/gems/flatpak/flatpak.py index aeb54771..6097a266 100755 --- a/bauh/gems/flatpak/flatpak.py +++ b/bauh/gems/flatpak/flatpak.py @@ -6,7 +6,7 @@ from io import StringIO from typing import List, Dict from bauh.api.exception import NoInternetException -from bauh.commons.system import new_subprocess, run_cmd, new_root_subprocess +from bauh.commons.system import new_subprocess, run_cmd, new_root_subprocess, SimpleProcess BASE_CMD = 'flatpak' RE_SEVERAL_SPACES = re.compile(r'\s+') @@ -142,22 +142,31 @@ def list_installed(version: str) -> List[dict]: return apps -def update(app_ref: str): +def update(app_ref: str, installation: str): """ Updates the app reference :param app_ref: :return: """ - return new_subprocess([BASE_CMD, 'update', '--no-related', '-y', app_ref]) + return new_subprocess([BASE_CMD, 'update', '--no-related', '-y', app_ref, '--{}'.format(installation)]) -def uninstall(app_ref: str): +def register_flathub(installation: str) -> SimpleProcess: + return SimpleProcess([BASE_CMD, + 'remote-add', + '--if-not-exists', + 'flathub', + 'https://flathub.org/repo/flathub.flatpakrepo', + '--{}'.format(installation)]) + + +def uninstall(app_ref: str, installation: str): """ Removes the app by its reference :param app_ref: :return: """ - return new_subprocess([BASE_CMD, 'uninstall', app_ref, '-y']) + return new_subprocess([BASE_CMD, 'uninstall', app_ref, '-y', '--{}'.format(installation)]) def list_updates_as_str(version: str) -> Dict[str, set]: diff --git a/bauh/gems/flatpak/model.py b/bauh/gems/flatpak/model.py index 2106b92d..764b3e1d 100644 --- a/bauh/gems/flatpak/model.py +++ b/bauh/gems/flatpak/model.py @@ -19,7 +19,7 @@ class FlatpakApplication(SoftwarePackage): self.runtime = runtime self.commit = commit self.partial = False - self.installation = 'system' + self.installation = installation if installation else 'system' if runtime: self.categories = ['runtime'] diff --git a/bauh/gems/flatpak/resources/locale/ca b/bauh/gems/flatpak/resources/locale/ca index 93c461c9..d3880822 100644 --- a/bauh/gems/flatpak/resources/locale/ca +++ b/bauh/gems/flatpak/resources/locale/ca @@ -7,6 +7,8 @@ flatpak.info.date=data flatpak.info.description=descripció flatpak.info.id=id flatpak.info.installation=instal·lació +flatpak.info.installation.user=usuari +flatpak.info.installation.system=sistema flatpak.info.installed=instal·lat flatpak.info.license=llicència flatpak.info.name=nom @@ -40,3 +42,5 @@ flatpak.info.instoresincedate=afegit el flatpak.info.projectlicense=llicència flatpak.info.translateurl=Traducció flatpak.info.developername=desenvolupador +flatpak.install.install_level.title=Tipus d'instal·lació +flatpak.install.install_level.body=S'ha d'instal·lar {} per a tots els usuaris del sistema? \ No newline at end of file diff --git a/bauh/gems/flatpak/resources/locale/de b/bauh/gems/flatpak/resources/locale/de index f04d5bcb..8a545197 100644 --- a/bauh/gems/flatpak/resources/locale/de +++ b/bauh/gems/flatpak/resources/locale/de @@ -26,6 +26,8 @@ flatpak.info.date=Datum flatpak.info.description=Beschreibung flatpak.info.id=Id flatpak.info.installation=Installation +flatpak.info.installation.user=Benutzer +flatpak.info.installation.system=System flatpak.info.installed=installiert flatpak.info.license=Lizenz flatpak.info.name=Name @@ -38,4 +40,6 @@ flatpak.info.subject=Thema flatpak.info.type=Typ flatpak.info.version=Version flatpak.history.date=Datum -flatpak.history.commit=Commit \ No newline at end of file +flatpak.history.commit=Commit +flatpak.install.install_level.title=Installationstyp +flatpak.install.install_level.body=Soll {} für alle Systembenutzer installiert werden? \ No newline at end of file diff --git a/bauh/gems/flatpak/resources/locale/en b/bauh/gems/flatpak/resources/locale/en index e89558d8..8bbefadd 100644 --- a/bauh/gems/flatpak/resources/locale/en +++ b/bauh/gems/flatpak/resources/locale/en @@ -26,6 +26,8 @@ flatpak.info.date=date flatpak.info.description=description flatpak.info.id=id flatpak.info.installation=installation +flatpak.info.installation.user=user +flatpak.info.installation.system=system flatpak.info.installed=installed flatpak.info.license=license flatpak.info.name=name @@ -38,4 +40,6 @@ flatpak.info.subject=subject flatpak.info.type=type flatpak.info.version=version flatpak.history.date=date -flatpak.history.commit=commit \ No newline at end of file +flatpak.history.commit=commit +flatpak.install.install_level.title=Installation type +flatpak.install.install_level.body=Should {} be installed for all the system users ? \ No newline at end of file diff --git a/bauh/gems/flatpak/resources/locale/es b/bauh/gems/flatpak/resources/locale/es index 9a276d5a..8c47440e 100644 --- a/bauh/gems/flatpak/resources/locale/es +++ b/bauh/gems/flatpak/resources/locale/es @@ -7,6 +7,8 @@ flatpak.info.date=fecha flatpak.info.description=descripción flatpak.info.id=id flatpak.info.installation=instalación +flatpak.info.installation.user=usuario +flatpak.info.installation.system=sistema flatpak.info.installed=instalado flatpak.info.license=licencia flatpak.info.name=nombre @@ -39,4 +41,6 @@ flatpak.info.homepageurl=página flatpak.info.instoresincedate=agregado en flatpak.info.projectlicense=licencia flatpak.info.translateurl=Traducción -flatpak.info.developername=desarrollador \ No newline at end of file +flatpak.info.developername=desarrollador +flatpak.install.install_level.title=Tipo de instalación +flatpak.install.install_level.body=¿Debería {} estar instalado para todos los usuarios del sistema? \ No newline at end of file diff --git a/bauh/gems/flatpak/resources/locale/it b/bauh/gems/flatpak/resources/locale/it index f8c9b630..8709048d 100644 --- a/bauh/gems/flatpak/resources/locale/it +++ b/bauh/gems/flatpak/resources/locale/it @@ -18,3 +18,8 @@ flatpak.info.instoresincedate=aggiunto in flatpak.info.projectlicense=licenza flatpak.info.translateurl=traduci url flatpak.info.developername=sviluppatore +flatpak.info.installation=installazione +flatpak.info.installation.user=utente +flatpak.info.installation.system=sistema +flatpak.install.install_level.title=Tipo di installazione +flatpak.install.install_level.body={} deve essere installato per tutti gli utenti del sistema? \ No newline at end of file diff --git a/bauh/gems/flatpak/resources/locale/pt b/bauh/gems/flatpak/resources/locale/pt index 986bfdd3..b481ac2b 100644 --- a/bauh/gems/flatpak/resources/locale/pt +++ b/bauh/gems/flatpak/resources/locale/pt @@ -7,6 +7,8 @@ flatpak.info.date=data flatpak.info.description=descrição flatpak.info.id=id flatpak.info.installation=instalação +flatpak.info.installation.user=usuário +flatpak.info.installation.system=sistema flatpak.info.installed=instalado flatpak.info.license=licença flatpak.info.name=nome @@ -39,4 +41,6 @@ flatpak.info.homepageurl=página flatpak.info.instoresincedate=adicionado em flatpak.info.projectlicense=licença flatpak.info.translateurl=tradução -flatpak.info.developername=desenvolvedor \ No newline at end of file +flatpak.info.developername=desenvolvedor +flatpak.install.install_level.title=Tipo de instalação +flatpak.install.install_level.body={} deve ser instalado para todos os usuários do sistema ? \ No newline at end of file diff --git a/bauh/view/qt/apps_table.py b/bauh/view/qt/apps_table.py index c3e90949..f55056ea 100644 --- a/bauh/view/qt/apps_table.py +++ b/bauh/view/qt/apps_table.py @@ -421,6 +421,7 @@ class AppsTable(QTableWidget): def _set_col_settings(self, col: int, pkg: PackageView): item = QToolBar() + item.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) if pkg.model.installed: def run(): @@ -454,7 +455,6 @@ class AppsTable(QTableWidget): bt.setEnabled(bool(settings)) item.addWidget(bt) - item.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) self.setCellWidget(pkg.table_index, col, item) def change_headers_policy(self, policy: QHeaderView = QHeaderView.ResizeToContents):