1
0
Fork 0

messagesoverlay - Fix leaking memory

master
Martin Boonk 2023-02-26 15:53:00 +01:00
parent c16a9b1103
commit 3ef8ede109
1 changed files with 17 additions and 20 deletions

View File

@ -76,12 +76,11 @@ let manageEvent = function(ovr, event) {
next(ovr);
else {
let neweventQueue = [];
eventQueue.length = 0; // empty existing queue
eventQueue.forEach(element => {
if (element.id != event.id)
neweventQueue.push(element);
});
eventQueue = neweventQueue;
}
break;
@ -143,7 +142,6 @@ let showMessage = function(ovr, msg) {
LOG("showMessage");
ovr.setBgColor(settings.colBg);
if (typeof msg.CanscrollDown === "undefined")
msg.CanscrollDown = false;
if (typeof msg.CanscrollUp === "undefined")
@ -214,6 +212,7 @@ let showCall = function(ovr, msg) {
if (!settings.quiet) {
if (msg.new) {
msg.new = false;
if (callBuzzTimer) clearInterval(callBuzzTimer);
callBuzzTimer = setInterval(function() {
Bangle.buzz(500);
}, 1000);
@ -252,7 +251,7 @@ let callBuzzTimer = null;
let stopCallBuzz = function() {
if (callBuzzTimer) {
clearInterval(callBuzzTimer);
callBuzzTimer = null;
callBuzzTimer = undefined;
}
};
@ -357,14 +356,6 @@ let drawMessage = function(ovr, msg) {
Bangle.setLCDOverlay(ovr,ovrx,ovry);
};
let doubleTapUnlock = function(data) {
if (data.double)
{
Bangle.setLocked(false);
Bangle.setLCDPower(1);
}
};
let getSwipeHandler = function(ovr){
return (lr, ud) => {
if (ud == 1) {
@ -394,6 +385,7 @@ let restoreHandler = function(event){
};
let backupHandler = function(event){
if (eventQueue.length > 1 && ovr) return; // do not backup, overlay is already up
backup[event] = Bangle["#on" + event];
Bangle.removeAllListeners(event);
};
@ -407,9 +399,14 @@ let cleanup = function(){
restoreHandler("swipe");
restoreHandler("drag");
Bangle.removeListener("tap", doubleTapUnlock);
if (touchHandler) Bangle.removeListener("touch", touchHandler);
if (swipeHandler) Bangle.removeListener("swipe", swipeHandler);
if (touchHandler) {
Bangle.removeListener("touch", touchHandler);
touchHandler = undefined;
}
if (swipeHandler) {
Bangle.removeListener("swipe", swipeHandler);
swipeHandler = undefined;
}
Bangle.setLCDOverlay();
ovr = undefined;
};
@ -418,18 +415,17 @@ let backup = {};
let main = function(ovr, event) {
LOG("Main", event, settings);
if (!lockListener) {
lockListener = function (){
drawBorder(ovr);
};
Bangle.on('lock', lockListener);
}
backupHandler("touch");
backupHandler("swipe");
backupHandler("drag");
Bangle.on('tap', doubleTapUnlock);
if (touchHandler) Bangle.removeListener("touch",touchHandler);
if (swipeHandler) Bangle.removeListener("swipe",swipeHandler);
touchHandler = getTouchHandler(ovr);
@ -441,7 +437,10 @@ let main = function(ovr, event) {
manageEvent(ovr, event);
Bangle.setLCDPower(1);
drawBorder(ovr);
Bangle.setLCDOverlay(ovr,10,10);
if (eventQueue.length>=1)
Bangle.setLCDOverlay(ovr,10,10);
else
Bangle.setLCDOverlay();
} else {
LOG("No event given");
cleanup();
@ -465,9 +464,7 @@ exports.pushMessage = function(event) {
g = ovr;
ovr.theme = g.theme;
if(event.t=="remove") return;
main(ovr, event);
Bangle.setLCDOverlay(ovr, 10, 10);
g = _g;
};