@@ -58,7 +58,8 @@ pub enum ServiceAction {
5858 Enable ,
5959 Disable ,
6060 RefreshAll ,
61- ToggleFilter
61+ ToggleFilter ,
62+ ToggleMask
6263}
6364
6465pub struct TableServices {
@@ -219,6 +220,54 @@ impl TableServices {
219220 return ;
220221 }
221222
223+ self . set_ignore_key_events ( true ) ;
224+
225+ match key. code {
226+ KeyCode :: Char ( 'r' ) => {
227+ self . sender . send ( AppEvent :: Action ( Actions :: ServiceAction ( ServiceAction :: Restart ) ) ) . unwrap ( ) ;
228+ return ;
229+ }
230+ KeyCode :: Char ( 's' ) => {
231+ self . sender . send ( AppEvent :: Action ( Actions :: ServiceAction ( ServiceAction :: Start ) ) ) . unwrap ( ) ;
232+ return ;
233+ }
234+ KeyCode :: Char ( 'x' ) => {
235+ self . sender . send ( AppEvent :: Action ( Actions :: ServiceAction ( ServiceAction :: Stop ) ) ) . unwrap ( ) ;
236+ return ;
237+ }
238+ KeyCode :: Char ( 'e' ) => {
239+ self . sender . send ( AppEvent :: Action ( Actions :: ServiceAction ( ServiceAction :: Enable ) ) ) . unwrap ( ) ;
240+ return ;
241+ }
242+ KeyCode :: Char ( 'd' ) => {
243+ self . sender . send ( AppEvent :: Action ( Actions :: ServiceAction ( ServiceAction :: Disable ) ) ) . unwrap ( ) ;
244+ return ;
245+ }
246+ KeyCode :: Char ( 'u' ) => {
247+ self . sender . send ( AppEvent :: Action ( Actions :: ServiceAction ( ServiceAction :: RefreshAll ) ) ) . unwrap ( ) ;
248+ return ;
249+ }
250+ KeyCode :: Char ( 'v' ) => {
251+ self . sender . send ( AppEvent :: Action ( Actions :: GoLog ) ) . unwrap ( ) ;
252+ return ;
253+ }
254+ KeyCode :: Char ( 'f' ) => {
255+ self . sender . send ( AppEvent :: Action ( Actions :: ServiceAction ( ServiceAction :: ToggleFilter ) ) ) . unwrap ( ) ;
256+ return ;
257+ }
258+ KeyCode :: Char ( 'c' ) => {
259+ self . sender . send ( AppEvent :: Action ( Actions :: GoDetails ) ) . unwrap ( ) ;
260+ return ;
261+ }
262+ KeyCode :: Char ( 'm' ) => {
263+ self . sender . send ( AppEvent :: Action ( Actions :: ServiceAction ( ServiceAction :: ToggleMask ) ) ) . unwrap ( ) ;
264+ return ;
265+ }
266+ _ => { }
267+ }
268+
269+ self . set_ignore_key_events ( false ) ;
270+
222271 let up_keys = [ KeyCode :: Up , KeyCode :: Char ( 'k' ) ] ;
223272 let down_keys = [ KeyCode :: Down , KeyCode :: Char ( 'j' ) ] ;
224273
@@ -227,17 +276,6 @@ impl TableServices {
227276 code if up_keys. contains ( & code) => self . select_previous ( ) ,
228277 KeyCode :: PageDown => self . select_page_down ( ) ,
229278 KeyCode :: PageUp => self . select_page_up ( ) ,
230- KeyCode :: Char ( 'r' ) => self . act_on_selected_service ( ServiceAction :: Restart ) ,
231- KeyCode :: Char ( 's' ) => self . act_on_selected_service ( ServiceAction :: Start ) ,
232- KeyCode :: Char ( 'e' ) => self . act_on_selected_service ( ServiceAction :: Enable ) ,
233- KeyCode :: Char ( 'd' ) => self . act_on_selected_service ( ServiceAction :: Disable ) ,
234- KeyCode :: Char ( 'u' ) => self . act_on_selected_service ( ServiceAction :: RefreshAll ) ,
235- KeyCode :: Char ( 'x' ) => self . act_on_selected_service ( ServiceAction :: Stop ) ,
236- KeyCode :: Char ( 'v' ) => self . sender . send ( AppEvent :: Action ( Actions :: GoLog ) ) . unwrap ( ) ,
237- KeyCode :: Char ( 'f' ) => self . act_on_selected_service ( ServiceAction :: ToggleFilter ) ,
238- KeyCode :: Char ( 'c' ) => {
239- self . sender . send ( AppEvent :: Action ( Actions :: GoDetails ) ) . unwrap ( ) ;
240- }
241279 _ => { }
242280 }
243281 }
@@ -298,11 +336,20 @@ impl TableServices {
298336 }
299337 }
300338
301- fn act_on_selected_service ( & mut self , action : ServiceAction ) {
339+ pub fn act_on_selected_service ( & mut self , action : ServiceAction ) {
302340 if let Some ( service) = self . get_selected_service ( ) {
303341 let binding_usecase = self . usecase . clone ( ) ;
304342 let usecase = binding_usecase. borrow ( ) ;
305343 match action {
344+ ServiceAction :: ToggleMask => {
345+ match service. state ( ) . file ( ) {
346+ "masked" => self . handle_service_result ( usecase. unmask_service ( service) ) ,
347+ "masked-runtime" => self . handle_service_result ( usecase. unmask_service ( service) ) ,
348+ _ => self . handle_service_result ( usecase. mask_service ( service) ) ,
349+ }
350+ self . fetch_services ( ) ;
351+ self . fetch_and_refresh ( self . old_filter_text . clone ( ) ) ;
352+ } ,
306353 ServiceAction :: Start => self . handle_service_result ( usecase. start_service ( service) ) ,
307354 ServiceAction :: Stop => self . handle_service_result ( usecase. stop_service ( service) ) ,
308355 ServiceAction :: Restart => self . handle_service_result ( usecase. restart_service ( service) ) ,
@@ -319,6 +366,7 @@ impl TableServices {
319366 } ,
320367 }
321368 }
369+ self . set_ignore_key_events ( false ) ;
322370 }
323371
324372 fn handle_service_result ( & mut self , result : Result < Service , Box < dyn Error > > ) {
@@ -348,7 +396,7 @@ impl TableServices {
348396 ) ) ) ;
349397
350398 help_text. push ( Line :: from (
351- "Navigate: ↑/↓ | Switch tab: ←/→ | Toggle Filter : f | Start: s | Stop: x | Restart: r | Enable: e | Disable: d | Refresh all : u | Log: v | Unit File: c"
399+ "Navigate: ↑/↓ | Switch tab: ←/→ | List all : f | Start: s | Stop: x | Restart: r | Enable: e | Disable: d | Mask/Unmask: m | Refresh list : u | Log: v | Unit File: c"
352400 ) ) ;
353401 }
354402
0 commit comments