@@ -11,6 +11,130 @@ use iwdrs::modes::Mode;
1111use tokio:: sync:: mpsc:: UnboundedSender ;
1212use tui_input:: backend:: crossterm:: EventHandler ;
1313
14+ async fn toggle_connect ( app : & mut App , sender : UnboundedSender < Event > ) -> AppResult < ( ) > {
15+ match app. focused_block {
16+ FocusedBlock :: NewNetworks => {
17+ if let Some ( net_index) = app
18+ . adapter
19+ . device
20+ . station
21+ . as_ref ( )
22+ . unwrap ( )
23+ . new_networks_state
24+ . selected ( )
25+ {
26+ let ( net, _) =
27+ app. adapter . device . station . as_ref ( ) . unwrap ( ) . new_networks [ net_index] . clone ( ) ;
28+
29+ let mode = app. current_mode . clone ( ) ;
30+ tokio:: spawn ( async move {
31+ net. connect ( sender. clone ( ) ) . await . unwrap ( ) ;
32+
33+ sender. clone ( ) . send ( Event :: Reset ( mode) ) . unwrap ( ) ;
34+ } ) ;
35+ }
36+ }
37+ FocusedBlock :: KnownNetworks => {
38+ match & app
39+ . adapter
40+ . device
41+ . station
42+ . as_ref ( )
43+ . unwrap ( )
44+ . connected_network
45+ {
46+ Some ( connected_net) => {
47+ if let Some ( selected_net_index) = app
48+ . adapter
49+ . device
50+ . station
51+ . as_ref ( )
52+ . unwrap ( )
53+ . known_networks_state
54+ . selected ( )
55+ {
56+ let ( selected_net, _signal) =
57+ & app. adapter . device . station . as_ref ( ) . unwrap ( ) . known_networks
58+ [ selected_net_index] ;
59+
60+ if selected_net. name == connected_net. name {
61+ app. adapter
62+ . device
63+ . station
64+ . as_ref ( )
65+ . unwrap ( )
66+ . disconnect ( sender. clone ( ) )
67+ . await ?;
68+ } else {
69+ let net_index = app
70+ . adapter
71+ . device
72+ . station
73+ . as_ref ( )
74+ . unwrap ( )
75+ . known_networks
76+ . iter ( )
77+ . position ( |( n, _s) | n. name == selected_net. name ) ;
78+
79+ if let Some ( index) = net_index {
80+ let ( net, _) =
81+ app. adapter . device . station . as_ref ( ) . unwrap ( ) . known_networks
82+ [ index]
83+ . clone ( ) ;
84+ app. adapter
85+ . device
86+ . station
87+ . as_ref ( )
88+ . unwrap ( )
89+ . disconnect ( sender. clone ( ) )
90+ . await ?;
91+ tokio:: spawn ( async move {
92+ net. connect ( sender. clone ( ) ) . await . unwrap ( ) ;
93+ } ) ;
94+ }
95+ }
96+ }
97+ }
98+ None => {
99+ if let Some ( selected_net_index) = app
100+ . adapter
101+ . device
102+ . station
103+ . as_ref ( )
104+ . unwrap ( )
105+ . known_networks_state
106+ . selected ( )
107+ {
108+ let ( selected_net, _signal) =
109+ & app. adapter . device . station . as_ref ( ) . unwrap ( ) . known_networks
110+ [ selected_net_index] ;
111+ let net_index = app
112+ . adapter
113+ . device
114+ . station
115+ . as_ref ( )
116+ . unwrap ( )
117+ . known_networks
118+ . iter ( )
119+ . position ( |( n, _s) | n. name == selected_net. name ) ;
120+
121+ if let Some ( index) = net_index {
122+ let ( net, _) =
123+ app. adapter . device . station . as_ref ( ) . unwrap ( ) . known_networks [ index]
124+ . clone ( ) ;
125+ tokio:: spawn ( async move {
126+ net. connect ( sender. clone ( ) ) . await . unwrap ( ) ;
127+ } ) ;
128+ }
129+ }
130+ }
131+ }
132+ }
133+ _ => { }
134+ }
135+ Ok ( ( ) )
136+ }
137+
14138pub async fn handle_key_events (
15139 key_event : KeyEvent ,
16140 app : & mut App ,
@@ -366,172 +490,9 @@ pub async fn handle_key_events(
366490 }
367491
368492 // Connect/Disconnect
493+ KeyCode :: Enter => toggle_connect ( app, sender) . await ?,
369494 KeyCode :: Char ( c) if c == config. station . toggle_connect => {
370- match app. focused_block {
371- FocusedBlock :: NewNetworks => {
372- if let Some ( net_index) = app
373- . adapter
374- . device
375- . station
376- . as_ref ( )
377- . unwrap ( )
378- . new_networks_state
379- . selected ( )
380- {
381- let ( net, _) = app
382- . adapter
383- . device
384- . station
385- . as_ref ( )
386- . unwrap ( )
387- . new_networks [ net_index]
388- . clone ( ) ;
389-
390- let mode = app. current_mode . clone ( ) ;
391- tokio:: spawn ( async move {
392- net. connect ( sender. clone ( ) )
393- . await
394- . unwrap ( ) ;
395-
396- sender
397- . clone ( )
398- . send ( Event :: Reset ( mode) )
399- . unwrap ( ) ;
400- } ) ;
401- }
402- }
403- FocusedBlock :: KnownNetworks => {
404- match & app
405- . adapter
406- . device
407- . station
408- . as_ref ( )
409- . unwrap ( )
410- . connected_network
411- {
412- Some ( connected_net) => {
413- if let Some ( selected_net_index) = app
414- . adapter
415- . device
416- . station
417- . as_ref ( )
418- . unwrap ( )
419- . known_networks_state
420- . selected ( )
421- {
422- let ( selected_net, _signal) = & app
423- . adapter
424- . device
425- . station
426- . as_ref ( )
427- . unwrap ( )
428- . known_networks
429- [ selected_net_index] ;
430-
431- if selected_net. name
432- == connected_net. name
433- {
434- app. adapter
435- . device
436- . station
437- . as_ref ( )
438- . unwrap ( )
439- . disconnect ( sender. clone ( ) )
440- . await ?;
441- } else {
442- let net_index = app
443- . adapter
444- . device
445- . station
446- . as_ref ( )
447- . unwrap ( )
448- . known_networks
449- . iter ( )
450- . position ( |( n, _s) | {
451- n. name
452- == selected_net. name
453- } ) ;
454-
455- if let Some ( index) = net_index {
456- let ( net, _) = app
457- . adapter
458- . device
459- . station
460- . as_ref ( )
461- . unwrap ( )
462- . known_networks [ index]
463- . clone ( ) ;
464- app. adapter
465- . device
466- . station
467- . as_ref ( )
468- . unwrap ( )
469- . disconnect (
470- sender. clone ( ) ,
471- )
472- . await ?;
473- tokio:: spawn ( async move {
474- net. connect (
475- sender. clone ( ) ,
476- )
477- . await
478- . unwrap ( ) ;
479- } ) ;
480- }
481- }
482- }
483- }
484- None => {
485- if let Some ( selected_net_index) = app
486- . adapter
487- . device
488- . station
489- . as_ref ( )
490- . unwrap ( )
491- . known_networks_state
492- . selected ( )
493- {
494- let ( selected_net, _signal) = & app
495- . adapter
496- . device
497- . station
498- . as_ref ( )
499- . unwrap ( )
500- . known_networks
501- [ selected_net_index] ;
502- let net_index = app
503- . adapter
504- . device
505- . station
506- . as_ref ( )
507- . unwrap ( )
508- . known_networks
509- . iter ( )
510- . position ( |( n, _s) | {
511- n. name == selected_net. name
512- } ) ;
513-
514- if let Some ( index) = net_index {
515- let ( net, _) = app
516- . adapter
517- . device
518- . station
519- . as_ref ( )
520- . unwrap ( )
521- . known_networks [ index]
522- . clone ( ) ;
523- tokio:: spawn ( async move {
524- net. connect ( sender. clone ( ) )
525- . await
526- . unwrap ( ) ;
527- } ) ;
528- }
529- }
530- }
531- }
532- }
533- _ => { }
534- }
495+ toggle_connect ( app, sender) . await ?
535496 }
536497
537498 // Scroll down
0 commit comments