messages_light update -> new management of events implemented
parent
5b0225e58b
commit
92378a3137
|
|
@ -4,4 +4,5 @@
|
||||||
settings now points to message settings
|
settings now points to message settings
|
||||||
implemented use of the "messageicons" library
|
implemented use of the "messageicons" library
|
||||||
removed lib no longer used
|
removed lib no longer used
|
||||||
1.3: icon changed
|
1.3: icon changed
|
||||||
|
1.4: new management of events implemented; removed code no longer used (from now the music will be managed by the Messagesgui app)
|
||||||
|
|
@ -12,33 +12,27 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
let settings= (()=>{
|
let settings= {
|
||||||
let tmp={};
|
NewEventFileName:"messages_light.NewEvent.json",
|
||||||
tmp.NewEventFileName="messages_light.NewEvent.json";
|
fontSmall : "6x8",
|
||||||
|
fontMedium : "Vector:16",
|
||||||
tmp.fontSmall = "6x8";
|
fontBig : "Vector:20",
|
||||||
tmp.fontMedium = g.getFonts().includes("Vector")?"Vector:16":"6x8:2";
|
fontLarge : "Vector:30",
|
||||||
tmp.fontBig = g.getFonts().includes("12x20")?"12x20":"6x8:2";
|
|
||||||
tmp.fontLarge = g.getFonts().includes("6x15")?"6x15:2":"6x8:4";
|
|
||||||
|
|
||||||
|
colHeadBg : g.theme.dark ? "#141":"#4f4",
|
||||||
|
|
||||||
tmp.colHeadBg = g.theme.dark ? "#141":"#4f4";
|
colBg : g.theme.dark ? "#000":"#fff",
|
||||||
tmp.colBg = g.theme.dark ? "#000":"#fff";
|
colLock : g.theme.dark ? "#ff0000":"#ff0000",
|
||||||
tmp.colLock = g.theme.dark ? "#ff0000":"#ff0000";
|
|
||||||
|
|
||||||
tmp.quiet=!!((require('Storage').readJSON("setting.json", true) || {}).quiet);
|
quiet:!!((require('Storage').readJSON('setting.json', 1) || {}).quiet),
|
||||||
tmp.timeOut=(require('Storage').readJSON("messages_light.settings.json", true) || {}).timeOut || "Off";
|
timeOut:(require('Storage').readJSON("messages_light.settings.json", true) || {}).timeOut || "Off",
|
||||||
|
};
|
||||||
return tmp;
|
|
||||||
})();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -46,15 +40,6 @@ 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:"",
|
|
||||||
}*/
|
|
||||||
|
|
||||||
let justOpened=true;
|
let justOpened=true;
|
||||||
|
|
||||||
|
|
@ -72,60 +57,7 @@ var manageEvent = function(event) {
|
||||||
showCall(event);
|
showCall(event);
|
||||||
}
|
}
|
||||||
else if( event.id=="music"){
|
else if( event.id=="music"){
|
||||||
|
//la musica non la gestisco più ( uso l'app standard o un altra app)
|
||||||
|
|
||||||
/*
|
|
||||||
//DEBUG -> save the event into file
|
|
||||||
let musicLogFile="music_log";
|
|
||||||
let logMusic = require('Storage').readJSON(musicLogFile, true) || [];
|
|
||||||
logMusic.push(event);
|
|
||||||
require('Storage').writeJSON(musicLogFile, logMusic);
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
//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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
LOG("old music",music)
|
|
||||||
LOG("music event",event)
|
|
||||||
if( music==undefined) music={};
|
|
||||||
Object.assign(music,event);
|
|
||||||
//tolgo tutto quello che non mi serve salvare ( non lo faccio prima perchè non so se l'event verrà usato da altri)
|
|
||||||
delete music.t;
|
|
||||||
delete music.id;
|
|
||||||
delete music.title;
|
|
||||||
delete music.new;
|
|
||||||
LOG("joined",music)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//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
|
|
||||||
|
|
||||||
|
|
||||||
// ho unito le due condizioni di prima
|
|
||||||
|
|
||||||
if( justOpened || EventQueue.length==0)
|
|
||||||
showMusic();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|
||||||
|
|
@ -170,7 +102,12 @@ var manageEvent = function(event) {
|
||||||
if(element.id != event.id)
|
if(element.id != event.id)
|
||||||
newEventQueue.push(element);
|
newEventQueue.push(element);
|
||||||
});
|
});
|
||||||
EventQueue=newEventQueue;
|
|
||||||
|
//non sovrascrivo, cosi uso lo stesso oggetto in memoria e dovrei avere meno problemi di memory leak
|
||||||
|
EventQueue.length=0;
|
||||||
|
newEventQueue.forEach(element => {
|
||||||
|
EventQueue.push(element);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//-----------------
|
//-----------------
|
||||||
|
|
@ -334,17 +271,6 @@ let showCall = function(msg)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let musicCode=undefined;
|
|
||||||
//visualizza cioè che c'è nella variabile music ( se undefined, richiama la next)
|
|
||||||
let showMusic=function(){
|
|
||||||
if( music===undefined) next(); //TOCHECK: controllo rimuovibile?
|
|
||||||
|
|
||||||
//carico dinamicamente il codice per la musica ( non mi serve sempre )
|
|
||||||
if(musicCode===undefined) musicCode = require("messages_light.music.js") //eval(require("Storage").read("messages_light.music.js"));
|
|
||||||
|
|
||||||
musicCode.show();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -360,19 +286,11 @@ let next=function(){
|
||||||
EventQueue.shift(); //passa al messaggio successivo, se presente - tolgo il primo
|
EventQueue.shift(); //passa al messaggio successivo, se presente - tolgo il primo
|
||||||
|
|
||||||
callInProgress=false;
|
callInProgress=false;
|
||||||
|
LOG(EventQueue.length);
|
||||||
if( EventQueue.length == 0)
|
if( EventQueue.length == 0)
|
||||||
{
|
{
|
||||||
LOG("no element in queue - closing")
|
LOG("no element in queue - closing");
|
||||||
if( music!==undefined)
|
setTimeout(_ => load());
|
||||||
{
|
|
||||||
LOG("opened/received music -> show music");
|
|
||||||
showMusic();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG("no music -> close")
|
|
||||||
setTimeout(_ => load());
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -383,32 +301,12 @@ let next=function(){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let CallBuzzTimer=undefined;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let showMap=function(msg) {
|
|
||||||
|
|
||||||
g.clearRect(Bangle.appRect);
|
|
||||||
PrintMessageStrings({body:"Not implemented!"});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let CallBuzzTimer=null;
|
|
||||||
let StopBuzzCall=function()
|
let StopBuzzCall=function()
|
||||||
{
|
{
|
||||||
if (CallBuzzTimer){
|
if (CallBuzzTimer){
|
||||||
clearInterval(CallBuzzTimer);
|
clearInterval(CallBuzzTimer);
|
||||||
CallBuzzTimer=null;
|
CallBuzzTimer=undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let DrawTriangleUp=function()
|
let DrawTriangleUp=function()
|
||||||
|
|
@ -546,7 +444,7 @@ let doubleTapUnlock=function(data) {
|
||||||
Bangle.setLCDPower(1);
|
Bangle.setLCDPower(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let toushScroll=function(button, xy) {
|
let toushScroll=function(_, xy) {
|
||||||
updateTimeout();
|
updateTimeout();
|
||||||
|
|
||||||
let height=176; //g.getHeight(); -> 176 B2
|
let height=176; //g.getHeight(); -> 176 B2
|
||||||
|
|
@ -581,15 +479,6 @@ const removeTimeout=function(){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//not currently used -> for fast load?
|
|
||||||
let unsetApp=function(){
|
|
||||||
delete(music);
|
|
||||||
delete(manageEvent);
|
|
||||||
removeTimeout();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let main = function(){
|
let main = function(){
|
||||||
LOG("Main");
|
LOG("Main");
|
||||||
|
|
||||||
|
|
@ -611,9 +500,8 @@ let main = function(){
|
||||||
manageEvent(eventToShow);
|
manageEvent(eventToShow);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG("file event not found! -> Open in music mode");
|
LOG("file event not found! -> ?? open debug text");
|
||||||
music={}; //imposto un oggetto nella variabile music, cosi non viene chiuso il programma dalla showMusic
|
setTimeout(_=>{ GB({"t":"notify","id":15754117198411,"src":"Hangouts","title":"A Name","body":"Debug notification \nmessage contents demo demo demo demo"}) },0);
|
||||||
setTimeout(_ => showMusic(), 0);
|
|
||||||
}
|
}
|
||||||
justOpened=false;
|
justOpened=false;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,31 +1,13 @@
|
||||||
/*
|
//OLD Code
|
||||||
//OLD CODE -> backup purpose
|
|
||||||
|
|
||||||
let messageBootManager=function(type,event){
|
|
||||||
//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("Storage").writeJSON("messages_light.NewEvent.json",{"event":event,"type":type});
|
|
||||||
load("messages_light.app.js");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//altrimenti gli dico di gestire il messaggio
|
|
||||||
manageEvent(type,event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Bangle.on("message", messageBootManager);
|
|
||||||
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";
|
||||||
return _require(file);
|
return _require(file);
|
||||||
})(require);
|
})(require);*/
|
||||||
|
|
||||||
|
//the file on the device is called "boot_messages_light.boot.js"
|
||||||
|
//it's NOT an error!
|
||||||
|
//it's for the boot order
|
||||||
|
|
||||||
|
Bangle.on("message", (type, msg) => require("messages_light.listener.js").listener(type, msg));
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
exports.listener = function(type, event) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
//salva gli eventi che arrivano su file
|
||||||
|
events=require("Storage").readJSON("events_log",true) || [];
|
||||||
|
events.push ( event)
|
||||||
|
require("Storage").writeJSON("events_log",events);*/
|
||||||
|
|
||||||
|
//if (event.handled) return; // already handled/app open
|
||||||
|
if( type=="music" || event.id=="music") return; //lo lascio gestire a qualcun altro
|
||||||
|
|
||||||
|
//se arrivo qua gestisco io
|
||||||
|
//non mi preoccupo di salvare ( a meno di problemi a mantenere tanti messaggi in queue nella ram...)
|
||||||
|
event.handled=true;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
//chiamo la load dell'app
|
||||||
|
callApp=function(event){
|
||||||
|
require("Storage").writeJSON("messages_light.NewEvent.json",event);
|
||||||
|
load("messages_light.app.js");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//dico all'app di gestire l'evento
|
||||||
|
callApp=function(event){
|
||||||
|
manageEvent(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
callApp(event);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,57 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
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: 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
|
|
||||||
|
|
||||||
//chiamo la load dell'app
|
|
||||||
callApp=function(event){
|
|
||||||
require_real("Storage").writeJSON("messages_light.NewEvent.json",event);
|
|
||||||
load("messages_light.app.js");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//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);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//Call original message library
|
|
||||||
exports.clearAll = function() { return require_real("messages").clearAll()}
|
|
||||||
exports.getMessages = function() { return require_real("messages").getMessages()}
|
|
||||||
exports.status = function() { return require_real("messages").status()}
|
|
||||||
exports.buzz = function() { return require_real("messages").buzz(msgSrc)}
|
|
||||||
exports.stopBuzz = function() { return require_real("messages").stopBuzz()}
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
//TODO:
|
|
||||||
//codice che verrà evalutato dall'app per caricare l'interfaccia della musica
|
|
||||||
|
|
||||||
|
|
||||||
exports.show = function() {
|
|
||||||
g.drawString("music",20,20);
|
|
||||||
}
|
|
||||||
|
|
@ -1,10 +1,7 @@
|
||||||
//eval(require("Storage").read("messages.settings.js"));
|
|
||||||
(function(back) {
|
(function(back) {
|
||||||
const SETTINGS_FILE_NAME="messages_light.settings.json";
|
const SETTINGS_FILE_NAME="messages_light.settings.json";
|
||||||
let settings = function() {
|
let settings = function() {
|
||||||
let settings = require('Storage').readJSON(SETTINGS_FILE_NAME, true) || {};
|
let settings = require('Storage').readJSON(SETTINGS_FILE_NAME, true) || {};
|
||||||
settings.openMusic=!!settings.openMusic;
|
|
||||||
//settings.unlockWatch=!!settings.unlockWatch;
|
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
function updateSetting(setting, value) {
|
function updateSetting(setting, value) {
|
||||||
|
|
@ -16,10 +13,6 @@
|
||||||
var mainmenu = {
|
var mainmenu = {
|
||||||
"" : { "title" : /*LANG*/"Messages Light" },
|
"" : { "title" : /*LANG*/"Messages Light" },
|
||||||
"< Back" : back,
|
"< Back" : back,
|
||||||
/*LANG*/'Auto-Open Music': {
|
|
||||||
value: !!settings().openMusic,
|
|
||||||
onchange: v => updateSetting("openMusic", v)
|
|
||||||
},
|
|
||||||
/*LANG*/'Time Out': {
|
/*LANG*/'Time Out': {
|
||||||
value: timeOutChoices.indexOf(settings.timeOut),
|
value: timeOutChoices.indexOf(settings.timeOut),
|
||||||
min: 0, max: timeOutChoices.length-1,
|
min: 0, max: timeOutChoices.length-1,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"id": "messages_light",
|
"id": "messages_light",
|
||||||
"name": "Messages Light",
|
"name": "Messages Light",
|
||||||
"version": "1.3",
|
"version": "1.4",
|
||||||
"description": "A light implementation of messages App (display notifications from iOS and Gadgetbridge/Android)",
|
"description": "A light implementation of messages App (display notifications from iOS and Gadgetbridge/Android)",
|
||||||
"icon": "app.png",
|
"icon": "app.png",
|
||||||
"type": "app",
|
"type": "app",
|
||||||
|
|
@ -13,9 +13,8 @@
|
||||||
{"name":"messages_light.app.js","url":"messages_light.app.js"},
|
{"name":"messages_light.app.js","url":"messages_light.app.js"},
|
||||||
{"name":"messages_light.settings.js","url":"messages_light.settings.js"},
|
{"name":"messages_light.settings.js","url":"messages_light.settings.js"},
|
||||||
{"name":"messages_light.img","url":"app-icon.js","evaluate":true},
|
{"name":"messages_light.img","url":"app-icon.js","evaluate":true},
|
||||||
{"name":"messagesProxy","url":"messages_light.messagesProxy.js"},
|
{"name":"boot_messages_light.boot.js","url":"messages_light.boot.js"},
|
||||||
{"name":"messages_light.boot.js","url":"messages_light.boot.js"},
|
{"name":"messages_light.listener.js","url":"messages_light.listener.js"}
|
||||||
{"name":"messages_light.music.js","url":"messages_light.music.js"}
|
|
||||||
],
|
],
|
||||||
"data": [{"name":"messages_light.settings.json"},{"name":"messages_light.NewMessage.json"}],
|
"data": [{"name":"messages_light.settings.json"},{"name":"messages_light.NewMessage.json"}],
|
||||||
"screenshots": [{"url":"screenshot-notify.png"} ,{"url":"screenshot-long-text1.png"},{"url":"screenshot-long-text2.png"}, {"url":"screenshot-call.png"} ]
|
"screenshots": [{"url":"screenshot-notify.png"} ,{"url":"screenshot-long-text1.png"},{"url":"screenshot-long-text2.png"}, {"url":"screenshot-call.png"} ]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue