[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

@@ -1,6 +1,6 @@
from abc import ABC from abc import ABC
from enum import Enum from enum import Enum
from typing import List, Set, Optional, Dict, TypeVar, Type from typing import List, Set, Optional, Dict, TypeVar, Type, Union, Tuple
class MessageType(Enum): class MessageType(Enum):
@@ -30,6 +30,39 @@ class ViewComponent(ABC):
V = TypeVar('V', bound=ViewComponent) V = TypeVar('V', bound=ViewComponent)
class ViewContainer(ViewComponent, ABC):
"""
Represents a GUI component composed by other components
"""
def __init__(self, components: Union[List[ViewComponent], Tuple[ViewComponent]],
id_: Optional[str] = None,
observers: Optional[List[ViewObserver]] = None):
super(ViewContainer, self).__init__(id_=id_, observers=observers)
self.components = components
self.component_map = {c.id: c for c in components if c.id is not None} if components else None
def get_component(self, id_: str, type_: Type[V] = ViewComponent) -> Optional[V]:
if self.component_map:
instance = self.component_map.get(id_)
if instance:
if isinstance(instance, type_):
return instance
raise Exception(f"The {ViewComponent.__class__.__name__} (id={id_}) is not an "
f"instance of '{type_.__name__}'")
def get_component_by_idx(self, idx: int, type_: Type[V]) -> Optional[V]:
if self.components and idx < len(self.components):
c = self.components[idx]
if isinstance(c, type_):
return c
raise Exception(f"The {ViewComponent.__class__.__name__} at index {idx} is not an "
f"instance of '{type_.__name__}'")
class SpacerComponent(ViewComponent): class SpacerComponent(ViewComponent):
def __init__(self): def __init__(self):
@@ -205,45 +238,15 @@ class TextInputComponent(ViewComponent):
return self.label.capitalize() if self.capitalize_label else self.label return self.label.capitalize() if self.capitalize_label else self.label
class FormComponent(ViewComponent): class FormComponent(ViewContainer):
def __init__(self, components: List[ViewComponent], label: str = None, spaces: bool = True, id_: str = None, def __init__(self, components: List[ViewComponent], label: str = None, spaces: bool = True, id_: str = None,
min_width: Optional[int] = None): min_width: Optional[int] = None):
super(FormComponent, self).__init__(id_=id_) super(FormComponent, self).__init__(id_=id_, components=components)
self.label = label self.label = label
self.spaces = spaces self.spaces = spaces
self.components = components
self.component_map = {c.id: c for c in components if c.id} if components else None
self.min_width = min_width self.min_width = min_width
def get_component(self, id_: str) -> Optional[ViewComponent]:
if self.component_map:
return self.component_map.get(id_)
def get_single_select_component(self, id_: str) -> Optional[SingleSelectComponent]:
comp = self.get_component(id_)
if comp:
if not isinstance(comp, SingleSelectComponent):
raise Exception("'{}' is not a {}".format(id_, SingleSelectComponent.__class__.__name__))
return comp
def get_form_component(self, id_: str) -> Optional["FormComponent"]:
comp = self.get_component(id_)
if comp:
if not isinstance(comp, FormComponent):
raise Exception("'{}' is not a {}".format(id_, FormComponent.__class__.__name__))
return comp
def get_text_input(self, id_) -> Optional[TextInputComponent]:
comp = self.get_component(id_)
if comp:
if not isinstance(comp, TextInputComponent):
raise Exception("'{}' is not a {}".format(id_, TextInputComponent.__class__.__name__))
return comp
class FileChooserComponent(ViewComponent): class FileChooserComponent(ViewComponent):
@@ -309,38 +312,7 @@ class RangeInputComponent(InputViewComponent):
self.max_width = max_width self.max_width = max_width
class PanelComponent(ViewComponent): class PanelComponent(ViewContainer):
def __init__(self, components: List[ViewComponent], id_: str = None): def __init__(self, components: List[ViewComponent], id_: str = None):
super(PanelComponent, self).__init__(id_=id_) super(PanelComponent, self).__init__(id_=id_, components=components)
self.components = components
self.component_map = {c.id: c for c in components if c.id is not None} if components else None
def get_component(self, id_: str) -> Optional[ViewComponent]:
if self.component_map:
return self.component_map.get(id_)
def get_component_by_idx(self, idx: int, type_: Type[V]) -> Optional[V]:
if self.components and idx < len(self.components):
c = self.components[idx]
if isinstance(c, type_):
return c
raise Exception(f"The {ViewComponent.__class__.__name__} at index {idx} is not an "
f"instance of '{type_.__name__}'")
def get_form_component(self, id_: str) -> Optional[FormComponent]:
comp = self.get_component(id_)
if comp:
if not isinstance(comp, FormComponent):
raise Exception("'{}' is not a {}".format(id_, FormComponent.__class__.__name__))
return comp
def get_text_input(self, id_) -> Optional[TextInputComponent]:
comp = self.get_component(id_)
if comp:
if not isinstance(comp, TextInputComponent):
raise Exception("'{}' is not a {}".format(id_, TextInputComponent.__class__.__name__))
return comp

View File

@@ -851,20 +851,20 @@ class AppImageManager(SoftwareManager, SettingsController):
traceback.print_exc() traceback.print_exc()
def get_settings(self) -> Optional[Generator[SettingsView, None, None]]: 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) max_width = floor(self.context.screen_width * 0.15)
comps = [ comps = [
TextInputComponent(label=self.i18n['appimage.config.database.expiration'], TextInputComponent(label=self.i18n['appimage.config.database.expiration'],
value=int(appimage_config['database']['expiration']) if isinstance( value=int(config_['database']['expiration']) if isinstance(
appimage_config['database']['expiration'], int) else '', config_['database']['expiration'], int) else '',
tooltip=self.i18n['appimage.config.database.expiration.tip'], tooltip=self.i18n['appimage.config.database.expiration.tip'],
only_int=True, only_int=True,
max_width=max_width, max_width=max_width,
id_='appim_db_exp'), id_='appim_db_exp'),
TextInputComponent(label=self.i18n['appimage.config.suggestions.expiration'], TextInputComponent(label=self.i18n['appimage.config.suggestions.expiration'],
value=int(appimage_config['suggestions']['expiration']) if isinstance( value=int(config_['suggestions']['expiration']) if isinstance(
appimage_config['suggestions']['expiration'], int) else '', config_['suggestions']['expiration'], int) else '',
tooltip=self.i18n['appimage.config.suggestions.expiration.tip'], tooltip=self.i18n['appimage.config.suggestions.expiration.tip'],
only_int=True, only_int=True,
max_width=max_width, max_width=max_width,
@@ -874,14 +874,14 @@ class AppImageManager(SoftwareManager, SettingsController):
yield SettingsView(self, PanelComponent([FormComponent(components=comps)])) yield SettingsView(self, PanelComponent([FormComponent(components=comps)]))
def save_settings(self, component: PanelComponent) -> Tuple[bool, Optional[List[str]]]: 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) form = component.get_component_by_idx(0, FormComponent)
appimage_config['database']['expiration'] = form.get_text_input('appim_db_exp').get_int_value() config_['database']['expiration'] = form.get_component('appim_db_exp', TextInputComponent).get_int_value()
appimage_config['suggestions']['expiration'] = form.get_text_input('appim_sugs_exp').get_int_value() config_['suggestions']['expiration'] = form.get_component('appim_sugs_exp', TextInputComponent).get_int_value()
try: try:
self.configman.save_config(appimage_config) self.configman.save_config(config_)
return True, None return True, None
except: except:
return False, [traceback.format_exc()] 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_general_settings(arch_config, max_width)
yield self._get_aur_settings(arch_config, max_width) yield self._get_aur_settings(arch_config, max_width)
def _fill_general_settings(self, arch_config: dict, form: FormComponent): @staticmethod
arch_config['repositories'] = form.get_single_select_component('repos').get_selected() def fill_general_settings(arch_config: dict, form: FormComponent):
arch_config['sync_databases'] = form.get_single_select_component('sync_dbs').get_selected() arch_config['repositories'] = form.get_component('repos', SingleSelectComponent).get_selected()
arch_config['sync_databases_startup'] = form.get_single_select_component('sync_dbs_start').get_selected() arch_config['sync_databases'] = form.get_component('sync_dbs', SingleSelectComponent).get_selected()
arch_config['clean_cached'] = form.get_single_select_component('clean_cached').get_selected() arch_config['clean_cached'] = form.get_component('clean_cached', SingleSelectComponent).get_selected()
arch_config['refresh_mirrors_startup'] = form.get_single_select_component('ref_mirs').get_selected() arch_config['refresh_mirrors_startup'] = form.get_component('ref_mirs', SingleSelectComponent).get_selected()
arch_config['mirrors_sort_limit'] = form.get_text_input('mirrors_sort_limit').get_int_value() arch_config['mirrors_sort_limit'] = form.get_component('mirrors_sort_limit', TextInputComponent).get_int_value()
arch_config['repositories_mthread_download'] = form.get_single_select_component('mthread_download').get_selected() arch_config['automatch_providers'] = form.get_component('autoprovs', SingleSelectComponent).get_selected()
arch_config['automatch_providers'] = form.get_single_select_component('autoprovs').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 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 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 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['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): def _fill_aur_settings(self, arch_config: dict, form: FormComponent):
arch_config['optimize'] = form.get_single_select_component('opts').get_selected() arch_config['optimize'] = form.get_component('opts', SingleSelectComponent).get_selected()
arch_config['aur_rebuild_detector'] = form.get_single_select_component('rebuild_detector').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['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['edit_aur_pkgbuild'] = form.get_component('edit_aur_pkgbuild', SingleSelectComponent).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 remove_build_dir = form.get_component('aur_remove_build_dir', SingleSelectComponent).get_selected()
arch_config['aur_build_only_chosen'] = form.get_single_select_component('aur_build_only_chosen').get_selected() arch_config['aur_remove_build_dir'] = remove_build_dir
arch_config['aur_idx_exp'] = form.get_text_input('aur_idx_exp').get_int_value()
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']: if not arch_config['aur_build_dir']:
arch_config['aur_build_dir'] = None 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() arch_config['aur'] = aur_enabled_select.get_selected()
if aur_enabled_select.changed() and arch_config['aur']: 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) form = component.get_component_by_idx(0, FormComponent)
if component.id == 'repo': if component.id == 'repo':
self._fill_general_settings(arch_config, form) self.fill_general_settings(arch_config, form)
elif component.id == 'aur': elif component.id == 'aur':
self._fill_aur_settings(arch_config, form) self._fill_aur_settings(arch_config, form)

View File

@@ -636,16 +636,26 @@ class DebianPackageManager(SoftwareManager, SettingsController):
yield SettingsView(self, panel) yield SettingsView(self, panel)
def save_settings(self, component: PanelComponent) -> Tuple[bool, Optional[List[str]]]: 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) 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() for prop, type_ in {'pkg_sources.app': SingleSelectComponent,
deb_config['sync_pkgs.time'] = container.get_text_input('sync_pkgs.time').get_int_value() 'index_apps.exp': TextInputComponent,
deb_config['suggestions.exp'] = container.get_text_input('suggestions.exp').get_int_value() '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: try:
self.configman.save_config(deb_config) self.configman.save_config(config_)
return True, None return True, None
except: except:
return False, [traceback.format_exc()] 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]]]: def save_settings(self, component: PanelComponent) -> Tuple[bool, Optional[List[str]]]:
flatpak_config = self.configman.get_config() flatpak_config = self.configman.get_config()
form = component.get_component_by_idx(0, FormComponent) 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: try:
self.configman.save_config(flatpak_config) 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.handler import ProcessWatcher, TaskManager
from bauh.api.abstract.model import SoftwarePackage, PackageHistory, PackageUpdate, PackageSuggestion, \ from bauh.api.abstract.model import SoftwarePackage, PackageHistory, PackageUpdate, PackageSuggestion, \
SuggestionPriority, PackageStatus 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 FormComponent, TextInputComponent
from bauh.api.exception import NoInternetException from bauh.api.exception import NoInternetException
from bauh.commons.boot import CreateConfigFile from bauh.commons.boot import CreateConfigFile
@@ -439,8 +439,9 @@ class SnapManager(SoftwareManager, SettingsController):
max_width=max_width, max_width=max_width,
tip=self.i18n['snap.config.install_channel.tip']) 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', 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, max_width=max_width,
only_int=True, only_int=True,
label=self.i18n['snap.config.categories_exp'], label=self.i18n['snap.config.categories_exp'],
@@ -450,14 +451,14 @@ class SnapManager(SoftwareManager, SettingsController):
yield SettingsView(self, panel) yield SettingsView(self, panel)
def save_settings(self, component: PanelComponent) -> Tuple[bool, Optional[List[str]]]: 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) form = component.get_component_by_idx(0, FormComponent)
snap_config['install_channel'] = form.get_single_select_component('snap_install_channel').get_selected() config_['install_channel'] = form.get_component('snap_install_channel', SingleSelectComponent).get_selected()
snap_config['categories_exp'] = form.get_text_input('snap_cat_exp').get_int_value() config_['categories_exp'] = form.get_component('snap_cat_exp', TextInputComponent).get_int_value()
try: try:
self.configman.save_config(snap_config) self.configman.save_config(config_)
return True, None return True, None
except: except:
return False, [traceback.format_exc()] return False, [traceback.format_exc()]

