Compare commits

..

4 Commits

Author SHA1 Message Date
4625f4a016 Implement setting lamp brightnesses 2024-12-29 00:34:05 +01:00
91ee137ff5 Implement lamp brightness debouncing 2024-12-29 00:31:09 +01:00
8cebc36ed9 Implement fetching brightness from api 2024-12-29 00:29:09 +01:00
32e3c73098 Implement lamp api 2024-12-29 00:23:26 +01:00
6 changed files with 104 additions and 34 deletions

56
app.go
View File

@@ -2,6 +2,12 @@ package main
import (
"context"
"io"
"log"
"net/http"
"regexp"
"strconv"
"strings"
"github.com/wailsapp/wails/v2/pkg/runtime"
)
@@ -23,4 +29,52 @@ func (a *App) startup(ctx context.Context) {
}
func (a *App) Close() {
runtime.Quit(a.ctx)
}
}
const IP = "192.168.1.83:5554"
// I really have to get rid of this dumb format...
// Just do one lamp per line, what the fuck is this "Lamp 1: " bullshit
var decancer = regexp.MustCompile(`Lamp \d: `)
func (a *App) GetLamps() (lamps []string) {
resp, err := http.Get("http://" + IP)
if err != nil {
runtime.LogError(a.ctx, err.Error())
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
runtime.LogError(a.ctx, err.Error())
return
}
lines := strings.Split(string(body), "\n")
for _, line := range lines {
line = strings.TrimSpace(line)
if line == "" {
continue
}
line = decancer.ReplaceAllString(line, "")
lamps = append(lamps, line)
}
return
}
func (a *App) SetLampBrightness(lampId int, brightness int) string {
log.Printf("Setting lamp %d to %d", lampId, brightness)
resp, err := http.Get("http://" + IP + "/lamp/" + strconv.Itoa(lampId) + "?n=" + strconv.Itoa(brightness))
if err != nil {
runtime.LogError(a.ctx, err.Error())
log.Printf("Error: %s", err.Error())
return ""
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
runtime.LogError(a.ctx, err.Error())
log.Printf("Error: %s", err.Error())
return ""
}
return string(body)
}

View File

@@ -1,5 +1,4 @@
<script lang="ts">
import Header from "$lib/components/Header.svelte";
import Router from "$lib/router/Router.svelte";
import { Toaster } from "svelte-sonner";
import { Close } from '$wails/main/App'

View File

@@ -1,34 +1,26 @@
<script>
export let brightnessChange = (brightness) => {};
<script lang="ts">
export let brightnessChange = (lamp: number, brightness: number) => {};
export let lamp: number;
export let brightness: number;
let brightness = 50; // Default brightness level
function handleBrightnessChange(event) {
brightness = event.target.value;
brightnessChange(brightness); // Call the callback with the current brightness
}
let timer: number;
function handleBrightnessChange(event: Event) {
clearTimeout(timer);
timer = setTimeout(() => {
brightness = Number(event.target?.value);
brightnessChange(lamp, brightness);
}, 300);
}
</script>
<div class="flex flex-col items-center justify-center p-4">
<div
class="w-48 h-48 rounded-full overflow-hidden mb-4"
style="background-color: #FFD700; filter: brightness({brightness}%)"
>
<svg
class="w-48 h-48 fill-current text-yellow-800"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
>
<path d="M12 2L2 22h20Z" />
</svg>
</div>
<input
type="range"
min="0"
max="100"
step="1"
value={brightness}
on:input={handleBrightnessChange}
class="w-4/5"
/>
</div>
<div
class="w-48 h-48 rounded-full overflow-hidden mb-4"
style="background-color: #FFD700; filter: brightness({brightness}%)"
>
<svg class="w-48 h-48 fill-current text-yellow-800" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M12 2L2 22h20Z" />
</svg>
</div>
<input type="range" min="0" max="100" step="1" value={brightness} on:input={handleBrightnessChange} class="w-4/5" />
</div>

View File

@@ -1,10 +1,23 @@
<script lang="ts">
import Lamp from "../../components/Lamp.svelte";
import { GetLamps, SetLampBrightness } from "$wails/main/App";
let lamps: number[] = [0, 0];
GetLamps().then(apilamps => {
console.log(apilamps);
for (let i = 0; i < apilamps.length; i++) {
lamps[i] = Number(apilamps[i]);
}
});
function handleBrightnessChange(lamp: number, brightness: number) {
SetLampBrightness(lamp, brightness);
}
</script>
<template>
<div class="flex flex-row justify-center items-center">
<Lamp />
<Lamp />
<Lamp lamp={1} brightness={lamps[0]} brightnessChange={handleBrightnessChange} />
<Lamp lamp={2} brightness={lamps[1]} brightnessChange={handleBrightnessChange} />
</div>
</template>

View File

@@ -2,3 +2,7 @@
// This file is automatically generated. DO NOT EDIT
export function Close():Promise<void>;
export function GetLamps():Promise<Array<string>>;
export function SetLampBrightness(arg1:number,arg2:number):Promise<string>;

View File

@@ -5,3 +5,11 @@
export function Close() {
return window['go']['main']['App']['Close']();
}
export function GetLamps() {
return window['go']['main']['App']['GetLamps']();
}
export function SetLampBrightness(arg1, arg2) {
return window['go']['main']['App']['SetLampBrightness'](arg1, arg2);
}