Merge pull request #3622 from bobrippling/feat/messages-no-show-1st-unread

messages: add option to not show the first unread message
pull/3651/head
Rob Pilling 2024-11-11 12:07:01 +00:00 committed by GitHub
commit d3dc3b469f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 39 additions and 21 deletions

View File

@ -111,3 +111,4 @@
Make sure play button image is transparent Make sure play button image is transparent
Add top-right menu to music playback to allow message to be deleted Add top-right menu to music playback to allow message to be deleted
0.82: Stop buzzing when a message is removed (e.g. call answered) 0.82: Stop buzzing when a message is removed (e.g. call answered)
0.83: Add option to not open the first unread message

View File

@ -155,7 +155,7 @@ function showMapMessage(msg) {
function back() { // mark as not new and return to menu function back() { // mark as not new and return to menu
msg.new = false; msg.new = false;
layout = undefined; layout = undefined;
checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1,openMusic:0}); checkMessages({clockIfNoMsg:1,clockIfAllRead:1,ignoreUnread:settings.ignoreUnread,openMusic:0});
} }
Bangle.setUI({mode:"updown", back: back}, back); // any input takes us back Bangle.setUI({mode:"updown", back: back}, back); // any input takes us back
} }
@ -195,8 +195,8 @@ function showMusicMessage(msg) {
var wasNew = msg.new; var wasNew = msg.new;
msg.new = false; msg.new = false;
layout = undefined; layout = undefined;
if (wasNew) checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:0,openMusic:0}); if (wasNew) checkMessages({clockIfNoMsg:1,clockIfAllRead:1,ignoreUnread:1,openMusic:0});
else checkMessages({clockIfNoMsg:0,clockIfAllRead:0,showMsgIfUnread:0,openMusic:0}); else returnToMain();
} }
function updateLabels() { function updateLabels() {
trackName = reduceStringAndPad(msg.track, trackScrollOffset, 13); trackName = reduceStringAndPad(msg.track, trackScrollOffset, 13);
@ -304,7 +304,7 @@ function showMessageSettings(msg) {
menu = Object.assign(menu, { menu = Object.assign(menu, {
/*LANG*/"Delete" : () => { /*LANG*/"Delete" : () => {
MESSAGES = MESSAGES.filter(m=>m.id!=msg.id); MESSAGES = MESSAGES.filter(m=>m.id!=msg.id);
checkMessages({clockIfNoMsg:0,clockIfAllRead:0,showMsgIfUnread:0,openMusic:0}); returnToMain();
}, },
}); });
@ -315,25 +315,25 @@ function showMessageSettings(msg) {
Bangle.messageIgnore(msg); Bangle.messageIgnore(msg);
MESSAGES = MESSAGES.filter(m=>m.id!=msg.id); MESSAGES = MESSAGES.filter(m=>m.id!=msg.id);
} }
checkMessages({clockIfNoMsg:0,clockIfAllRead:0,showMsgIfUnread:0,openMusic:0}); returnToMain();
}); });
}; };
menu = Object.assign(menu, { menu = Object.assign(menu, {
/*LANG*/"Mark Unread" : () => { /*LANG*/"Mark Unread" : () => {
msg.new = true; msg.new = true;
checkMessages({clockIfNoMsg:0,clockIfAllRead:0,showMsgIfUnread:0,openMusic:0}); returnToMain();
}, },
/*LANG*/"Mark all read" : () => { /*LANG*/"Mark all read" : () => {
MESSAGES.forEach(msg => msg.new = false); MESSAGES.forEach(msg => msg.new = false);
checkMessages({clockIfNoMsg:0,clockIfAllRead:0,showMsgIfUnread:0,openMusic:0}); returnToMain();
}, },
/*LANG*/"Delete all messages" : () => { /*LANG*/"Delete all messages" : () => {
E.showPrompt(/*LANG*/"Are you sure?", {title:/*LANG*/"Delete All Messages"}).then(isYes => { E.showPrompt(/*LANG*/"Are you sure?", {title:/*LANG*/"Delete All Messages"}).then(isYes => {
if (isYes) { if (isYes) {
MESSAGES = []; MESSAGES = [];
} }
checkMessages({clockIfNoMsg:0,clockIfAllRead:0,showMsgIfUnread:0,openMusic:0}); returnToMain();
}); });
}, },
}); });
@ -349,7 +349,7 @@ function showMessage(msgid, persist) {
clearInterval(updateLabelsInterval); clearInterval(updateLabelsInterval);
updateLabelsInterval=undefined; updateLabelsInterval=undefined;
} }
if (!msg) return checkMessages({clockIfNoMsg:1,clockIfAllRead:0,showMsgIfUnread:0,openMusic:openMusic}); // go home if no message found if (!msg) return returnToClockIfEmpty(); // go home if no message found
if (msg.id=="music") { if (msg.id=="music") {
cancelReloadTimeout(); // don't auto-reload to clock now cancelReloadTimeout(); // don't auto-reload to clock now
return showMusicMessage(msg); return showMusicMessage(msg);
@ -399,7 +399,7 @@ function showMessage(msgid, persist) {
layout = undefined; layout = undefined;
msg.new = false; // read mail msg.new = false; // read mail
cancelReloadTimeout(); // don't auto-reload to clock now cancelReloadTimeout(); // don't auto-reload to clock now
checkMessages({clockIfNoMsg:1,clockIfAllRead:0,showMsgIfUnread:0,openMusic:openMusic}); returnToClockIfEmpty();
} }
var negHandler,posHandler,footer = [ ]; var negHandler,posHandler,footer = [ ];
if (msg.negative) { if (msg.negative) {
@ -407,7 +407,7 @@ function showMessage(msgid, persist) {
msg.new = false; msg.new = false;
cancelReloadTimeout(); // don't auto-reload to clock now cancelReloadTimeout(); // don't auto-reload to clock now
Bangle.messageResponse(msg,false); Bangle.messageResponse(msg,false);
checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1,openMusic:openMusic}); returnToCheckMessages();
}; footer.push({type:"img",src:atob("PhAB4A8AAAAAAAPAfAMAAAAAD4PwHAAAAAA/H4DwAAAAAH78B8AAAAAA/+A/AAAAAAH/Af//////w/gP//////8P4D///////H/Af//////z/4D8AAAAAB+/AfAAAAAA/H4DwAAAAAPg/AcAAAAADwHwDAAAAAA4A8AAAAAAAA=="),col:"#f00",cb:negHandler}); }; footer.push({type:"img",src:atob("PhAB4A8AAAAAAAPAfAMAAAAAD4PwHAAAAAA/H4DwAAAAAH78B8AAAAAA/+A/AAAAAAH/Af//////w/gP//////8P4D///////H/Af//////z/4D8AAAAAB+/AfAAAAAA/H4DwAAAAAPg/AcAAAAADwHwDAAAAAA4A8AAAAAAAA=="),col:"#f00",cb:negHandler});
} }
footer.push({fillx:1}); // push images to left/right footer.push({fillx:1}); // push images to left/right
@ -421,7 +421,7 @@ function showMessage(msgid, persist) {
Bluetooth.println(JSON.stringify(result)); Bluetooth.println(JSON.stringify(result));
replying = false; replying = false;
layout.render(); layout.render();
checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1,openMusic:openMusic}); returnToCheckMessages();
}) })
.catch(() => { .catch(() => {
replying = false; replying = false;
@ -435,7 +435,7 @@ function showMessage(msgid, persist) {
msg.new = false; msg.new = false;
cancelReloadTimeout(); // don't auto-reload to clock now cancelReloadTimeout(); // don't auto-reload to clock now
Bangle.messageResponse(msg,true); Bangle.messageResponse(msg,true);
checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1,openMusic:openMusic}); returnToCheckMessages();
}; footer.push({type:"img",src:atob("QRABAAAAAAAAAAOAAAAABgAAA8AAAAADgAAD4AAAAAHgAAPgAAAAAPgAA+AAAAAAfgAD4///////gAPh///////gA+D///////AD4H//////8cPgAAAAAAPw8+AAAAAAAfB/4AAAAAAA8B/gAAAAAABwB+AAAAAAADAB4AAAAAAAAABgAA=="),col:"#0f0",cb:posHandler}); }; footer.push({type:"img",src:atob("QRABAAAAAAAAAAOAAAAABgAAA8AAAAADgAAD4AAAAAHgAAPgAAAAAPgAA+AAAAAAfgAD4///////gAPh///////gA+D///////AD4H//////8cPgAAAAAAPw8+AAAAAAAfB/4AAAAAAA8B/gAAAAAABwB+AAAAAAADAB4AAAAAAAAABgAA=="),col:"#0f0",cb:posHandler});
} }
@ -447,7 +447,7 @@ function showMessage(msgid, persist) {
]}, ]},
{ type:"btn", { type:"btn",
src:require("messageicons").getImage(msg), src:require("messageicons").getImage(msg),
col:require("messageicons").getColor(msg, {settings:settings, default:g.theme.fg2}), col:require("messageicons").getColor(msg, {settings, default:g.theme.fg2}),
pad: 3, cb:()=>{ pad: 3, cb:()=>{
cancelReloadTimeout(); // don't auto-reload to clock now cancelReloadTimeout(); // don't auto-reload to clock now
showMessageSettings(msg); showMessageSettings(msg);
@ -476,7 +476,7 @@ function showMessage(msgid, persist) {
/* options = { /* options = {
clockIfNoMsg : bool clockIfNoMsg : bool
clockIfAllRead : bool clockIfAllRead : bool
showMsgIfUnread : bool ignoreUnread : bool // don't automatically navigate to the first unread message
openMusic : bool // open music if it's playing openMusic : bool // open music if it's playing
dontStopBuzz : bool // don't stuf buzzing (any time other than the first this is undefined/false) dontStopBuzz : bool // don't stuf buzzing (any time other than the first this is undefined/false)
} }
@ -500,7 +500,7 @@ function checkMessages(options) {
// we have >0 messages // we have >0 messages
var newMessages = MESSAGES.filter(m=>m.new&&m.id!="music"); var newMessages = MESSAGES.filter(m=>m.new&&m.id!="music");
// If we have a new message, show it // If we have a new message, show it
if (options.showMsgIfUnread && newMessages.length) { if (!options.ignoreUnread && newMessages.length) {
delete newMessages[0].show; // stop us getting stuck here if we're called a second time delete newMessages[0].show; // stop us getting stuck here if we're called a second time
showMessage(newMessages[0].id, false); showMessage(newMessages[0].id, false);
// buzz after showMessage, so being busy during layout doesn't affect the buzz pattern // buzz after showMessage, so being busy during layout doesn't affect the buzz pattern
@ -538,7 +538,7 @@ function checkMessages(options) {
} }
if (img) { if (img) {
var fg = g.getColor(), var fg = g.getColor(),
col = require("messageicons").getColor(msg, {settings:settings, default:fg}); col = require("messageicons").getColor(msg, {settings, default:fg});
g.setColor(col).drawImage(img, x+24, r.y+24, {rotate:0}) // force centering g.setColor(col).drawImage(img, x+24, r.y+24, {rotate:0}) // force centering
.setColor(fg); // only color the icon .setColor(fg); // only color the icon
x += 50; x += 50;
@ -570,6 +570,17 @@ function checkMessages(options) {
}); });
} }
function returnToCheckMessages(clock) {
checkMessages({clockIfNoMsg:1,clockIfAllRead:1,ignoreUnread:settings.ignoreUnread,openMusic});
}
function returnToMain() {
checkMessages({clockIfNoMsg:0,clockIfAllRead:0,ignoreUnread:1,openMusic:0});
}
function returnToClockIfEmpty() {
checkMessages({clockIfNoMsg:1,clockIfAllRead:0,ignoreUnread:1,openMusic});
}
function cancelReloadTimeout() { function cancelReloadTimeout() {
if (!unreadTimeout) return; if (!unreadTimeout) return;
@ -594,7 +605,7 @@ setTimeout(() => {
// only openMusic on launch if music is new, or state=="show" (set by messagesmusic) // only openMusic on launch if music is new, or state=="show" (set by messagesmusic)
var musicMsg = MESSAGES.find(m => m.id === "music"); var musicMsg = MESSAGES.find(m => m.id === "music");
checkMessages({ checkMessages({
clockIfNoMsg: 0, clockIfAllRead: 0, showMsgIfUnread: 1, clockIfNoMsg: 0, clockIfAllRead: 0, ignoreUnread: settings.ignoreUnread,
openMusic: ((musicMsg&&musicMsg.new) && settings.openMusic) || (musicMsg&&musicMsg.state=="show"), openMusic: ((musicMsg&&musicMsg.new) && settings.openMusic) || (musicMsg&&musicMsg.state=="show"),
dontStopBuzz: 1 }); dontStopBuzz: 1 });
}, 10); // if checkMessages wants to 'load', do that }, 10); // if checkMessages wants to 'load', do that

View File

@ -2,7 +2,7 @@
"id": "messagegui", "id": "messagegui",
"name": "Message UI", "name": "Message UI",
"shortName": "Messages", "shortName": "Messages",
"version": "0.82", "version": "0.83",
"description": "Default app to display notifications from iOS and Gadgetbridge/Android", "description": "Default app to display notifications from iOS and Gadgetbridge/Android",
"icon": "app.png", "icon": "app.png",
"type": "app", "type": "app",

View File

@ -5,4 +5,5 @@
0.59: fixes message timeout by using setinterval, as it was intended. So the buzz is triggered every x seconds until the timeout occours. 0.59: fixes message timeout by using setinterval, as it was intended. So the buzz is triggered every x seconds until the timeout occours.
0.60: Bump version to allow new buzz.js module to be loaded - fixes memory/performance hog when buzz called 0.60: Bump version to allow new buzz.js module to be loaded - fixes memory/performance hog when buzz called
0.61: Add repeatCalls option to allow different repeat settings for messages vs calls 0.61: Add repeatCalls option to allow different repeat settings for messages vs calls
0.62: Add option for driving on left (affects roundabout icons in navigation) 0.62: Add option for driving on left (affects roundabout icons in navigation)
0.63: Add option to not open the first unread message

View File

@ -1,7 +1,7 @@
{ {
"id": "messages", "id": "messages",
"name": "Messages", "name": "Messages",
"version": "0.62", "version": "0.63",
"description": "Library to handle, load and store message events received from Android/iOS", "description": "Library to handle, load and store message events received from Android/iOS",
"icon": "app.png", "icon": "app.png",
"type": "module", "type": "module",

View File

@ -11,6 +11,7 @@
if (settings.unreadTimeout===undefined) settings.unreadTimeout=60; if (settings.unreadTimeout===undefined) settings.unreadTimeout=60;
if (settings.maxMessages===undefined) settings.maxMessages=3; if (settings.maxMessages===undefined) settings.maxMessages=3;
if (settings.iconColorMode === undefined) settings.iconColorMode = iconColorModes[0]; if (settings.iconColorMode === undefined) settings.iconColorMode = iconColorModes[0];
if (settings.ignoreUnread === undefined) settings.ignoreUnread = 0;
settings.unlockWatch=!!settings.unlockWatch; settings.unlockWatch=!!settings.unlockWatch;
settings.openMusic=!!settings.openMusic; settings.openMusic=!!settings.openMusic;
settings.maxUnreadTimeout=240; settings.maxUnreadTimeout=240;
@ -58,6 +59,10 @@
format: v => [/*LANG*/"Small",/*LANG*/"Medium"][v], format: v => [/*LANG*/"Small",/*LANG*/"Medium"][v],
onchange: v => updateSetting("fontSize", v) onchange: v => updateSetting("fontSize", v)
}, },
/*LANG*/'Auto-Open Unread Msg': {
value: !!settings().ignoreUnread,
onchange: v => updateSetting("ignoreUnread", v)
},
/*LANG*/'Auto-Open Music': { /*LANG*/'Auto-Open Music': {
value: !!settings().openMusic, value: !!settings().openMusic,
onchange: v => updateSetting("openMusic", v) onchange: v => updateSetting("openMusic", v)