11from typing import override
22
33from archinstall .lib .menu .abstract_menu import AbstractSubMenu
4- from archinstall .lib .models .application import ApplicationConfiguration , BluetoothConfiguration
4+ from archinstall .lib .models .application import ApplicationConfiguration , Audio , AudioConfiguration , BluetoothConfiguration
55from archinstall .lib .translationhandler import tr
66from archinstall .tui .curses_menu import SelectMenu
77from archinstall .tui .menu_item import MenuItem , MenuItemGroup
8- from archinstall .tui .types import Alignment , Orientation
8+ from archinstall .tui .result import ResultType
9+ from archinstall .tui .types import Alignment , FrameProperties , Orientation
910
1011
1112class ApplicationMenu (AbstractSubMenu [ApplicationConfiguration ]):
@@ -41,6 +42,12 @@ def _define_menu_options(self) -> list[MenuItem]:
4142 preview_action = self ._prev_bluetooth ,
4243 key = 'bluetooth_config' ,
4344 ),
45+ MenuItem (
46+ text = tr ('Audio' ),
47+ action = select_audio ,
48+ preview_action = self ._prev_audio ,
49+ key = 'audio_config' ,
50+ ),
4451 ]
4552
4653 def _prev_bluetooth (self , item : MenuItem ) -> str | None :
@@ -52,6 +59,12 @@ def _prev_bluetooth(self, item: MenuItem) -> str | None:
5259 return output
5360 return None
5461
62+ def _prev_audio (self , item : MenuItem ) -> str | None :
63+ if item .value is not None :
64+ config : AudioConfiguration = item .value
65+ return f'{ tr ("Audio" )} : { config .audio .value } '
66+ return None
67+
5568
5669def select_bluetooth (preset : BluetoothConfiguration | None ) -> BluetoothConfiguration | None :
5770 group = MenuItemGroup .yes_no ()
@@ -74,3 +87,26 @@ def select_bluetooth(preset: BluetoothConfiguration | None) -> BluetoothConfigur
7487 enabled = result .item () == MenuItem .yes ()
7588
7689 return BluetoothConfiguration (enabled )
90+
91+
92+ def select_audio (preset : AudioConfiguration | None = None ) -> AudioConfiguration | None :
93+ items = [MenuItem (a .value , value = a ) for a in Audio ]
94+ group = MenuItemGroup (items )
95+
96+ if preset :
97+ group .set_focus_by_value (preset .audio )
98+
99+ result = SelectMenu [Audio ](
100+ group ,
101+ allow_skip = True ,
102+ alignment = Alignment .CENTER ,
103+ frame = FrameProperties .min (tr ('Audio' )),
104+ ).run ()
105+
106+ match result .type_ :
107+ case ResultType .Skip :
108+ return preset
109+ case ResultType .Selection :
110+ return AudioConfiguration (audio = result .get_value ())
111+ case ResultType .Reset :
112+ raise ValueError ('Unhandled result type' )
0 commit comments