11from typing import override
22
33from archinstall .lib .menu .abstract_menu import AbstractSubMenu
4- from archinstall .lib .models .application import ApplicationConfiguration , Audio , AudioConfiguration , BluetoothConfiguration
4+ from archinstall .lib .models .application import ApplicationConfiguration , Audio , AudioConfiguration , BluetoothConfiguration , PrintServiceConfiguration
55from archinstall .lib .translationhandler import tr
66from archinstall .tui .curses_menu import SelectMenu
77from archinstall .tui .menu_item import MenuItem , MenuItemGroup
@@ -48,6 +48,12 @@ def _define_menu_options(self) -> list[MenuItem]:
4848 preview_action = self ._prev_audio ,
4949 key = 'audio_config' ,
5050 ),
51+ MenuItem (
52+ text = tr ('Print service' ),
53+ action = select_print_service ,
54+ preview_action = self ._prev_print_service ,
55+ key = 'print_service_config' ,
56+ ),
5157 ]
5258
5359 def _prev_bluetooth (self , item : MenuItem ) -> str | None :
@@ -65,6 +71,15 @@ def _prev_audio(self, item: MenuItem) -> str | None:
6571 return f'{ tr ("Audio" )} : { config .audio .value } '
6672 return None
6773
74+ def _prev_print_service (self , item : MenuItem ) -> str | None :
75+ if item .value is not None :
76+ print_service_config : PrintServiceConfiguration = item .value
77+
78+ output = f'{ tr ("Print service" )} : '
79+ output += tr ('Enabled' ) if print_service_config .enabled else tr ('Disabled' )
80+ return output
81+ return None
82+
6883
6984def select_bluetooth (preset : BluetoothConfiguration | None ) -> BluetoothConfiguration | None :
7085 group = MenuItemGroup .yes_no ()
@@ -94,6 +109,34 @@ def select_bluetooth(preset: BluetoothConfiguration | None) -> BluetoothConfigur
94109 raise ValueError ('Unhandled result type' )
95110
96111
112+ def select_print_service (preset : PrintServiceConfiguration | None ) -> PrintServiceConfiguration | None :
113+ group = MenuItemGroup .yes_no ()
114+ group .focus_item = MenuItem .no ()
115+
116+ if preset is not None :
117+ group .set_selected_by_value (preset .enabled )
118+
119+ header = tr ('Would you like to configure the print service?' ) + '\n '
120+
121+ result = SelectMenu [bool ](
122+ group ,
123+ header = header ,
124+ alignment = Alignment .CENTER ,
125+ columns = 2 ,
126+ orientation = Orientation .HORIZONTAL ,
127+ allow_skip = True ,
128+ ).run ()
129+
130+ match result .type_ :
131+ case ResultType .Selection :
132+ enabled = result .item () == MenuItem .yes ()
133+ return PrintServiceConfiguration (enabled )
134+ case ResultType .Skip :
135+ return preset
136+ case _:
137+ raise ValueError ('Unhandled result type' )
138+
139+
97140def select_audio (preset : AudioConfiguration | None = None ) -> AudioConfiguration | None :
98141 items = [MenuItem (a .value , value = a ) for a in Audio ]
99142 group = MenuItemGroup (items )
0 commit comments