messages: emit "message" events

master
Richard de Boer 2022-09-24 14:48:59 +02:00
parent d3a5f4cdb2
commit fb10f8125e
No known key found for this signature in database
4 changed files with 25 additions and 4 deletions

View File

@ -67,3 +67,4 @@
Option to disable auto-open of messages
Option to make message icons monochrome (not colored)
messages widget buzz now returns a promise
0.51: Emit "message events"

View File

@ -56,6 +56,19 @@ _2. What the notify icon looks like (it's touchable on Bangle.js2!)_
![](screenshot-notify.gif)
## Events (for app/widget developers)
When a new message arrives, a `"message"` event is emitted, you can listen for
it like this:
```js
myMessageListener = Bangle.on("message", (type, message)=>{
// <type> is one of "text", "call", "alarm", "map", or "music"
// see `messages/lib.js` for possible <message> formats
E.showMessage(`${message.title}\n${message.body}`, `${message.t} ${type} message`);
});
```
## Requests

View File

@ -8,7 +8,7 @@ function openMusic() {
/* Push a new message onto messages queue, event is:
{t:"add",id:int, src,title,subject,body,sender,tel, important:bool, new:bool}
{t:"add",id:int, id:"music", state, artist, track, etc} // add new
{t:"remove-",id:int} // remove
{t:"remove",id:int} // remove
{t:"modify",id:int, title:string} // modified
*/
exports.pushMessage = function(event) {
@ -31,11 +31,18 @@ exports.pushMessage = function(event) {
else Object.assign(messages[mIdx], event);
if (event.id=="music" && messages[mIdx].state=="play") {
messages[mIdx].new = true; // new track, or playback (re)started
type = 'music';
}
}
require("Storage").writeJSON("messages.json",messages);
var message = mIdx<0 ? {id:event.id, t:'remove'} : messages[mIdx];
// if in app, process immediately
if ("undefined"!= typeof MESSAGES) return onMessagesModified(mIdx<0 ? {id:event.id} : messages[mIdx]);
if ("undefined"!=typeof MESSAGES) return onMessagesModified(message);
// emit message event
var type = 'text';
if (["call", "music", "map"].includes(message.id)) type = message.id;
if (message.src && message.src.toLowerCase().startsWith("alarm")) type = "alarm";
Bangle.emit("message", type, message);
// update the widget icons shown
if (global.WIDGETS && WIDGETS.messages) WIDGETS.messages.update(messages,true);
// if no new messages now, make sure we don't load the messages app

View File

@ -1,7 +1,7 @@
{
"id": "messages",
"name": "Messages",
"version": "0.50",
"version": "0.51",
"description": "App to display notifications from iOS and Gadgetbridge/Android",
"icon": "app.png",
"type": "app",