From 13bbf669b4a768b16b9ed629ee97d27a210f6e03 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sat, 29 Oct 2022 14:17:40 +0200 Subject: [PATCH 1/9] fastload - Add fastload app --- apps/fastload/ChangeLog | 1 + apps/fastload/README.md | 1 + apps/fastload/boot.js | 22 ++++++++++++++++++++++ apps/fastload/icon.png | Bin 0 -> 1076 bytes apps/fastload/metadata.json | 14 ++++++++++++++ 5 files changed, 38 insertions(+) create mode 100644 apps/fastload/ChangeLog create mode 100644 apps/fastload/README.md create mode 100644 apps/fastload/boot.js create mode 100644 apps/fastload/icon.png create mode 100644 apps/fastload/metadata.json diff --git a/apps/fastload/ChangeLog b/apps/fastload/ChangeLog new file mode 100644 index 000000000..2286a7f70 --- /dev/null +++ b/apps/fastload/ChangeLog @@ -0,0 +1 @@ +0.01: New App! \ No newline at end of file diff --git a/apps/fastload/README.md b/apps/fastload/README.md new file mode 100644 index 000000000..95b87f0fe --- /dev/null +++ b/apps/fastload/README.md @@ -0,0 +1 @@ +# Fastload diff --git a/apps/fastload/boot.js b/apps/fastload/boot.js new file mode 100644 index 000000000..7787aaa83 --- /dev/null +++ b/apps/fastload/boot.js @@ -0,0 +1,22 @@ +{ +let loadingScreen = function(){ + g.reset(); + + let x = g.getWidth()/2; + let y = g.getHeight()/2; + g.setColor(g.theme.bg); + g.fillRect(x-49, y-19, x+49, y+19); + g.setColor(g.theme.fg); + g.drawRect(x-50, y-20, x+50, y+20); + g.setFont("6x8"); + g.setFontAlign(0,0); + g.drawString("Fastloading...", x, y); + g.flip(true); +}; + +// only needed to show "Fastloading..." on starting the launcher +Bangle.load = (o => (name) => { + if (Bangle.uiRemove) loadingScreen(); + setTimeout(o,0,name); +})(Bangle.load); +} diff --git a/apps/fastload/icon.png b/apps/fastload/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7fe9afe6ec8c6f7fd0f639a99c578b2247b716f8 GIT binary patch literal 1076 zcmV-41k3x0P)~AYu0?%tog6?U;p9%sRT2TB)ukSp#dz$xi|w0qRoi)GcxY$nU2A7JdK}G zX<}oT)EmrtEyNS}Lv!d_+uak=2|5RF3U9Mr@Tz^%1KuM#5zpxkylOAQl#;>WYCMCJ zkFuZP99TM1f`>4!`?p?eE6RkQjAwHKui7bP!6(8elPCPwWx>N^Im1`5zAX5=n?Q_X zqcFf1@OK9TxTFmDTVy-zUM!u^{&alY0=$BqO4xx{V6+Lu4H@^%)p{l#EfO3Caj*%% z?}B4z>BT1ZjtVn%M0roeJiLKpo3z;-VY2jFle*WjqYJLKG#y`P{SEI!f0KSTW!!fd zXBWh7GTvzcUTcqJ^s`L1<3CjtJgjRIylP{DGgfC}5^j_oPVdAC-GD8`huAj3-ox>+ z&8iOJYi&Qi#GV#|y`mfVnfSIrhlg=_Y;!3_j$#1q*!|tWPr>^c9o`w+%$2SvMcMP3 zFS(g|GNZ$nV*NC1FBpDJeEzzR|UcE z!jin;8z~Wjs3PFE5Phy*U8emLa04Q7~m2iYHg&fpE zh!40aqkeg;|3wI^TWO_w_;tEG-?pQz@ga*E)Fo2KUfpJYv!$!nzrre3sCLAMojRdB z!Gp2xd*Ls7yV@c|uove6*hre#S+F(uES8Vpf)4xa(>z0+tNxL_YW#=`%L3^} uiLj<05`wk^_({lDZWdObv7XVjq5lAm2P;)U!_=Ap0000 Date: Tue, 22 Nov 2022 19:05:12 +0100 Subject: [PATCH 2/9] fastload - Allow redirecting to launcher for back function of setUI --- apps/fastload/boot.js | 55 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/apps/fastload/boot.js b/apps/fastload/boot.js index 7787aaa83..11ce0563b 100644 --- a/apps/fastload/boot.js +++ b/apps/fastload/boot.js @@ -1,4 +1,6 @@ { +const SETTINGS = require("Storage").readJSON("fastload.json") || {}; + let loadingScreen = function(){ g.reset(); @@ -14,9 +16,58 @@ let loadingScreen = function(){ g.flip(true); }; -// only needed to show "Fastloading..." on starting the launcher +let cache = require("Storage").readJSON("fastload.cache") || {}; + +function checkApp(n){ + print("checking", n); + // no widgets, no problem + if (!global.WIDGETS) return true; + let app = require("Storage").read(n); + if (cache[n] && E.CRC32(app) == cache[n].crc) + return cache[n].fast + cache[n] = {}; + cache[n].fast = app.includes("Bangle.loadWidgets"); + cache[n].crc = E.CRC32(app); + require("Storage").writeJSON("fastload.cache", cache); + print("updated cache", cache[n]); + return cache[n].fast; +} + +global._load = load; + +function slowload(n){ + print("slowload", n); + global._load(n); +} + +function fastload(n){ + print("fastload", n) + if (!n || checkApp(n)){ + print("actually try fastloading using Bangle.load"); + // Bangle.load can call load, to prevent recursion this must be the system load + global.load = slowload; + Bangle.load(n); + // if fastloading worked, we need to set load back to this method + global.load = fastload; + } + else + slowload(n); +}; +global.load = fastload; + Bangle.load = (o => (name) => { + print("Bangle.load", name); if (Bangle.uiRemove) loadingScreen(); - setTimeout(o,0,name); + if (SETTINGS.autoloadLauncher && !name){ + print("redirect to launcher"); + let orig = Bangle.load; + Bangle.load = (n)=>{ + Bangle.load = orig; + fastload(n); + } + Bangle.showLauncher(); + Bangle.load = orig; + } else + o(name); })(Bangle.load); } From 9a59935b218bc0d4274c13bba01a3f62cc3a87d6 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Tue, 22 Nov 2022 20:52:09 +0100 Subject: [PATCH 3/9] fastload - Bump version --- apps/fastload/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/fastload/metadata.json b/apps/fastload/metadata.json index 8bb37d138..01dab4a7c 100644 --- a/apps/fastload/metadata.json +++ b/apps/fastload/metadata.json @@ -1,7 +1,7 @@ { "id": "fastload", "name": "Fastload Utils", "shortName" : "Fastload Utils", - "version": "0.01", + "version": "0.02", "icon": "icon.png", "description": "Utilities for fastloading and switching between apps", "type":"bootloader", From 64567228a68892eeb58231c43f5892f3763f5eb3 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 27 Nov 2022 14:50:22 +0100 Subject: [PATCH 4/9] fastload - Adds setting for always loading to launcher --- apps/fastload/metadata.json | 8 +++++--- apps/fastload/settings.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 apps/fastload/settings.js diff --git a/apps/fastload/metadata.json b/apps/fastload/metadata.json index 01dab4a7c..5b46be322 100644 --- a/apps/fastload/metadata.json +++ b/apps/fastload/metadata.json @@ -1,7 +1,7 @@ { "id": "fastload", "name": "Fastload Utils", "shortName" : "Fastload Utils", - "version": "0.02", + "version": "0.03", "icon": "icon.png", "description": "Utilities for fastloading and switching between apps", "type":"bootloader", @@ -9,6 +9,8 @@ "supports": ["BANGLEJS2"], "readme": "README.md", "storage": [ - {"name":"fastload.5.boot.js","url":"boot.js"} - ] + {"name":"fastload.5.boot.js","url":"boot.js"}, + {"name":"fastload.settings.js","url":"settings.js"} + ], + "data": [{"name":"fastload.json"}] } diff --git a/apps/fastload/settings.js b/apps/fastload/settings.js new file mode 100644 index 000000000..69064c3d7 --- /dev/null +++ b/apps/fastload/settings.js @@ -0,0 +1,32 @@ +(function(back) { + var FILE="fastload.json"; + var settings; + + function writeSettings(key, value) { + var s = require('Storage').readJSON(FILE, true) || {}; + s[key] = value; + require('Storage').writeJSON(FILE, s); + readSettings(); + } + + function readSettings(){ + settings = require('Storage').readJSON(FILE, true) || {}; + } + + readSettings(); + + function buildMainMenu(){ + var mainmenu = { + '': { 'title': 'Fastload', back: back }, + 'Force load to launcher': { + value: !!settings.autoloadLauncher, + onchange: v => { + writeSettings("autoloadLauncher",v); + } + } + }; + return mainmenu; + } + + E.showMenu(buildMainMenu()); +}) From 65034377c69b56cadbbb60dd0206bc4a4a1a0924 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 27 Nov 2022 19:19:33 +0100 Subject: [PATCH 5/9] fastload - Adds setting for hiding the loading screen --- apps/fastload/boot.js | 2 +- apps/fastload/settings.js | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/fastload/boot.js b/apps/fastload/boot.js index 11ce0563b..c36c0921d 100644 --- a/apps/fastload/boot.js +++ b/apps/fastload/boot.js @@ -57,7 +57,7 @@ global.load = fastload; Bangle.load = (o => (name) => { print("Bangle.load", name); - if (Bangle.uiRemove) loadingScreen(); + if (Bangle.uiRemove && !SETTINGS.hideLoading) loadingScreen(); if (SETTINGS.autoloadLauncher && !name){ print("redirect to launcher"); let orig = Bangle.load; diff --git a/apps/fastload/settings.js b/apps/fastload/settings.js index 69064c3d7..4904e057e 100644 --- a/apps/fastload/settings.js +++ b/apps/fastload/settings.js @@ -23,6 +23,12 @@ onchange: v => { writeSettings("autoloadLauncher",v); } + }, + 'Hide "Fastloading..."': { + value: !!settings.hideLoading, + onchange: v => { + writeSettings("hideLoading",v); + } } }; return mainmenu; From 30b05f8d8eb70487d87d6f21be33cbaed4ffeeb2 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 27 Nov 2022 19:29:28 +0100 Subject: [PATCH 6/9] fastload - Adds a README --- apps/fastload/README.md | 22 +++++++++++++++++++++- apps/fastload/metadata.json | 2 +- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/apps/fastload/README.md b/apps/fastload/README.md index 95b87f0fe..a1feedcf8 100644 --- a/apps/fastload/README.md +++ b/apps/fastload/README.md @@ -1 +1,21 @@ -# Fastload +# Fastload Utils + +*EXPERIMENTAL* Use this with caution. When you find something misbehaving please check if the problem actually persists when removing this app. + +This allows fast loading of all apps with two conditions: +* Loaded app contains `Bangle.loadWidgets`. This is needed to prevent problems with apps not expecting widgets to be already loaded. +* Current app can be removed completely from RAM. + +## Settings + +* Allows to redirect all loads usually loading the clock to the launcher instead +* The "Fastloading..." screen can be switched off + +## Technical infos + +This is still experimental but it uses the same mechanism as `.bootcde` does. +It checks the app to be loaded for widget use and stores the result of that and a hash of the js in a cache. + +# Creator + +[halemmerich](https://github.com/halemmerich) diff --git a/apps/fastload/metadata.json b/apps/fastload/metadata.json index 5b46be322..15adcb7e3 100644 --- a/apps/fastload/metadata.json +++ b/apps/fastload/metadata.json @@ -3,7 +3,7 @@ "shortName" : "Fastload Utils", "version": "0.03", "icon": "icon.png", - "description": "Utilities for fastloading and switching between apps", + "description": "Enable experimental fastloading for more apps", "type":"bootloader", "tags": "system", "supports": ["BANGLEJS2"], From e86b716093deae94321a05a39650dd5620c7080c Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Mon, 28 Nov 2022 20:02:58 +0100 Subject: [PATCH 7/9] fastload - Remove debug prints --- apps/fastload/boot.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/apps/fastload/boot.js b/apps/fastload/boot.js index c36c0921d..0d8a888ac 100644 --- a/apps/fastload/boot.js +++ b/apps/fastload/boot.js @@ -19,7 +19,6 @@ let loadingScreen = function(){ let cache = require("Storage").readJSON("fastload.cache") || {}; function checkApp(n){ - print("checking", n); // no widgets, no problem if (!global.WIDGETS) return true; let app = require("Storage").read(n); @@ -29,21 +28,17 @@ function checkApp(n){ cache[n].fast = app.includes("Bangle.loadWidgets"); cache[n].crc = E.CRC32(app); require("Storage").writeJSON("fastload.cache", cache); - print("updated cache", cache[n]); return cache[n].fast; } global._load = load; function slowload(n){ - print("slowload", n); global._load(n); } function fastload(n){ - print("fastload", n) if (!n || checkApp(n)){ - print("actually try fastloading using Bangle.load"); // Bangle.load can call load, to prevent recursion this must be the system load global.load = slowload; Bangle.load(n); @@ -56,10 +51,8 @@ function fastload(n){ global.load = fastload; Bangle.load = (o => (name) => { - print("Bangle.load", name); if (Bangle.uiRemove && !SETTINGS.hideLoading) loadingScreen(); if (SETTINGS.autoloadLauncher && !name){ - print("redirect to launcher"); let orig = Bangle.load; Bangle.load = (n)=>{ Bangle.load = orig; From 88b9f7eac8bd7bd20bf863888b3fe3810c415cfb Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Mon, 28 Nov 2022 20:17:10 +0100 Subject: [PATCH 8/9] fastload - Add versions to changelog --- apps/fastload/ChangeLog | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/fastload/ChangeLog b/apps/fastload/ChangeLog index 2286a7f70..53e3c2591 100644 --- a/apps/fastload/ChangeLog +++ b/apps/fastload/ChangeLog @@ -1 +1,3 @@ -0.01: New App! \ No newline at end of file +0.01: New App! +0.02: Allow redirection of loads to the launcher +0.03: Allow hiding the fastloading info screen From a8ba0658d9d3b2c287bbd96a5e9b44450b9be365 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Mon, 28 Nov 2022 20:26:46 +0100 Subject: [PATCH 9/9] fastload - Fix build warnings --- apps/fastload/boot.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/fastload/boot.js b/apps/fastload/boot.js index 0d8a888ac..c9271abbf 100644 --- a/apps/fastload/boot.js +++ b/apps/fastload/boot.js @@ -18,7 +18,7 @@ let loadingScreen = function(){ let cache = require("Storage").readJSON("fastload.cache") || {}; -function checkApp(n){ +let checkApp = function(n){ // no widgets, no problem if (!global.WIDGETS) return true; let app = require("Storage").read(n); @@ -33,11 +33,11 @@ function checkApp(n){ global._load = load; -function slowload(n){ +let slowload = function(n){ global._load(n); } -function fastload(n){ +let fastload = function(n){ if (!n || checkApp(n)){ // Bangle.load can call load, to prevent recursion this must be the system load global.load = slowload;