Fixes build warning and errors

This commit is contained in:
Rune Harlyk
2025-07-10 21:32:28 +02:00
committed by Rune Harlyk
parent c8ee64d7f4
commit d529eaa201
22 changed files with 2053 additions and 2116 deletions
+132 -124
View File
@@ -1,16 +1,16 @@
<script lang="ts">
import { onDestroy, onMount } from 'svelte'
import { modals } from 'svelte-modals'
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte'
import SettingsCard from '$lib/components/SettingsCard.svelte'
import Spinner from '$lib/components/Spinner.svelte'
import { slide } from 'svelte/transition'
import { cubicOut } from 'svelte/easing'
import type { SystemInformation, Analytics } from '$lib/types/models'
import { socket } from '$lib/stores/socket'
import { api } from '$lib/api'
import { convertSeconds } from '$lib/utilities'
import { useFeatureFlags } from '$lib/stores/featureFlags'
import { onDestroy, onMount } from 'svelte';
import { modals } from 'svelte-modals';
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte';
import SettingsCard from '$lib/components/SettingsCard.svelte';
import Spinner from '$lib/components/Spinner.svelte';
import { slide } from 'svelte/transition';
import { cubicOut } from 'svelte/easing';
import type { SystemInformation, Analytics } from '$lib/types/models';
import { socket } from '$lib/stores/socket';
import { api } from '$lib/api';
import { convertSeconds } from '$lib/utilities';
import { useFeatureFlags } from '$lib/stores/featureFlags';
import {
Cancel,
Power,
@@ -27,37 +27,42 @@
Flash,
Folder,
Temperature,
Stopwatch
} from '$lib/components/icons'
import StatusItem from '$lib/components/StatusItem.svelte'
import ActionButton from './ActionButton.svelte'
Stopwatch,
} from '$lib/components/icons';
import StatusItem from '$lib/components/StatusItem.svelte';
import ActionButton from './ActionButton.svelte';
const features = useFeatureFlags()
const features = useFeatureFlags();
let systemInformation: SystemInformation = $state()
let systemInformation: SystemInformation | null = $state(null);
async function getSystemStatus() {
const result = await api.get<SystemInformation>('/api/system/status')
const result = await api.get<SystemInformation>('/api/system/status');
if (result.isErr()) {
console.error('Error:', result.inner)
return
console.error('Error:', result.inner);
return;
}
systemInformation = result.inner
return systemInformation
systemInformation = result.inner;
return systemInformation;
}
const postFactoryReset = async () => await api.post('/api/system/reset')
const postFactoryReset = async () => await api.post('/api/system/reset');
const postSleep = async () => await api.post('api/sleep')
const postSleep = async () => await api.post('api/sleep');
onMount(() => socket.on('analytics', handleSystemData))
onMount(() => socket.on('analytics', handleSystemData));
onDestroy(() => socket.off('analytics', handleSystemData))
onDestroy(() => socket.off('analytics', handleSystemData));
const handleSystemData = (data: Analytics) => {
if (systemInformation) {
systemInformation = {
...systemInformation,
...(data as unknown as SystemInformation),
};
}
};
const handleSystemData = (data: Analytics) =>
(systemInformation = { ...systemInformation, ...data })
const postRestart = async () => await api.post('/api/system/restart')
const postRestart = async () => await api.post('/api/system/restart');
function confirmRestart() {
modals.open(ConfirmDialog, {
@@ -65,13 +70,13 @@
message: 'Are you sure you want to restart the device?',
labels: {
cancel: { label: 'Abort', icon: Cancel },
confirm: { label: 'Restart', icon: Power }
confirm: { label: 'Restart', icon: Power },
},
onConfirm: () => {
modals.close()
postRestart()
}
})
modals.close();
postRestart();
},
});
}
function confirmReset() {
@@ -80,13 +85,13 @@
message: 'Are you sure you want to reset the device to its factory defaults?',
labels: {
cancel: { label: 'Abort', icon: Cancel },
confirm: { label: 'Factory Reset', icon: FactoryReset }
confirm: { label: 'Factory Reset', icon: FactoryReset },
},
onConfirm: () => {
modals.close()
postFactoryReset()
}
})
modals.close();
postFactoryReset();
},
});
}
function confirmSleep() {
@@ -95,21 +100,21 @@
message: 'Are you sure you want to put the device into sleep?',
labels: {
cancel: { label: 'Abort', icon: Cancel },
confirm: { label: 'Sleep', icon: Sleep }
confirm: { label: 'Sleep', icon: Sleep },
},
onConfirm: () => {
modals.close()
postSleep()
}
})
modals.close();
postSleep();
},
});
}
interface ActionButtonDef {
icon: any
label: string
onClick: () => void
type?: string
condition?: () => boolean
icon: any;
label: string;
onClick: () => void;
type?: string;
condition?: () => boolean;
}
const actionButtons: ActionButtonDef[] = [
@@ -117,20 +122,20 @@
icon: Sleep,
label: 'Sleep',
onClick: confirmSleep,
condition: () => Boolean($features.sleep)
condition: () => Boolean($features.sleep),
},
{
icon: Power,
label: 'Restart',
onClick: confirmRestart
onClick: confirmRestart,
},
{
icon: FactoryReset,
label: 'Factory Reset',
onClick: confirmReset,
type: 'secondary'
}
]
type: 'secondary',
},
];
</script>
<SettingsCard collapsible={false}>
@@ -144,89 +149,92 @@
<div class="w-full overflow-x-auto">
{#await getSystemStatus()}
<Spinner />
{:then nothing}
<div
class="flex w-full flex-col space-y-1"
transition:slide|local={{ duration: 300, easing: cubicOut }}>
<StatusItem
icon={CPU}
title="Chip"
description={`${systemInformation.cpu_type} Rev ${systemInformation.cpu_rev}`} />
{:then}
{#if systemInformation}
<div
class="flex w-full flex-col space-y-1"
transition:slide|local={{ duration: 300, easing: cubicOut }}>
<StatusItem
icon={CPU}
title="Chip"
description={`${systemInformation.cpu_type} Rev ${systemInformation.cpu_rev}`} />
<StatusItem
icon={SDK}
title="SDK Version"
description={`ESP-IDF ${systemInformation.sdk_version} / Arduino ${systemInformation.arduino_version}`} />
<StatusItem
icon={SDK}
title="SDK Version"
description={`ESP-IDF ${systemInformation.sdk_version} / Arduino ${systemInformation.arduino_version}`} />
<StatusItem
icon={CPP}
title="Firmware Version"
description={systemInformation.firmware_version} />
<StatusItem
icon={CPP}
title="Firmware Version"
description={systemInformation.firmware_version} />
<StatusItem
icon={Speed}
title="CPU Frequency"
description={`${systemInformation.cpu_freq_mhz} MHz ${
systemInformation.cpu_cores == 2 ? 'Dual Core' : 'Single Core'
}`} />
<StatusItem
icon={Speed}
title="CPU Frequency"
description={`${systemInformation.cpu_freq_mhz} MHz ${
systemInformation.cpu_cores == 2 ? 'Dual Core' : 'Single Core'
}`} />
<StatusItem
icon={Heap}
title="Heap (Free / Max Alloc)"
description={`${systemInformation.free_heap} / ${systemInformation.max_alloc_heap} bytes`} />
<StatusItem
icon={Heap}
title="Heap (Free / Max Alloc)"
description={`${systemInformation.free_heap} / ${systemInformation.max_alloc_heap} bytes`} />
<StatusItem
icon={Pyramid}
title="PSRAM (Size / Free)"
description={`${systemInformation.psram_size} / ${systemInformation.psram_size} bytes`} />
<StatusItem
icon={Pyramid}
title="PSRAM (Size / Free)"
description={`${systemInformation.psram_size} / ${systemInformation.psram_size} bytes`} />
<StatusItem
icon={Sketch}
title="Sketch (Used / Free)"
description={`${(
(systemInformation.sketch_size / systemInformation.free_sketch_space) *
100
).toFixed(1)} % of
<StatusItem
icon={Sketch}
title="Sketch (Used / Free)"
description={`${(
(systemInformation.sketch_size / systemInformation.free_sketch_space) *
100
).toFixed(1)} % of
${systemInformation.free_sketch_space / 1000000} MB used (${
(systemInformation.free_sketch_space - systemInformation.sketch_size) / 1000000
} MB free)`} />
<StatusItem
icon={Flash}
title="Flash Chip (Size / Speed)"
description={`${systemInformation.flash_chip_size / 1000000} MB / ${
systemInformation.flash_chip_speed / 1000000
} MHz`} />
<StatusItem
icon={Flash}
title="Flash Chip (Size / Speed)"
description={`${systemInformation.flash_chip_size / 1000000} MB / ${
systemInformation.flash_chip_speed / 1000000
} MHz`} />
<StatusItem
icon={Folder}
title="File System (Used / Total)"
description={`${((systemInformation.fs_used / systemInformation.fs_total) * 100).toFixed(
1
)} % of ${systemInformation.fs_total / 1000000} MB used (${
(systemInformation.fs_total - systemInformation.fs_used) / 1000000
}
<StatusItem
icon={Folder}
title="File System (Used / Total)"
description={`${(
(systemInformation.fs_used / systemInformation.fs_total) *
100
).toFixed(1)} % of ${systemInformation.fs_total / 1000000} MB used (${
(systemInformation.fs_total - systemInformation.fs_used) / 1000000
}
MB free)`} />
<StatusItem
icon={Temperature}
title="Core Temperature"
description={`${
systemInformation.core_temp == 53.33 ?
'NaN'
: systemInformation.core_temp.toFixed(2) + ' °C'
}`} />
<StatusItem
icon={Temperature}
title="Core Temperature"
description={`${
systemInformation.core_temp == 53.33 ?
'NaN'
: systemInformation.core_temp.toFixed(2) + ' °C'
}`} />
<StatusItem
icon={Stopwatch}
title="Uptime"
description={convertSeconds(systemInformation.uptime)} />
<StatusItem
icon={Stopwatch}
title="Uptime"
description={convertSeconds(systemInformation.uptime)} />
<StatusItem
icon={Power}
title="Reset Reason"
description={systemInformation.cpu_reset_reason} />
</div>
<StatusItem
icon={Power}
title="Reset Reason"
description={systemInformation.cpu_reset_reason} />
</div>
{/if}
{/await}
</div>