diff --git a/CHANGELOG.md b/CHANGELOG.md index 5845d960..270f610f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ 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.6.1] +### Improvements: +- Better warning presentation when there are several messages + +### Fixes: +- Error when retrieving suggestions +- snapd health check when snapd.service is available + ## [0.6.0] 2019-09-25 ### Features @@ -33,7 +41,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Environment variable / parameter **BAUH_UPDATE_NOTIFICATION** renamed to **BAUH_SYSTEM_NOTIFICATIONS** and now works for any system notification - Environment variable / parameter **BAUH_DOWNLOAD_MULTITHREAD**: if source files should be downloaded using multi-threads (not supported by all **gems**). - Environment variables / parameter **BAUH_MAX_DISPLAYED**: controls the maximum number of displayed apps ( default to 50 ) -- Environment variables / parameter **BAUH_LOGS**: controls the maximum number of displayed apps ( default to 50 ) +- Environment variables / parameter **BAUH_LOGS**: activates console logging. - small UI improvements ### UI Changes diff --git a/bauh/gems/snap/controller.py b/bauh/gems/snap/controller.py index 70a11c8a..dba2decd 100644 --- a/bauh/gems/snap/controller.py +++ b/bauh/gems/snap/controller.py @@ -9,6 +9,7 @@ from bauh.api.abstract.handler import ProcessWatcher from bauh.api.abstract.model import SoftwarePackage, PackageHistory, PackageUpdate, PackageSuggestion, \ SuggestionPriority from bauh.commons import internet +from bauh.commons.html import bold from bauh.commons.system import SystemProcess, ProcessHandler from bauh.gems.snap import snap, suggestions from bauh.gems.snap.constants import SNAP_API_URL @@ -83,7 +84,6 @@ class SnapManager(SoftwareManager): def read_installed(self, disk_loader: DiskCacheLoader, limit: int = -1, only_apps: bool = False, pkg_types: Set[Type[SoftwarePackage]] = None, internet_available: bool = None) -> SearchResult: if snap.is_snapd_running(): - internet_available = internet.is_available(self.http_client, self.logger) installed = [self.map_json(app_json, installed=True, disk_loader=disk_loader, internet=internet_available) for app_json in snap.read_installed()] return SearchResult(installed, None, len(installed)) else: @@ -146,7 +146,9 @@ class SnapManager(SoftwareManager): def list_warnings(self) -> List[str]: if not snap.is_snapd_running(): - return [self.i18n['snap.notification.snapd_unavailable']] + snap_bold = bold('Snap') + return [self.i18n['snap.notification.snapd_unavailable'].format(bold('snapd'), snap_bold), + self.i18n['snap.notification.snap.disable'].format(snap_bold, bold(self.i18n['manage_window.settings.gems']))] def _fill_suggestion(self, pkg_name: str, priority: SuggestionPriority, out: List[PackageSuggestion]): res = self.http_client.get_json(SNAP_API_URL + '/search?q=package_name:{}'.format(pkg_name)) @@ -163,24 +165,25 @@ class SnapManager(SoftwareManager): def list_suggestions(self, limit: int) -> List[PackageSuggestion]: res = [] - sugs = [(i, p) for i, p in suggestions.ALL.items()] - sugs.sort(key=lambda t: t[1].value, reverse=True) + if snap.is_snapd_running(): + sugs = [(i, p) for i, p in suggestions.ALL.items()] + sugs.sort(key=lambda t: t[1].value, reverse=True) - threads = [] - for sug in sugs: + threads = [] + for sug in sugs: - if limit <= 0 or len(res) < limit: - t = Thread(target=self._fill_suggestion, args=(sug[0], sug[1], res)) - t.start() - threads.append(t) - time.sleep(0.001) # to avoid being blocked - else: - break + if limit <= 0 or len(res) < limit: + t = Thread(target=self._fill_suggestion, args=(sug[0], sug[1], res)) + t.start() + threads.append(t) + time.sleep(0.001) # to avoid being blocked + else: + break - for t in threads: - t.join() + for t in threads: + t.join() - res.sort(key=lambda s: s.priority.value, reverse=True) + res.sort(key=lambda s: s.priority.value, reverse=True) return res def is_default_enabled(self) -> bool: diff --git a/bauh/gems/snap/resources/locale/en b/bauh/gems/snap/resources/locale/en index f2994234..8d514136 100644 --- a/bauh/gems/snap/resources/locale/en +++ b/bauh/gems/snap/resources/locale/en @@ -1,3 +1,4 @@ -snap.notification.snapd_unavailable=snapd seems not to be installed or enabled. snap packages will not be available. +snap.notification.snapd_unavailable={} seems not to be installed or enabled. {} packages will not be available. +snap.notification.snap.disable=If you do not want to use Snap applications, uncheck {} in {} snap.action.refresh.status=Refreshing snap.action.refresh.label=Refresh \ No newline at end of file diff --git a/bauh/gems/snap/resources/locale/es b/bauh/gems/snap/resources/locale/es index 43f2c667..935d8dc2 100644 --- a/bauh/gems/snap/resources/locale/es +++ b/bauh/gems/snap/resources/locale/es @@ -7,6 +7,7 @@ snap.info.revision=revisión snap.info.tracking=tracking snap.info.installed=instalado snap.info.publisher=publicador -snap.notification.snapd_unavailable=snapd no parece estar instalado o habilitado. los paquetes snap estarán indisponibles. +snap.notification.snapd_unavailable={} no parece estar instalado o habilitado. los paquetes {} estarán indisponibles. +snap.notification.snap.disable=Si no desea usar aplicativos Snap, desmarque {} en {} snap.action.refresh.status=Actualizando snap.action.refresh.label=Actualizar \ No newline at end of file diff --git a/bauh/gems/snap/resources/locale/pt b/bauh/gems/snap/resources/locale/pt index 2e675732..000a5c90 100644 --- a/bauh/gems/snap/resources/locale/pt +++ b/bauh/gems/snap/resources/locale/pt @@ -7,6 +7,7 @@ snap.info.revision=revisão snap.info.tracking=tracking snap.info.installed=instalado snap.info.publisher=publicador -snap.notification.snapd_unavailable=snapd não parece estar instalado ou habilitado. os pacotes snap estarão indisponíveis. +snap.notification.snapd_unavailable={} não parece estar instalado ou habilitado. os pacotes {} estarão indisponíveis. +snap.notification.snap.disable=Se não deseja usar aplicativos Snap, desmarque {} em {} snap.action.refresh.status=Atualizando snap.action.refresh.label=Atualizar \ No newline at end of file diff --git a/bauh/gems/snap/snap.py b/bauh/gems/snap/snap.py index 02288aa0..04e20de2 100644 --- a/bauh/gems/snap/snap.py +++ b/bauh/gems/snap/snap.py @@ -7,6 +7,8 @@ from bauh.commons.system import new_root_subprocess, run_cmd, new_subprocess from bauh.gems.snap.model import SnapApplication BASE_CMD = 'snap' +RE_SNAPD_STATUS = re.compile('\s+') +SNAPD_RUNNING_STATUS = {'listening', 'running'} def is_installed(): @@ -17,12 +19,24 @@ def is_installed(): def is_snapd_running() -> bool: services = new_subprocess(['systemctl', 'list-units']) - for o in new_subprocess(['grep', '-oP', 'snapd.socket.+\K(listening|running)'], stdin=services.stdout).stdout: + service, service_running = False, False + socket, socket_running = False, False + for o in new_subprocess(['grep', '-Eo', 'snapd.+'], stdin=services.stdout).stdout: if o: line = o.decode().strip() - return bool(line) - return False + if line: + line_split = RE_SNAPD_STATUS.split(line) + running = line_split[3] in SNAPD_RUNNING_STATUS + + if line_split[0] == 'snapd.service': + service = True + service_running = running + elif line_split[0] == 'snapd.socket': + socket = True + socket_running = running + + return socket and socket_running and (not service or (service and service_running)) def app_str_to_json(app: str) -> dict: diff --git a/bauh/view/qt/thread.py b/bauh/view/qt/thread.py index 1595cd52..c631dc99 100644 --- a/bauh/view/qt/thread.py +++ b/bauh/view/qt/thread.py @@ -389,7 +389,7 @@ class FindSuggestions(AsyncAction): def run(self): sugs = self.man.list_suggestions(limit=-1) - self.notify_finished([s.package for s in sugs] if sugs is not None else []) + self.notify_finished({'pkgs_found': [s.package for s in sugs] if sugs is not None else [], 'error': None}) class ListWarnings(QThread): diff --git a/bauh/view/qt/window.py b/bauh/view/qt/window.py index 498acabf..05693f66 100755 --- a/bauh/view/qt/window.py +++ b/bauh/view/qt/window.py @@ -333,7 +333,7 @@ class ManageWindow(QWidget): def _show_warnings(self, warnings: List[str]): if warnings: - dialog.show_message(title=self.i18n['warning'].capitalize(), body='

{}

'.format('
'.join(warnings)), type_=MessageType.WARNING) + dialog.show_message(title=self.i18n['warning'].capitalize(), body='

{}

'.format('

'.join(warnings)), type_=MessageType.WARNING) def show(self): super(ManageWindow, self).show()