This commit is contained in:
Vinícius Moreira
2020-04-13 11:49:28 -03:00
parent 83aab1ff55
commit 01a60ea686
165 changed files with 12778 additions and 6171 deletions

View File

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

View File

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

View File

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

View File

@@ -1,19 +1,19 @@
gem.snap.info=Aplicacions publicades a https://snapcraft.io/store
snap.action.refresh.label=Actualitza
snap.action.refresh.status=Sestà 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 sha 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 lAPI de {} no està disponible en aquests moments. No podreu cercar aplicacions {} noves.
snap.action.refresh.status=Sestà 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 nhi 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 nhi 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 sha iniciat o activat {}. Els paquets {} no estaran disponibles.
snap.notifications.api.unavailable=Sembla que lAPI de {} no està disponible en aquests moments. No podreu cercar aplicacions {} noves.

View File

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

View File

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

View File

@@ -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 {}.

View File

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

View File

@@ -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 {}.

View File

@@ -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 {} в данный момент недоступен. Невозможно будет искать новые приложения {}.