First step to music implementation
- proxy now handles music messages - added TODO in the app - implemented a settings for the appmaster
parent
10d6206e99
commit
79f8528a18
|
|
@ -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(){
|
let LOG=function(){
|
||||||
//print.apply(null, arguments);
|
//print.apply(null, arguments);
|
||||||
}
|
}
|
||||||
|
|
@ -38,6 +43,15 @@ 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:"",
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -46,68 +60,89 @@ var manageEvent = function(event) {
|
||||||
|
|
||||||
event.new=true;
|
event.new=true;
|
||||||
|
|
||||||
|
|
||||||
LOG("manageEvent");
|
LOG("manageEvent");
|
||||||
if( event.id=="call")
|
LOG(event);
|
||||||
{
|
|
||||||
showCall(event);
|
|
||||||
return;
|
if( event.id=="call"){
|
||||||
|
showCall(event);
|
||||||
}
|
}
|
||||||
switch(event.t)
|
else if( event.id=="music"){
|
||||||
{
|
//TODO:
|
||||||
case "add":
|
//se c'è qualcosa nella queue, quindi app già aperta,
|
||||||
EventQueue.unshift(event);
|
//se musicRunngin==true, vuol dire che c'è già della musica in ascolto prima
|
||||||
|
// quindi non mostro nulla
|
||||||
|
|
||||||
if(!callInProgress)
|
//se prima era musicRunngin == false
|
||||||
showMessage(event);
|
//NON DOVREBBE NEANCHE ARRIVA QUA ( da codice nel proxy )
|
||||||
break;
|
|
||||||
|
|
||||||
case "modify":
|
|
||||||
//cerco l'evento nella lista, se lo trovo, lo modifico, altrimenti lo pusho
|
|
||||||
let find=false;
|
//LOGICA DA QUA->
|
||||||
EventQueue.forEach(element => {
|
//aggiorno i dati della musica
|
||||||
if(element.id == event.id)
|
//quindi se mi arriva la notifica vuol dire che:
|
||||||
{
|
//l'app l'ho appena aperta -> visualizzo la schermata di musica
|
||||||
find=true;
|
//oppure
|
||||||
Object.assign(element,event);
|
//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 )
|
||||||
if(!find) //se non l'ho trovato, lo aggiungo in fondo
|
//se non c'è roba nella queue -> aggiorno la visualizzazione
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
|
||||||
|
//-----------------
|
||||||
|
//notification
|
||||||
|
//-----------------
|
||||||
|
if(event.t=="add"){
|
||||||
EventQueue.unshift(event);
|
EventQueue.unshift(event);
|
||||||
|
|
||||||
if(!callInProgress)
|
if(!callInProgress)
|
||||||
showMessage(event);
|
showMessage(event);
|
||||||
break;
|
}
|
||||||
|
else if(event.t=="modify"){
|
||||||
case "remove":
|
//cerco l'evento nella lista, se lo trovo, lo modifico, altrimenti lo pusho
|
||||||
|
let find=false;
|
||||||
//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 => {
|
EventQueue.forEach(element => {
|
||||||
if(element.id != event.id)
|
if(element.id == event.id)
|
||||||
newEventQueue.push(element);
|
{
|
||||||
|
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);
|
g.clearRect(Bangle.appRect);
|
||||||
PrintMessageStrings({body:"Not implemented!"});
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,9 +25,7 @@ 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";
|
||||||
//else if (file==="messages_REAL") file = "messages"; //backdoor to real message
|
|
||||||
|
|
||||||
return _require(file);
|
return _require(file);
|
||||||
})(require);
|
})(require);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
//gestisco il messaggio a modo mio
|
||||||
exports.pushMessage = function(event) {
|
exports.pushMessage = function(event) {
|
||||||
|
|
||||||
//TODO: now i can't handle the music, so i call the real message app
|
//TODO: rimuovere questa riga per far funzionare la musica tramite l'app "message_light"
|
||||||
if( event.id=="music") return require_real("messages").pushMessage(event);
|
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 ("undefined"==typeof manageEvent)
|
||||||
{
|
{
|
||||||
if(event.t=="remove") return; //l'app non è aperta, non c'è nessun messaggio da rimuovere dalla queue -> non lancio l'app
|
if(event.t=="remove") return; //l'app non è aperta, non c'è nessun messaggio da rimuovere dalla queue -> non lancio l'app
|
||||||
|
|
||||||
//la apro
|
//chiamo la load dell'app
|
||||||
require_real("Storage").writeJSON("messages_light.NewEvent.json",event);
|
callApp=function(event){
|
||||||
load("messages_light.app.js");
|
require_real("Storage").writeJSON("messages_light.NewEvent.json",event);
|
||||||
|
load("messages_light.app.js");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//altrimenti gli dico di gestire il messaggio
|
//dico all'app di gestire l'evento
|
||||||
manageEvent(event);
|
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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
//TODO:
|
||||||
|
//codice che verrà evalutato dall'app per caricare l'interfaccia della musica
|
||||||
|
|
@ -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);
|
||||||
|
});
|
||||||
|
|
||||||
Loading…
Reference in New Issue