[api] improvement: abstraction for view containers

This commit is contained in:
Vinicius Moreira
2022-04-11 17:08:16 -03:00
parent 3cfc16565b
commit 9ac0d015b7
8 changed files with 179 additions and 157 deletions

View File

@@ -851,20 +851,20 @@ class AppImageManager(SoftwareManager, SettingsController):
traceback.print_exc()
def get_settings(self) -> Optional[Generator[SettingsView, None, None]]:
appimage_config = self.configman.get_config()
config_ = self.configman.get_config()
max_width = floor(self.context.screen_width * 0.15)
comps = [
TextInputComponent(label=self.i18n['appimage.config.database.expiration'],
value=int(appimage_config['database']['expiration']) if isinstance(
appimage_config['database']['expiration'], int) else '',
value=int(config_['database']['expiration']) if isinstance(
config_['database']['expiration'], int) else '',
tooltip=self.i18n['appimage.config.database.expiration.tip'],
only_int=True,
max_width=max_width,
id_='appim_db_exp'),
TextInputComponent(label=self.i18n['appimage.config.suggestions.expiration'],
value=int(appimage_config['suggestions']['expiration']) if isinstance(
appimage_config['suggestions']['expiration'], int) else '',
value=int(config_['suggestions']['expiration']) if isinstance(
config_['suggestions']['expiration'], int) else '',
tooltip=self.i18n['appimage.config.suggestions.expiration.tip'],
only_int=True,
max_width=max_width,
@@ -874,14 +874,14 @@ class AppImageManager(SoftwareManager, SettingsController):
yield SettingsView(self, PanelComponent([FormComponent(components=comps)]))
def save_settings(self, component: PanelComponent) -> Tuple[bool, Optional[List[str]]]:
appimage_config = self.configman.get_config()
config_ = self.configman.get_config()
form = component.get_component_by_idx(0, FormComponent)
appimage_config['database']['expiration'] = form.get_text_input('appim_db_exp').get_int_value()
appimage_config['suggestions']['expiration'] = form.get_text_input('appim_sugs_exp').get_int_value()
config_['database']['expiration'] = form.get_component('appim_db_exp', TextInputComponent).get_int_value()
config_['suggestions']['expiration'] = form.get_component('appim_sugs_exp', TextInputComponent).get_int_value()
try:
self.configman.save_config(appimage_config)
self.configman.save_config(config_)
return True, None
except:
return False, [traceback.format_exc()]

View File

@@ -3026,47 +3026,59 @@ class ArchManager(SoftwareManager, SettingsController):
yield self._get_general_settings(arch_config, max_width)
yield self._get_aur_settings(arch_config, max_width)
def _fill_general_settings(self, arch_config: dict, form: FormComponent):
arch_config['repositories'] = form.get_single_select_component('repos').get_selected()
arch_config['sync_databases'] = form.get_single_select_component('sync_dbs').get_selected()
arch_config['sync_databases_startup'] = form.get_single_select_component('sync_dbs_start').get_selected()
arch_config['clean_cached'] = form.get_single_select_component('clean_cached').get_selected()
arch_config['refresh_mirrors_startup'] = form.get_single_select_component('ref_mirs').get_selected()
arch_config['mirrors_sort_limit'] = form.get_text_input('mirrors_sort_limit').get_int_value()
arch_config['repositories_mthread_download'] = form.get_single_select_component('mthread_download').get_selected()
arch_config['automatch_providers'] = form.get_single_select_component('autoprovs').get_selected()
@staticmethod
def fill_general_settings(arch_config: dict, form: FormComponent):
arch_config['repositories'] = form.get_component('repos', SingleSelectComponent).get_selected()
arch_config['sync_databases'] = form.get_component('sync_dbs', SingleSelectComponent).get_selected()
arch_config['clean_cached'] = form.get_component('clean_cached', SingleSelectComponent).get_selected()
arch_config['refresh_mirrors_startup'] = form.get_component('ref_mirs', SingleSelectComponent).get_selected()
arch_config['mirrors_sort_limit'] = form.get_component('mirrors_sort_limit', TextInputComponent).get_int_value()
arch_config['automatch_providers'] = form.get_component('autoprovs', SingleSelectComponent).get_selected()
prefer_repo_provider = form.get_single_select_component('prefer_repo_provider').get_selected()
sync_dbs_startup = form.get_component('sync_dbs_start', SingleSelectComponent).get_selected()
arch_config['sync_databases_startup'] = sync_dbs_startup
mthread_download = form.get_component('mthread_download', SingleSelectComponent).get_selected()
arch_config['repositories_mthread_download'] = mthread_download
prefer_repo_provider = form.get_component('prefer_repo_provider', SingleSelectComponent).get_selected()
arch_config['prefer_repository_provider'] = prefer_repo_provider
check_dep_break = form.get_single_select_component('check_dependency_breakage').get_selected()
check_dep_break = form.get_component('check_dependency_breakage', SingleSelectComponent).get_selected()
arch_config['check_dependency_breakage'] = check_dep_break
sug_opt_dep_uni = form.get_single_select_component('suggest_optdep_uninstall').get_selected()
sug_opt_dep_uni = form.get_component('suggest_optdep_uninstall', SingleSelectComponent).get_selected()
arch_config['suggest_optdep_uninstall'] = sug_opt_dep_uni
sug_unneeded_uni = form.get_single_select_component('suggest_unneeded_uninstall').get_selected()
sug_unneeded_uni = form.get_component('suggest_unneeded_uninstall', SingleSelectComponent).get_selected()
arch_config['suggest_unneeded_uninstall'] = sug_unneeded_uni
arch_config['categories_exp'] = form.get_text_input('arch_cats_exp').get_int_value()
arch_config['categories_exp'] = form.get_component('arch_cats_exp', TextInputComponent).get_int_value()
def _fill_aur_settings(self, arch_config: dict, form: FormComponent):
arch_config['optimize'] = form.get_single_select_component('opts').get_selected()
arch_config['aur_rebuild_detector'] = form.get_single_select_component('rebuild_detector').get_selected()
arch_config['optimize'] = form.get_component('opts', SingleSelectComponent).get_selected()
rebuild_no_bin = form.get_single_select_component('rebuild_detector_no_bin').get_selected()
rebuild_detect = form.get_component('rebuild_detector', SingleSelectComponent).get_selected()
arch_config['aur_rebuild_detector'] = rebuild_detect
rebuild_no_bin = form.get_component('rebuild_detector_no_bin', SingleSelectComponent).get_selected()
arch_config['aur_rebuild_detector_no_bin'] = rebuild_no_bin
arch_config['edit_aur_pkgbuild'] = form.get_single_select_component('edit_aur_pkgbuild').get_selected()
arch_config['aur_remove_build_dir'] = form.get_single_select_component('aur_remove_build_dir').get_selected()
arch_config['aur_build_dir'] = form.get_component('aur_build_dir').file_path
arch_config['aur_build_only_chosen'] = form.get_single_select_component('aur_build_only_chosen').get_selected()
arch_config['aur_idx_exp'] = form.get_text_input('aur_idx_exp').get_int_value()
arch_config['edit_aur_pkgbuild'] = form.get_component('edit_aur_pkgbuild', SingleSelectComponent).get_selected()
remove_build_dir = form.get_component('aur_remove_build_dir', SingleSelectComponent).get_selected()
arch_config['aur_remove_build_dir'] = remove_build_dir
build_chosen = form.get_component('aur_build_only_chosen', SingleSelectComponent).get_selected()
arch_config['aur_build_only_chosen'] = build_chosen
arch_config['aur_build_dir'] = form.get_component('aur_build_dir', FileChooserComponent).file_path
arch_config['aur_idx_exp'] = form.get_component('aur_idx_exp', TextInputComponent).get_int_value()
if not arch_config['aur_build_dir']:
arch_config['aur_build_dir'] = None
aur_enabled_select = form.get_single_select_component('aur')
aur_enabled_select = form.get_component('aur', SingleSelectComponent)
arch_config['aur'] = aur_enabled_select.get_selected()
if aur_enabled_select.changed() and arch_config['aur']:
@@ -3078,7 +3090,7 @@ class ArchManager(SoftwareManager, SettingsController):
form = component.get_component_by_idx(0, FormComponent)
if component.id == 'repo':
self._fill_general_settings(arch_config, form)
self.fill_general_settings(arch_config, form)
elif component.id == 'aur':
self._fill_aur_settings(arch_config, form)

View File

@@ -636,16 +636,26 @@ class DebianPackageManager(SoftwareManager, SettingsController):
yield SettingsView(self, panel)
def save_settings(self, component: PanelComponent) -> Tuple[bool, Optional[List[str]]]:
deb_config = self.configman.get_config()
config_ = self.configman.get_config()
container = component.get_component_by_idx(0, FormComponent)
deb_config['pkg_sources.app'] = container.get_single_select_component('pkg_sources.app').get_selected()
deb_config['index_apps.exp'] = container.get_text_input('index_apps.exp').get_int_value()
deb_config['sync_pkgs.time'] = container.get_text_input('sync_pkgs.time').get_int_value()
deb_config['suggestions.exp'] = container.get_text_input('suggestions.exp').get_int_value()
for prop, type_ in {'pkg_sources.app': SingleSelectComponent,
'index_apps.exp': TextInputComponent,
'sync_pkgs.time': TextInputComponent,
'suggestions.exp': TextInputComponent}.items():
comp = container.get_component(prop, type_)
val = None
if isinstance(comp, SingleSelectComponent):
val = comp.get_selected()
elif isinstance(comp, TextInputComponent):
val = comp.get_int_value()
config_[prop] = val
try:
self.configman.save_config(deb_config)
self.configman.save_config(config_)
return True, None
except:
return False, [traceback.format_exc()]

View File

@@ -631,7 +631,7 @@ class FlatpakManager(SoftwareManager, SettingsController):
def save_settings(self, component: PanelComponent) -> Tuple[bool, Optional[List[str]]]:
flatpak_config = self.configman.get_config()
form = component.get_component_by_idx(0, FormComponent)
flatpak_config['installation_level'] = form.get_single_select_component('install').get_selected()
flatpak_config['installation_level'] = form.get_component('install', SingleSelectComponent).get_selected()
try:
self.configman.save_config(flatpak_config)

View File

@@ -10,7 +10,7 @@ from bauh.api.abstract.disk import DiskCacheLoader
from bauh.api.abstract.handler import ProcessWatcher, TaskManager
from bauh.api.abstract.model import SoftwarePackage, PackageHistory, PackageUpdate, PackageSuggestion, \
SuggestionPriority, PackageStatus
from bauh.api.abstract.view import SingleSelectComponent, SelectViewType, InputOption, ViewComponent, PanelComponent, \
from bauh.api.abstract.view import SingleSelectComponent, SelectViewType, InputOption, PanelComponent, \
FormComponent, TextInputComponent
from bauh.api.exception import NoInternetException
from bauh.commons.boot import CreateConfigFile
@@ -439,8 +439,9 @@ class SnapManager(SoftwareManager, SettingsController):
max_width=max_width,
tip=self.i18n['snap.config.install_channel.tip'])
cat_exp_val = snap_config['categories_exp'] if isinstance(snap_config['categories_exp'], int) else ''
categories_exp = TextInputComponent(id_='snap_cat_exp',
value=snap_config['categories_exp'] if isinstance(snap_config['categories_exp'], int) else '',
value=cat_exp_val,
max_width=max_width,
only_int=True,
label=self.i18n['snap.config.categories_exp'],
@@ -450,14 +451,14 @@ class SnapManager(SoftwareManager, SettingsController):
yield SettingsView(self, panel)
def save_settings(self, component: PanelComponent) -> Tuple[bool, Optional[List[str]]]:
snap_config = self.configman.get_config()
config_ = self.configman.get_config()
form = component.get_component_by_idx(0, FormComponent)
snap_config['install_channel'] = form.get_single_select_component('snap_install_channel').get_selected()
snap_config['categories_exp'] = form.get_text_input('snap_cat_exp').get_int_value()
config_['install_channel'] = form.get_component('snap_install_channel', SingleSelectComponent).get_selected()
config_['categories_exp'] = form.get_component('snap_cat_exp', TextInputComponent).get_int_value()
try:
self.configman.save_config(snap_config)
self.configman.save_config(config_)
return True, None
except:
return False, [traceback.format_exc()]

View File

@@ -25,7 +25,7 @@ from bauh.api.abstract.model import SoftwarePackage, CustomSoftwareAction, Packa
PackageHistory, \
SuggestionPriority, PackageStatus
from bauh.api.abstract.view import MessageType, MultipleSelectComponent, InputOption, SingleSelectComponent, \
SelectViewType, TextInputComponent, FormComponent, FileChooserComponent, ViewComponent, PanelComponent
SelectViewType, TextInputComponent, FormComponent, FileChooserComponent, PanelComponent
from bauh.api.paths import DESKTOP_ENTRIES_DIR
from bauh.commons import resource
from bauh.commons.boot import CreateConfigFile
@@ -1152,27 +1152,27 @@ class WebApplicationManager(SoftwareManager, SettingsController):
yield SettingsView(self, PanelComponent([form_env]))
def save_settings(self, component: PanelComponent) -> Tuple[bool, Optional[List[str]]]:
web_config = self.configman.get_config()
config_ = self.configman.get_config()
form_env = component.get_component_by_idx(0, FormComponent)
form = component.get_component_by_idx(0, FormComponent)
electron_version = str(form_env.get_text_input('electron_branch').get_value()).strip()
web_config['environment']['electron']['version'] = electron_version
electron_version = str(form.get_component('electron_branch', TextInputComponent).get_value()).strip()
config_['environment']['electron']['version'] = electron_version
if len(web_config['environment']['electron']['version']) == 0:
web_config['environment']['electron']['version'] = None
if len(config_['environment']['electron']['version']) == 0:
config_['environment']['electron']['version'] = None
system_nativefier = form_env.get_single_select_component('nativefier').get_selected()
system_nativefier = form.get_component('nativefier', SingleSelectComponent).get_selected()
if system_nativefier and not nativefier.is_available():
return False, [self.i18n['web.settings.env.nativefier.system.not_installed'].format('Nativefier')]
web_config['environment']['system'] = system_nativefier
web_config['environment']['cache_exp'] = form_env.get_text_input('web_cache_exp').get_int_value()
web_config['suggestions']['cache_exp'] = form_env.get_text_input('web_sugs_exp').get_int_value()
config_['environment']['system'] = system_nativefier
config_['environment']['cache_exp'] = form.get_component('web_cache_exp', TextInputComponent).get_int_value()
config_['suggestions']['cache_exp'] = form.get_component('web_sugs_exp', TextInputComponent).get_int_value()
try:
self.configman.save_config(web_config)
self.configman.save_config(config_)
return True, None
except:
return False, [traceback.format_exc()]