mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-09 20:04:15 +02:00
0.9.0
This commit is contained in:
@@ -1,9 +1,14 @@
|
||||
import os
|
||||
|
||||
from bauh.api.constants import CACHE_PATH
|
||||
from bauh.commons import resource
|
||||
|
||||
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
SNAP_CACHE_PATH = CACHE_PATH + '/snap'
|
||||
CATEGORIES_FILE_PATH = SNAP_CACHE_PATH + '/categories.txt'
|
||||
URL_CATEGORIES_FILE = 'https://raw.githubusercontent.com/vinifmor/bauh-files/master/snap/categories.txt'
|
||||
SUGGESTIONS_FILE = 'https://raw.githubusercontent.com/vinifmor/bauh-files/master/snap/suggestions.txt'
|
||||
|
||||
|
||||
def get_icon_path() -> str:
|
||||
return resource.get_path('img/snap.svg', ROOT_DIR)
|
||||
|
||||
@@ -4,16 +4,17 @@ from datetime import datetime
|
||||
from threading import Thread
|
||||
from typing import List, Set, Type
|
||||
|
||||
from bauh.api.abstract.controller import SoftwareManager, SearchResult, ApplicationContext
|
||||
from bauh.api.abstract.controller import SoftwareManager, SearchResult, ApplicationContext, UpgradeRequirements
|
||||
from bauh.api.abstract.disk import DiskCacheLoader
|
||||
from bauh.api.abstract.handler import ProcessWatcher
|
||||
from bauh.api.abstract.handler import ProcessWatcher, TaskManager
|
||||
from bauh.api.abstract.model import SoftwarePackage, PackageHistory, PackageUpdate, PackageSuggestion, \
|
||||
SuggestionPriority
|
||||
from bauh.api.abstract.view import SingleSelectComponent, SelectViewType, InputOption
|
||||
from bauh.commons.category import CategoriesDownloader
|
||||
from bauh.commons.html import bold
|
||||
from bauh.commons.system import SystemProcess, ProcessHandler, new_root_subprocess
|
||||
from bauh.gems.snap import snap, URL_CATEGORIES_FILE, SNAP_CACHE_PATH, CATEGORIES_FILE_PATH, SUGGESTIONS_FILE
|
||||
from bauh.gems.snap import snap, URL_CATEGORIES_FILE, SNAP_CACHE_PATH, CATEGORIES_FILE_PATH, SUGGESTIONS_FILE, \
|
||||
get_icon_path
|
||||
from bauh.gems.snap.constants import SNAP_API_URL
|
||||
from bauh.gems.snap.model import SnapApplication
|
||||
from bauh.gems.snap.worker import SnapAsyncDataLoader
|
||||
@@ -33,8 +34,6 @@ class SnapManager(SoftwareManager):
|
||||
self.logger = context.logger
|
||||
self.ubuntu_distro = context.distro == 'ubuntu'
|
||||
self.categories = {}
|
||||
self.categories_downloader = CategoriesDownloader('snap', self.http_client, self.logger, self, context.disk_cache,
|
||||
URL_CATEGORIES_FILE, SNAP_CACHE_PATH, CATEGORIES_FILE_PATH)
|
||||
self.suggestions_cache = context.cache_factory.new()
|
||||
self.info_path = None
|
||||
|
||||
@@ -122,7 +121,6 @@ class SnapManager(SoftwareManager):
|
||||
info_path = self.get_info_path()
|
||||
|
||||
if snap.is_snapd_running() and info_path:
|
||||
self.categories_downloader.join()
|
||||
installed = [self.map_json(app_json, installed=True, disk_loader=disk_loader, internet=internet_available) for app_json in snap.read_installed(info_path)]
|
||||
return SearchResult(installed, None, len(installed))
|
||||
else:
|
||||
@@ -131,7 +129,7 @@ class SnapManager(SoftwareManager):
|
||||
def downgrade(self, pkg: SnapApplication, root_password: str, watcher: ProcessWatcher) -> bool:
|
||||
return ProcessHandler(watcher).handle(SystemProcess(subproc=snap.downgrade_and_stream(pkg.name, root_password), wrong_error_phrase=None))
|
||||
|
||||
def update(self, pkg: SnapApplication, root_password: str, watcher: ProcessWatcher) -> SystemProcess:
|
||||
def upgrade(self, requirements: UpgradeRequirements, root_password: str, watcher: ProcessWatcher) -> SystemProcess:
|
||||
raise Exception("'update' is not supported by {}".format(pkg.__class__.__name__))
|
||||
|
||||
def uninstall(self, pkg: SnapApplication, root_password: str, watcher: ProcessWatcher) -> bool:
|
||||
@@ -216,13 +214,25 @@ class SnapManager(SoftwareManager):
|
||||
return snap.is_installed()
|
||||
|
||||
def requires_root(self, action: str, pkg: SnapApplication):
|
||||
return action != 'search'
|
||||
return action not in ('search', 'prepare')
|
||||
|
||||
def refresh(self, pkg: SnapApplication, root_password: str, watcher: ProcessWatcher) -> bool:
|
||||
return ProcessHandler(watcher).handle(SystemProcess(subproc=snap.refresh_and_stream(pkg.name, root_password)))
|
||||
|
||||
def prepare(self):
|
||||
self.categories_downloader.start()
|
||||
def _start_category_task(self, task_man: TaskManager):
|
||||
task_man.register_task('snap_cats', self.i18n['task.download_categories'].format('Snap'), get_icon_path())
|
||||
task_man.update_progress('snap_cats', 50, None)
|
||||
|
||||
def _finish_category_task(self, task_man: TaskManager):
|
||||
task_man.update_progress('snap_cats', 100, None)
|
||||
task_man.finish_task('snap_cats')
|
||||
|
||||
def prepare(self, task_manager: TaskManager, root_password: str, internet_available: bool):
|
||||
CategoriesDownloader(id_='snap', manager=self, http_client=self.http_client, logger=self.logger,
|
||||
url_categories_file=URL_CATEGORIES_FILE, disk_cache_dir=SNAP_CACHE_PATH,
|
||||
categories_path=CATEGORIES_FILE_PATH,
|
||||
before=lambda: self._start_category_task(task_manager),
|
||||
after=lambda: self._finish_category_task(task_manager)).start()
|
||||
|
||||
def list_updates(self, internet_available: bool) -> List[PackageUpdate]:
|
||||
pass
|
||||
@@ -268,7 +278,6 @@ class SnapManager(SoftwareManager):
|
||||
return res
|
||||
else:
|
||||
self.logger.info('Mapping suggestions')
|
||||
self.categories_downloader.join()
|
||||
|
||||
suggestions, threads = [], []
|
||||
installed = {i.name.lower() for i in self.read_installed(disk_loader=None).installed} if filter_installed else None
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
from typing import List
|
||||
|
||||
from bauh.api.abstract.model import SoftwarePackage, PackageAction
|
||||
from bauh.api.abstract.model import SoftwarePackage, CustomSoftwareAction
|
||||
from bauh.commons import resource
|
||||
from bauh.gems.snap import ROOT_DIR
|
||||
|
||||
EXTRA_INSTALLED_ACTIONS = [
|
||||
PackageAction(i18n_status_key='snap.action.refresh.status',
|
||||
i18_label_key='snap.action.refresh.label',
|
||||
icon_path=resource.get_path('img/refresh.svg', ROOT_DIR),
|
||||
manager_method='refresh',
|
||||
requires_root=True)
|
||||
CustomSoftwareAction(i18n_status_key='snap.action.refresh.status',
|
||||
i18_label_key='snap.action.refresh.label',
|
||||
icon_path=resource.get_path('img/refresh.svg', ROOT_DIR),
|
||||
manager_method='refresh',
|
||||
requires_root=True)
|
||||
]
|
||||
|
||||
KNOWN_RUNTIME_NAMES = {'snapd', 'snapcraft', 'multipass'}
|
||||
@@ -79,6 +79,9 @@ class SnapApplication(SoftwarePackage):
|
||||
def get_publisher(self):
|
||||
return self.publisher
|
||||
|
||||
def get_custom_supported_actions(self) -> List[PackageAction]:
|
||||
def get_custom_supported_actions(self) -> List[CustomSoftwareAction]:
|
||||
if self.installed:
|
||||
return EXTRA_INSTALLED_ACTIONS
|
||||
|
||||
def supports_backup(self) -> bool:
|
||||
return True
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
gem.snap.info=Aplicacions publicades a https://snapcraft.io/store
|
||||
snap.action.refresh.label=Actualitza
|
||||
snap.action.refresh.status=S’està actualitzant
|
||||
snap.info.commands=ordres
|
||||
snap.info.contact=contacte
|
||||
snap.info.description=descripció
|
||||
snap.info.license=llicència
|
||||
snap.info.revision=revisió
|
||||
snap.info.tracking=seguiment
|
||||
snap.info.installed=instal·lada
|
||||
snap.info.license=llicència
|
||||
snap.info.publisher=publicador
|
||||
snap.info.version=versió
|
||||
snap.info.revision=revisió
|
||||
snap.info.size=mida
|
||||
snap.notification.snapd_unavailable=Sembla que no s’ha iniciat o activat {}. Els paquets {} no estaran disponibles.
|
||||
snap.notification.snap.disable=Si no voleu utilitzar aplicacions snap, desmarqueu {} a {}
|
||||
snap.notifications.api.unavailable=Sembla que l’API de {} no està disponible en aquests moments. No podreu cercar aplicacions {} noves.
|
||||
snap.action.refresh.status=S’està actualitzant
|
||||
snap.action.refresh.label=Actualitza
|
||||
snap.install.available_channels.title=Canals disponibles
|
||||
snap.install.available_channels.message=No hi ha un canal {} (stable) disponible per a {}. Però més avall n’hi ha els següents
|
||||
snap.info.tracking=seguiment
|
||||
snap.info.version=versió
|
||||
snap.install.available_channels.help=Seleccioneu-ne un si voleu continuar
|
||||
snap.install.available_channels.message=No hi ha un canal {} (stable) disponible per a {}. Però més avall n’hi ha els següents
|
||||
snap.install.available_channels.title=Canals disponibles
|
||||
snap.notification.snap.disable=Si no voleu utilitzar aplicacions snap, desmarqueu {} a {}
|
||||
snap.notification.snapd_unavailable=Sembla que no s’ha iniciat o activat {}. Els paquets {} no estaran disponibles.
|
||||
snap.notifications.api.unavailable=Sembla que l’API de {} no està disponible en aquests moments. No podreu cercar aplicacions {} noves.
|
||||
@@ -1,19 +1,19 @@
|
||||
gem.snap.info=Anwendungen von https://snapcraft.io/store
|
||||
snap.notification.snapd_unavailable={} wurde nicht gestartet oder ist deaktiviert. {} Pakete werden nicht verfügbar sein.
|
||||
snap.notification.snap.disable=Um keine Snap Anwerndungen zu nutzen deaktivieren {} unter {}
|
||||
snap.notifications.api.unavailable=Es scheint als ob die {} API aktuell nicht verfügbar ist. Die Suche nach neuen {} Anwendungen ist nicht möglich.
|
||||
snap.action.refresh.status=Erneuern
|
||||
snap.action.refresh.label=Erneuern
|
||||
snap.install.available_channels.title=Verfügbare Channels
|
||||
snap.install.available_channels.message=Es ist kein {} Channel verfügbar für {}. Es gibt jedoch folgende
|
||||
snap.install.available_channels.help=Wähle einen aus um fortzufahren
|
||||
snap.action.refresh.status=Erneuern
|
||||
snap.info.commands=Kommandos
|
||||
snap.info.contact=Kontakt
|
||||
snap.info.description=Beschreibung
|
||||
snap.info.license=Lizenz
|
||||
snap.info.revision=Revision
|
||||
snap.info.tracking=Tracking
|
||||
snap.info.installed=installiert
|
||||
snap.info.license=Lizenz
|
||||
snap.info.publisher=Herausgeber
|
||||
snap.info.revision=Revision
|
||||
snap.info.size=Größe
|
||||
snap.info.tracking=Tracking
|
||||
snap.info.version=Version
|
||||
snap.info.size=Größe
|
||||
snap.install.available_channels.help=Wähle einen aus um fortzufahren
|
||||
snap.install.available_channels.message=Es ist kein {} Channel verfügbar für {}. Es gibt jedoch folgende
|
||||
snap.install.available_channels.title=Verfügbare Channels
|
||||
snap.notification.snap.disable=Um keine Snap Anwerndungen zu nutzen deaktivieren {} unter {}
|
||||
snap.notification.snapd_unavailable={} wurde nicht gestartet oder ist deaktiviert. {} Pakete werden nicht verfügbar sein.
|
||||
snap.notifications.api.unavailable=Es scheint als ob die {} API aktuell nicht verfügbar ist. Die Suche nach neuen {} Anwendungen ist nicht möglich.
|
||||
@@ -1,19 +1,19 @@
|
||||
gem.snap.info=Applications published at https://snapcraft.io/store
|
||||
snap.notification.snapd_unavailable={} seems not to be started or enabled. {} packages will not be available.
|
||||
snap.notification.snap.disable=If you do not want to use Snap applications, uncheck {} in {}
|
||||
snap.notifications.api.unavailable=It seems the {} API is unavailable at the moment. It will not be possible to search for new {} applications.
|
||||
snap.action.refresh.status=Refreshing
|
||||
snap.action.refresh.label=Refresh
|
||||
snap.install.available_channels.title=Available channels
|
||||
snap.install.available_channels.message=There is no {} channel available for {}. But there are these below
|
||||
snap.install.available_channels.help=Select one if you want to continue
|
||||
snap.action.refresh.status=Refreshing
|
||||
snap.info.commands=commands
|
||||
snap.info.contact=contact
|
||||
snap.info.description=description
|
||||
snap.info.license=license
|
||||
snap.info.revision=revision
|
||||
snap.info.tracking=tracking
|
||||
snap.info.installed=installed
|
||||
snap.info.license=license
|
||||
snap.info.publisher=publisher
|
||||
snap.info.revision=revision
|
||||
snap.info.size=size
|
||||
snap.info.tracking=tracking
|
||||
snap.info.version=version
|
||||
snap.info.size=size
|
||||
snap.install.available_channels.help=Select one if you want to continue
|
||||
snap.install.available_channels.message=There is no {} channel available for {}. But there are these below
|
||||
snap.install.available_channels.title=Available channels
|
||||
snap.notification.snap.disable=If you do not want to use Snap applications, uncheck {} in {}
|
||||
snap.notification.snapd_unavailable={} seems not to be started or enabled. {} packages will not be available.
|
||||
snap.notifications.api.unavailable=It seems the {} API is unavailable at the moment. It will not be possible to search for new {} applications.
|
||||
@@ -1,19 +1,19 @@
|
||||
gem.snap.info=Aplicativos publicados en https://snapcraft.io/store
|
||||
snap.action.refresh.label=Actualizar
|
||||
snap.action.refresh.status=Actualizando
|
||||
snap.info.commands=comandos
|
||||
snap.info.contact=contacto
|
||||
snap.info.description=descripción
|
||||
snap.info.license=licencia
|
||||
snap.info.revision=revisión
|
||||
snap.info.tracking=tracking
|
||||
snap.info.installed=instalado
|
||||
snap.info.license=licencia
|
||||
snap.info.publisher=publicador
|
||||
snap.info.version=versión
|
||||
snap.info.revision=revisión
|
||||
snap.info.size=tamaño
|
||||
snap.notification.snapd_unavailable={} parece no estar inicializado o habilitado. Los paquetes {} estarán indisponibles.
|
||||
snap.notification.snap.disable=Si no desea usar aplicativos Snap, desmarque {} en {}
|
||||
snap.notifications.api.unavailable=Parece que la API de {} no está disponible en este momento. No será posible buscar nuevos aplicativos {}.
|
||||
snap.action.refresh.status=Actualizando
|
||||
snap.action.refresh.label=Actualizar
|
||||
snap.install.available_channels.title=Canales disponibles
|
||||
snap.info.tracking=tracking
|
||||
snap.info.version=versión
|
||||
snap.install.available_channels.help=Seleccione uno si desea continuar
|
||||
snap.install.available_channels.message=No hay un canal {} ( stable ) disponible para {}. Pero hay estos otros abajo
|
||||
snap.install.available_channels.help=Seleccione uno si desea continuar
|
||||
snap.install.available_channels.title=Canales disponibles
|
||||
snap.notification.snap.disable=Si no desea usar aplicativos Snap, desmarque {} en {}
|
||||
snap.notification.snapd_unavailable={} parece no estar inicializado o habilitado. Los paquetes {} estarán indisponibles.
|
||||
snap.notifications.api.unavailable=Parece que la API de {} no está disponible en este momento. No será posible buscar nuevos aplicativos {}.
|
||||
@@ -1,9 +1,19 @@
|
||||
gem.snap.info=Applicazioni pubblicate su https://snapcraft.io/store
|
||||
snap.notification.snapd_unavailable={} sembra non essere avviato o abilitato. {} i pacchetti non saranno disponibili.
|
||||
snap.notification.snap.disable=Se non si desidera utilizzare le applicazioni Snap, deselezionare {} in {}
|
||||
snap.notifications.api.unavailable=Sembra che l'API {} non sia al momento disponibile. Non sarà possibile cercare nuove {} applicazioni.
|
||||
snap.action.refresh.status=Ripristinare
|
||||
snap.action.refresh.label=Ripristina
|
||||
snap.install.available_channels.title=Canali disponibili
|
||||
snap.install.available_channels.message=Non esiste un {} canale disponibile per {}. Ma ci sono questi sotto
|
||||
snap.action.refresh.status=Ripristinare
|
||||
snap.info.commands=commands
|
||||
snap.info.contact=contact
|
||||
snap.info.description=description
|
||||
snap.info.installed=installed
|
||||
snap.info.license=license
|
||||
snap.info.publisher=publisher
|
||||
snap.info.revision=revision
|
||||
snap.info.size=size
|
||||
snap.info.tracking=tracking
|
||||
snap.info.version=version
|
||||
snap.install.available_channels.help=Selezionane uno se vuoi continuare
|
||||
snap.install.available_channels.message=Non esiste un {} canale disponibile per {}. Ma ci sono questi sotto
|
||||
snap.install.available_channels.title=Canali disponibili
|
||||
snap.notification.snap.disable=Se non si desidera utilizzare le applicazioni Snap, deselezionare {} in {}
|
||||
snap.notification.snapd_unavailable={} sembra non essere avviato o abilitato. {} i pacchetti non saranno disponibili.
|
||||
snap.notifications.api.unavailable=Sembra che l'API {} non sia al momento disponibile. Non sarà possibile cercare nuove {} applicazioni.
|
||||
@@ -1,19 +1,19 @@
|
||||
gem.snap.info=Aplicativos publicados em https://snapcraft.io/store
|
||||
snap.action.refresh.label=Atualizar
|
||||
snap.action.refresh.status=Atualizando
|
||||
snap.info.commands=comandos
|
||||
snap.info.contact=contato
|
||||
snap.info.description=descrição
|
||||
snap.info.license=licença
|
||||
snap.info.revision=revisão
|
||||
snap.info.tracking=tracking
|
||||
snap.info.installed=instalado
|
||||
snap.info.license=licença
|
||||
snap.info.publisher=publicador
|
||||
snap.info.version=versão
|
||||
snap.info.revision=revisão
|
||||
snap.info.size=tamanho
|
||||
snap.notification.snapd_unavailable={} parece não estar inicializado ou habilitado. Os pacotes {} estarão indisponíveis.
|
||||
snap.notification.snap.disable=Se não deseja usar aplicativos Snap, desmarque {} em {}
|
||||
snap.notifications.api.unavailable=Parece que a API de {} está indisponível no momento. Não será possível buscar novos aplicativos {}.
|
||||
snap.action.refresh.status=Atualizando
|
||||
snap.action.refresh.label=Atualizar
|
||||
snap.install.available_channels.title=Canais disponíveis
|
||||
snap.info.tracking=tracking
|
||||
snap.info.version=versão
|
||||
snap.install.available_channels.help=Selecione algum se quiser continuar
|
||||
snap.install.available_channels.message=Não há um canal {} ( stable ) disponível para {}. Porém existem estes outros abaixo
|
||||
snap.install.available_channels.help=Selecione algum se quiser continuar
|
||||
snap.install.available_channels.title=Canais disponíveis
|
||||
snap.notification.snap.disable=Se não deseja usar aplicativos Snap, desmarque {} em {}
|
||||
snap.notification.snapd_unavailable={} parece não estar inicializado ou habilitado. Os pacotes {} estarão indisponíveis.
|
||||
snap.notifications.api.unavailable=Parece que a API de {} está indisponível no momento. Não será possível buscar novos aplicativos {}.
|
||||
@@ -1,19 +1,19 @@
|
||||
gem.snap.info=Приложения, опубликованные на https://snapcraft.io/store
|
||||
snap.notification.snapd_unavailable={} кажется, не запускается и не включается. {} пакеты будут недоступны.
|
||||
snap.notification.snap.disable=Если вы не хотите использовать приложения Snap, снимите флажок {} в {}
|
||||
snap.notifications.api.unavailable=Похоже, что API {} в данный момент недоступен. Невозможно будет искать новые приложения {}.
|
||||
snap.action.refresh.status=Обновляется
|
||||
snap.action.refresh.label=Обновить
|
||||
snap.install.available_channels.title=Доступные каналы
|
||||
snap.install.available_channels.message=Нет одного канала {}, доступного для {}. Но есть такие ниже
|
||||
snap.install.available_channels.help=Выберите один, если вы хотите продолжить
|
||||
snap.action.refresh.status=Обновляется
|
||||
snap.info.commands=Команды
|
||||
snap.info.contact=Контакт
|
||||
snap.info.description=Описание
|
||||
snap.info.license=Лицензия
|
||||
snap.info.revision=Ревизия
|
||||
snap.info.tracking=Отслеживание
|
||||
snap.info.installed=Размер установки
|
||||
snap.info.license=Лицензия
|
||||
snap.info.publisher=Издатель
|
||||
snap.info.revision=Ревизия
|
||||
snap.info.size=Размер
|
||||
snap.info.tracking=Отслеживание
|
||||
snap.info.version=Версия
|
||||
snap.info.size=Размер
|
||||
snap.install.available_channels.help=Выберите один, если вы хотите продолжить
|
||||
snap.install.available_channels.message=Нет одного канала {}, доступного для {}. Но есть такие ниже
|
||||
snap.install.available_channels.title=Доступные каналы
|
||||
snap.notification.snap.disable=Если вы не хотите использовать приложения Snap, снимите флажок {} в {}
|
||||
snap.notification.snapd_unavailable={} кажется, не запускается и не включается. {} пакеты будут недоступны.
|
||||
snap.notifications.api.unavailable=Похоже, что API {} в данный момент недоступен. Невозможно будет искать новые приложения {}.
|
||||
Reference in New Issue
Block a user