messages_light update -> new management of events implemented

master
Rarder44 2023-02-28 19:00:41 +01:00
parent 5b0225e58b
commit 92378a3137
8 changed files with 84 additions and 242 deletions

View File

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

View File

@ -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")
setTimeout(_ => load());
}
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;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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