tangled
alpha
login
or
join now
vielle.dev
/
wol
1
fork
atom
[WIP] A simple wake-on-lan service
1
fork
atom
overview
issues
pulls
pipelines
render entries in webapp
vielle.dev
3 weeks ago
2c6a9beb
e93a7ca5
verified
This commit was signed with the committer's
known signature
.
vielle.dev
SSH Key Fingerprint:
SHA256:EoUuRRBFQKUfYh74C568g83i9g4fVi5OTtOENMSfa+0=
+41
-11
4 changed files
expand all
collapse all
unified
split
build.rs
src
mac.rs
web
src
App.svelte
lib
Power.svelte
+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
197
-
rust_file.write(rust.as_bytes())?;
197
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
46
-
"{:X}:{:X}:{:X}:{:X}:{:X}:{:X}",
46
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
3
+
import Power from "./lib/Power.svelte";
3
4
4
5
const config = await Api.config();
5
5
-
console.log(config);
6
6
-
const first = config.pinned && config.pinned[0];
7
7
-
const wakeFirst =
8
8
-
first && (await Api.wake({ mac: config.targets[first].mac }));
9
9
-
console.log(wakeFirst);
6
6
+
7
7
+
const targets = [
8
8
+
...Object.entries(config.targets)
9
9
+
.filter(([k, v]) => (config.pinned ?? []).includes(k))
10
10
+
.sort(
11
11
+
([k1], [k2]) =>
12
12
+
(config.pinned ?? []).indexOf(k1) - (config.pinned ?? []).indexOf(k2),
13
13
+
),
14
14
+
...Object.entries(config.targets).filter(
15
15
+
([k]) => !(config.pinned ?? []).includes(k),
16
16
+
),
17
17
+
];
10
18
</script>
11
19
12
12
-
<main>
13
13
-
<h1>WOL - {first} ({first ? config.targets[first].mac : null})</h1>
14
14
-
<pre>{JSON.stringify(config)}</pre>
15
15
-
</main>
20
20
+
<h1>Wake on Lan</h1>
21
21
+
{#each targets as [name, { mac, ip }]}
22
22
+
<Power {name} {mac} {ip} />
23
23
+
{/each}
+22
web/src/lib/Power.svelte
···
1
1
+
<script lang="ts">
2
2
+
import Api from "./api";
3
3
+
4
4
+
const {
5
5
+
name,
6
6
+
mac,
7
7
+
ip,
8
8
+
}: {
9
9
+
name: string;
10
10
+
mac: string;
11
11
+
ip: string | null;
12
12
+
} = $props();
13
13
+
</script>
14
14
+
15
15
+
<button
16
16
+
onclick={() =>
17
17
+
Api.wake({ mac }).then((res) => alert(`Wake: ${mac} (${ip}) ${res}`))}
18
18
+
>
19
19
+
{name}
20
20
+
{mac}
21
21
+
{ip}
22
22
+
</button>