First step to music implementation

- proxy now handles music messages
- added TODO in the app
- implemented a settings for the app
pull/2618/head
Rarder44 2022-11-23 17:24:19 +01:00
parent 10d6206e99
commit 79f8528a18
5 changed files with 162 additions and 66 deletions

View File

@ -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
}

View File

@ -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);

View File

@ -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);
}

View File

@ -0,0 +1,2 @@
//TODO:
//codice che verrà evalutato dall'app per caricare l'interfaccia della musica

View File

@ -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);
});