From adb0459ae26c68e78beed5e61bc9e5b22594cab0 Mon Sep 17 00:00:00 2001 From: Vinicius Moreira Date: Tue, 11 Aug 2020 18:16:50 -0300 Subject: [PATCH] [appimage] -> improvement: manual file upgrade -> auto-filling version and settings default search path to '~/Downloads' --- CHANGELOG.md | 2 +- bauh/gems/appimage/__init__.py | 6 ++++++ bauh/gems/appimage/controller.py | 26 ++++++++++++++------------ 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33e04472..0b6aba06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [0.9.7] 2020 ### Improvements - AppImage - - Manual file installation: + - Manual file installation/upgrade: - default search path set to '~/Downloads' - trying to auto-fill the 'Name' and 'Version' fields diff --git a/bauh/gems/appimage/__init__.py b/bauh/gems/appimage/__init__.py index 6a577ed1..b2242bf3 100644 --- a/bauh/gems/appimage/__init__.py +++ b/bauh/gems/appimage/__init__.py @@ -1,5 +1,6 @@ import os from pathlib import Path +from typing import Optional from bauh.api.constants import CONFIG_PATH from bauh.commons import resource @@ -16,3 +17,8 @@ SYMLINKS_DIR = '{}/.local/bin'.format(str(Path.home())) def get_icon_path() -> str: return resource.get_path('img/appimage.svg', ROOT_DIR) + + +def get_default_manual_installation_file_dir() -> Optional[str]: + default_path = '{}/Downloads'.format(str(Path.home())) + return default_path if os.path.isdir(default_path) else None diff --git a/bauh/gems/appimage/controller.py b/bauh/gems/appimage/controller.py index db995849..087af469 100644 --- a/bauh/gems/appimage/controller.py +++ b/bauh/gems/appimage/controller.py @@ -11,7 +11,7 @@ from distutils.version import LooseVersion from math import floor from pathlib import Path from threading import Lock -from typing import Set, Type, List, Tuple +from typing import Set, Type, List, Tuple, Optional from colorama import Fore @@ -29,7 +29,7 @@ from bauh.commons.config import save_config from bauh.commons.html import bold from bauh.commons.system import SystemProcess, new_subprocess, ProcessHandler, run_cmd, SimpleProcess from bauh.gems.appimage import query, INSTALLATION_PATH, LOCAL_PATH, SUGGESTIONS_FILE, CONFIG_FILE, ROOT_DIR, \ - CONFIG_DIR, UPDATES_IGNORED_FILE, util + CONFIG_DIR, UPDATES_IGNORED_FILE, util, get_default_manual_installation_file_dir from bauh.gems.appimage.config import read_config from bauh.gems.appimage.model import AppImage from bauh.gems.appimage.worker import DatabaseUpdater, SymlinksVerifier @@ -47,7 +47,7 @@ RE_APPIMAGE_NAME = re.compile(r'(.+)\.appimage', flags=re.IGNORECASE) class ManualInstallationFileObserver(ViewObserver): - def __init__(self, name: TextInputComponent, version: TextInputComponent): + def __init__(self, name: Optional[TextInputComponent], version: TextInputComponent): self.name = name self.version = version @@ -57,12 +57,16 @@ class ManualInstallationFileObserver(ViewObserver): if name_found: name_split = name_found[0].split('-') - self.name.set_value(name_split[0].strip()) + + if self.name: + self.name.set_value(name_split[0].strip()) if len(name_split) > 1: self.version.set_value(name_split[1].strip()) else: - self.name.set_value(None) + if self.name: + self.name.set_value(None) + self.version.set_value(None) @@ -91,14 +95,9 @@ class AppImageManager(SoftwareManager): icon_path=resource.get_path('img/upgrade.svg', ROOT_DIR))] def install_file(self, root_password: str, watcher: ProcessWatcher) -> bool: - default_path = '{}/Downloads'.format(str(Path.home())) - - if not os.path.isdir(default_path): - default_path = None - file_chooser = FileChooserComponent(label=self.i18n['file'].capitalize(), allowed_extensions={'AppImage'}, - search_path=default_path) + search_path=get_default_manual_installation_file_dir()) input_name = TextInputComponent(label=self.i18n['name'].capitalize()) input_version = TextInputComponent(label=self.i18n['version'].capitalize()) file_chooser.observers.append(ManualInstallationFileObserver(input_name, input_version)) @@ -150,8 +149,11 @@ class AppImageManager(SoftwareManager): return res def update_file(self, pkg: AppImage, root_password: str, watcher: ProcessWatcher): - file_chooser = FileChooserComponent(label=self.i18n['file'].capitalize(), allowed_extensions={'AppImage'}) + file_chooser = FileChooserComponent(label=self.i18n['file'].capitalize(), + allowed_extensions={'AppImage'}, + search_path=get_default_manual_installation_file_dir()) input_version = TextInputComponent(label=self.i18n['version'].capitalize()) + file_chooser.observers.append(ManualInstallationFileObserver(None, input_version)) while True: if watcher.request_confirmation(title=self.i18n['appimage.custom_action.manual_update.details'], body=None,