[WIP] A simple wake-on-lan service

render entries in webapp

vielle.dev 2c6a9beb e93a7ca5

verified
+41 -11
+1 -1
build.rs
··· 194 194 let paths = copy_dir(DIST_SRC, dist_dst)?; 195 195 let rust = codegen(paths)?; 196 196 let mut rust_file = fs::File::create(Path::new(&out_dir).join("mod.rs"))?; 197 - rust_file.write(rust.as_bytes())?; 197 + rust_file.write_all(rust.as_bytes())?; 198 198 199 199 println!("cargo::rerun-if-changed=web/"); 200 200
+1 -1
src/mac.rs
··· 43 43 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 44 44 write!( 45 45 f, 46 - "{:X}:{:X}:{:X}:{:X}:{:X}:{:X}", 46 + "{:0<2X}:{:0<2X}:{:0<2X}:{:0<2X}:{:0<2X}:{:0<2X}", 47 47 self.0[0], self.0[1], self.0[2], self.0[3], self.0[4], self.0[5] 48 48 ) 49 49 }
+17 -9
web/src/App.svelte
··· 1 1 <script lang="ts"> 2 2 import Api from "./lib/api"; 3 + import Power from "./lib/Power.svelte"; 3 4 4 5 const config = await Api.config(); 5 - console.log(config); 6 - const first = config.pinned && config.pinned[0]; 7 - const wakeFirst = 8 - first && (await Api.wake({ mac: config.targets[first].mac })); 9 - console.log(wakeFirst); 6 + 7 + const targets = [ 8 + ...Object.entries(config.targets) 9 + .filter(([k, v]) => (config.pinned ?? []).includes(k)) 10 + .sort( 11 + ([k1], [k2]) => 12 + (config.pinned ?? []).indexOf(k1) - (config.pinned ?? []).indexOf(k2), 13 + ), 14 + ...Object.entries(config.targets).filter( 15 + ([k]) => !(config.pinned ?? []).includes(k), 16 + ), 17 + ]; 10 18 </script> 11 19 12 - <main> 13 - <h1>WOL - {first} ({first ? config.targets[first].mac : null})</h1> 14 - <pre>{JSON.stringify(config)}</pre> 15 - </main> 20 + <h1>Wake on Lan</h1> 21 + {#each targets as [name, { mac, ip }]} 22 + <Power {name} {mac} {ip} /> 23 + {/each}
+22
web/src/lib/Power.svelte
··· 1 + <script lang="ts"> 2 + import Api from "./api"; 3 + 4 + const { 5 + name, 6 + mac, 7 + ip, 8 + }: { 9 + name: string; 10 + mac: string; 11 + ip: string | null; 12 + } = $props(); 13 + </script> 14 + 15 + <button 16 + onclick={() => 17 + Api.wake({ mac }).then((res) => alert(`Wake: ${mac} (${ip}) ${res}`))} 18 + > 19 + {name} 20 + {mac} 21 + {ip} 22 + </button>