add refactored template for ap list

This commit is contained in:
glyph 2022-10-03 10:48:25 +01:00
parent acab30acce
commit 4f36f61128
2 changed files with 104 additions and 0 deletions

View File

@ -0,0 +1,103 @@
use std::collections::HashMap;
use maud::{html, Markup, PreEscaped};
use peach_network::{network, AccessPoint};
use rouille::Request;
use crate::{
templates,
utils::{flash::FlashRequest, theme},
};
// ROUTE: /settings/network/wifi
/// Retrieve network state data required by the WiFi network list template.
fn get_network_state_data(ap: &str, wlan: &str) -> (String, String, HashMap<String, AccessPoint>) {
let ap_state = match network::state("ap0") {
Ok(Some(state)) => state,
Err(_) => "Interface unavailable".to_string(),
};
let wlan_ssid = match network::ssid("wlan0") {
Ok(Some(ssid)) => ssid,
Err(_) => "Not connected".to_string(),
};
let wlan_networks = match network::all_networks("wlan0") {
Ok(networks) => networks,
Err(_) => HashMap::new(),
};
(ap_state, wlan_ssid, wlan_networks)
}
fn render_network_connected_elements(ssid: String) -> Markup {
let ap_detail_url = format!("/network/wifi?ssid={}", ssid);
html! {
a class="list-item link primary-bg" href=(ap_detail_url) {
img id="netStatus" class="icon icon-active icon-medium list-icon" src="/icons/wifi.svg" alt="WiFi online";
p class="list-text" { (ssid) }
label class="label-small list-label font-gray" for="netStatus" title="Status" { "Connected" }
}
}
}
fn render_network_available_elements(ssid: String, ap_state: String) -> Markup {
let ap_detail_url = format!("/network/wifi?ssid={}", ssid);
html! {
a class="list-item link light-bg" href=(ap_detail_url) {
img id="netStatus" class="icon icon-inactive icon-medium list-icon" src="/icons/wifi.svg" alt="WiFi offline";
p class="list-text" { (ssid) }
label class="label-small list-label font-gray" for="netStatus" title="Status" { (ap_state) }
}
}
}
fn render_network_unavailable_elements(ssid: String, ap_state: String) -> Markup {
let ap_detail_url = format!("/network/wifi?ssid={}", ssid);
html! {
a class="list-item link" href=(ap_detail_url) {
img id="netStatus" class="icon icon-inactive icon-medium list-icon" src="/icons/wifi.svg" alt="WiFi offline";
p class="list-text" { (ssid) }
label class="label-small list-label font-gray" for="netStatus" title="Status" { (ap_state) }
}
}
}
/// WiFi network list template builder.
pub fn build_template(request: &Request) -> PreEscaped<String> {
let (ap_state, wlan_ssid, wlan_networks) = get_network_state_data("ap0", "wlan0");
html! {
div class="card center" {
div class="center list-container" {
ul class="list" {
@if ap_state == "up" {
li class="list-item light-bg warning-border" {
"Enable WiFi client mode to view saved and available networks."
}
} @else if wlan_networks {
@for (ssid, ap) in wlan_networks {
li {
@if ssid == wlan_ssid {
(render_network_connected_elements(ssid))
} @else if ap.state == "Available" {
(render_network_available_elements(ssid, ap.state))
} @else {
(render_network_unavailable_elements(ssid, ap.state))
}
}
}
} @else {
li class="list-item light-bg" {
"No saved or available networks found."
}
}
}
}
}
}
}

View File

@ -1,3 +1,4 @@
pub mod configure_dns;
pub mod list_aps;
pub mod menu;
pub mod modify_ap;