From 9b6374fae535ae9a1292866234d5b13eac209e2d Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Thu, 27 Oct 2022 18:09:01 +0200 Subject: [PATCH 1/3] quicklaunch - Only scan for missing apps on changes --- apps/quicklaunch/boot.js | 88 ++++++++++-------------------------- apps/quicklaunch/settings.js | 12 +++-- 2 files changed, 33 insertions(+), 67 deletions(-) diff --git a/apps/quicklaunch/boot.js b/apps/quicklaunch/boot.js index 3670c4776..54f261fdf 100644 --- a/apps/quicklaunch/boot.js +++ b/apps/quicklaunch/boot.js @@ -1,67 +1,29 @@ -(function() { - var settings = Object.assign(require("Storage").readJSON("quicklaunch.json", true) || {}); +{ + let settings = Object.assign(require("Storage").readJSON("quicklaunch.json", true) || {}); - //list all sources - var apps = require("Storage").list(/\.info$/).map(app=>{var a=require("Storage").readJSON(app,1);return a&&{src:a.src};}); - - //populate empty app list - - if (!settings.leftapp) { - settings["leftapp"] = {"name":"(none)"}; - require("Storage").write("quicklaunch.json",settings); - } - if (!settings.rightapp) { - settings["rightapp"] = {"name":"(none)"}; - require("Storage").write("quicklaunch.json",settings); - } - if (!settings.upapp) { - settings["upapp"] = {"name":"(none)"}; - require("Storage").write("quicklaunch.json",settings); - } - if (!settings.downapp) { - settings["downapp"] = {"name":"(none)"}; - require("Storage").write("quicklaunch.json",settings); - } - if (!settings.tapapp) { - settings["tapapp"] = {"name":"(none)"}; - require("Storage").write("quicklaunch.json",settings); - } + let hash = require("Storage").hash(/\.info/); + if (settings.hash!=hash) { + //apps changed, rescan and remove no longer existing apps + let apps = require("Storage").list(/\.info$/).map(app=>{var a=require("Storage").readJSON(app,1);return a&&{src:a.src};}); - //activate on clock faces - var sui = Bangle.setUI; - Bangle.setUI = function(mode, cb) { - sui(mode,cb); - if(!mode) return; - if ("object"==typeof mode) mode = mode.mode; - if (!mode.startsWith("clock")) return; - - function tap() { - //tap, check if source exists, launch - if ((settings.tapapp.src) && apps.some(e => e.src === settings.tapapp.src)) load (settings.tapapp.src); - } - - let drag; - let e; - - Bangle.on("touch",tap); - Bangle.on("drag", e => { - if (!drag) { // start dragging - drag = {x: e.x, y: e.y}; - } else if (!e.b) { // released - const dx = e.x-drag.x, dy = e.y-drag.y; - drag = null; - //horizontal swipes, check if source exists, launch - if (Math.abs(dx)>Math.abs(dy)+10) { - if ((settings.leftapp.src) && apps.some(e => e.src === settings.leftapp.src) && dx<0) load(settings.leftapp.src); - if ((settings.rightapp.src) && apps.some(e => e.src === settings.rightapp.src) && dx>0) load(settings.rightapp.src); - } - //vertical swipes, check if source exists, launch - else if (Math.abs(dy)>Math.abs(dx)+10) { - if ((settings.upapp.src) && apps.some(e => e.src === settings.upapp.src) && dy<0) load(settings.upapp.src); - if ((settings.downapp.src) && apps.some(e => e.src === settings.downapp.src) && dy>0) load(settings.downapp.src); - } + for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){ + if (!settings[c]) settings[c] = {"name":"(none)"}; + if (!require("Storage").read(settings[c].src)) settings[c] = {"name":"(none)"}; } - }); + require("Storage").write("quicklaunch.json",settings); + settings.hash = hash; + } - }; -})(); + Bangle.on("touch", () => { + if (!Bangle.CLOCK) return; + if (settings.tapapp.src) load(settings.tapapp.src); + }); + Bangle.on("swipe", (lr,ud) => { + if (!Bangle.CLOCK) return; + + if (lr == -1 && settings.leftapp.src) load(settings.leftapp.src); + if (lr == 1 && settings.rightapp.src) load(settings.rightapp.src); + if (ud == 1 && settings.upapp.src) load(settings.upapp.src); + if (ud == -1 && settings.downapp.src) load(settings.downapp.src); + }); +} diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index ac4cc5805..7aac60a94 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -1,6 +1,10 @@ (function(back) { var settings = Object.assign(require("Storage").readJSON("quicklaunch.json", true) || {}); +for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){ + if (!settings[c]) settings[c] = {"name":"(none)"}; +} + var apps = require("Storage").list(/\.info$/).map(app=>{var a=require("Storage").readJSON(app,1);return a&&{name:a.name,type:a.type,sortorder:a.sortorder,src:a.src};}).filter(app=>app && (app.type=="app" || app.type=="launch" || app.type=="clock" || !app.type)); apps.sort((a,b)=>{ @@ -29,11 +33,11 @@ function showMainMenu() { mainmenu["Up: "+settings.upapp.name] = function() { E.showMenu(upmenu); }; mainmenu["Down: "+settings.downapp.name] = function() { E.showMenu(downmenu); }; mainmenu["Tap: "+settings.tapapp.name] = function() { E.showMenu(tapmenu); }; - + return E.showMenu(mainmenu); } - -//Left swipe menu + +//Left swipe menu var leftmenu = { "" : { "title" : "Left Swipe" }, "< Back" : showMainMenu @@ -119,4 +123,4 @@ apps.forEach((a)=>{ }); showMainMenu(); -}); \ No newline at end of file +}) From 4e187004a820d81a0829a50c8a8d1c174af49cff Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Thu, 27 Oct 2022 18:10:00 +0200 Subject: [PATCH 2/3] quicklaunch - Bump version --- apps/quicklaunch/ChangeLog | 1 + apps/quicklaunch/metadata.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/quicklaunch/ChangeLog b/apps/quicklaunch/ChangeLog index ae1d4a848..80334b57d 100644 --- a/apps/quicklaunch/ChangeLog +++ b/apps/quicklaunch/ChangeLog @@ -1,2 +1,3 @@ 0.01: Initial version 0.02: Moved settings from launcher to settings->apps menu +0.03: Better performance by not scanning on every boot diff --git a/apps/quicklaunch/metadata.json b/apps/quicklaunch/metadata.json index 49eafdd35..dd0362324 100644 --- a/apps/quicklaunch/metadata.json +++ b/apps/quicklaunch/metadata.json @@ -2,7 +2,7 @@ "id": "quicklaunch", "name": "Quick Launch", "icon": "app.png", - "version":"0.02", + "version":"0.03", "description": "Tap or swipe left/right/up/down on your clock face to launch up to five apps of your choice. Configurations can be accessed through Settings->Apps.", "type": "bootloader", "tags": "tools, system", From 6f8bff566945f32b15c5dedb6a79a7e2c8aa2e17 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Fri, 28 Oct 2022 08:16:42 +0200 Subject: [PATCH 3/3] quicklaunch - Actually store the hash in settings file --- apps/quicklaunch/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/quicklaunch/boot.js b/apps/quicklaunch/boot.js index 54f261fdf..bc2408e78 100644 --- a/apps/quicklaunch/boot.js +++ b/apps/quicklaunch/boot.js @@ -10,8 +10,8 @@ if (!settings[c]) settings[c] = {"name":"(none)"}; if (!require("Storage").read(settings[c].src)) settings[c] = {"name":"(none)"}; } - require("Storage").write("quicklaunch.json",settings); settings.hash = hash; + require("Storage").write("quicklaunch.json",settings); } Bangle.on("touch", () => {