Skip to content

Commit e8b0849

Browse files
committed
[messages][messagegui] - fix music info handling
1 parent 9b1af79 commit e8b0849

File tree

6 files changed

+58
-9
lines changed

6 files changed

+58
-9
lines changed

apps/messagegui/ChangeLog

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,3 +119,4 @@
119119
0.87: Make choosing of font size more repeatable
120120
0.88: Adjust padding calculation so messages are spaced out properly even when using international fonts
121121
0.89: Fix bugs related to empty titles and bodies
122+
0.90: Persist music info; Fix old music info copying into new music messages

apps/messagegui/lib.js

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,11 @@ exports.listener = function(type, msg) {
3737
const appSettings = require("Storage").readJSON("messages.settings.json", 1) || {};
3838
let loadMessages = (Bangle.CLOCK || msg.important); // should we load the messages app?
3939
if (type==="music") {
40-
if (Bangle.CLOCK && msg.state && msg.title && appSettings.openMusic) loadMessages = true;
41-
else return;
40+
if (Bangle.CLOCK && msg.state && msg.title && appSettings.openMusic) {
41+
loadMessages = true;
42+
} else {
43+
if (persistMusicInfo(msg)) return; // handled
44+
}
4245
}
4346
// Write the message to Bangle.MESSAGES. We'll deal with it in messageTimeout below
4447
if (!Bangle.MESSAGES) Bangle.MESSAGES = [];
@@ -48,7 +51,9 @@ exports.listener = function(type, msg) {
4851
// save messages from RAM to flash if we decide not to launch app
4952
// We apply all of Bangle.MESSAGES here in one write
5053
if (!Bangle.MESSAGES || !Bangle.MESSAGES.length) return;
51-
let messages = require("messages").getMessages(msg);
54+
// Load saved messages without applying the current msg to avoid
55+
// applying it twice (getMessages(msg) would apply it already).
56+
let messages = require("messages").getMessages();
5257
(Bangle.MESSAGES || []).forEach(m => require("messages").apply(m, messages));
5358
require("messages").write(messages);
5459
delete Bangle.MESSAGES;
@@ -105,3 +110,39 @@ exports.open = function(msg) {
105110

106111
Bangle.load((msg && msg.new && msg.id!=="music") ? "messagegui.new.js" : "messagegui.app.js");
107112
};
113+
114+
/**
115+
* Persist info fields from music messages
116+
* @param {*} msg Music message
117+
* @returns true if the message was handled
118+
*/
119+
function persistMusicInfo(msg) {
120+
msg.handled = true;
121+
// if nothing to persist - return that it's handled
122+
if (msg.artist === undefined && msg.track === undefined && msg.album === undefined && msg.dur === undefined) return true;
123+
124+
const a = msg.artist, t = msg.track, al = msg.album, d = msg.dur;
125+
126+
// try to find the last music message
127+
const messagesMod = require("messages");
128+
const messages = messagesMod.getMessages();
129+
const mIdx = messages.findIndex(m => m.id === "music");
130+
const stored = mIdx >= 0 ? messages[mIdx] : null;
131+
132+
if (!stored) {
133+
// new msg, always write
134+
const newEntry = { id: "music", artist: a, track: t, album: al, dur: d };
135+
messages.unshift(Object.assign({}, newEntry));
136+
messagesMod.write(messages);
137+
} else {
138+
// existing msg, only write if something changed
139+
if (stored.artist !== a || stored.track !== t || stored.album !== al || stored.dur !== d) {
140+
stored.artist = a;
141+
stored.track = t;
142+
stored.album = al;
143+
stored.dur = d;
144+
messagesMod.write(messages);
145+
}
146+
}
147+
return true;
148+
}

apps/messagegui/metadata.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"id": "messagegui",
33
"name": "Message UI",
44
"shortName": "Messages",
5-
"version": "0.89",
5+
"version": "0.90",
66
"description": "Default app to display notifications from iOS and Gadgetbridge/Android",
77
"icon": "app.png",
88
"type": "app",

apps/messages/ChangeLog

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@
1212
0.66: Fix 'Auto-Open Unread Msg' polarity - previously checking the box would ignore unread messages
1313
0.67: Ensure default vibration pattern is longer
1414
Add Option to show widgets (Message GUI 0.86 removes them by default)
15+
0.68: Fix perserving music info between messages

apps/messages/lib.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,20 @@ exports.pushMessage = function(event) {
2424
if (event.t==="add") {
2525
if (event.new===undefined) event.new = true; // Assume it should be new
2626
} else if (event.t==="modify") {
27-
const old = exports.getMessages().find(m => m.id===event.id);
28-
if (old) event = Object.assign(old, event);
27+
// For non-music messages, merge with stored message
28+
// For music, skip merging to avoid old info
29+
if (event.id !== "music") {
30+
const old = exports.getMessages().find(m => m.id===event.id);
31+
if (old) event = Object.assign(old, event);
32+
}
2933
}
3034

3135
// combine musicinfo and musicstate events
3236
if (event.id==="music") {
3337
if (event.state==="play") event.new = true; // new track, or playback (re)started
34-
event = Object.assign(exports.music, event);
38+
// Merge new msg into current music to preserve info
39+
exports.music = Object.assign(exports.music, event);
40+
event = exports.music;
3541
}
3642
}
3743
// reset state (just in case)
@@ -72,7 +78,7 @@ exports.apply = function(event, messages) {
7278
messages.splice(mIdx, 1);
7379
} else if (event.t==="add") {
7480
if (mIdx>=0) messages.splice(mIdx, 1); // duplicate ID! erase previous version
75-
messages.unshift(event); // add at the beginning
81+
messages.unshift(Object.assign({}, event)); // add a copy at the beginning
7682
} else if (event.t==="modify") {
7783
if (mIdx>=0) messages[mIdx] = Object.assign(messages[mIdx], event);
7884
else messages.unshift(event);

apps/messages/metadata.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "messages",
33
"name": "Messages",
4-
"version": "0.67",
4+
"version": "0.68",
55
"description": "Library to handle, load and store message events received from Android/iOS",
66
"icon": "app.png",
77
"type": "module",

0 commit comments

Comments
 (0)