Solving some issues after merging flexible_menu (#948)
* Correct definition of btrfs standard layout * Solve issue #936 * make ask_for_a_timezone as synonym to ask_timezone * first batch of changes due to the last merges selector.text is a call to selector.menu_text A number of Generalmenu methods reappeared in their old version at Global * disk encryption password menu option restored
This commit is contained in:
parent
20e23dcecd
commit
ef558fdb45
|
|
@ -1,7 +1,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
import sys
|
import sys
|
||||||
import logging
|
import logging
|
||||||
from typing import Callable, Any, List, Iterator, Dict
|
from typing import Callable, Any, List, Iterator
|
||||||
|
|
||||||
from .menu import Menu
|
from .menu import Menu
|
||||||
from ..general import SysCommand, secret
|
from ..general import SysCommand, secret
|
||||||
|
|
@ -132,6 +132,10 @@ class Selector:
|
||||||
|
|
||||||
return f'{self._description} {current}'
|
return f'{self._description} {current}'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def text(self):
|
||||||
|
return self.menu_text()
|
||||||
|
|
||||||
def set_current_selection(self, current :str):
|
def set_current_selection(self, current :str):
|
||||||
self._current_selection = current
|
self._current_selection = current
|
||||||
|
|
||||||
|
|
@ -431,6 +435,7 @@ class GlobalMenu(GeneralMenu):
|
||||||
self._menu_options['!encryption-password'] = \
|
self._menu_options['!encryption-password'] = \
|
||||||
Selector(
|
Selector(
|
||||||
_('Set encryption password'),
|
_('Set encryption password'),
|
||||||
|
lambda: self._select_encrypted_password(),
|
||||||
display_func=lambda x: secret(x) if x else 'None',
|
display_func=lambda x: secret(x) if x else 'None',
|
||||||
dependencies=['harddrives'])
|
dependencies=['harddrives'])
|
||||||
self._menu_options['swap'] = \
|
self._menu_options['swap'] = \
|
||||||
|
|
@ -499,66 +504,9 @@ class GlobalMenu(GeneralMenu):
|
||||||
exec_func=lambda n,v: True if self._missing_configs() == 0 else False,
|
exec_func=lambda n,v: True if self._missing_configs() == 0 else False,
|
||||||
enabled=True)
|
enabled=True)
|
||||||
|
|
||||||
self._menu_options['abort'] = Selector(_('Abort'), enabled=True)
|
self._menu_options['abort'] = Selector(_('Abort'), exec_func=lambda n,v:exit(1), enabled=True)
|
||||||
|
|
||||||
def enable(self, selector_name, omit_if_set=False):
|
def _update_install(self,name :str = None ,result :Any = None):
|
||||||
arg = storage['arguments'].get(selector_name, None)
|
|
||||||
|
|
||||||
# don't display the menu option if it was defined already
|
|
||||||
if arg is not None and omit_if_set:
|
|
||||||
return
|
|
||||||
|
|
||||||
if self._menu_options.get(selector_name, None):
|
|
||||||
self._menu_options[selector_name].set_enabled()
|
|
||||||
if arg is not None:
|
|
||||||
self._menu_options[selector_name].set_current_selection(arg)
|
|
||||||
else:
|
|
||||||
print(f'No selector found: {selector_name}')
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
while True:
|
|
||||||
# # Before continuing, set the preferred keyboard layout/language in the current terminal.
|
|
||||||
# # This will just help the user with the next following questions.
|
|
||||||
self._set_kb_language()
|
|
||||||
|
|
||||||
enabled_menus = self._menus_to_enable()
|
|
||||||
menu_text = [m.menu_text() for m in enabled_menus.values()]
|
|
||||||
selection = Menu(_('Set/Modify the below options'), menu_text, sort=False).run()
|
|
||||||
|
|
||||||
if selection:
|
|
||||||
selection = selection.strip()
|
|
||||||
if str(_('Abort')) in selection:
|
|
||||||
exit(0)
|
|
||||||
elif str(_('Install')) in selection:
|
|
||||||
if self._missing_configs() == 0:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
self._process_selection(selection)
|
|
||||||
|
|
||||||
for key in self._menu_options:
|
|
||||||
sel = self._menu_options[key]
|
|
||||||
if key not in storage['arguments']:
|
|
||||||
storage['arguments'][key] = sel.current_selection
|
|
||||||
|
|
||||||
self._post_processing()
|
|
||||||
|
|
||||||
def _process_selection(self, selection):
|
|
||||||
# find the selected option in our option list
|
|
||||||
option = [[k, v] for k, v in self._menu_options.items() if v.menu_text().strip() == selection]
|
|
||||||
|
|
||||||
if len(option) != 1:
|
|
||||||
raise ValueError(f'Selection not found: {selection}')
|
|
||||||
|
|
||||||
selector_name = option[0][0]
|
|
||||||
selector = option[0][1]
|
|
||||||
result = selector.func()
|
|
||||||
self._menu_options[selector_name].set_current_selection(result)
|
|
||||||
storage['arguments'][selector_name] = result
|
|
||||||
|
|
||||||
self._update_install()
|
|
||||||
|
|
||||||
def _update_install(self):
|
|
||||||
text = self._install_text()
|
text = self._install_text()
|
||||||
self._menu_options.get('install').update_description(text)
|
self._menu_options.get('install').update_description(text)
|
||||||
|
|
||||||
|
|
@ -615,6 +563,12 @@ class GlobalMenu(GeneralMenu):
|
||||||
|
|
||||||
return password
|
return password
|
||||||
|
|
||||||
|
def _select_encrypted_password(self):
|
||||||
|
if passwd := get_password(prompt=str(_('Enter disk encryption password (leave blank for no encryption): '))):
|
||||||
|
return passwd
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
def _select_ntp(self) -> bool:
|
def _select_ntp(self) -> bool:
|
||||||
ntp = ask_ntp()
|
ntp = ask_ntp()
|
||||||
|
|
||||||
|
|
@ -668,37 +622,3 @@ class GlobalMenu(GeneralMenu):
|
||||||
storage['arguments']['!superusers'] = {**storage['arguments'].get('!superusers', {}), **superusers}
|
storage['arguments']['!superusers'] = {**storage['arguments'].get('!superusers', {}), **superusers}
|
||||||
|
|
||||||
return users
|
return users
|
||||||
|
|
||||||
def _set_kb_language(self):
|
|
||||||
# Before continuing, set the preferred keyboard layout/language in the current terminal.
|
|
||||||
# This will just help the user with the next following questions.
|
|
||||||
if len(storage['arguments'].get('keyboard-layout', [])):
|
|
||||||
set_keyboard_language(storage['arguments']['keyboard-layout'])
|
|
||||||
|
|
||||||
def _verify_selection_enabled(self, selection_name):
|
|
||||||
if selection := self._menu_options.get(selection_name, None):
|
|
||||||
if not selection.enabled:
|
|
||||||
return False
|
|
||||||
|
|
||||||
if len(selection.dependencies) > 0:
|
|
||||||
for d in selection.dependencies:
|
|
||||||
if not self._verify_selection_enabled(d) or self._menu_options.get(d).is_empty():
|
|
||||||
return False
|
|
||||||
|
|
||||||
if len(selection.dependencies_not) > 0:
|
|
||||||
for d in selection.dependencies_not:
|
|
||||||
if not self._menu_options.get(d).is_empty():
|
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
raise ValueError(f'No selection found: {selection_name}')
|
|
||||||
|
|
||||||
def _menus_to_enable(self) -> Dict[str, Selector]:
|
|
||||||
enabled_menus = {}
|
|
||||||
|
|
||||||
for name, selection in self._menu_options.items():
|
|
||||||
if self._verify_selection_enabled(name):
|
|
||||||
enabled_menus[name] = selection
|
|
||||||
|
|
||||||
return enabled_menus
|
|
||||||
|
|
@ -29,11 +29,6 @@ class OnlyHDMenu(archinstall.GlobalMenu):
|
||||||
def check(s):
|
def check(s):
|
||||||
return self.option(s).has_selection()
|
return self.option(s).has_selection()
|
||||||
|
|
||||||
# Get disk encryption password (or skip if blank)
|
|
||||||
if archinstall.arguments.get('!encryption-password', None) is None:
|
|
||||||
if passwd := archinstall.get_password(prompt=str(_('Enter disk encryption password (leave blank for no encryption): '))):
|
|
||||||
archinstall.arguments['!encryption-password'] = passwd
|
|
||||||
|
|
||||||
_, missing = self.mandatory_overview()
|
_, missing = self.mandatory_overview()
|
||||||
if check('harddrives'):
|
if check('harddrives'):
|
||||||
if not self.option('harddrives').is_empty() and not check('disk_layouts'):
|
if not self.option('harddrives').is_empty() and not check('disk_layouts'):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue