forked from FOSS/BangleApps
100 lines
2.8 KiB
JavaScript
100 lines
2.8 KiB
JavaScript
{
|
|
const s = require("Storage");
|
|
const SETTINGS = s.readJSON("fastload.json") || {};
|
|
|
|
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);
|
|
};
|
|
|
|
let cache = s.readJSON("fastload.cache") || {};
|
|
|
|
const SYS_SETTINGS="setting.json";
|
|
|
|
let appFastloadPossible = function(n){
|
|
if(SETTINGS.detectSettingsChange && (!cache[SYS_SETTINGS] || s.hash(SYS_SETTINGS) != cache[SYS_SETTINGS])){
|
|
cache[SYS_SETTINGS] = s.hash(SYS_SETTINGS);
|
|
s.writeJSON("fastload.cache", cache);
|
|
return false;
|
|
}
|
|
|
|
// no widgets, no problem
|
|
if (!global.WIDGETS) return true;
|
|
let hash = s.hash(n);
|
|
if (cache[n] && hash == cache[n].hash)
|
|
return cache[n].fast;
|
|
let app = s.read(n);
|
|
cache[n] = {};
|
|
cache[n].fast = app.includes("Bangle.loadWidgets");
|
|
cache[n].hash = hash;
|
|
s.writeJSON("fastload.cache", cache);
|
|
return cache[n].fast;
|
|
};
|
|
|
|
global._load = load;
|
|
|
|
let slowload = function(n){
|
|
global._load(n);
|
|
};
|
|
|
|
let fastload = function(n){
|
|
if (!n || appFastloadPossible(n)){
|
|
// 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;
|
|
|
|
let appHistory, resetHistory, recordHistory;
|
|
if (SETTINGS.useAppHistory){
|
|
appHistory = s.readJSON("fastload.history.json",true)||[];
|
|
resetHistory = ()=>{appHistory=[];s.writeJSON("fastload.history.json",appHistory);};
|
|
recordHistory = ()=>{s.writeJSON("fastload.history.json",appHistory);};
|
|
}
|
|
|
|
Bangle.load = (o => (name) => {
|
|
if (Bangle.uiRemove && !SETTINGS.hideLoading) loadingScreen();
|
|
if (SETTINGS.useAppHistory){
|
|
if (name && name!=".bootcde" && !(name=="quicklaunch.app.js" && SETTINGS.disregardQuicklaunch)) {
|
|
// store the name of the app to launch
|
|
appHistory.push(name);
|
|
} else if (name==".bootcde") { // when Bangle.showClock is called
|
|
resetHistory();
|
|
} else if (name=="quicklaunch.app.js" && SETTINGS.disregardQuicklaunch) {
|
|
// do nothing with history
|
|
} else {
|
|
// go back in history
|
|
appHistory.pop();
|
|
name = appHistory[appHistory.length-1];
|
|
}
|
|
}
|
|
if (SETTINGS.autoloadLauncher && !name){
|
|
let orig = Bangle.load;
|
|
Bangle.load = (n)=>{
|
|
Bangle.load = orig;
|
|
fastload(n);
|
|
};
|
|
Bangle.showLauncher();
|
|
Bangle.load = orig;
|
|
} else
|
|
o(name);
|
|
})(Bangle.load);
|
|
|
|
if (SETTINGS.useAppHistory) E.on('kill', ()=>{if (!BTN.read()) recordHistory(); else resetHistory();}); // Usually record history, but reset it if long press of HW button was used.
|
|
}
|