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

@ -66,4 +66,5 @@
0.50: Add `getMessages` and `status` functions to library 0.50: Add `getMessages` and `status` functions to library
Option to disable auto-open of messages Option to disable auto-open of messages
Option to make message icons monochrome (not colored) Option to make message icons monochrome (not colored)
messages widget buzz now returns a promise 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) ![](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 ## Requests

View File

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

View File

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