From c3dea1b5282e34aa99e0cf7dd755a91187183f7f Mon Sep 17 00:00:00 2001 From: Stephan Burns Date: Thu, 16 Jan 2025 18:02:23 -0500 Subject: [PATCH 1/4] Added reloader app --- apps/reloader/ChangeLog | 1 + apps/reloader/README.md | 36 ++++++++++++++++++++++++++++++++++++ apps/reloader/boot.js | 20 ++++++++++++++++++++ apps/reloader/settings.js | 26 ++++++++++++++++++++++++++ 4 files changed, 83 insertions(+) create mode 100644 apps/reloader/ChangeLog create mode 100644 apps/reloader/README.md create mode 100644 apps/reloader/boot.js create mode 100644 apps/reloader/settings.js diff --git a/apps/reloader/ChangeLog b/apps/reloader/ChangeLog new file mode 100644 index 0000000000..2286a7f70e --- /dev/null +++ b/apps/reloader/ChangeLog @@ -0,0 +1 @@ +0.01: New App! \ No newline at end of file diff --git a/apps/reloader/README.md b/apps/reloader/README.md new file mode 100644 index 0000000000..2682dc6fb8 --- /dev/null +++ b/apps/reloader/README.md @@ -0,0 +1,36 @@ +# Reloader + +Automatically reloads your watch every N hours if no activity to prevent crashing. + +## Usage + +Install the app and enjoy. + +OPTIONAL: + +You can go into settings and change how long the watch has to sit before being reloaded. +Default is 2 hours. +Setting the value to 0 disables the app. + +## Settings + +| Name | Description | +| ---- | ----------- | +| Reload Delay in Hours | How long the watch has to sit idle before being reloaded. | + +## Features + +Reloads your watch automatically to prevent crashing and memory leaks. + +## Credits +Icons: [Icons8](https://icons8.com) + +JS Minifier: [Minify-js](https://minify-js.com) + +## Requests + +Features/Bug requests can be submitted on my fork. Fork [Issues](https://github.com/Sleuth56/BangleApps/issues) page. + +## Creator + +Stephan Burns diff --git a/apps/reloader/boot.js b/apps/reloader/boot.js new file mode 100644 index 0000000000..720791d763 --- /dev/null +++ b/apps/reloader/boot.js @@ -0,0 +1,20 @@ +let reloader = (function () { + let settings = Object.assign({ + reload_delay_in_hours: 2, + }, require("Storage").readJSON("reloader.json", true) || {}); + + let reload = function () { + if (!Bangle.isLocked()) { + console.log("Reloader: Device maybe in use. Waiting..."); + setTimeout(reload, 60); + } + else { + console.log("Reloader: Idle for to long reloading..."); + load(); + } + }; + + if (settings.reload_delay_in_hours != 0) { + setInterval(reload, reload_delay_in_hours * 3600); + } +}); \ No newline at end of file diff --git a/apps/reloader/settings.js b/apps/reloader/settings.js new file mode 100644 index 0000000000..b53c4e21d7 --- /dev/null +++ b/apps/reloader/settings.js @@ -0,0 +1,26 @@ +(function (back) { + let settings = Object.assign({ + reload_delay_in_hours: 2, + }, require("Storage").readJSON("reloader.json", true) || {}); + + function setSettings() { + require("Storage").writeJSON("reloader.json", settings); + } + + E.showMenu({ + "": { title: /*LANG*/"Reloader" }, + + /*LANG*/"< Back": () => back(), + + /*LANG*/"Reload Delay in Hours": { + value: settings.reminder_start_time, + min: 0, + max: 24, + step: 1, + onchange: v => { + settings.reminder_start_time = v; + setSettings(); + } + } + }); +}); \ No newline at end of file From 61550b4509e95b4c2df9e037051fe721ae7b4415 Mon Sep 17 00:00:00 2001 From: Stephan Burns Date: Thu, 16 Jan 2025 18:06:54 -0500 Subject: [PATCH 2/4] Forgot a file --- apps/reloader/metadata.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 apps/reloader/metadata.json diff --git a/apps/reloader/metadata.json b/apps/reloader/metadata.json new file mode 100644 index 0000000000..e606b094ae --- /dev/null +++ b/apps/reloader/metadata.json @@ -0,0 +1,18 @@ +{ "id": "reloader", + "name": "Reloader", + "shortName":"Reloader", + "version":"0.01", + "description": "Automatically reloads your watch every N hours if no activity to prevent crashing.", + "icon": "app.png", + "tags": "tool,system", + "type": "bootloader", + "supports" : ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"reloader.settings.js","url":"settings.js"}, + {"name":"reloader.boot.js","url":"boot.js"} + ], + "data": [ + {"name": "reloader.json"} + ] +} \ No newline at end of file From c32d0bd5a0b727034b7d88e4056b470325bc6155 Mon Sep 17 00:00:00 2001 From: Stephan Burns Date: Thu, 16 Jan 2025 19:10:39 -0500 Subject: [PATCH 3/4] Fix time intervals and settings bug --- apps/reloader/boot.js | 10 ++++++---- apps/reloader/settings.js | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/reloader/boot.js b/apps/reloader/boot.js index 720791d763..f05b790c56 100644 --- a/apps/reloader/boot.js +++ b/apps/reloader/boot.js @@ -6,15 +6,17 @@ let reloader = (function () { let reload = function () { if (!Bangle.isLocked()) { console.log("Reloader: Device maybe in use. Waiting..."); - setTimeout(reload, 60); + setTimeout(reload, 600000); } else { console.log("Reloader: Idle for to long reloading..."); load(); } }; - + if (settings.reload_delay_in_hours != 0) { - setInterval(reload, reload_delay_in_hours * 3600); + setInterval(reload, settings.reload_delay_in_hours * 3600000); } -}); \ No newline at end of file +}); + +reloader(); \ No newline at end of file diff --git a/apps/reloader/settings.js b/apps/reloader/settings.js index b53c4e21d7..a99f2b8b04 100644 --- a/apps/reloader/settings.js +++ b/apps/reloader/settings.js @@ -13,12 +13,12 @@ /*LANG*/"< Back": () => back(), /*LANG*/"Reload Delay in Hours": { - value: settings.reminder_start_time, + value: settings.reload_delay_in_hours, min: 0, max: 24, step: 1, onchange: v => { - settings.reminder_start_time = v; + settings.reload_delay_in_hours = v; setSettings(); } } From bebcc8faaa6782050b1e1ccfd02fa256a8f3e295 Mon Sep 17 00:00:00 2001 From: Stephan Burns Date: Thu, 16 Jan 2025 19:13:39 -0500 Subject: [PATCH 4/4] Add app image --- apps/reloader/app.png | Bin 0 -> 1941 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/reloader/app.png diff --git a/apps/reloader/app.png b/apps/reloader/app.png new file mode 100644 index 0000000000000000000000000000000000000000..da0a4475f1203f922b95f1a6ad7504f8b8d60cb7 GIT binary patch literal 1941 zcmV;G2Wt3Rlmn{Sf1k7>Oqu57cOc zpvE)$!}EuU(ct0_G-8x2+wTo4M3h8-EKww0F~n%%A2lKoG#W(3Bbw#hes6XKaT)V^ zK$qR^V|S)!dZz13=Fe_AUHx8l)vI^4QWlHFVzF2(7K_D_B3jz$bPa_oHSj|k88p&* zjkL)i|7ehRYoL7wxu}7=HS%_i^o<7kNF%S*=sljp!qpSny|J}^j=Evui^XFNc-I-A zr5fpL19U(HT=oz6dyVvxcIjf(SsY#K=S&yH;t?X4(yV2#A_5QjX`n6*yuv}gRArf# zw&Kw`Pxou!tw{?#_(vNYm*>xJEsjx{T4r2+%mDpfJHZcHqJB1cesESt@yL-plL20& z>H&k^wFdd8nhP9*_X>l2`LLb|c#&MI(o8e-PBO@AYc61nqXar&fL?Ww&xkAhR4YKc zG*?W~^>KCf)F6*Dj5;P~Mtqx;PB-Ga8sGv0tP@0W$N4 zCH#`Lv08*tt1&lq6voRKD&g{|)id;4^L-~-yyXUXOK!P$p-Ks2`J@O%y|6ou@N;hADpe<#06RZ*3W(?1p}zW>`8*=wS6u-Pc-O?+a8thKS4j9( zRejAUh=D37NG{yg(SN)kU&Hf;7IKbq(OvWy=;jc_?T$kS^*&W1%}VNUq+ zLtW*jj#xsF;)n?IbBz^Xf=Fdbg!x$?nZfmnlm&&Z|1Qt3^%xtPs4TZ;?3q>TF*Y<& z$yVC!&8dtsyR|sRPj{50U@Xj$@M{j}0SD;`gZ#WkezxqJh=(&w0g_LnGRlN@Z)}8t zvc2q^94ZA3`blDz$|zGM1wY(7ytnL|SOr8x2*b}v`&7BuB`BE59dufRiM~rEun89o z(l&$qnMQtB2BEU;ruq0_g?`sSmyJgHwd|WXE?wj-?>X1$=xvg?Kt)F0sB{)b=iI`X zPCL(VT)s^5r)oVUi^XEGSS*&xQZKo$4U0kA;CJoMf9gWHDCk#OO0unM?rS@1ouUljjAA4<^&)N&yMGej$fTH>(E0>F8}zX+#RK zhuDBOO4lsaAQ<4=G|=CYAFEOsknZ1=5NP%Ij^c5uL2!U>(n$OJO|E6BYy55Ue1!q( z(JtMm8VHl;1v2x8c*8$D)IBjQXL51qv7Se2wVRmP!#+|pQR zL#&`lYjKoDe$)2^*Q2NR(7GS(MP>hONFvwN$$MvMq%Q~E&!xF>u9x#o>denF*8Q^D zoH^}0LzWL&hs9(R@1wsVhRo)vZr2G0=&vDsR$n!IiLDCFFY|9)wIA9blLQGsued?haegZxRr-m_k1 z4f+0y5vP}Yt^{~pIcJHI5WVZ8uGhei9DWV|Ab-nz;mMSkd6pWfHFyt+c5TQZ${_FY zKbr_NyWuUMN~4iqDYs2>mdk3(MguPv+x?&^y1UdI+^=KaDW4*&_4q6ni^XEGSS%Kc bMaAG>jN$R$hened00000NkvXXu0mjf+P18m literal 0 HcmV?d00001