add status requesting to frontend
This commit is contained in:
+71
-6
@@ -3,7 +3,7 @@
|
|||||||
use base64::{display::Base64Display, prelude::BASE64_URL_SAFE};
|
use base64::{display::Base64Display, prelude::BASE64_URL_SAFE};
|
||||||
use dioxus::prelude::*;
|
use dioxus::prelude::*;
|
||||||
use mime_guess::Mime;
|
use mime_guess::Mime;
|
||||||
use mumble_web2_common::ClientConfig;
|
use mumble_web2_common::{ClientConfig, ServerStatus};
|
||||||
use ordermap::OrderSet;
|
use ordermap::OrderSet;
|
||||||
use sir::{css, global_css};
|
use sir::{css, global_css};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
@@ -823,10 +823,37 @@ pub fn ServerView(config: Resource<ClientConfig>) -> Element {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn get_status(
|
||||||
|
client: &reqwest::Client,
|
||||||
|
status_url: &str,
|
||||||
|
) -> color_eyre::Result<ServerStatus> {
|
||||||
|
Ok(client
|
||||||
|
.get(status_url)
|
||||||
|
.send()
|
||||||
|
.await?
|
||||||
|
.json::<ServerStatus>()
|
||||||
|
.await?)
|
||||||
|
}
|
||||||
|
|
||||||
#[component]
|
#[component]
|
||||||
pub fn LoginView(config: Resource<ClientConfig>) -> Element {
|
pub fn LoginView(config: Resource<ClientConfig>) -> Element {
|
||||||
let net: Coroutine<Command> = use_coroutine_handle();
|
let net: Coroutine<Command> = use_coroutine_handle();
|
||||||
|
|
||||||
|
let last_status = use_signal(|| None::<color_eyre::Result<ServerStatus>>);
|
||||||
|
use_resource(move || async move {
|
||||||
|
let Some(config) = config.read().clone() else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
let Some(status_url) = config.status_url else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
let client = reqwest::Client::new();
|
||||||
|
loop {
|
||||||
|
*last_status.write_unchecked() = Some(get_status(&client, &status_url).await);
|
||||||
|
imp::sleep(std::time::Duration::from_secs_f32(1.0)).await;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
let mut address_input = use_signal(|| None::<String>);
|
let mut address_input = use_signal(|| None::<String>);
|
||||||
let mut address = use_memo(move || {
|
let mut address = use_memo(move || {
|
||||||
if let Some(addr) = address_input() {
|
if let Some(addr) = address_input() {
|
||||||
@@ -930,21 +957,59 @@ pub fn LoginView(config: Resource<ClientConfig>) -> Element {
|
|||||||
h1 {
|
h1 {
|
||||||
"Mumble Web"
|
"Mumble Web"
|
||||||
}
|
}
|
||||||
|
div {
|
||||||
|
label {
|
||||||
|
for: "username-entry",
|
||||||
|
"Username:"
|
||||||
|
//style: "color: rgba(255, 255, 255, 0.5); font-variation-settings: 'FILL' 1, 'wght' 700, 'GRAD' 0, 'opsz' 48; vertical-align: middle; font-size: 35px; user-select: none;",
|
||||||
|
}
|
||||||
input {
|
input {
|
||||||
|
id: "username-entry",
|
||||||
placeholder: "username",
|
placeholder: "username",
|
||||||
value: "{username.read()}",
|
value: "{username.read()}",
|
||||||
autofocus: "true",
|
autofocus: "true",
|
||||||
oninput: move |evt| username.set(evt.value().clone()),
|
oninput: move |evt| username.set(evt.value().clone()),
|
||||||
}
|
}
|
||||||
input {
|
|
||||||
placeholder: "server address",
|
|
||||||
value: "{address.read()}",
|
|
||||||
autofocus: "true",
|
|
||||||
oninput: move |evt| address_input.set(Some(evt.value().clone())),
|
|
||||||
}
|
}
|
||||||
|
div {
|
||||||
|
div {
|
||||||
|
span {}
|
||||||
|
span {"—"}
|
||||||
|
span {}
|
||||||
|
}
|
||||||
|
div {
|
||||||
|
span {"1/100 Online"}
|
||||||
|
span {"—"}
|
||||||
|
span {"Version: 1.4.255"}
|
||||||
|
}
|
||||||
|
div {
|
||||||
{bottom}
|
{bottom}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
// rsx!(
|
||||||
|
// div {
|
||||||
|
// class: "{login_box}",
|
||||||
|
// h1 {
|
||||||
|
// "Mumble Web"
|
||||||
|
// }
|
||||||
|
// input {
|
||||||
|
// placeholder: "username",
|
||||||
|
// value: "{username.read()}",
|
||||||
|
// autofocus: "true",
|
||||||
|
// oninput: move |evt| username.set(evt.value().clone()),
|
||||||
|
// }
|
||||||
|
// input {
|
||||||
|
// placeholder: "server address",
|
||||||
|
// value: "{address.read()}",
|
||||||
|
// autofocus: "true",
|
||||||
|
// oninput: move |evt| address_input.set(Some(evt.value().clone())),
|
||||||
|
// }
|
||||||
|
// {bottom}
|
||||||
|
// }
|
||||||
|
// )
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn app() -> Element {
|
pub fn app() -> Element {
|
||||||
|
|||||||
Reference in New Issue
Block a user