Skip to content

Commit e39e80a

Browse files
committed
use enter to dis/connect to a network
1 parent 4edae57 commit e39e80a

File tree

2 files changed

+128
-167
lines changed

2 files changed

+128
-167
lines changed

src/adapter.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -986,7 +986,7 @@ impl Adapter {
986986
Span::from(" Down"),
987987
Span::from(" | "),
988988
Span::from(if self.config.station.toggle_connect == ' ' {
989-
"󱁐 ".to_string()
989+
"󱁐 or ↵ ".to_string()
990990
} else {
991991
self.config.station.toggle_connect.to_string()
992992
})
@@ -1025,7 +1025,7 @@ impl Adapter {
10251025
Span::from("j,").bold(),
10261026
Span::from(" Down"),
10271027
Span::from(" | "),
1028-
Span::from("󱁐 ").bold(),
1028+
Span::from("󱁐 or ↵ ").bold(),
10291029
Span::from(" Connect"),
10301030
Span::from(" | "),
10311031
Span::from(self.config.station.start_scanning.to_string()).bold(),

src/handler.rs

Lines changed: 126 additions & 165 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,130 @@ use iwdrs::modes::Mode;
1111
use tokio::sync::mpsc::UnboundedSender;
1212
use 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+
14138
pub 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

Comments
 (0)