From 235c74338dbd01b75c4ee59c43b55acec0783d3d Mon Sep 17 00:00:00 2001 From: MarekWo Date: Thu, 19 Feb 2026 07:51:36 +0100 Subject: [PATCH] fix: Skip redundant DM refreshes once delivery ACK is confirmed Stop scheduling further post-send reloads as soon as the last own message shows a delivery checkmark. Co-Authored-By: Claude Opus 4.6 --- app/static/js/dm.js | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/app/static/js/dm.js b/app/static/js/dm.js index d6fc371..89672d6 100644 --- a/app/static/js/dm.js +++ b/app/static/js/dm.js @@ -515,11 +515,22 @@ async function sendMessage() { updateCharCounter(); showNotification('Message sent', 'success'); - // Reload messages after short delay to show sent message - setTimeout(() => loadMessages(), 1000); - // Reload again to catch ACK delivery status (typically arrives within 3-30s) - setTimeout(() => loadMessages(), 6000); - setTimeout(() => loadMessages(), 15000); + // Reload messages to show sent message + ACK delivery status + // Stop early once the last own message gets a delivery checkmark + const ackRefreshDelays = [1000, 6000, 15000]; + let ackRefreshIdx = 0; + const scheduleAckRefresh = () => { + if (ackRefreshIdx >= ackRefreshDelays.length) return; + const delay = ackRefreshDelays[ackRefreshIdx++]; + setTimeout(async () => { + await loadMessages(); + const ownMsgs = document.querySelectorAll('#dmMessagesList .dm-message.own'); + const lastOwn = ownMsgs.length > 0 ? ownMsgs[ownMsgs.length - 1] : null; + const delivered = lastOwn && lastOwn.querySelector('.dm-status.delivered'); + if (!delivered) scheduleAckRefresh(); + }, delay); + }; + scheduleAckRefresh(); } else { showNotification('Failed to send: ' + data.error, 'danger'); }