From 855186f7c9289d4f3f53e0f053c38fb5f7b5de9e Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Fri, 29 May 2020 10:37:44 +0200 Subject: [PATCH] gbridge: improve settings handling No need to keep them in memory after reload() is done --- apps/gbridge/settings.js | 25 ++++++++++++++----------- apps/gbridge/widget.js | 23 ++++++++++++----------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/apps/gbridge/settings.js b/apps/gbridge/settings.js index 8df3f6ab4..9e2245e66 100644 --- a/apps/gbridge/settings.js +++ b/apps/gbridge/settings.js @@ -2,17 +2,20 @@ function gb(j) { Bluetooth.println(JSON.stringify(j)); } - const storage = require('Storage'); - let settings = storage.readJSON("gbridge.json", true) || {}; - if (!("showIcon" in settings)) { - settings.showIcon = true; + function settings() { + let settings = require('Storage').readJSON("gbridge.json", true) || {}; + if (!("showIcon" in settings)) { + settings.showIcon = true; + } + return settings } - function updateSettings() { - storage.write('gbridge.json', settings); + function updateSetting(setting, value) { + let settings = require('Storage').readJSON("gbridge.json", true) || {}; + settings[setting] = value + require('Storage').write('gbridge.json', settings); } - function toggleIcon() { - settings.showIcon = !settings.showIcon; - updateSettings(); + function setIcon(visible) { + updateSetting('showIcon', visible); // need to re-layout widgets WIDGETS["gbridgew"].reload(); g.clear(); @@ -22,9 +25,9 @@ "" : { "title" : "Gadgetbridge" }, "Connected" : { value : NRF.getSecurityStatus().connected?"Yes":"No" }, "Show Icon" : { - value: settings.showIcon, + value: settings().showIcon, format: v => v?"Yes":"No", - onchange: toggleIcon + onchange: setIcon }, "Find Phone" : function() { E.showMenu(findPhone); }, "< Back" : back, diff --git a/apps/gbridge/widget.js b/apps/gbridge/widget.js index db6963abb..622543d1b 100644 --- a/apps/gbridge/widget.js +++ b/apps/gbridge/widget.js @@ -1,7 +1,4 @@ (() => { - const storage = require('Storage'); - let settings; - const state = { music: "stop", @@ -14,6 +11,13 @@ scrollPos: 0 }; + function settings() { + let settings = require('Storage').readJSON("gbridge.json", true) || {}; + if (!("showIcon" in settings)) { + settings.showIcon = true; + } + return settings + } function gbSend(message) { Bluetooth.println(""); @@ -183,7 +187,6 @@ }); function draw() { - if (!settings.showIcon) return; g.setColor(-1); if (NRF.getSecurityStatus().connected) g.drawImage(require("heatshrink").decompress(atob("i0WwgHExAABCIwJCBYwJEBYkIBQ2ACgvzCwoECx/z/AKDD4WD+YLBEIYKCx//+cvnAKCBwU/mc4/8/HYv//Ev+Y4EEAePn43DBQkzn4rCEIoABBIwKHO4cjmczK42I6mqlqEEBQeIBQaDED4IgDUhi6KaBbmIA==")), this.x + 1, this.y + 1); @@ -197,18 +200,16 @@ } function reload() { - settings = storage.readJSON('gbridge.json', 1) || {}; - if (!("showIcon" in settings)) { - settings.showIcon = true; - } - if (settings.showIcon) { + NRF.removeListener("connect", changedConnectionState); + NRF.removeListener("disconnect", changedConnectionState); + if (settings().showIcon) { WIDGETS["gbridgew"].width = 24; + WIDGETS["gbridgew"].draw = draw; NRF.on("connect", changedConnectionState); NRF.on("disconnect", changedConnectionState); } else { WIDGETS["gbridgew"].width = 0; - NRF.removeListener("connect", changedConnectionState); - NRF.removeListener("disconnect", changedConnectionState); + WIDGETS["gbridgew"].draw = ()=>{}; } }