From 9f15b1b244e7889ba92994b1a679d7193d2478ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Moreira?= Date: Mon, 13 Jan 2020 13:04:35 -0300 Subject: [PATCH] [improvement][flathub] automatically adds Flathub as the default remote at the user level --- CHANGELOG.md | 1 + bauh/gems/flatpak/controller.py | 25 +++++++++++++++++++------ bauh/gems/flatpak/flatpak.py | 28 +++++++++++++++++++++++----- 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 25c26e1a..753681eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Flatpak: - the application name tooltip now displays the installation level. e.g: **gedit ( system )** - info window displaying the installation level + - "remote not set" warning dropped in favor of the new behavior: automatically adds Flathub as the default remote at the user level - Web: - not using HTTP sessions anymore to perform the searches. It seems to avoid URLs not being found after an internet drop event. - supporting JPEG images as custom icons diff --git a/bauh/gems/flatpak/controller.py b/bauh/gems/flatpak/controller.py index c890e58f..455944a0 100644 --- a/bauh/gems/flatpak/controller.py +++ b/bauh/gems/flatpak/controller.py @@ -58,12 +58,27 @@ class FlatpakManager(SoftwareManager): return app + def _get_search_remote(self) -> str: + remotes = flatpak.list_remotes() + + if remotes['system']: + remote_level = 'system' + elif remotes['user']: + remote_level = 'user' + else: + remote_level = 'user' + flatpak.set_default_remotes(remote_level) + + return remote_level + def search(self, words: str, disk_loader: DiskCacheLoader, limit: int = -1, is_url: bool = False) -> SearchResult: if is_url: return SearchResult([], [], 0) + remote_level = self._get_search_remote() + res = SearchResult([], [], 0) - apps_found = flatpak.search(flatpak.get_version(), words) + apps_found = flatpak.search(flatpak.get_version(), words, remote_level) if apps_found: already_read = set() @@ -310,10 +325,7 @@ class FlatpakManager(SoftwareManager): return updates def list_warnings(self, internet_available: bool) -> List[str]: - if flatpak.is_installed(): - if not flatpak.has_remotes_set(): - return [self.i18n['flatpak.notification.no_remotes'], - self.i18n['flatpak.notification.disable'].format(bold('Flatpak'), bold(self.i18n['manage_window.settings.gems']))] + return [] def list_suggestions(self, limit: int, filter_installed: bool) -> List[PackageSuggestion]: cli_version = flatpak.get_version() @@ -327,6 +339,7 @@ class FlatpakManager(SoftwareManager): return res else: self.logger.info("Mapping suggestions") + remote_level = self._get_search_remote() installed = {i.id for i in self.read_installed(disk_loader=None).installed} if filter_installed else None for line in file.text.split('\n'): @@ -345,7 +358,7 @@ class FlatpakManager(SoftwareManager): if cached_sug: res.append(cached_sug) else: - app_json = flatpak.search(cli_version, appid, app_id=True) + app_json = flatpak.search(cli_version, appid, remote_level, app_id=True) if app_json: model = PackageSuggestion(self._map_to_model(app_json[0], False, None), priority) diff --git a/bauh/gems/flatpak/flatpak.py b/bauh/gems/flatpak/flatpak.py index 31dfbd29..354bd8c2 100755 --- a/bauh/gems/flatpak/flatpak.py +++ b/bauh/gems/flatpak/flatpak.py @@ -3,7 +3,7 @@ import subprocess import traceback from datetime import datetime from io import StringIO -from typing import List, Dict +from typing import List, Dict, Set from bauh.api.exception import NoInternetException from bauh.commons.system import new_subprocess, run_cmd, new_root_subprocess, SimpleProcess @@ -260,9 +260,9 @@ def get_app_commits_data(app_ref: str, origin: str, installation: str) -> List[d return commits -def search(version: str, word: str, app_id: bool = False) -> List[dict]: +def search(version: str, word: str, installation: str, app_id: bool = False) -> List[dict]: - res = run_cmd('{} search {}'.format(BASE_CMD, word)) + res = run_cmd('{} search {} --{}'.format(BASE_CMD, word, installation)) found = [] @@ -343,13 +343,31 @@ def install(app_id: str, origin: str, installation: str): return new_subprocess([BASE_CMD, 'install', origin, app_id, '-y', '--{}'.format(installation)]) -def set_default_remotes(): - run_cmd('{} remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo'.format(BASE_CMD)) +def set_default_remotes(installation: str): + run_cmd('{} remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo --{}'.format(BASE_CMD, installation)) def has_remotes_set() -> bool: return bool(run_cmd('{} remotes'.format(BASE_CMD)).strip()) +def list_remotes() -> Dict[str, Set[str]]: + res = {'system': set(), 'user': set()} + output = run_cmd('{} remotes'.format(BASE_CMD)).strip() + + if output: + lines = output.split('\n') + + for line in lines: + remote = line.split('\t') + + if 'system' in remote[1]: + res['system'].add(remote[0].strip()) + elif 'user' in remote[1]: + res['user'].add(remote[0].strip()) + + return res + + def run(app_id: str): subprocess.Popen([BASE_CMD, 'run', app_id])