View File

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

View File

@@ -359,104 +359,131 @@ class GenericSettingsManager(SettingsController):
# general # general
gen_form = general.get_component_by_idx(0, FormComponent) gen_form = general.get_component_by_idx(0, FormComponent)
locale = gen_form.get_single_select_component('locale').get_selected() locale = gen_form.get_component('locale', SingleSelectComponent).get_selected()
if locale != self.i18n.current_key: if locale != self.i18n.current_key:
core_config['locale'] = locale core_config['locale'] = locale
core_config['system']['notifications'] = gen_form.get_single_select_component('sys_notify').get_selected() notifications = gen_form.get_component('sys_notify', SingleSelectComponent).get_selected()
core_config['suggestions']['enabled'] = gen_form.get_single_select_component('sugs_enabled').get_selected() core_config['system']['notifications'] = notifications
core_config['store_root_password'] = gen_form.get_single_select_component('store_pwd').get_selected()
sugs_by_type = gen_form.get_text_input('sugs_by_type').get_int_value() suggestions = gen_form.get_component('sugs_enabled', SingleSelectComponent).get_selected()
core_config['suggestions']['enabled'] = suggestions
store_root_pwd = gen_form.get_component('store_pwd', SingleSelectComponent).get_selected()
core_config['store_root_password'] = store_root_pwd
sugs_by_type = gen_form.get_component('sugs_by_type', TextInputComponent).get_int_value()
core_config['suggestions']['by_type'] = sugs_by_type core_config['suggestions']['by_type'] = sugs_by_type
core_config['updates']['ask_for_reboot'] = gen_form.get_single_select_component('ask_for_reboot').get_selected() ask_reboot = gen_form.get_component('ask_for_reboot', SingleSelectComponent).get_selected()
core_config['boot']['load_apps'] = gen_form.get_single_select_component('boot.load_apps').get_selected() core_config['updates']['ask_for_reboot'] = ask_reboot
load_apps = gen_form.get_component('boot.load_apps', SingleSelectComponent).get_selected()
core_config['boot']['load_apps'] = load_apps
# advanced # advanced
adv_form = advanced.get_component_by_idx(0, FormComponent) adv_form = advanced.get_component_by_idx(0, FormComponent)
download_mthreaded = adv_form.get_single_select_component('down_mthread').get_selected() download_mthreaded = adv_form.get_component('down_mthread', SingleSelectComponent).get_selected()
core_config['download']['multithreaded'] = download_mthreaded core_config['download']['multithreaded'] = download_mthreaded
mthread_client = adv_form.get_single_select_component('mthread_client').get_selected() mthread_client = adv_form.get_component('mthread_client', SingleSelectComponent).get_selected()
core_config['download']['multithreaded_client'] = mthread_client core_config['download']['multithreaded_client'] = mthread_client
if isinstance(self.file_downloader, AdaptableFileDownloader): if isinstance(self.file_downloader, AdaptableFileDownloader):
self.file_downloader.multithread_client = mthread_client self.file_downloader.multithread_client = mthread_client
self.file_downloader.multithread_enabled = download_mthreaded self.file_downloader.multithread_enabled = download_mthreaded
single_dep_check = adv_form.get_single_select_component('dep_check').get_selected() single_dep_check = adv_form.get_component('dep_check', SingleSelectComponent).get_selected()
core_config['system']['single_dependency_checking'] = single_dep_check core_config['system']['single_dependency_checking'] = single_dep_check
data_exp = adv_form.get_text_input('data_exp').get_int_value() data_exp = adv_form.get_component('data_exp', TextInputComponent).get_int_value()
core_config['memory_cache']['data_expiration'] = data_exp core_config['memory_cache']['data_expiration'] = data_exp
icon_exp = adv_form.get_text_input('icon_exp').get_int_value() icon_exp = adv_form.get_component('icon_exp', TextInputComponent).get_int_value()
core_config['memory_cache']['icon_expiration'] = icon_exp core_config['memory_cache']['icon_expiration'] = icon_exp
trim_after_upgrade = adv_form.get_single_select_component('trim_after_upgrade').get_selected() trim_after_upgrade = adv_form.get_component('trim_after_upgrade', SingleSelectComponent).get_selected()
core_config['disk']['trim']['after_upgrade'] = trim_after_upgrade core_config['disk']['trim']['after_upgrade'] = trim_after_upgrade
# backup # backup
if backup: if backup:
bkp_form = backup.get_component_by_idx(0, FormComponent) bkp_form = backup.get_component_by_idx(0, FormComponent)
core_config['backup']['enabled'] = bkp_form.get_single_select_component('enabled').get_selected() core_config['backup']['enabled'] = bkp_form.get_component('enabled', SingleSelectComponent).get_selected()
core_config['backup']['mode'] = bkp_form.get_single_select_component('mode').get_selected() core_config['backup']['mode'] = bkp_form.get_component('mode', SingleSelectComponent).get_selected()
core_config['backup']['type'] = bkp_form.get_single_select_component('type').get_selected() core_config['backup']['type'] = bkp_form.get_component('type', SingleSelectComponent).get_selected()
core_config['backup']['remove_method'] = bkp_form.get_single_select_component('remove_method').get_selected() core_config['backup']['install'] = bkp_form.get_component('install', SingleSelectComponent).get_selected()
core_config['backup']['install'] = bkp_form.get_single_select_component('install').get_selected() core_config['backup']['upgrade'] = bkp_form.get_component('upgrade', SingleSelectComponent).get_selected()
core_config['backup']['uninstall'] = bkp_form.get_single_select_component('uninstall').get_selected()
core_config['backup']['upgrade'] = bkp_form.get_single_select_component('upgrade').get_selected() bkp_remove_method = bkp_form.get_component('remove_method', SingleSelectComponent).get_selected()
core_config['backup']['downgrade'] = bkp_form.get_single_select_component('downgrade').get_selected() core_config['backup']['remove_method'] = bkp_remove_method
bkp_uninstall = bkp_form.get_component('uninstall', SingleSelectComponent).get_selected()
core_config['backup']['uninstall'] = bkp_uninstall
bkp_downgrade = bkp_form.get_component('downgrade', SingleSelectComponent).get_selected()
core_config['backup']['downgrade'] = bkp_downgrade
# tray # tray
tray_form = tray.get_component_by_idx(0, FormComponent) tray_form = tray.get_component_by_idx(0, FormComponent)
core_config['updates']['check_interval'] = tray_form.get_text_input('updates_interval').get_int_value()
def_icon_path = tray_form.get_component('def_icon').file_path updates_interval = tray_form.get_component('updates_interval', TextInputComponent).get_int_value()
core_config['updates']['check_interval'] = updates_interval
def_icon_path = tray_form.get_component('def_icon', FileChooserComponent).file_path
core_config['ui']['tray']['default_icon'] = def_icon_path if def_icon_path else None core_config['ui']['tray']['default_icon'] = def_icon_path if def_icon_path else None
up_icon_path = tray_form.get_component('up_icon').file_path up_icon_path = tray_form.get_component('up_icon', FileChooserComponent).file_path
core_config['ui']['tray']['updates_icon'] = up_icon_path if up_icon_path else None core_config['ui']['tray']['updates_icon'] = up_icon_path if up_icon_path else None
# ui # ui
ui_form = ui.get_component_by_idx(0, FormComponent) ui_form = ui.get_component_by_idx(0, FormComponent)
core_config['download']['icons'] = ui_form.get_single_select_component('down_icons').get_selected() core_config['download']['icons'] = ui_form.get_component('down_icons', SingleSelectComponent).get_selected()
core_config['ui']['hdpi'] = ui_form.get_single_select_component('hdpi').get_selected() core_config['ui']['hdpi'] = ui_form.get_component('hdpi', SingleSelectComponent).get_selected()
previous_autoscale = core_config['ui']['auto_scale'] previous_autoscale = core_config['ui']['auto_scale']
core_config['ui']['auto_scale'] = ui_form.get_single_select_component('auto_scale').get_selected() core_config['ui']['auto_scale'] = ui_form.get_component('auto_scale', SingleSelectComponent).get_selected()
if previous_autoscale and not core_config['ui']['auto_scale']: if previous_autoscale and not core_config['ui']['auto_scale']:
self.logger.info("Deleting environment variable QT_AUTO_SCREEN_SCALE_FACTOR") self.logger.info("Deleting environment variable QT_AUTO_SCREEN_SCALE_FACTOR")
del os.environ['QT_AUTO_SCREEN_SCALE_FACTOR'] del os.environ['QT_AUTO_SCREEN_SCALE_FACTOR']
core_config['ui']['scale_factor'] = ui_form.get_component('scalef').value / 100 core_config['ui']['scale_factor'] = ui_form.get_component('scalef').value / 100
core_config['ui']['table']['max_displayed'] = ui_form.get_text_input('table_max').get_int_value()
style = ui_form.get_single_select_component('style').get_selected() table_max = ui_form.get_component('table_max', TextInputComponent).get_int_value()
core_config['ui']['table']['max_displayed'] = table_max
style = ui_form.get_component('style', SingleSelectComponent).get_selected()
if core_config['ui']['qt_style']:
cur_style = core_config['ui']['qt_style']
else:
cur_style = QApplication.instance().property('qt_style')
cur_style = core_config['ui']['qt_style'] if core_config['ui']['qt_style'] else QApplication.instance().property('qt_style')
if style != cur_style: if style != cur_style:
core_config['ui']['qt_style'] = style core_config['ui']['qt_style'] = style
QApplication.instance().setProperty('qt_style', style) QApplication.instance().setProperty('qt_style', style)
core_config['ui']['system_theme'] = ui_form.get_single_select_component('system_theme').get_selected() core_config['ui']['system_theme'] = ui_form.get_component('system_theme', SingleSelectComponent).get_selected()
# gems # gems
checked_gems = gems_panel.components[1].get_component('gems').get_selected_values() checked_gems = gems_panel.components[1].get_component('gems', MultipleSelectComponent).get_selected_values()
for man in self.managers: for man in self.managers:
modname = man.__module__.split('.')[-2] modname = man.__module__.split('.')[-2]
enabled = modname in checked_gems enabled = modname in checked_gems
man.set_enabled(enabled) man.set_enabled(enabled)
core_config['gems'] = None if core_config['gems'] is None and len(checked_gems) == len(self.managers) else checked_gems if core_config['gems'] is None and len(checked_gems) == len(self.managers):
sel_gems = None
else:
sel_gems = checked_gems
core_config['gems'] = sel_gems
try: try:
self.configman.save_config(core_config) self.configman.save_config(core_config)