diff --git a/apps/messages_light/messages_light.app.js b/apps/messages_light/messages_light.app.js index 5d5363d38..daf173ab8 100644 --- a/apps/messages_light/messages_light.app.js +++ b/apps/messages_light/messages_light.app.js @@ -10,6 +10,11 @@ } */ + + +//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(){ //print.apply(null, arguments); } @@ -38,6 +43,15 @@ let settings= (()=>{ let EventQueue=[]; //in posizione 0, c'è quello attualmente visualizzato 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:"", +}*/ @@ -46,68 +60,89 @@ var manageEvent = function(event) { event.new=true; - LOG("manageEvent"); - if( event.id=="call") - { - showCall(event); - return; + LOG(event); + + + if( event.id=="call"){ + showCall(event); } - switch(event.t) - { - case "add": - EventQueue.unshift(event); + else if( event.id=="music"){ + //TODO: + //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 - if(!callInProgress) - showMessage(event); - break; + //se prima era musicRunngin == false + //NON DOVREBBE NEANCHE ARRIVA QUA ( da codice nel proxy ) - case "modify": - //cerco l'evento nella lista, se lo trovo, lo modifico, altrimenti lo pusho - let find=false; - EventQueue.forEach(element => { - if(element.id == event.id) - { - find=true; - Object.assign(element,event); - } - }); - if(!find) //se non l'ho trovato, lo aggiungo in fondo + + + //LOGICA DA QUA-> + //aggiorno i dati della musica + //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 + + + } + else{ + + //----------------- + //notification + //----------------- + if(event.t=="add"){ EventQueue.unshift(event); - - if(!callInProgress) - showMessage(event); - break; - - case "remove": - - //se non c'è niente nella queue e non c'è una chiamata in corso - if( EventQueue.length==0 && !callInProgress) - next(); - - //se l'id è uguale a quello attualmente visualizzato ( e non siamo in chiamata ) - if(!callInProgress && EventQueue[0] !== undefined && EventQueue[0].id == event.id) - next(); //passo al messaggio successivo ( per la rimozione ci penserà la next ) - - else{ - //altrimenti rimuovo tutti gli elementi con quell'id( creando un nuovo array ) - let newEventQueue=[]; + + if(!callInProgress) + showMessage(event); + } + else if(event.t=="modify"){ + //cerco l'evento nella lista, se lo trovo, lo modifico, altrimenti lo pusho + let find=false; EventQueue.forEach(element => { - if(element.id != event.id) - newEventQueue.push(element); + if(element.id == event.id) + { + find=true; + Object.assign(element,event); + } }); - EventQueue=newEventQueue; - } - - + if(!find) //se non l'ho trovato, lo aggiungo in fondo + EventQueue.unshift(event); + + if(!callInProgress) + showMessage(event); + } + else if(event.t=="remove"){ + //se non c'è niente nella queue e non c'è una chiamata in corso + if( EventQueue.length==0 && !callInProgress) + next(); + + //se l'id è uguale a quello attualmente visualizzato ( e non siamo in chiamata ) + if(!callInProgress && EventQueue[0] !== undefined && EventQueue[0].id == event.id) + next(); //passo al messaggio successivo ( per la rimozione ci penserà la next ) + + else{ + //altrimenti rimuovo tutti gli elementi con quell'id( creando un nuovo array ) + let newEventQueue=[]; + EventQueue.forEach(element => { + if(element.id != event.id) + newEventQueue.push(element); + }); + EventQueue=newEventQueue; + } + } + //----------------- + //notification + //----------------- + - - break; - case "musicstate": - case "musicinfo": - - break; } + }; @@ -296,7 +331,7 @@ let next=function(){ -let showMapMessage=function(msg) { +let showMap=function(msg) { g.clearRect(Bangle.appRect); PrintMessageStrings({body:"Not implemented!"}); @@ -304,6 +339,11 @@ let showMapMessage=function(msg) { } +let showMusic=function(msg){ + + + //TODO: implementa tutte le funzionalità per visualizza la track in corso e gestire la musica +} diff --git a/apps/messages_light/messages_light.boot.js b/apps/messages_light/messages_light.boot.js index 741d08b96..db93615ac 100644 --- a/apps/messages_light/messages_light.boot.js +++ b/apps/messages_light/messages_light.boot.js @@ -25,9 +25,7 @@ Bangle.on("call", messageBootManager);*/ //override require to filter require("message") global.require_real=global.require; global.require = (_require => file => { - if (file==="messages") file = "messagesProxy"; - //else if (file==="messages_REAL") file = "messages"; //backdoor to real message - + if (file==="messages") file = "messagesProxy"; return _require(file); })(require); diff --git a/apps/messages_light/messages_light.messagesProxy.js b/apps/messages_light/messages_light.messagesProxy.js index 723397057..8d159bfad 100644 --- a/apps/messages_light/messages_light.messagesProxy.js +++ b/apps/messages_light/messages_light.messagesProxy.js @@ -1,24 +1,51 @@ + +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: now i can't handle the music, so i call the real message app - if( event.id=="music") return require_real("messages").pushMessage(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); + - //se l'app non è aperta + 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 - //la apro - require_real("Storage").writeJSON("messages_light.NewEvent.json",event); - load("messages_light.app.js"); + //chiamo la load dell'app + callApp=function(event){ + require_real("Storage").writeJSON("messages_light.NewEvent.json",event); + load("messages_light.app.js"); + } } else { - //altrimenti gli dico di gestire il messaggio - manageEvent(event); + //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); + } diff --git a/apps/messages_light/messages_light.music.js b/apps/messages_light/messages_light.music.js new file mode 100644 index 000000000..86a2b8f68 --- /dev/null +++ b/apps/messages_light/messages_light.music.js @@ -0,0 +1,2 @@ +//TODO: +//codice che verrà evalutato dall'app per caricare l'interfaccia della musica \ No newline at end of file diff --git a/apps/messages_light/messages_light.settings.js b/apps/messages_light/messages_light.settings.js index b7197c70a..057a38a3f 100644 --- a/apps/messages_light/messages_light.settings.js +++ b/apps/messages_light/messages_light.settings.js @@ -1 +1,30 @@ -eval(require("Storage").read("messages.settings.js")); +//eval(require("Storage").read("messages.settings.js")); +(function(back) { + const SETTINGS_FILE_NAME="messages_light.settings.json"; + let settings = function() { + let settings = require('Storage').readJSON(SETTINGS_FILE_NAME, true) || {}; + settings.openMusic=!!settings.openMusic; + //settings.unlockWatch=!!settings.unlockWatch; + return settings; + } + function updateSetting(setting, value) { + let settings = require('Storage').readJSON(SETTINGS_FILE_NAME, true) || {}; + settings[setting] = value; + require('Storage').writeJSON(SETTINGS_FILE_NAME, settings); + } + + var mainmenu = { + "" : { "title" : /*LANG*/"Messages Light" }, + "< Back" : back, + /*LANG*/'Auto-Open Music': { + value: !!settings().openMusic, + onchange: v => updateSetting("openMusic", v) + } + /*,/LANG/'Unlock Watch': { + value: !!settings().unlockWatch, + onchange: v => updateSetting("unlockWatch", v) + },*/ + }; + E.showMenu(mainmenu); + }); + \ No newline at end of file