diff --git a/apps/messages/ChangeLog b/apps/messages/ChangeLog index 262cba1fa..0b3cb276d 100644 --- a/apps/messages/ChangeLog +++ b/apps/messages/ChangeLog @@ -66,4 +66,5 @@ 0.50: Add `getMessages` and `status` functions to library Option to disable auto-open of messages Option to make message icons monochrome (not colored) - messages widget buzz now returns a promise \ No newline at end of file + messages widget buzz now returns a promise +0.51: Emit "message events" \ No newline at end of file diff --git a/apps/messages/README.md b/apps/messages/README.md index 2e583d1c2..0ef783188 100644 --- a/apps/messages/README.md +++ b/apps/messages/README.md @@ -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)=>{ + // is one of "text", "call", "alarm", "map", or "music" + // see `messages/lib.js` for possible formats + E.showMessage(`${message.title}\n${message.body}`, `${message.t} ${type} message`); +}); +``` + ## Requests diff --git a/apps/messages/lib.js b/apps/messages/lib.js index 50e14a07b..3e8ff64dd 100644 --- a/apps/messages/lib.js +++ b/apps/messages/lib.js @@ -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 diff --git a/apps/messages/metadata.json b/apps/messages/metadata.json index da2e0945a..057a95026 100644 --- a/apps/messages/metadata.json +++ b/apps/messages/metadata.json @@ -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",