forked from FOSS/BangleApps
messages: move buzz from widget to library
parent
dc6839a67b
commit
29fc8f4d1a
|
@ -69,4 +69,5 @@
|
|||
messages widget buzz now returns a promise
|
||||
0.51: Emit "message events"
|
||||
Setting to hide widget
|
||||
Add custom event handlers to prevent default app form loading
|
||||
Add custom event handlers to prevent default app form loading
|
||||
Move WIDGETS.messages.buzz() to require("messages").buzz()
|
|
@ -54,8 +54,7 @@ var onMessagesModified = function(msg) {
|
|||
// TODO: if new, show this new one
|
||||
if (msg && msg.id!=="music" && msg.new && active!="map" &&
|
||||
!((require('Storage').readJSON('setting.json', 1) || {}).quiet)) {
|
||||
if (WIDGETS["messages"]) WIDGETS["messages"].buzz(msg.src);
|
||||
else Bangle.buzz();
|
||||
require("messages").buzz(msg.src);
|
||||
}
|
||||
if (msg && msg.id=="music") {
|
||||
if (msg.state && msg.state!="play") openMusic = false; // no longer playing music to go back to
|
||||
|
@ -356,13 +355,13 @@ function checkMessages(options) {
|
|||
// If we have a new message, show it
|
||||
if (options.showMsgIfUnread && newMessages.length) {
|
||||
showMessage(newMessages[0].id);
|
||||
// buzz after showMessage, so beingbusy during layout doesn't affect the buzz pattern
|
||||
// buzz after showMessage, so being busy during layout doesn't affect the buzz pattern
|
||||
if (global.BUZZ_ON_NEW_MESSAGE) {
|
||||
// this is set if we entered the messages app by loading `messages.new.js`
|
||||
// ... but only buzz the first time we view a new message
|
||||
global.BUZZ_ON_NEW_MESSAGE = false;
|
||||
// messages.buzz respects quiet mode - no need to check here
|
||||
WIDGETS.messages.buzz(newMessages[0].src);
|
||||
require("messages").buzz(newMessages[0].src);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -83,8 +83,8 @@ exports.pushMessage = function(event) {
|
|||
// we will buzz when we enter the messages app
|
||||
return load("messages.new.js");
|
||||
}
|
||||
if (!quiet && (!global.WIDGETS || !WIDGETS.messages)) return Bangle.buzz(); // no widgets - just buzz once to let someone know
|
||||
if (global.WIDGETS && WIDGETS.messages) WIDGETS.messages.update(messages);
|
||||
exports.buzz(message.src);
|
||||
}, 500);
|
||||
};
|
||||
setTimeout(()=>{
|
||||
|
@ -134,6 +134,45 @@ exports.getMessages = function() {
|
|||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Start buzzing for new message
|
||||
* @param {string} msgSrc Message src to buzz for
|
||||
* @return {Promise} Resolves when initial buzz finishes (there might be repeat buzzes later)
|
||||
*/
|
||||
exports.buzz = function(msgSrc) {
|
||||
exports.stopBuzz(); // cancel any previous buzz timeouts
|
||||
if ((require('Storage').readJSON('setting.json',1)||{}).quiet) return Promise.resolve(); // never buzz during Quiet Mode
|
||||
|
||||
var pattern;
|
||||
if (msgSrc && msgSrc.toLowerCase() === "phone") {
|
||||
// special vibration pattern for incoming calls
|
||||
pattern = (require('Storage').readJSON("messages.settings.json", true) || {}).vibrateCalls;
|
||||
} else {
|
||||
pattern = (require('Storage').readJSON("messages.settings.json", true) || {}).vibrate;
|
||||
}
|
||||
if (pattern === undefined) { pattern = ":"; } // pattern may be "", so we can't use || ":" here
|
||||
if (!pattern) return Promise.resolve();
|
||||
|
||||
var repeat = (require('Storage').readJSON("messages.settings.json", true) || {}).repeat;
|
||||
if (repeat===undefined) repeat=4; // repeat may be zero
|
||||
if (repeat) {
|
||||
exports.buzzTimeout = setTimeout(()=>require("buzz").pattern(pattern), repeat*1000);
|
||||
var vibrateTimeout = (require('Storage').readJSON("messages.settings.json", true) || {}).vibrateTimeout;
|
||||
if (vibrateTimeout===undefined) vibrateTimeout=60;
|
||||
if (vibrateTimeout && !exports.stopTimeout) exports.stopTimeout = setTimeout(exports.stopTimeout, vibrateTimeout*1000);
|
||||
}
|
||||
return require("buzz").pattern(pattern);
|
||||
};
|
||||
/**
|
||||
* Stop buzzing
|
||||
*/
|
||||
exports.stopBuzz = function() {
|
||||
if (exports.buzzTimeout) clearTimeout(exports.buzzTimeout);
|
||||
delete exports.buzzTimeout;
|
||||
if (exports.stopTimeout) clearTimeout(exports.stopTimeout);
|
||||
delete exports.stopTimeout;
|
||||
};
|
||||
|
||||
exports.getMessageImage = function(msg) {
|
||||
/*
|
||||
* icons should be 24x24px or less with 1bpp colors and 'Transparency to Color'
|
||||
|
|
|
@ -15,15 +15,14 @@ WIDGETS["messages"]={area:"tl", width:0, draw:function(recall) {
|
|||
}
|
||||
Bangle.removeListener('touch', this.touch);
|
||||
if (!this.width) return;
|
||||
var c = (Date.now()-this.t)/1000;
|
||||
let settings = Object.assign({flash:true, maxMessages:3, repeat:4, vibrateTimeout:60},require('Storage').readJSON("messages.settings.json", true) || {});
|
||||
let settings = Object.assign({flash:true, maxMessages:3},require('Storage').readJSON("messages.settings.json", true) || {});
|
||||
if (recall !== true || settings.flash) {
|
||||
var msgsShown = E.clip(this.msgs.length, 0, settings.maxMessages);
|
||||
g.reset().clearRect(this.x, this.y, this.x+this.width, this.y+23);
|
||||
for(let i = 0;i < msgsShown;i++) {
|
||||
const msg = this.msgs[i];
|
||||
const colors = [g.theme.bg, g.setColor(require("messages").getMessageImageCol(msg)).getColor()];
|
||||
if (settings.flash && (c&1)) {
|
||||
if (settings.flash && ((Date.now()/1000)&1)) {
|
||||
if (colors[1] == g.theme.fg) {
|
||||
colors.reverse();
|
||||
} else {
|
||||
|
@ -36,38 +35,13 @@ WIDGETS["messages"]={area:"tl", width:0, draw:function(recall) {
|
|||
this.x + 12 + i * 24, this.y + 12, {rotate:0/*force centering*/});
|
||||
}
|
||||
}
|
||||
if (c<settings.vibrateTimeout && // not going on too long...
|
||||
(settings.repeat || c<1) && // repeated, or no repeat and first attempt
|
||||
(Date.now()-this.l)>settings.repeat*1000) { // the period between vibrations
|
||||
this.l = Date.now();
|
||||
WIDGETS["messages"].buzz(); // buzz every 4 seconds
|
||||
}
|
||||
WIDGETS["messages"].i=setTimeout(()=>WIDGETS["messages"].draw(true), 1000);
|
||||
if (process.env.HWVERSION>1) Bangle.on('touch', this.touch);
|
||||
},update:function(rawMsgs, quiet) {
|
||||
},update:function(rawMsgs) {
|
||||
const settings = Object.assign({maxMessages:3},require('Storage').readJSON("messages.settings.json", true) || {});
|
||||
this.msgs = filterMessages(rawMsgs);
|
||||
if (this.msgs.length === 0) {
|
||||
delete this.t;
|
||||
delete this.l;
|
||||
} else {
|
||||
this.t=Date.now(); // first time
|
||||
this.l=Date.now()-10000; // last buzz
|
||||
if (quiet) this.t -= 500000; // if quiet, set last time in the past so there is no buzzing
|
||||
}
|
||||
this.width = 24 * E.clip(this.msgs.length, 0, settings.maxMessages);
|
||||
Bangle.drawWidgets();
|
||||
},buzz:function(msgSrc) { // return a promise
|
||||
if ((require('Storage').readJSON('setting.json',1)||{}).quiet) return Promise.resolve(); // never buzz during Quiet Mode
|
||||
var pattern;
|
||||
if (msgSrc != undefined && msgSrc.toLowerCase() == "phone") {
|
||||
// special vibration pattern for incoming calls
|
||||
pattern = (require('Storage').readJSON("messages.settings.json", true) || {}).vibrateCalls;
|
||||
} else {
|
||||
pattern = (require('Storage').readJSON("messages.settings.json", true) || {}).vibrate;
|
||||
}
|
||||
if (pattern === undefined) { pattern = ":"; } // pattern may be "", so we can't use || ":" here
|
||||
return require("buzz").pattern(pattern);
|
||||
},touch:function(b,c) {
|
||||
var w=WIDGETS["messages"];
|
||||
if (!w||!w.width||c.x<w.x||c.x>w.x+w.width||c.y<w.y||c.y>w.y+24) return;
|
||||
|
@ -75,8 +49,7 @@ WIDGETS["messages"]={area:"tl", width:0, draw:function(recall) {
|
|||
}};
|
||||
|
||||
/* We might have returned here if we were in the Messages app for a
|
||||
message but then the watch was never viewed. In that case we don't
|
||||
want to buzz but should still show that there are unread messages. */
|
||||
message but then the watch was never viewed. */
|
||||
if (global.MESSAGES===undefined)
|
||||
WIDGETS["messages"].update(require("messages").getMessages(), true);
|
||||
WIDGETS["messages"].update(require("messages").getMessages());
|
||||
})();
|
||||
|
|
Loading…
Reference in New Issue