Update settings.js

Fix theme settings not persisting from menu
master
stweedo 2023-05-13 07:59:48 -05:00 committed by GitHub
parent 91e4759152
commit 710c45d7b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 62 additions and 33 deletions

View File

@ -1,6 +1,16 @@
(function (back) { (function (back) {
let teletextColors = ["#000", "#f00", "#0f0", "#ff0", "#00f", "#f0f", "#0ff", "#fff"]; let teletextColors = ["#000", "#f00", "#0f0", "#ff0", "#00f", "#f0f", "#0ff", "#fff"];
let teletextColorNames = ["Black", "Red", "Green", "Yellow", "Blue", "Magenta", "Cyan", "White"]; 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: false // default time mode
}, require('Storage').readJSON("shadowclk.json", true) || {});
// Colors from 'Light BW' and 'Dark BW' themes // Colors from 'Light BW' and 'Dark BW' themes
function createThemeColors(mode) { function createThemeColors(mode) {
@ -24,8 +34,21 @@
}; };
} }
function updateTheme(mode, newTheme) { // 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);
g.theme = newTheme; g.theme = newTheme;
appSettings.theme = mode ? 'dark' : 'light';
writeSettings();
delete g.reset; delete g.reset;
g._reset = g.reset; g._reset = g.reset;
g.reset = function (n) { g.reset = function (n) {
@ -40,43 +63,47 @@
showMenu(); showMenu();
} }
// Read current system theme setting
function getCurrentTheme() {
if (appSettings && appSettings.theme) {
return appSettings.theme;
}
return sysSettings && sysSettings.theme && sysSettings.theme.dark ? 'dark' : 'light';
}
// Read the current time mode
function getCurrentTimeMode() {
if (appSettings && appSettings.enable12Hour !== undefined) {
return appSettings.enable12Hour;
}
return sysSettings && sysSettings['12hour'] !== undefined ? sysSettings['12hour'] : undefined;
}
// Save settings to storage
function writeSettings() {
require('Storage').writeJSON("shadowclk.json", appSettings);
}
function writeTimeModeSetting() {
sysSettings['12hour'] = appSettings.enable12Hour;
require('Storage').writeJSON("setting.json", sysSettings);
}
function showMenu() { function showMenu() {
let sysSettings = require('Storage').readJSON("setting.json", 1) || {}; appSettings.theme = getCurrentTheme();
// Load and set default settings appSettings.enable12Hour = getCurrentTimeMode();
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({ E.showMenu({
"": { "": {
"title": "Shadow Clock" "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:': { 'Theme:': {
value: (appSettings.theme === 'dark'), value: (appSettings.theme === 'dark'),
format: v => v ? "Dark" : "Light", format: v => v ? "Dark" : "Light",
onchange: v => { onchange: v => {
appSettings.theme = v ? 'dark' : 'light'; writeSettings();
let newTheme = createThemeColors(v); switchTheme(v);
// Save theme to storage
sysSettings.theme = newTheme;
require('Storage').writeJSON("setting.json", sysSettings);
updateTheme(v, newTheme);
} }
}, },
'Color:': { 'Color:': {
@ -85,6 +112,7 @@
max: 7, max: 7,
onchange: v => { onchange: v => {
appSettings.color = teletextColors[v]; appSettings.color = teletextColors[v];
writeSettings();
}, },
format: v => teletextColorNames[v] format: v => teletextColorNames[v]
}, },
@ -93,6 +121,7 @@
format: v => v ? 'Yes' : 'No', format: v => v ? 'Yes' : 'No',
onchange: v => { onchange: v => {
appSettings.enableSuffix = v; appSettings.enableSuffix = v;
writeSettings();
} }
}, },
'Lead Zero:': { 'Lead Zero:': {
@ -100,16 +129,16 @@
format: v => v ? 'Yes' : 'No', format: v => v ? 'Yes' : 'No',
onchange: v => { onchange: v => {
appSettings.enableLeadingZero = v; appSettings.enableLeadingZero = v;
writeSettings();
} }
}, },
'Time Mode:': { 'Time Mode:': {
value: (appSettings.enable12Hour === '12hour'), value: appSettings.enable12Hour,
format: v => v ? '12 Hr' : '24 Hr', format: v => v ? '12 Hr' : '24 Hr',
onchange: v => { onchange: v => {
let mode = v ? '12hour' : '24hour'; appSettings.enable12Hour = v;
appSettings.enable12Hour = mode; writeSettings();
sysSettings['12hour'] = mode === '12hour'; writeTimeModeSetting();
require('Storage').writeJSON("setting.json", sysSettings);
} }
} }
}); });