mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-08 23:24:15 +02:00
[feature][flatpak] installation level
This commit is contained in:
@@ -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/).
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
|
|
||||||
## [0.8.1]
|
## [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
|
### Improvements
|
||||||
- All icons are now SVG files
|
- All icons are now SVG files
|
||||||
- HDPI support improvements ( by [octopusSD](https://github.com/octopusSD) )
|
- HDPI support improvements ( by [octopusSD](https://github.com/octopusSD) )
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from bauh.api.abstract.model import PackageHistory, PackageUpdate, SoftwarePacka
|
|||||||
SuggestionPriority
|
SuggestionPriority
|
||||||
from bauh.api.abstract.view import MessageType
|
from bauh.api.abstract.view import MessageType
|
||||||
from bauh.commons.html import strip_html, bold
|
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 import flatpak, SUGGESTIONS_FILE
|
||||||
from bauh.gems.flatpak.constants import FLATHUB_API_URL
|
from bauh.gems.flatpak.constants import FLATHUB_API_URL
|
||||||
from bauh.gems.flatpak.model import FlatpakApplication
|
from bauh.gems.flatpak.model import FlatpakApplication
|
||||||
@@ -158,10 +158,10 @@ class FlatpakManager(SoftwareManager):
|
|||||||
self.api_cache.delete(pkg.id)
|
self.api_cache.delete(pkg.id)
|
||||||
|
|
||||||
def update(self, pkg: FlatpakApplication, root_password: str, watcher: ProcessWatcher) -> bool:
|
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:
|
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:
|
if self.suggestions_cache:
|
||||||
self.suggestions_cache.delete(pkg.id)
|
self.suggestions_cache.delete(pkg.id)
|
||||||
@@ -219,11 +219,25 @@ class FlatpakManager(SoftwareManager):
|
|||||||
return PackageHistory(pkg=pkg, history=commits, pkg_status_idx=status_idx)
|
return PackageHistory(pkg=pkg, history=commits, pkg_status_idx=status_idx)
|
||||||
|
|
||||||
def install(self, pkg: FlatpakApplication, root_password: str, watcher: ProcessWatcher) -> bool:
|
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:
|
if res:
|
||||||
try:
|
try:
|
||||||
fields = flatpak.get_fields(pkg.id, pkg.branch, ['Ref', 'Branch'])
|
fields = flatpak.get_fields(str(pkg.id), pkg.branch, ['Ref', 'Branch'])
|
||||||
|
|
||||||
if fields:
|
if fields:
|
||||||
pkg.ref = fields[0]
|
pkg.ref = fields[0]
|
||||||
@@ -324,7 +338,7 @@ class FlatpakManager(SoftwareManager):
|
|||||||
def is_default_enabled(self) -> bool:
|
def is_default_enabled(self) -> bool:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def launch(self, pkg: SoftwarePackage):
|
def launch(self, pkg: FlatpakApplication):
|
||||||
flatpak.run(str(pkg.id))
|
flatpak.run(str(pkg.id))
|
||||||
|
|
||||||
def get_screenshots(self, pkg: SoftwarePackage) -> List[str]:
|
def get_screenshots(self, pkg: SoftwarePackage) -> List[str]:
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from io import StringIO
|
|||||||
from typing import List, Dict
|
from typing import List, Dict
|
||||||
|
|
||||||
from bauh.api.exception import NoInternetException
|
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'
|
BASE_CMD = 'flatpak'
|
||||||
RE_SEVERAL_SPACES = re.compile(r'\s+')
|
RE_SEVERAL_SPACES = re.compile(r'\s+')
|
||||||
@@ -142,22 +142,31 @@ def list_installed(version: str) -> List[dict]:
|
|||||||
return apps
|
return apps
|
||||||
|
|
||||||
|
|
||||||
def update(app_ref: str):
|
def update(app_ref: str, installation: str):
|
||||||
"""
|
"""
|
||||||
Updates the app reference
|
Updates the app reference
|
||||||
:param app_ref:
|
:param app_ref:
|
||||||
:return:
|
: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
|
Removes the app by its reference
|
||||||
:param app_ref:
|
:param app_ref:
|
||||||
:return:
|
: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]:
|
def list_updates_as_str(version: str) -> Dict[str, set]:
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class FlatpakApplication(SoftwarePackage):
|
|||||||
self.runtime = runtime
|
self.runtime = runtime
|
||||||
self.commit = commit
|
self.commit = commit
|
||||||
self.partial = False
|
self.partial = False
|
||||||
self.installation = 'system'
|
self.installation = installation if installation else 'system'
|
||||||
|
|
||||||
if runtime:
|
if runtime:
|
||||||
self.categories = ['runtime']
|
self.categories = ['runtime']
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ flatpak.info.date=data
|
|||||||
flatpak.info.description=descripció
|
flatpak.info.description=descripció
|
||||||
flatpak.info.id=id
|
flatpak.info.id=id
|
||||||
flatpak.info.installation=instal·lació
|
flatpak.info.installation=instal·lació
|
||||||
|
flatpak.info.installation.user=usuari
|
||||||
|
flatpak.info.installation.system=sistema
|
||||||
flatpak.info.installed=instal·lat
|
flatpak.info.installed=instal·lat
|
||||||
flatpak.info.license=llicència
|
flatpak.info.license=llicència
|
||||||
flatpak.info.name=nom
|
flatpak.info.name=nom
|
||||||
@@ -40,3 +42,5 @@ flatpak.info.instoresincedate=afegit el
|
|||||||
flatpak.info.projectlicense=llicència
|
flatpak.info.projectlicense=llicència
|
||||||
flatpak.info.translateurl=Traducció
|
flatpak.info.translateurl=Traducció
|
||||||
flatpak.info.developername=desenvolupador
|
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?
|
||||||
@@ -26,6 +26,8 @@ flatpak.info.date=Datum
|
|||||||
flatpak.info.description=Beschreibung
|
flatpak.info.description=Beschreibung
|
||||||
flatpak.info.id=Id
|
flatpak.info.id=Id
|
||||||
flatpak.info.installation=Installation
|
flatpak.info.installation=Installation
|
||||||
|
flatpak.info.installation.user=Benutzer
|
||||||
|
flatpak.info.installation.system=System
|
||||||
flatpak.info.installed=installiert
|
flatpak.info.installed=installiert
|
||||||
flatpak.info.license=Lizenz
|
flatpak.info.license=Lizenz
|
||||||
flatpak.info.name=Name
|
flatpak.info.name=Name
|
||||||
@@ -38,4 +40,6 @@ flatpak.info.subject=Thema
|
|||||||
flatpak.info.type=Typ
|
flatpak.info.type=Typ
|
||||||
flatpak.info.version=Version
|
flatpak.info.version=Version
|
||||||
flatpak.history.date=Datum
|
flatpak.history.date=Datum
|
||||||
flatpak.history.commit=Commit
|
flatpak.history.commit=Commit
|
||||||
|
flatpak.install.install_level.title=Installationstyp
|
||||||
|
flatpak.install.install_level.body=Soll {} für alle Systembenutzer installiert werden?
|
||||||
@@ -26,6 +26,8 @@ flatpak.info.date=date
|
|||||||
flatpak.info.description=description
|
flatpak.info.description=description
|
||||||
flatpak.info.id=id
|
flatpak.info.id=id
|
||||||
flatpak.info.installation=installation
|
flatpak.info.installation=installation
|
||||||
|
flatpak.info.installation.user=user
|
||||||
|
flatpak.info.installation.system=system
|
||||||
flatpak.info.installed=installed
|
flatpak.info.installed=installed
|
||||||
flatpak.info.license=license
|
flatpak.info.license=license
|
||||||
flatpak.info.name=name
|
flatpak.info.name=name
|
||||||
@@ -38,4 +40,6 @@ flatpak.info.subject=subject
|
|||||||
flatpak.info.type=type
|
flatpak.info.type=type
|
||||||
flatpak.info.version=version
|
flatpak.info.version=version
|
||||||
flatpak.history.date=date
|
flatpak.history.date=date
|
||||||
flatpak.history.commit=commit
|
flatpak.history.commit=commit
|
||||||
|
flatpak.install.install_level.title=Installation type
|
||||||
|
flatpak.install.install_level.body=Should {} be installed for all the system users ?
|
||||||
@@ -7,6 +7,8 @@ flatpak.info.date=fecha
|
|||||||
flatpak.info.description=descripción
|
flatpak.info.description=descripción
|
||||||
flatpak.info.id=id
|
flatpak.info.id=id
|
||||||
flatpak.info.installation=instalación
|
flatpak.info.installation=instalación
|
||||||
|
flatpak.info.installation.user=usuario
|
||||||
|
flatpak.info.installation.system=sistema
|
||||||
flatpak.info.installed=instalado
|
flatpak.info.installed=instalado
|
||||||
flatpak.info.license=licencia
|
flatpak.info.license=licencia
|
||||||
flatpak.info.name=nombre
|
flatpak.info.name=nombre
|
||||||
@@ -39,4 +41,6 @@ flatpak.info.homepageurl=página
|
|||||||
flatpak.info.instoresincedate=agregado en
|
flatpak.info.instoresincedate=agregado en
|
||||||
flatpak.info.projectlicense=licencia
|
flatpak.info.projectlicense=licencia
|
||||||
flatpak.info.translateurl=Traducción
|
flatpak.info.translateurl=Traducción
|
||||||
flatpak.info.developername=desarrollador
|
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?
|
||||||
@@ -18,3 +18,8 @@ flatpak.info.instoresincedate=aggiunto in
|
|||||||
flatpak.info.projectlicense=licenza
|
flatpak.info.projectlicense=licenza
|
||||||
flatpak.info.translateurl=traduci url
|
flatpak.info.translateurl=traduci url
|
||||||
flatpak.info.developername=sviluppatore
|
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?
|
||||||
@@ -7,6 +7,8 @@ flatpak.info.date=data
|
|||||||
flatpak.info.description=descrição
|
flatpak.info.description=descrição
|
||||||
flatpak.info.id=id
|
flatpak.info.id=id
|
||||||
flatpak.info.installation=instalação
|
flatpak.info.installation=instalação
|
||||||
|
flatpak.info.installation.user=usuário
|
||||||
|
flatpak.info.installation.system=sistema
|
||||||
flatpak.info.installed=instalado
|
flatpak.info.installed=instalado
|
||||||
flatpak.info.license=licença
|
flatpak.info.license=licença
|
||||||
flatpak.info.name=nome
|
flatpak.info.name=nome
|
||||||
@@ -39,4 +41,6 @@ flatpak.info.homepageurl=página
|
|||||||
flatpak.info.instoresincedate=adicionado em
|
flatpak.info.instoresincedate=adicionado em
|
||||||
flatpak.info.projectlicense=licença
|
flatpak.info.projectlicense=licença
|
||||||
flatpak.info.translateurl=tradução
|
flatpak.info.translateurl=tradução
|
||||||
flatpak.info.developername=desenvolvedor
|
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 ?
|
||||||
@@ -421,6 +421,7 @@ class AppsTable(QTableWidget):
|
|||||||
|
|
||||||
def _set_col_settings(self, col: int, pkg: PackageView):
|
def _set_col_settings(self, col: int, pkg: PackageView):
|
||||||
item = QToolBar()
|
item = QToolBar()
|
||||||
|
item.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
|
||||||
|
|
||||||
if pkg.model.installed:
|
if pkg.model.installed:
|
||||||
def run():
|
def run():
|
||||||
@@ -454,7 +455,6 @@ class AppsTable(QTableWidget):
|
|||||||
bt.setEnabled(bool(settings))
|
bt.setEnabled(bool(settings))
|
||||||
item.addWidget(bt)
|
item.addWidget(bt)
|
||||||
|
|
||||||
item.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
|
|
||||||
self.setCellWidget(pkg.table_index, col, item)
|
self.setCellWidget(pkg.table_index, col, item)
|
||||||
|
|
||||||
def change_headers_policy(self, policy: QHeaderView = QHeaderView.ResizeToContents):
|
def change_headers_policy(self, policy: QHeaderView = QHeaderView.ResizeToContents):
|
||||||
|
|||||||
Reference in New Issue
Block a user