messages_light update -> new management of events implemented

master
Rarder44 2023-02-28 19:00:41 +01:00
parent 5b0225e58b
commit 92378a3137
8 changed files with 84 additions and 242 deletions

View File

@ -4,4 +4,5 @@
settings now points to message settings settings now points to message settings
implemented use of the "messageicons" library implemented use of the "messageicons" library
removed lib no longer used removed lib no longer used
1.3: icon changed 1.3: icon changed
1.4: new management of events implemented; removed code no longer used (from now the music will be managed by the Messagesgui app)

View File

@ -12,33 +12,27 @@
//TODO: quando apro l'app dal menu principale ( quindi non c'è niente nella queue)
//visualizzo l'interfaccia per la musica ( o un settings che mi sceglie di aprire la musica? )
let LOG=function(){ let LOG=function(){
//print.apply(null, arguments); //print.apply(null, arguments);
} }
let settings= (()=>{ let settings= {
let tmp={}; NewEventFileName:"messages_light.NewEvent.json",
tmp.NewEventFileName="messages_light.NewEvent.json"; fontSmall : "6x8",
fontMedium : "Vector:16",
tmp.fontSmall = "6x8"; fontBig : "Vector:20",
tmp.fontMedium = g.getFonts().includes("Vector")?"Vector:16":"6x8:2"; fontLarge : "Vector:30",
tmp.fontBig = g.getFonts().includes("12x20")?"12x20":"6x8:2";
tmp.fontLarge = g.getFonts().includes("6x15")?"6x15:2":"6x8:4";
colHeadBg : g.theme.dark ? "#141":"#4f4",
tmp.colHeadBg = g.theme.dark ? "#141":"#4f4"; colBg : g.theme.dark ? "#000":"#fff",
tmp.colBg = g.theme.dark ? "#000":"#fff"; colLock : g.theme.dark ? "#ff0000":"#ff0000",
tmp.colLock = g.theme.dark ? "#ff0000":"#ff0000";
tmp.quiet=!!((require('Storage').readJSON("setting.json", true) || {}).quiet); quiet:!!((require('Storage').readJSON('setting.json', 1) || {}).quiet),
tmp.timeOut=(require('Storage').readJSON("messages_light.settings.json", true) || {}).timeOut || "Off"; timeOut:(require('Storage').readJSON("messages_light.settings.json", true) || {}).timeOut || "Off",
};
return tmp;
})();
@ -46,15 +40,6 @@ let settings= (()=>{
let EventQueue=[]; //in posizione 0, c'è quello attualmente visualizzato let EventQueue=[]; //in posizione 0, c'è quello attualmente visualizzato
let callInProgress=false; let callInProgress=false;
//TODO: implemento il resto ( nel template )
var music=undefined;
//se definita, vuol dire che è arrivata una richiesta di musica -> dopo aver fino la queue di messaggi, ri-visualizza la schermata di musica
//se premo "back" in quella di musica -> esco dall'app
//template qua sotto
/*{
artist:"",
track:"",
}*/
let justOpened=true; let justOpened=true;
@ -72,60 +57,7 @@ var manageEvent = function(event) {
showCall(event); showCall(event);
} }
else if( event.id=="music"){ else if( event.id=="music"){
//la musica non la gestisco più ( uso l'app standard o un altra app)
/*
//DEBUG -> save the event into file
let musicLogFile="music_log";
let logMusic = require('Storage').readJSON(musicLogFile, true) || [];
logMusic.push(event);
require('Storage').writeJSON(musicLogFile, logMusic);
*/
//se c'è qualcosa nella queue, quindi app già aperta,
//se musicRunngin==true, vuol dire che c'è già della musica in ascolto prima
// quindi non mostro nulla
//se prima era musicRunngin == false
//NON DOVREBBE NEANCHE ARRIVA QUA ( da codice nel proxy )
//LOGICA DA QUA->
//aggiorno i dati della musica
LOG("old music",music)
LOG("music event",event)
if( music==undefined) music={};
Object.assign(music,event);
//tolgo tutto quello che non mi serve salvare ( non lo faccio prima perchè non so se l'event verrà usato da altri)
delete music.t;
delete music.id;
delete music.title;
delete music.new;
LOG("joined",music)
//quindi se mi arriva la notifica vuol dire che:
//l'app l'ho appena aperta -> visualizzo la schermata di musica
//oppure
//l'app era già stata aperta in modalità musica -> non faccio nulla ( avendo già aggiornato i dati della musica )
//POI
//se c'è roba nella queue -> NON visualizzo la schermata di musica ( quando finirà la queue, la next visualizzerà la musica )
//se non c'è roba nella queue -> aggiorno la visualizzazione
// ho unito le due condizioni di prima
if( justOpened || EventQueue.length==0)
showMusic();
} }
else{ else{
@ -170,7 +102,12 @@ var manageEvent = function(event) {
if(element.id != event.id) if(element.id != event.id)
newEventQueue.push(element); newEventQueue.push(element);
}); });
EventQueue=newEventQueue;
//non sovrascrivo, cosi uso lo stesso oggetto in memoria e dovrei avere meno problemi di memory leak
EventQueue.length=0;
newEventQueue.forEach(element => {
EventQueue.push(element);
});
} }
} }
//----------------- //-----------------
@ -334,17 +271,6 @@ let showCall = function(msg)
let musicCode=undefined;
//visualizza cioè che c'è nella variabile music ( se undefined, richiama la next)
let showMusic=function(){
if( music===undefined) next(); //TOCHECK: controllo rimuovibile?
//carico dinamicamente il codice per la musica ( non mi serve sempre )
if(musicCode===undefined) musicCode = require("messages_light.music.js") //eval(require("Storage").read("messages_light.music.js"));
musicCode.show();
}
@ -360,19 +286,11 @@ let next=function(){
EventQueue.shift(); //passa al messaggio successivo, se presente - tolgo il primo EventQueue.shift(); //passa al messaggio successivo, se presente - tolgo il primo
callInProgress=false; callInProgress=false;
LOG(EventQueue.length);
if( EventQueue.length == 0) if( EventQueue.length == 0)
{ {
LOG("no element in queue - closing") LOG("no element in queue - closing");
if( music!==undefined) setTimeout(_ => load());
{
LOG("opened/received music -> show music");
showMusic();
}
else
{
LOG("no music -> close")
setTimeout(_ => load());
}
return; return;
} }
@ -383,32 +301,12 @@ let next=function(){
let CallBuzzTimer=undefined;
let showMap=function(msg) {
g.clearRect(Bangle.appRect);
PrintMessageStrings({body:"Not implemented!"});
}
let CallBuzzTimer=null;
let StopBuzzCall=function() let StopBuzzCall=function()
{ {
if (CallBuzzTimer){ if (CallBuzzTimer){
clearInterval(CallBuzzTimer); clearInterval(CallBuzzTimer);
CallBuzzTimer=null; CallBuzzTimer=undefined;
} }
} }
let DrawTriangleUp=function() let DrawTriangleUp=function()
@ -546,7 +444,7 @@ let doubleTapUnlock=function(data) {
Bangle.setLCDPower(1); Bangle.setLCDPower(1);
} }
} }
let toushScroll=function(button, xy) { let toushScroll=function(_, xy) {
updateTimeout(); updateTimeout();
let height=176; //g.getHeight(); -> 176 B2 let height=176; //g.getHeight(); -> 176 B2
@ -581,15 +479,6 @@ const removeTimeout=function(){
} }
//not currently used -> for fast load?
let unsetApp=function(){
delete(music);
delete(manageEvent);
removeTimeout();
}
let main = function(){ let main = function(){
LOG("Main"); LOG("Main");
@ -611,9 +500,8 @@ let main = function(){
manageEvent(eventToShow); manageEvent(eventToShow);
else else
{ {
LOG("file event not found! -> Open in music mode"); LOG("file event not found! -> ?? open debug text");
music={}; //imposto un oggetto nella variabile music, cosi non viene chiuso il programma dalla showMusic setTimeout(_=>{ GB({"t":"notify","id":15754117198411,"src":"Hangouts","title":"A Name","body":"Debug notification \nmessage contents demo demo demo demo"}) },0);
setTimeout(_ => showMusic(), 0);
} }
justOpened=false; justOpened=false;

View File

@ -1,31 +1,13 @@
/* //OLD Code
//OLD CODE -> backup purpose
let messageBootManager=function(type,event){
//se l'app non è aperta
if ("undefined"==typeof manageEvent)
{
if(event.t=="remove") return; //l'app non è aperta, non c'è nessun messaggio da rimuovere dalla queue -> non lancio l'app
//la apro
require("Storage").writeJSON("messages_light.NewEvent.json",{"event":event,"type":type});
load("messages_light.app.js");
}
else
{
//altrimenti gli dico di gestire il messaggio
manageEvent(type,event);
}
}
Bangle.on("message", messageBootManager);
Bangle.on("call", messageBootManager);*/
//override require to filter require("message") //override require to filter require("message")
global.require_real=global.require; /*global.require_real=global.require;
global.require = (_require => file => { global.require = (_require => file => {
if (file==="messages") file = "messagesProxy"; if (file==="messages") file = "messagesProxy";
return _require(file); return _require(file);
})(require); })(require);*/
//the file on the device is called "boot_messages_light.boot.js"
//it's NOT an error!
//it's for the boot order
Bangle.on("message", (type, msg) => require("messages_light.listener.js").listener(type, msg));

View File

@ -0,0 +1,43 @@
exports.listener = function(type, event) {
/*
//salva gli eventi che arrivano su file
events=require("Storage").readJSON("events_log",true) || [];
events.push ( event)
require("Storage").writeJSON("events_log",events);*/
//if (event.handled) return; // already handled/app open
if( type=="music" || event.id=="music") return; //lo lascio gestire a qualcun altro
//se arrivo qua gestisco io
//non mi preoccupo di salvare ( a meno di problemi a mantenere tanti messaggi in queue nella ram...)
event.handled=true;
let callApp;
//se l'app non è aperta
if ("undefined"==typeof manageEvent)
{
if(event.t=="remove") return; //l'app non è aperta, non c'è nessun messaggio da rimuovere dalla queue -> non lancio l'app
//chiamo la load dell'app
callApp=function(event){
require("Storage").writeJSON("messages_light.NewEvent.json",event);
load("messages_light.app.js");
}
}
else
{
//dico all'app di gestire l'evento
callApp=function(event){
manageEvent(event);
}
}
callApp(event);
}

View File

@ -1,57 +0,0 @@
let openMusic = function() {
// only read settings file for first music message
if ("undefined"==typeof exports._openMusic) {
const SETTINGS_FILE_NAME="messages_light.settings.json";
exports._openMusic = !!((require('Storage').readJSON(SETTINGS_FILE_NAME, true) || {}).openMusic);
}
return exports._openMusic;
}
//gestisco il messaggio a modo mio
exports.pushMessage = function(event) {
//TODO: rimuovere questa riga per far funzionare la musica tramite l'app "message_light"
if( event.id=="music") return require_real("messages").pushMessage(event);
let callApp;
//se l'app non è aperta
if ("undefined"==typeof manageEvent)
{
if(event.t=="remove") return; //l'app non è aperta, non c'è nessun messaggio da rimuovere dalla queue -> non lancio l'app
//chiamo la load dell'app
callApp=function(event){
require_real("Storage").writeJSON("messages_light.NewEvent.json",event);
load("messages_light.app.js");
}
}
else
{
//dico all'app di gestire l'evento
callApp=function(event){
manageEvent(event);
}
}
//se il messaggio è una notifica -> gestisco l'evento
//oppure
//se music è definita ( vuol dire che l'app è aperta e mi è arrivata prima una richiesta di apertura in modalità "musica" via notifica o via launcher ) -> gestisco l'evento
//oppure
//se se è una notifica di musica ( definito dal primo controllo ) e nei settings ho salvato di aprire l'app in musica -> gestisco l'evento
if( event.id!="music" || typeof music !== "undefined" || openMusic())
callApp(event);
}
//Call original message library
exports.clearAll = function() { return require_real("messages").clearAll()}
exports.getMessages = function() { return require_real("messages").getMessages()}
exports.status = function() { return require_real("messages").status()}
exports.buzz = function() { return require_real("messages").buzz(msgSrc)}
exports.stopBuzz = function() { return require_real("messages").stopBuzz()}

View File

@ -1,7 +0,0 @@
//TODO:
//codice che verrà evalutato dall'app per caricare l'interfaccia della musica
exports.show = function() {
g.drawString("music",20,20);
}

View File

@ -1,10 +1,7 @@
//eval(require("Storage").read("messages.settings.js"));
(function(back) { (function(back) {
const SETTINGS_FILE_NAME="messages_light.settings.json"; const SETTINGS_FILE_NAME="messages_light.settings.json";
let settings = function() { let settings = function() {
let settings = require('Storage').readJSON(SETTINGS_FILE_NAME, true) || {}; let settings = require('Storage').readJSON(SETTINGS_FILE_NAME, true) || {};
settings.openMusic=!!settings.openMusic;
//settings.unlockWatch=!!settings.unlockWatch;
return settings; return settings;
} }
function updateSetting(setting, value) { function updateSetting(setting, value) {
@ -16,10 +13,6 @@
var mainmenu = { var mainmenu = {
"" : { "title" : /*LANG*/"Messages Light" }, "" : { "title" : /*LANG*/"Messages Light" },
"< Back" : back, "< Back" : back,
/*LANG*/'Auto-Open Music': {
value: !!settings().openMusic,
onchange: v => updateSetting("openMusic", v)
},
/*LANG*/'Time Out': { /*LANG*/'Time Out': {
value: timeOutChoices.indexOf(settings.timeOut), value: timeOutChoices.indexOf(settings.timeOut),
min: 0, max: timeOutChoices.length-1, min: 0, max: timeOutChoices.length-1,

View File

@ -1,7 +1,7 @@
{ {
"id": "messages_light", "id": "messages_light",
"name": "Messages Light", "name": "Messages Light",
"version": "1.3", "version": "1.4",
"description": "A light implementation of messages App (display notifications from iOS and Gadgetbridge/Android)", "description": "A light implementation of messages App (display notifications from iOS and Gadgetbridge/Android)",
"icon": "app.png", "icon": "app.png",
"type": "app", "type": "app",
@ -13,9 +13,8 @@
{"name":"messages_light.app.js","url":"messages_light.app.js"}, {"name":"messages_light.app.js","url":"messages_light.app.js"},
{"name":"messages_light.settings.js","url":"messages_light.settings.js"}, {"name":"messages_light.settings.js","url":"messages_light.settings.js"},
{"name":"messages_light.img","url":"app-icon.js","evaluate":true}, {"name":"messages_light.img","url":"app-icon.js","evaluate":true},
{"name":"messagesProxy","url":"messages_light.messagesProxy.js"}, {"name":"boot_messages_light.boot.js","url":"messages_light.boot.js"},
{"name":"messages_light.boot.js","url":"messages_light.boot.js"}, {"name":"messages_light.listener.js","url":"messages_light.listener.js"}
{"name":"messages_light.music.js","url":"messages_light.music.js"}
], ],
"data": [{"name":"messages_light.settings.json"},{"name":"messages_light.NewMessage.json"}], "data": [{"name":"messages_light.settings.json"},{"name":"messages_light.NewMessage.json"}],
"screenshots": [{"url":"screenshot-notify.png"} ,{"url":"screenshot-long-text1.png"},{"url":"screenshot-long-text2.png"}, {"url":"screenshot-call.png"} ] "screenshots": [{"url":"screenshot-notify.png"} ,{"url":"screenshot-long-text1.png"},{"url":"screenshot-long-text2.png"}, {"url":"screenshot-call.png"} ]