fix: better handling of request results in the network applet

This commit is contained in:
Ashley Wulber 2024-03-18 21:25:51 -04:00 committed by Jeremy Soller
parent f36684d773
commit 4510e81f6f
No known key found for this signature in database
GPG key ID: D02FD439211AF56F
3 changed files with 121 additions and 123 deletions

View file

@ -283,28 +283,26 @@ impl cosmic::Application for CosmicNetworkApplet {
success,
req,
} => {
if let NetworkManagerRequest::SelectAccessPoint(ssid)
| NetworkManagerRequest::Password(ssid, _)
| NetworkManagerRequest::Disconnect(ssid) = &req
{
if let NetworkManagerRequest::SelectAccessPoint(ssid) = &req {
if self
.new_connection
.as_ref()
.map(|c| c.ssid() != ssid)
.map(|c| c.ssid() == ssid)
.unwrap_or_default()
&& success
{
self.new_connection = None;
}
}
if !success {
if let NetworkManagerRequest::Password(_, _) = req {
if let Some(
NewConnectionState::EnterPassword { access_point, .. }
| NewConnectionState::Waiting(access_point),
) = self.new_connection.as_ref()
{
self.new_connection
.replace(NewConnectionState::Failure(access_point.clone()));
if let NetworkManagerRequest::Password(ssid, _) = &req {
if let Some(
NewConnectionState::EnterPassword { access_point, .. }
| NewConnectionState::Waiting(access_point),
) = self.new_connection.take()
{
if !success && ssid == &access_point.ssid {
self.new_connection =
Some(NewConnectionState::Failure(access_point.clone()));
}
}
}
@ -315,6 +313,7 @@ impl cosmic::Application for CosmicNetworkApplet {
{
let mut browser = std::process::Command::new("xdg-open");
browser.arg("http://204.pop-os.org/");
cosmic::process::spawn(browser);
}
@ -332,14 +331,13 @@ impl cosmic::Application for CosmicNetworkApplet {
access_point.ssid.clone(),
));
self.new_connection
.replace(NewConnectionState::EnterPassword {
access_point,
password: String::new(),
});
self.new_connection = Some(NewConnectionState::EnterPassword {
access_point,
password: String::new(),
});
}
Message::ToggleVisibleNetworks => {
self.new_connection.take();
self.new_connection = None;
self.show_visible_networks = !self.show_visible_networks;
}
Message::Password(entered_pw) => {
@ -387,9 +385,10 @@ impl cosmic::Application for CosmicNetworkApplet {
let _ = tx.unbounded_send(NetworkManagerRequest::SelectAccessPoint(ssid));
}
Message::CancelNewConnection => {
self.new_connection.take();
self.new_connection = None;
}
Message::Disconnect(ssid) => {
self.new_connection = None;
let tx = if let Some(tx) = self.nm_sender.as_ref() {
if let Some(ActiveConnectionInfo::WiFi { state, .. }) = self
.nm_state

View file

@ -243,10 +243,11 @@ async fn start_listening(
.build()
.await
.unwrap();
let state = enums::ActiveConnectionState::from(
let mut state = enums::ActiveConnectionState::from(
active.state().await.unwrap_or_default(),
);
let s = if let enums::ActiveConnectionState::Activating = state
while matches!(state, enums::ActiveConnectionState::Activating)
{
if let Ok(Some(s)) = timeout(
Duration::from_secs(10),
@ -254,14 +255,13 @@ async fn start_listening(
)
.await
{
s.get().await.unwrap_or_default().into()
state = s.get().await.unwrap_or_default().into();
} else {
state
break;
}
} else {
state
};
matches!(s, enums::ActiveConnectionState::Activated)
}
matches!(state, enums::ActiveConnectionState::Activated)
} else {
false
};
@ -331,10 +331,10 @@ async fn start_listening(
.build()
.await
.unwrap();
let state = enums::ActiveConnectionState::from(
let mut state = enums::ActiveConnectionState::from(
active.state().await.unwrap_or_default(),
);
let s = if let enums::ActiveConnectionState::Activating = state
while matches!(state, enums::ActiveConnectionState::Activating)
{
if let Ok(Some(s)) = timeout(
Duration::from_secs(10),
@ -342,29 +342,25 @@ async fn start_listening(
)
.await
{
s.get().await.unwrap_or_default().into()
state = s.get().await.unwrap_or_default().into();
} else {
state
break;
}
} else {
state
};
matches!(s, enums::ActiveConnectionState::Activated)
}
matches!(state, enums::ActiveConnectionState::Activated)
} else {
false
};
_ = output
.send(NetworkManagerEvent::RequestResponse {
req: NetworkManagerRequest::Password(
ssid.clone(),
password.clone(),
),
success,
state: NetworkManagerState::new(&conn)
.await
.unwrap_or_default(),
})
.await;
status = Some(NetworkManagerEvent::RequestResponse {
req: NetworkManagerRequest::Password(
ssid.clone(),
password.clone(),
),
success,
state: NetworkManagerState::new(&conn)
.await
.unwrap_or_default(),
});
break;
}
@ -454,7 +450,7 @@ async fn start_listening(
})
.await;
break;
return State::Waiting(conn, rx);
}
_ = output
.send(NetworkManagerEvent::RequestResponse {