refactor: show retrying UI

This commit is contained in:
Kevin Yue 2023-09-01 22:21:16 +08:00
parent c4fa91f6ea
commit 2136c3aa25

View File

@ -84,9 +84,18 @@ impl AuthData {
} }
fn check(&self) -> bool { fn check(&self) -> bool {
let username_valid = self.username.clone().is_some_and(|username| !username.is_empty()); let username_valid = self
let prelogin_cookie_valid = self.prelogin_cookie.clone().is_some_and(|val| val.len() > 5); .username
let portal_userauthcookie_valid = self.portal_userauthcookie.clone().is_some_and(|val| val.len() > 5); .clone()
.is_some_and(|username| !username.is_empty());
let prelogin_cookie_valid = self
.prelogin_cookie
.clone()
.is_some_and(|val| val.len() > 5);
let portal_userauthcookie_valid = self
.portal_userauthcookie
.clone()
.is_some_and(|val| val.len() > 5);
username_valid && (prelogin_cookie_valid || portal_userauthcookie_valid) username_valid && (prelogin_cookie_valid || portal_userauthcookie_valid)
} }
@ -247,7 +256,7 @@ async fn monitor_events(window: &Window, event_rx: mpsc::Receiver<AuthEvent>) ->
} }
async fn monitor_auth_event(window: &Window, mut event_rx: mpsc::Receiver<AuthEvent>) -> AuthData { async fn monitor_auth_event(window: &Window, mut event_rx: mpsc::Receiver<AuthEvent>) -> AuthData {
info!("Monitoring auth events"); info!("Start monitoring auth events");
let (cancel_timeout_tx, cancel_timeout_rx) = mpsc::channel::<()>(1); let (cancel_timeout_tx, cancel_timeout_rx) = mpsc::channel::<()>(1);
let cancel_timeout_rx = Arc::new(Mutex::new(cancel_timeout_rx)); let cancel_timeout_rx = Arc::new(Mutex::new(cancel_timeout_rx));
@ -272,6 +281,23 @@ async fn monitor_auth_event(window: &Window, mut event_rx: mpsc::Receiver<AuthEv
return auth_data; return auth_data;
} }
AuthEvent::Error(AuthError::TokenInvalid) => { AuthEvent::Error(AuthError::TokenInvalid) => {
let _ = window.with_webview(|wv| {
let wv = wv.inner();
let url = wv.uri().unwrap_or("<empty>".into());
info!("Injecting loading element to {}", redact_url(&url));
wv.run_javascript(
r#"
var loading = document.createElement("div");
loading.innerHTML = '<div style="position: absolute; width: 100%; text-align: center; font-size: 20px; font-weight: bold; top: 50%; left: 50%; transform: translate(-50%, -50%);">Got invalid token, retrying...</div>';
loading.style = "position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.85); z-index: 99999;";
document.body.appendChild(loading);
"#,
Cancellable::NONE,
|_| info!("Injected loading element successfully"),
);
});
// Found the invalid token, means that user is authenticated, keep retrying and no need to show the window // Found the invalid token, means that user is authenticated, keep retrying and no need to show the window
warn!( warn!(
"Attempt #{} failed, found invalid token, retrying", "Attempt #{} failed, found invalid token, retrying",