From 5f455921fdf38bef395fa4886dda9e321cd6fa50 Mon Sep 17 00:00:00 2001 From: Supertiger Date: Sat, 2 Aug 2025 10:31:50 +0100 Subject: [PATCH] Add temperature module with dynamic temperature updates and critical state handling --- src/routes/waybar/modules.ts | 4 +++ src/routes/waybar/modules/temperature.ts | 40 ++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 src/routes/waybar/modules/temperature.ts diff --git a/src/routes/waybar/modules.ts b/src/routes/waybar/modules.ts index 954dd49..1b8c64b 100644 --- a/src/routes/waybar/modules.ts +++ b/src/routes/waybar/modules.ts @@ -10,4 +10,8 @@ export const modules = { import("./modules/battery").then( ({ createBatteryModule }) => createBatteryModule ), + temperature: () => + import("./modules/temperature").then( + ({ createTemperatureModule }) => createTemperatureModule + ), }; diff --git a/src/routes/waybar/modules/temperature.ts b/src/routes/waybar/modules/temperature.ts new file mode 100644 index 0000000..c5e6a14 --- /dev/null +++ b/src/routes/waybar/modules/temperature.ts @@ -0,0 +1,40 @@ +import type { WaybarConfig } from "../configParser"; +import type { Module } from "../createModule"; +import { createLabel } from "../Label"; + +export const createTemperatureModule = ( + module: Module, + config: WaybarConfig["temperature"] +) => { + const label = createLabel({ + interval: 1000, + update: () => update(), + config: config!, + module, + }); + + module.element.appendChild(label.element); + + const update = async () => { + const temperatureC = Math.round(Math.random() * 90); + const temperatureF = Math.round(temperatureC * (9 / 5) + 32); + + const criticalThreshold = config["critical-threshold"]; + + if (temperatureC >= criticalThreshold) { + module.element.classList.add("critical"); + } else { + module.element.classList.remove("critical"); + } + + const maxTemp = criticalThreshold !== undefined ? criticalThreshold : 0; + + label.set({ + temperatureC, + temperatureF, + icon: label.getIcon(temperatureC, "", maxTemp), + }); + }; + + update(); +};