From 91e47591523bd94526da054f228595d90f3b0923 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Fri, 12 May 2023 07:09:49 -0500 Subject: [PATCH] bug fix in menu and optimization --- apps/shadowclk/settings.js | 102 +++++++++++++------------------------ 1 file changed, 36 insertions(+), 66 deletions(-) diff --git a/apps/shadowclk/settings.js b/apps/shadowclk/settings.js index 384710318..5ce1cf657 100644 --- a/apps/shadowclk/settings.js +++ b/apps/shadowclk/settings.js @@ -1,16 +1,6 @@ -(function(back) { +(function (back) { let teletextColors = ["#000", "#f00", "#0f0", "#ff0", "#00f", "#f0f", "#0ff", "#fff"]; let teletextColorNames = ["Black", "Red", "Green", "Yellow", "Blue", "Magenta", "Cyan", "White"]; - let sysSettings = require('Storage').readJSON("setting.json", 1) || {}; - - // Load and set default settings - let appSettings = Object.assign({ - color: teletextColors[6], - theme: 'light', - enableSuffix: true, - enableLeadingZero: false, - enable12Hour: '24hour' // default time mode - }, require('Storage').readJSON("shadowclk.json", true) || {}); // Colors from 'Light BW' and 'Dark BW' themes function createThemeColors(mode) { @@ -34,27 +24,14 @@ }; } - // Switch theme and save to storage - function switchTheme(mode) { - if (mode === g.theme.dark) return; - let s = require('Storage').readJSON("setting.json", 1) || {}; - s.theme = createThemeColors(mode); - require('Storage').writeJSON("setting.json", s); - updateTheme(mode); - } - - // Update the current menu with the new theme - function updateTheme(mode) { - let newTheme = createThemeColors(mode); + function updateTheme(mode, newTheme) { g.theme = newTheme; - appSettings.theme = mode ? 'dark' : 'light'; - writeSettings(); delete g.reset; g._reset = g.reset; - g.reset = function(n) { + g.reset = function (n) { return g._reset().setColor(newTheme.fg).setBgColor(newTheme.bg); }; - g.clear = function(n) { + g.clear = function (n) { if (n) g.reset(); return g.clearRect(0, 0, g.getWidth(), g.getHeight()); }; @@ -63,48 +40,43 @@ showMenu(); } - // Read the current system theme - function getCurrentTheme() { - if (!sysSettings.theme) { - return appSettings.theme; // fallback to appSettings.theme (light or dark) - } - return sysSettings.theme.dark ? 'dark' : 'light'; - } - - // Read the current time mode - function getCurrentTimeMode() { - if (!sysSettings['12hour']) { - return appSettings.enable12Hour; // fallback to appSettings.enable12Hour - } - return sysSettings['12hour'] ? '12hour' : '24hour'; - } - - // Save settings to storage - function writeSettings() { - appSettings.enable12Hour = appSettings.enable12Hour === '12hour' ? '12hour' : '24hour'; - require('Storage').writeJSON("shadowclk.json", appSettings); - } - - // Save time mode to system settings - function writeTimeModeSetting() { - sysSettings['12hour'] = appSettings.enable12Hour === '12hour'; - require('Storage').writeJSON("setting.json", sysSettings); - } - function showMenu() { - appSettings.theme = getCurrentTheme(); - appSettings.enable12Hour = getCurrentTimeMode(); + let sysSettings = require('Storage').readJSON("setting.json", 1) || {}; + // Load and set default settings + let appSettings = Object.assign({ + color: teletextColors[6], + theme: 'light', + enableSuffix: true, + enableLeadingZero: false, + enable12Hour: '24hour' // default time mode + }, require('Storage').readJSON("shadowclk.json", true) || {}); + + let currentTheme = sysSettings.theme ? (sysSettings.theme.dark ? 'dark' : 'light') : appSettings.theme; + let currentTimeMode = sysSettings['12hour'] ? '12hour' : '24hour'; + + appSettings.theme = currentTheme; + appSettings.enable12Hour = currentTimeMode; E.showMenu({ "": { "title": "Shadow Clock" }, - "< Back": () => back(), + "< Back": () => { + // Save settings to storage + appSettings.enable12Hour = appSettings.enable12Hour === '12hour' ? '12hour' : '24hour'; + require('Storage').writeJSON("shadowclk.json", appSettings); + back(); + }, 'Theme:': { value: (appSettings.theme === 'dark'), format: v => v ? "Dark" : "Light", onchange: v => { - switchTheme(v); + appSettings.theme = v ? 'dark' : 'light'; + let newTheme = createThemeColors(v); + // Save theme to storage + sysSettings.theme = newTheme; + require('Storage').writeJSON("setting.json", sysSettings); + updateTheme(v, newTheme); } }, 'Color:': { @@ -113,7 +85,6 @@ max: 7, onchange: v => { appSettings.color = teletextColors[v]; - writeSettings(); }, format: v => teletextColorNames[v] }, @@ -122,7 +93,6 @@ format: v => v ? 'Yes' : 'No', onchange: v => { appSettings.enableSuffix = v; - writeSettings(); } }, 'Lead Zero:': { @@ -130,20 +100,20 @@ format: v => v ? 'Yes' : 'No', onchange: v => { appSettings.enableLeadingZero = v; - writeSettings(); } }, 'Time Mode:': { value: (appSettings.enable12Hour === '12hour'), format: v => v ? '12 Hr' : '24 Hr', onchange: v => { - appSettings.enable12Hour = v ? '12hour' : '24hour'; - writeSettings(); - writeTimeModeSetting(); + let mode = v ? '12hour' : '24hour'; + appSettings.enable12Hour = mode; + sysSettings['12hour'] = mode === '12hour'; + require('Storage').writeJSON("setting.json", sysSettings); } } }); } // Initially show the menu showMenu(); -}); \ No newline at end of file +});