From 3b0f525bd2d7e6d290bf0a657a954322cd731862 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Sun, 11 Dec 2022 18:34:07 +0100 Subject: [PATCH] messagegui: write "remove" messages to flash Whoops: we didn't handle these at all, but are actually responsible for saving them, even if the UI won't be launched. Fixes #2380 --- apps/messagegui/ChangeLog | 1 + apps/messagegui/lib.js | 17 +++++++++++++---- apps/messagegui/metadata.json | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/apps/messagegui/ChangeLog b/apps/messagegui/ChangeLog index 3f5ff70fd..36ec8191f 100644 --- a/apps/messagegui/ChangeLog +++ b/apps/messagegui/ChangeLog @@ -82,3 +82,4 @@ 0.58: Fast load messages without writing to flash Don't write messages to flash until the app closes 0.59: Ensure we do write messages if messages app can't be fast loaded (see #2373) +0.60: Fix saving of removal messages if UI not open diff --git a/apps/messagegui/lib.js b/apps/messagegui/lib.js index f9919c01c..57dc3c1e2 100644 --- a/apps/messagegui/lib.js +++ b/apps/messagegui/lib.js @@ -10,7 +10,15 @@ exports.listener = function(type, msg) { clearTimeout(exports.messageTimeout); delete exports.messageTimeout; } - if (msg.t==="remove") return; + if (msg.t==="remove") { + // we won't open the UI for removed messages, so make sure to delete it from flash + if (Bangle.MESSAGES) { + // we were waiting for exports.messageTimeout + require("messages").apply(msg, Bangle.MESSAGES); + if (!Bangle.MESSAGES.length) delete Bangle.MESSAGES; + } + return require("messages").save(msg); // always write removal to flash + } const appSettings = require("Storage").readJSON("messages.settings.json", 1) || {}; let loadMessages = (Bangle.CLOCK || event.important); @@ -26,12 +34,12 @@ exports.listener = function(type, msg) { require("messages").save(msg); } else { if (!Bangle.MESSAGES) Bangle.MESSAGES = []; - Bangle.MESSAGES.push(msg); + require("messages").apply(msg, Bangle.MESSAGES); + if (!Bangle.MESSAGES.length) delete Bangle.MESSAGES; } const saveToFlash = () => { // save messages from RAM to flash after all, if we decide not to launch app - if (!Bangle.MESSAGES) return; - Bangle.MESSAGES.forEach(m => require("messages").save(m)); + if (Bangle.MESSAGES) Bangle.MESSAGES.forEach(m => require("messages").save(m)); delete Bangle.MESSAGES; } msg.handled = true; @@ -50,6 +58,7 @@ exports.listener = function(type, msg) { if (exports.messageTimeout) clearTimeout(exports.messageTimeout); exports.messageTimeout = setTimeout(function() { delete exports.messageTimeout; + if (!Bangle.MESSAGES) return; // message was removed during the delay if (type!=="music") { if (!loadMessages) { // not opening the app, just buzz diff --git a/apps/messagegui/metadata.json b/apps/messagegui/metadata.json index 80b362551..5b1cb60c6 100644 --- a/apps/messagegui/metadata.json +++ b/apps/messagegui/metadata.json @@ -2,7 +2,7 @@ "id": "messagegui", "name": "Message UI", "shortName": "Messages", - "version": "0.59", + "version": "0.60", "description": "Default app to display notifications from iOS and Gadgetbridge/Android", "icon": "app.png", "type": "app",