mirror of https://github.com/espruino/BangleApps
First step to music implementation
- proxy now handles music messages - added TODO in the app - implemented a settings for the apppull/2618/head
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(){
|
||||
//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
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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