From 35ca9b0e768fff8c15a6b630733dd90ca954a7b7 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Wed, 8 Jul 2026 21:57:17 +0200 Subject: [PATCH] taglaunch: fastload Fast load apps similar to launcher_utils library --- apps/taglaunch/ChangeLog | 1 + apps/taglaunch/app.js | 37 +++++++++++++++++++++++------------- apps/taglaunch/metadata.json | 2 +- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/apps/taglaunch/ChangeLog b/apps/taglaunch/ChangeLog index e088349ab05..c36ee4f7608 100644 --- a/apps/taglaunch/ChangeLog +++ b/apps/taglaunch/ChangeLog @@ -8,3 +8,4 @@ 0.07: Clear cached app list when updating showClocks setting 0.08: Add haptic feedback option when selecting app or category in menu, increase vector size limit in settings 0.09: Add option to set up to 3 shortcut apps that you can access straight from the tag menu for quicker access +0.10: Fast load apps similar to launcher_utils library diff --git a/apps/taglaunch/app.js b/apps/taglaunch/app.js index df187b3fd86..52cf0b5275a 100644 --- a/apps/taglaunch/app.js +++ b/apps/taglaunch/app.js @@ -42,7 +42,7 @@ let sort = (a, b) => { // cache app list so launcher loads more quickly let launchCache = s.readJSON("taglaunch.cache.json", true)||{}; -let launchHash = require("Storage").hash(/\.info/); +let launchHash = s.hash(/\.info/); if (launchCache.hash!=launchHash) { let appsByTag = Object.keys(tags).reduce((acc,curr)=> (acc[curr]=[],acc),{}); s.list(/\.info$/).map(app=>s.readJSON(app,1)) @@ -86,7 +86,7 @@ const unload = () => { let shortcuts=settings.shortcuts; let noShortcuts=shortcuts[0]==""&&shortcuts[1]==""&&shortcuts[2]==""; - + let loadShortcut=function(idx){ if(shortcuts[idx]!=""){ const p = settings.buzz ? Bangle.buzz(25) : Promise.resolve(); @@ -121,14 +121,25 @@ let showTagMenu = (tag) => { const loadApp = () => { let app = appsByTag[tag][i]; if (!app) return; - if (!app.src || require("Storage").read(app.src)===undefined) { + if (!app.src || s.read(app.src)===undefined) { Bangle.setUI(); E.showMessage(/*LANG*/"App Source\nNot found"); setTimeout(showMainMenu, 2000); } else { - load(app.src); + if (app.wid===undefined) { + // If we hadn't stored whether the app uses widgets before, check now + let src = s.read(app.src); + app.wid = (src!==undefined)&&src.includes("Bangle.loadWidgets"); + s.writeJSON("taglaunch.cache.json", launchCache); + } + if (app.wid || global.WIDGETS===undefined) Bangle.load(app.src); // if app uses widgets or we don't have any, we can fast load into it + else if (Object.keys(WIDGETS).every(w=>!!WIDGETS[w].remove)) { // are widgets unloadable? !! needed before 2v29 fw + Object.keys(WIDGETS).forEach(w=>WIDGETS[w].remove()); + delete global.WIDGETS; + Bangle.load(app.src); + } else load(app.src); // otherwise default to slow load } - }; + }; if(settings.buzz){ Bangle.buzz(25); //let the buzz have effect @@ -136,7 +147,7 @@ let showTagMenu = (tag) => { }else{ loadApp(); } - + }, back : showMainMenu, remove: unload @@ -149,7 +160,7 @@ let showMainMenu = () => { h : 64*scaleval, c : noShortcuts ? tagKeys.length : tagKeys.length+1, draw : (i, r) => { g.clearRect((r.x),(r.y),(r.x+r.w-1), (r.y+r.h-1)); - + if(!noShortcuts)i-=1; if(i==-1){ for(let j=0;j<3;j++){ @@ -161,7 +172,7 @@ let showMainMenu = () => { } } - + }else{ let tag = tagKeys[i]; g.setFont(font).setFontAlign(-1,0).drawString(tags[tag].name,64*scaleval,r.y+(32*scaleval)); @@ -175,11 +186,11 @@ let showMainMenu = () => { if(!noShortcuts)i-=1; if(i==-1){ if(e.x