[view] improvement: displaying a tooltip with the missing dependencies for a supported packaging technology

This commit is contained in:
Vinicius Moreira
2021-11-22 15:48:48 -03:00
parent 5121bb40ef
commit c80845cde4
47 changed files with 525 additions and 47 deletions

View File

@@ -4,7 +4,7 @@ import time
import traceback
from subprocess import Popen, STDOUT
from threading import Thread
from typing import List, Set, Type, Tuple, Dict
from typing import List, Set, Type, Tuple, Dict, Optional
from bauh.api.abstract.controller import SoftwareManager, SearchResult, ApplicationContext, UpgradeRequirements, \
UpgradeRequirement, TransactionResult, SoftwareAction
@@ -119,20 +119,19 @@ class GenericSoftwareManager(SoftwareManager):
return res
def _can_work(self, man: SoftwareManager):
if self._available_cache is not None:
available = False
for t in man.get_managed_types():
available = self._available_cache.get(t)
if available is None:
available = man.is_enabled() and man.can_work()
available = man.is_enabled() and man.can_work()[0]
self._available_cache[t] = available
if available:
available = True
else:
available = man.is_enabled() and man.can_work()
available = man.is_enabled() and man.can_work()[0]
if available:
if man not in self.working_managers:
@@ -198,8 +197,8 @@ class GenericSoftwareManager(SoftwareManager):
def set_enabled(self, enabled: bool):
pass
def can_work(self) -> bool:
return True
def can_work(self) -> Tuple[bool, Optional[str]]:
return True, None
def _get_package_lower_name(self, pkg: SoftwarePackage):
return pkg.name.lower()

View File

@@ -7,7 +7,7 @@ import traceback
from io import StringIO
from math import floor
from threading import Thread
from typing import Iterable, List
from typing import Iterable, List, Tuple
from bauh.api.abstract.download import FileDownloader
from bauh.api.abstract.handler import ProcessWatcher
@@ -223,3 +223,6 @@ class AdaptableFileDownloader(FileDownloader):
def list_available_multithreaded_clients(self) -> List[str]:
return [c for c in self.supported_multithread_clients if self.is_multithreaded_client_available(c)]
def get_supported_clients(self) -> tuple:
return 'wget', 'aria2', 'axel'

View File

@@ -39,23 +39,26 @@ class GenericSettingsManager:
gem_opts, def_gem_opts, gem_tabs = [], set(), []
for man in self.managers:
if man.can_work():
man_comp = man.get_settings(screen_width, screen_height)
modname = man.__module__.split('.')[-2]
icon_path = "{r}/gems/{n}/resources/img/{n}.svg".format(r=ROOT_DIR, n=modname)
can_work, reason_not_work = man.can_work()
modname = man.__module__.split('.')[-2]
icon_path = "{r}/gems/{n}/resources/img/{n}.svg".format(r=ROOT_DIR, n=modname)
if man_comp:
tab_name = self.i18n.get('gem.{}.label'.format(modname), modname.capitalize())
gem_tabs.append(TabComponent(label=tab_name, content=man_comp, icon_path=icon_path, id_=modname))
man_comp = man.get_settings(screen_width, screen_height) if can_work else None
if man_comp:
tab_name = self.i18n.get('gem.{}.label'.format(modname), modname.capitalize())
gem_tabs.append(TabComponent(label=tab_name, content=man_comp, icon_path=icon_path, id_=modname))
opt = InputOption(label=self.i18n.get('gem.{}.label'.format(modname), modname.capitalize()),
tooltip=self.i18n.get('gem.{}.info'.format(modname)),
value=modname,
icon_path='{r}/gems/{n}/resources/img/{n}.svg'.format(r=ROOT_DIR, n=modname))
gem_opts.append(opt)
help_tip = reason_not_work if not can_work and reason_not_work else self.i18n.get(f'gem.{modname}.info')
opt = InputOption(label=self.i18n.get('gem.{}.label'.format(modname), modname.capitalize()),
tooltip=help_tip,
value=modname,
icon_path='{r}/gems/{n}/resources/img/{n}.svg'.format(r=ROOT_DIR, n=modname),
read_only=not can_work,
extra_properties={'warning': 'true'} if not can_work else None)
gem_opts.append(opt)
if man.is_enabled() and man in self.working_managers:
def_gem_opts.add(opt)
if man.is_enabled() and man in self.working_managers:
def_gem_opts.add(opt)
core_config = self.configman.get_config()