messages_light update -> new management of events implemented
parent
5b0225e58b
commit
92378a3137
|
|
@ -5,3 +5,4 @@
|
|||
implemented use of the "messageicons" library
|
||||
removed lib no longer used
|
||||
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(){
|
||||
//print.apply(null, arguments);
|
||||
}
|
||||
|
||||
|
||||
let settings= (()=>{
|
||||
let tmp={};
|
||||
tmp.NewEventFileName="messages_light.NewEvent.json";
|
||||
let settings= {
|
||||
NewEventFileName:"messages_light.NewEvent.json",
|
||||
fontSmall : "6x8",
|
||||
fontMedium : "Vector:16",
|
||||
fontBig : "Vector:20",
|
||||
fontLarge : "Vector:30",
|
||||
|
||||
tmp.fontSmall = "6x8";
|
||||
tmp.fontMedium = g.getFonts().includes("Vector")?"Vector:16":"6x8:2";
|
||||
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",
|
||||
|
||||
colBg : g.theme.dark ? "#000":"#fff",
|
||||
colLock : g.theme.dark ? "#ff0000":"#ff0000",
|
||||
|
||||
tmp.colHeadBg = g.theme.dark ? "#141":"#4f4";
|
||||
tmp.colBg = g.theme.dark ? "#000":"#fff";
|
||||
tmp.colLock = g.theme.dark ? "#ff0000":"#ff0000";
|
||||
|
||||
tmp.quiet=!!((require('Storage').readJSON("setting.json", true) || {}).quiet);
|
||||
tmp.timeOut=(require('Storage').readJSON("messages_light.settings.json", true) || {}).timeOut || "Off";
|
||||
|
||||
return tmp;
|
||||
})();
|
||||
quiet:!!((require('Storage').readJSON('setting.json', 1) || {}).quiet),
|
||||
timeOut:(require('Storage').readJSON("messages_light.settings.json", true) || {}).timeOut || "Off",
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
|
@ -46,15 +40,6 @@ 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:"",
|
||||
}*/
|
||||
|
||||
let justOpened=true;
|
||||
|
||||
|
|
@ -72,60 +57,7 @@ var manageEvent = function(event) {
|
|||
showCall(event);
|
||||
}
|
||||
else if( event.id=="music"){
|
||||
|
||||
|
||||
/*
|
||||
//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();
|
||||
|
||||
|
||||
//la musica non la gestisco più ( uso l'app standard o un altra app)
|
||||
}
|
||||
else{
|
||||
|
||||
|
|
@ -170,7 +102,12 @@ var manageEvent = function(event) {
|
|||
if(element.id != event.id)
|
||||
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
|
||||
|
||||
callInProgress=false;
|
||||
LOG(EventQueue.length);
|
||||
if( EventQueue.length == 0)
|
||||
{
|
||||
LOG("no element in queue - closing")
|
||||
if( music!==undefined)
|
||||
{
|
||||
LOG("opened/received music -> show music");
|
||||
showMusic();
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG("no music -> close")
|
||||
LOG("no element in queue - closing");
|
||||
setTimeout(_ => load());
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -383,32 +301,12 @@ let next=function(){
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
let showMap=function(msg) {
|
||||
|
||||
g.clearRect(Bangle.appRect);
|
||||
PrintMessageStrings({body:"Not implemented!"});
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
let CallBuzzTimer=null;
|
||||
let CallBuzzTimer=undefined;
|
||||
let StopBuzzCall=function()
|
||||
{
|
||||
if (CallBuzzTimer){
|
||||
clearInterval(CallBuzzTimer);
|
||||
CallBuzzTimer=null;
|
||||
CallBuzzTimer=undefined;
|
||||
}
|
||||
}
|
||||
let DrawTriangleUp=function()
|
||||
|
|
@ -546,7 +444,7 @@ let doubleTapUnlock=function(data) {
|
|||
Bangle.setLCDPower(1);
|
||||
}
|
||||
}
|
||||
let toushScroll=function(button, xy) {
|
||||
let toushScroll=function(_, xy) {
|
||||
updateTimeout();
|
||||
|
||||
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(){
|
||||
LOG("Main");
|
||||
|
||||
|
|
@ -611,9 +500,8 @@ let main = function(){
|
|||
manageEvent(eventToShow);
|
||||
else
|
||||
{
|
||||
LOG("file event not found! -> Open in music mode");
|
||||
music={}; //imposto un oggetto nella variabile music, cosi non viene chiuso il programma dalla showMusic
|
||||
setTimeout(_ => showMusic(), 0);
|
||||
LOG("file event not found! -> ?? open debug text");
|
||||
setTimeout(_=>{ GB({"t":"notify","id":15754117198411,"src":"Hangouts","title":"A Name","body":"Debug notification \nmessage contents demo demo demo demo"}) },0);
|
||||
}
|
||||
justOpened=false;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,31 +1,13 @@
|
|||
/*
|
||||
//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);*/
|
||||
|
||||
|
||||
|
||||
//OLD Code
|
||||
//override require to filter require("message")
|
||||
global.require_real=global.require;
|
||||
/*global.require_real=global.require;
|
||||
global.require = (_require => file => {
|
||||
if (file==="messages") file = "messagesProxy";
|
||||
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) {
|
||||
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) {
|
||||
|
|
@ -16,10 +13,6 @@
|
|||
var mainmenu = {
|
||||
"" : { "title" : /*LANG*/"Messages Light" },
|
||||
"< Back" : back,
|
||||
/*LANG*/'Auto-Open Music': {
|
||||
value: !!settings().openMusic,
|
||||
onchange: v => updateSetting("openMusic", v)
|
||||
},
|
||||
/*LANG*/'Time Out': {
|
||||
value: timeOutChoices.indexOf(settings.timeOut),
|
||||
min: 0, max: timeOutChoices.length-1,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "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)",
|
||||
"icon": "app.png",
|
||||
"type": "app",
|
||||
|
|
@ -13,9 +13,8 @@
|
|||
{"name":"messages_light.app.js","url":"messages_light.app.js"},
|
||||
{"name":"messages_light.settings.js","url":"messages_light.settings.js"},
|
||||
{"name":"messages_light.img","url":"app-icon.js","evaluate":true},
|
||||
{"name":"messagesProxy","url":"messages_light.messagesProxy.js"},
|
||||
{"name":"messages_light.boot.js","url":"messages_light.boot.js"},
|
||||
{"name":"messages_light.music.js","url":"messages_light.music.js"}
|
||||
{"name":"boot_messages_light.boot.js","url":"messages_light.boot.js"},
|
||||
{"name":"messages_light.listener.js","url":"messages_light.listener.js"}
|
||||
],
|
||||
"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"} ]
|
||||
|
|
|
|||
Loading…
Reference in New Issue