BangleApps/apps/agenda/agenda.clkinfo.js

103 lines
3.3 KiB
JavaScript
Raw Normal View History

2022-09-19 15:23:37 +00:00
(function() {
function getPassedSec(date) {
var now = new Date();
var passed = (now-date)/1000;
if(passed<0) return 0;
return passed;
}
/*
* Returns the array [interval, switchTimeout]
* `interval` is the refresh rate (hourly or per minute)
* `switchTimeout` is the time before the refresh rate should change (or expiration)
*/
function getRefreshIntervals(ev) {
const threshold = 2 * 60 * 1000; //2 mins
const slices = 16;
var now = new Date();
var passed = now - (ev.timestamp*1000);
var remaining = (ev.durationInSeconds*1000) - passed;
if(remaining<0)
return [];
if(passed<0) //check once it's started
return [ 2*-passed, -passed ];
var slice = Math.round(remaining/slices);
if(slice < threshold) { //no need to refresh frequently
return [ threshold, remaining ];
}
return [ slice, remaining ];
}
function _doInterval(interval) {
return setTimeout(()=>{
this.emit("redraw");
this.interval = setInterval(()=>{
this.emit("redraw");
}, interval);
}, interval);
}
function _doSwitchTimeout(ev, switchTimeout) {
return setTimeout(()=>{
this.emit("redraw");
clearInterval(this.interval);
this.interval = undefined;
var tmp = getRefreshIntervals(ev);
var interval = tmp[0];
var switchTimeout = tmp[1];
if(!interval) return;
this.interval = _doInterval.call(this, interval);
this.switchTimeout = _doSwitchTimeout.call(this, ev, switchTimeout);
}, switchTimeout);
}
var agendaItems = {
name: "Agenda",
2022-11-25 16:26:38 +00:00
img: atob("GBiBAAAAAAAAAADGMA///w///wf//wAAAA///w///w///w///x///h///h///j///D///X//+f//8wAABwAADw///w///wf//gAAAA=="),
dynamic: true,
items: []
};
var locale = require("locale");
var now = new Date();
var agenda = require("Storage").readJSON("android.calendar.json")
.filter(ev=>ev.timestamp + ev.durationInSeconds > now/1000)
.sort((a,b)=>a.timestamp - b.timestamp);
2022-09-19 15:23:37 +00:00
agenda.forEach((entry, i) => {
2022-09-19 15:23:37 +00:00
2022-11-25 16:26:38 +00:00
var title = entry.title.slice(0,12);
var date = new Date(entry.timestamp*1000);
var dateStr = locale.date(date).replace(/\d\d\d\d/,"");
var shortStr = ((date-now) > 86400000 || entry.allDay) ? dateStr : locale.time(date,1);
var color = "#"+(0x1000000+Number(entry.color)).toString(16).padStart(6,"0");
dateStr += entry.durationInSeconds < 86400 ? "/ " + locale.time(date,1) : "";
shortStr = shortStr.trim().replace(" ", "\n");
2022-09-19 15:23:37 +00:00
agendaItems.items.push({
2022-11-25 16:26:38 +00:00
name: "Agenda "+i,
hasRange: true,
get: () => ({ text: title + "\n" + dateStr,
img: agendaItems.img, short: shortStr,
color: color,
v: getPassedSec(date), min: 0, max: entry.durationInSeconds}),
show: function() {
var tmp = getRefreshIntervals(entry);
var interval = tmp[0];
var switchTimeout = tmp[1];
if(!interval) return;
this.interval = _doInterval.call(this, interval);
this.switchTimeout = _doSwitchTimeout.call(this, entry, switchTimeout);
},
hide: function() {
if(this.interval)
clearInterval(this.interval);
if(this.switchTimeout)
clearTimeout(this.switchTimeout);
this.interval = undefined;
this.switchTimeout = undefined;
}
});
});
2022-09-19 15:23:37 +00:00
return agendaItems;
})