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,23 +60,48 @@ var manageEvent = function(event) {
event.new=true;
LOG("manageEvent");
if( event.id=="call")
{
LOG(event);
if( event.id=="call"){
showCall(event);
return;
}
switch(event.t)
{
case "add":
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
//se prima era musicRunngin == false
//NON DOVREBBE NEANCHE ARRIVA QUA ( da codice nel proxy )
//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 "modify":
}
else if(event.t=="modify"){
//cerco l'evento nella lista, se lo trovo, lo modifico, altrimenti lo pusho
let find=false;
EventQueue.forEach(element => {
@ -77,10 +116,8 @@ var manageEvent = function(event) {
if(!callInProgress)
showMessage(event);
break;
case "remove":
}
else if(event.t=="remove"){
//se non c'è niente nella queue e non c'è una chiamata in corso
if( EventQueue.length==0 && !callInProgress)
next();
@ -98,16 +135,14 @@ var manageEvent = function(event) {
});
EventQueue=newEventQueue;
}
break;
case "musicstate":
case "musicinfo":
break;
}
//-----------------
//notification
//-----------------
}
};
@ -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

@ -26,8 +26,6 @@ Bangle.on("call", messageBootManager);*/
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
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
//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
//la apro
//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
//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);
});