mirror of https://github.com/espruino/BangleApps
Merge pull request #2203 from halemmerich/quicklaunch
Quicklaunch - Improve performancepull/2209/head
commit
a42b79a7c7
|
@ -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
|
||||
|
|
|
@ -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};});
|
||||
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};});
|
||||
|
||||
//populate empty app list
|
||||
|
||||
if (!settings.leftapp) {
|
||||
settings["leftapp"] = {"name":"(none)"};
|
||||
require("Storage").write("quicklaunch.json",settings);
|
||||
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)"};
|
||||
}
|
||||
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)"};
|
||||
settings.hash = hash;
|
||||
require("Storage").write("quicklaunch.json",settings);
|
||||
}
|
||||
|
||||
//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);
|
||||
}
|
||||
}
|
||||
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);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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)=>{
|
||||
|
@ -119,4 +123,4 @@ apps.forEach((a)=>{
|
|||
});
|
||||
|
||||
showMainMenu();
|
||||
});
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue