From d9f95c6864c21f9bb6c252f6040da3114f058740 Mon Sep 17 00:00:00 2001 From: Jaime Idolpx Date: Thu, 11 Jun 2026 21:55:45 -0400 Subject: [PATCH] feat(Settings): add wrote flag to SavedJson and update writeSettings logic to indicate if files were written --- src/app/components/DeviceDetailOverlay.tsx | 4 +++- src/app/settings.ts | 23 ++++++++++++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/app/components/DeviceDetailOverlay.tsx b/src/app/components/DeviceDetailOverlay.tsx index 2dfd3f4..52c1764 100644 --- a/src/app/components/DeviceDetailOverlay.tsx +++ b/src/app/components/DeviceDetailOverlay.tsx @@ -413,7 +413,9 @@ export default function DeviceDetailOverlay({ )} - {deviceData.cache !== undefined && ( + {(deviceData.cache !== undefined || + (deviceData.base_url ?? '').includes('://') || + (deviceData.url ?? '').includes('://')) && (
diff --git a/src/app/settings.ts b/src/app/settings.ts index 6b402d5..3c7c73b 100644 --- a/src/app/settings.ts +++ b/src/app/settings.ts @@ -167,6 +167,8 @@ export async function readSettings(): Promise { export interface SavedJson { configJson: string; devicesJson: string; + /** True if at least one file was actually written. */ + wrote: boolean; } /** Serialize config into the two canonical JSON strings without writing anything. */ @@ -175,6 +177,7 @@ export function serializeConfig(config: SettingsConfig): SavedJson { return { configJson: JSON.stringify(mainConfig, null, 2) + '\n', devicesJson: JSON.stringify({ devices }, null, 2) + '\n', + wrote: false, }; } @@ -195,7 +198,7 @@ export async function writeSettings( const writeConfig = !lastSaved || next.configJson !== lastSaved.configJson; const writeDevices = !lastSaved || next.devicesJson !== lastSaved.devicesJson; - if (!writeConfig && !writeDevices) return next; + if (!writeConfig && !writeDevices) return { ...next, wrote: false }; try { await createFolder(SETTINGS_DIR, true); } catch { /* exists */ } @@ -216,7 +219,7 @@ export async function writeSettings( } } catch { /* /sd unreachable — skip mirror */ } - return next; + return { ...next, wrote: true }; } export type SaveStatus = @@ -327,12 +330,16 @@ export function useSettings(): UseSettingsResult { setPendingCount(0); setSaveStatus('saving'); try { - lastSavedRef.current = await writeSettings(configRef.current, lastSavedRef.current); - setSaveStatus('saved'); - // Drop the "saved" badge after a short delay so it doesn't linger. - savedTimerRef.current = window.setTimeout(() => { - setSaveStatus((s) => (s === 'saved' ? 'idle' : s)); - }, SAVED_INDICATOR_MS); + const result = await writeSettings(configRef.current, lastSavedRef.current); + lastSavedRef.current = result; + if (result.wrote) { + setSaveStatus('saved'); + savedTimerRef.current = window.setTimeout(() => { + setSaveStatus((s) => (s === 'saved' ? 'idle' : s)); + }, SAVED_INDICATOR_MS); + } else { + setSaveStatus('idle'); + } } catch (e) { // Roll back: the change is still pending. dirtyRef.current = true;