From 18d91bf5f95d02014c52a40a53a2c79d06bfd81a Mon Sep 17 00:00:00 2001 From: Gabriele Monaco Date: Fri, 25 Nov 2022 18:28:20 +0100 Subject: [PATCH] Added short field and general clkinfo improvements --- apps/agenda/ChangeLog | 1 + apps/agenda/agenda.clkinfo.js | 29 +++++++++++++++++++---------- apps/sched/ChangeLog | 2 +- apps/sched/clkinfo.js | 4 +++- apps/weather/ChangeLog | 3 ++- apps/weather/clkinfo.js | 9 ++++++--- apps/weather/metadata.json | 2 +- modules/clock_info.js | 3 ++- 8 files changed, 35 insertions(+), 18 deletions(-) diff --git a/apps/agenda/ChangeLog b/apps/agenda/ChangeLog index 7f749ff25..6384fe887 100644 --- a/apps/agenda/ChangeLog +++ b/apps/agenda/ChangeLog @@ -7,3 +7,4 @@ 0.07: Clkinfo improvements. 0.08: Fix error in clkinfo (didn't require Storage & locale) Fix clkinfo icon +0.09: Clkinfo new fields and filter past events. diff --git a/apps/agenda/agenda.clkinfo.js b/apps/agenda/agenda.clkinfo.js index baa8b9516..43b7cf57e 100644 --- a/apps/agenda/agenda.clkinfo.js +++ b/apps/agenda/agenda.clkinfo.js @@ -1,25 +1,34 @@ (function() { var agendaItems = { - name: "Agenda", - img: atob("GBiBAAAAAAAAAADGMA///w///wf//wAAAA///w///w///w///x///h///h///j///D///X//+f//8wAABwAADw///w///wf//gAAAA=="), - items: [] - }; + name: "Agenda", + img: atob("GBiBAAAAAAAAAADGMA///w///wf//wAAAA///w///w///w///x///h///h///j///D///X//+f//8wAABwAADw///w///wf//gAAAA=="), + dynamic: true, + items: [] + }; + var storage = require("Storage"); 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); + var agenda = (storage.readJSON("android.calendar.json",true)||[]) + .filter(ev=>ev.timestamp + ev.durationInSeconds > now/1000) + .sort((a,b)=>a.timestamp - b.timestamp); + var settings = storage.readJSON("agenda.settings.json",true)||{}; agenda.forEach((entry, i) => { - 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 dateStrToday = locale.date(new Date()).replace(/\d\d\d\d/,""); + var timeStr = locale.time(date); + //maybe not the most efficient.. + var shortTxt = (dateStrToday == dateStr) ? timeStr : dateStr; dateStr += entry.durationInSeconds < 86400 ? "/ " + locale.time(date,1) : ""; + if(!settings.pastEvents && entry.timestamp + entry.durationInSeconds < (new Date())/1000) + return; + agendaItems.items.push({ - name: "Agenda "+i, - get: () => ({ text: title + "\n" + dateStr, img: null}), + name: null, + get: () => ({ text: title + "\n" + dateStr, short: shortTxt, img: null}), show: function() { agendaItems.items[i].emit("redraw"); }, hide: function () {} }); diff --git a/apps/sched/ChangeLog b/apps/sched/ChangeLog index 3bb321ccf..f2dd54338 100644 --- a/apps/sched/ChangeLog +++ b/apps/sched/ChangeLog @@ -14,4 +14,4 @@ Improve timer message using formatDuration Fix wrong fallback for buzz pattern 0.13: Ask to delete a timer after stopping it -0.14: Added clkinfo here +0.14: Added clkinfo for alarms and timers diff --git a/apps/sched/clkinfo.js b/apps/sched/clkinfo.js index 52f553988..71992dbb8 100644 --- a/apps/sched/clkinfo.js +++ b/apps/sched/clkinfo.js @@ -54,13 +54,15 @@ var alarmItems = { name: "Alarms", img: img, + dynamic: true, items: alarm.getAlarms().filter(a=>!a.appid) //.sort((a,b)=>alarm.getTimeToAlarm(a)-alarm.getTimeToAlarm(b)) .sort((a,b)=>getAlarmOrder(a)-getAlarmOrder(b)) .map((a, i)=>({ name: null, + hasRange: true, get: () => ({ text: getAlarmText(a), img: getAlarmIcon(a), - hasRange: true, v: getAlarmValue(a), min:0, max:getAlarmMax(a)}), + v: getAlarmValue(a), min:0, max:getAlarmMax(a)}), show: function() { alarmItems.items[i].emit("redraw"); }, hide: function () {}, run: function() { } diff --git a/apps/weather/ChangeLog b/apps/weather/ChangeLog index da28d8d5a..b11ed24ff 100644 --- a/apps/weather/ChangeLog +++ b/apps/weather/ChangeLog @@ -13,4 +13,5 @@ 0.14: Use weather condition code for icon selection 0.15: Fix widget icon 0.16: Don't mark app as clock -0.17: Added clkinfo for clocks. \ No newline at end of file +0.17: Added clkinfo for clocks. +0.18: Added hasRange to clkinfo. diff --git a/apps/weather/clkinfo.js b/apps/weather/clkinfo.js index 2d1966c82..6191c6dbe 100644 --- a/apps/weather/clkinfo.js +++ b/apps/weather/clkinfo.js @@ -21,22 +21,25 @@ items: [ { name: "temperature", + hasRange : true, get: () => ({ text: weather.temp, img: atob("GBiBAAA8AAB+AADnAADDAADDAADDAADDAADDAADbAADbAADbAADbAADbAADbAAHbgAGZgAM8wAN+wAN+wAM8wAGZgAHDgAD/AAA8AA=="), - hasRange: true, v: parseInt(weather.temp), min: -30, max: 55}), + v: parseInt(weather.temp), min: -30, max: 55}), show: function() { weatherItems.items[0].emit("redraw"); }, hide: function () {} }, { name: "humidity", + hasRange : true, get: () => ({ text: weather.hum, img: atob("GBiBAAAEAAAMAAAOAAAfAAAfAAA/gAA/gAI/gAY/AAcfAA+AQA+A4B/A4D/B8D/h+D/j+H/n/D/n/D/n/B/H/A+H/AAH/AAD+AAA8A=="), - hasRange: true, v: parseInt(weather.hum), min: 0, max: 100}), + v: parseInt(weather.hum), min: 0, max: 100}), show: function() { weatherItems.items[1].emit("redraw"); }, hide: function () {} }, { name: "wind", + hasRange : true, get: () => ({ text: weather.wind, img: atob("GBiBAAHgAAPwAAYYAAwYAAwMfAAY/gAZh3/xg//hgwAAAwAABg///g//+AAAAAAAAP//wH//4AAAMAAAMAAYMAAYMAAMcAAP4AADwA=="), - hasRange: true, v: parseInt(weather.wind), min: 0, max: 118}), + v: parseInt(weather.wind), min: 0, max: 118}), show: function() { weatherItems.items[2].emit("redraw"); }, hide: function () {} }, diff --git a/apps/weather/metadata.json b/apps/weather/metadata.json index e28a282d6..4a8751302 100644 --- a/apps/weather/metadata.json +++ b/apps/weather/metadata.json @@ -1,7 +1,7 @@ { "id": "weather", "name": "Weather", - "version": "0.17", + "version": "0.18", "description": "Show Gadgetbridge weather report", "icon": "icon.png", "screenshots": [{"url":"screenshot.png"}], diff --git a/modules/clock_info.js b/modules/clock_info.js index d2f1dea7c..238888b1c 100644 --- a/modules/clock_info.js +++ b/modules/clock_info.js @@ -2,9 +2,9 @@ that can be scrolled through on the clock face. `load()` returns an array of menu objects, where each object contains a list of menu items: - * `name` : text to display and identify menu object (e.g. weather) * `img` : a 24x24px image +* `dynamic` : if `true`, items are not constant but are sorted (e.g. calendar events sorted by date) * `items` : menu items such as temperature, humidity, wind etc. Note that each item is an object with: @@ -15,6 +15,7 @@ Note that each item is an object with: { 'text' // the text to display for this item + 'short' : (optional) a shorter text to display for this item (at most 6 characters) 'img' // optional: a 24x24px image to display for this item 'v' // (if hasRange==true) a numerical value 'min','max' // (if hasRange==true) a minimum and maximum numerical value (if this were to be displayed as a guage)