Chore: hoist example projects for discoverability (#2959)
* hoist example projects, remove oidc * move over example projects from the separate repo * Update ecommerce site to the latest version of dioxus * update wifi scanner to 0.5 * drop the chatbot example; might be restored in a separate PR --------- Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
This commit is contained in:
1 parent
a9f87384f8
commit
983fcfc616
94 files changed
+2774
-7322
No files matched your search
@@ -0,0 +1 @@
|
||||
/target
|
||||
@@ -0,0 +1,15 @@
|
||||
[package]
|
||||
name = "wifi-scanner"
|
||||
version = "0.1.1"
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.52"
|
||||
pretty_env_logger = "0.5.0"
|
||||
tokio = { version = "1.12.0", features = ["full"] }
|
||||
dioxus = { workspace = true, features = ["desktop"] }
|
||||
wifiscanner = "0.5.1"
|
||||
futures-channel = "0.3.19"
|
||||
futures = "0.3.19"
|
||||
@@ -0,0 +1,5 @@
|
||||
# WiFi scanner app
|
||||
|
||||
This desktop app showcases the use of background threads.
|
||||
|
||||

|
||||
Binary file not shown.
|
After Width: | Height: | Size: 123 KiB |
@@ -0,0 +1,91 @@
|
||||
use dioxus::prelude::*;
|
||||
use wifiscanner::Wifi;
|
||||
|
||||
fn main() {
|
||||
launch(app)
|
||||
}
|
||||
|
||||
fn perform_scan() -> Status {
|
||||
if let Ok(devices) = wifiscanner::scan() {
|
||||
if devices.is_empty() {
|
||||
Status::NoneFound
|
||||
} else {
|
||||
Status::Found(devices)
|
||||
}
|
||||
} else {
|
||||
Status::NoneFound
|
||||
}
|
||||
}
|
||||
|
||||
enum Status {
|
||||
NoneFound,
|
||||
Found(Vec<Wifi>),
|
||||
}
|
||||
|
||||
fn app() -> Element {
|
||||
let mut status =
|
||||
use_resource(|| async { tokio::task::spawn_blocking(perform_scan).await.unwrap() });
|
||||
let scanning = !status.finished();
|
||||
|
||||
rsx! {
|
||||
link { rel: "stylesheet", href: "https://unpkg.com/tailwindcss@^2.0/dist/tailwind.min.css" },
|
||||
div {
|
||||
div { class: "py-8 px-6",
|
||||
div { class: "container px-4 mx-auto",
|
||||
h2 { class: "text-2xl font-bold", "Scan for WiFi Networks" }
|
||||
button {
|
||||
class: "inline-block w-full md:w-auto px-6 py-3 font-medium text-white bg-indigo-500 hover:bg-indigo-600 rounded transition duration-200",
|
||||
disabled: scanning,
|
||||
onclick: move |_| {
|
||||
status.restart();
|
||||
},
|
||||
if scanning { "Scanning" } else { "Scan" }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
section { class: "py-8",
|
||||
div { class: "container px-4 mx-auto",
|
||||
div { class: "p-4 mb-6 bg-white shadow rounded overflow-x-auto",
|
||||
table { class: "table-auto w-full",
|
||||
thead {
|
||||
tr { class: "text-xs text-gray-500 text-left",
|
||||
th { class: "pl-6 pb-3 font-medium", "Strength" }
|
||||
th { class: "pb-3 font-medium", "Network" }
|
||||
th { class: "pb-3 font-medium", "Channel" }
|
||||
th { class: "pb-3 px-2 font-medium", "Security" }
|
||||
}
|
||||
}
|
||||
|
||||
match &*status.read() {
|
||||
None => rsx!(""),
|
||||
Some(Status::NoneFound) => rsx!("No networks found. Try scanning again"),
|
||||
Some(Status::Found(wifis)) => {
|
||||
// Create vector of tuples of (signal_level, wifi) for sorting by signal_level
|
||||
let mut sorted_wifis = wifis
|
||||
.iter()
|
||||
.map(|wif: &Wifi| (wif, wif.signal_level.parse::<f32>().unwrap()))
|
||||
.collect::<Vec<_>>();
|
||||
sorted_wifis.sort_by(|a, b| a.1.partial_cmp(&b.1).unwrap());
|
||||
|
||||
rsx! {
|
||||
tbody {
|
||||
for (Wifi { mac: _, ssid, channel, signal_level, security }, _) in sorted_wifis.into_iter().rev() {
|
||||
tr { class: "text-xs bg-gray-50",
|
||||
td { class: "py-5 px-6 font-medium", "{signal_level}" }
|
||||
td { class: "flex py-3 font-medium", "{ssid}" }
|
||||
td { span { class: "inline-block py-1 px-2 text-white bg-green-500 rounded-full", "{channel}" } }
|
||||
td { span { class: "inline-block py-1 px-2 text-purple-500 bg-purple-50 rounded-full", "{security}" } }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user