From 376dd1c3a98c9126b943d1e5c8a98538a302802f Mon Sep 17 00:00:00 2001 From: sto Date: Sat, 31 May 2025 17:21:34 +0200 Subject: [PATCH] Fix message finder after gmeet update --- scripts/content.js | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/scripts/content.js b/scripts/content.js index 8ae6867..2fa86bc 100644 --- a/scripts/content.js +++ b/scripts/content.js @@ -1,4 +1,5 @@ const seenMessages = new Set(); +const messageContents = new Map(); const seenDataAnnounceMessages = new Set(); let awaitingTimes = []; let messages = []; @@ -26,6 +27,14 @@ function displayTime(rawTime) { return `${Math.floor(rawTime / 3600)}:${dis(Math.floor((rawTime % 3600) / 60))}:${dis(rawTime % 60)}`; } +function updateMessageContent(content, el, map) { + if (el.innerHTML != content) el.innerHTML = content; +} + +function updateMessageContents() { + messageContents.forEach(updateMessageContent); +} + function checkNewMessages() { // Check announce messages and log their appearing times. const announceMessageElements = document.querySelectorAll("div[data-announce-message]"); @@ -37,28 +46,33 @@ function checkNewMessages() { } // Check in-call messages. - const messageElements = document.querySelectorAll("div[data-message-id] div[jscontroller]"); + const messageElements = document.querySelectorAll("div[data-message-id]"); let newElements = false; - for (let e of messageElements) { - if (seenMessages.has(e)) continue; + for (let messageNode of messageElements) { + const el = messageNode.firstChild.firstChild.firstChild.firstChild; + if (seenMessages.has(el)) continue; newElements = true; - seenMessages.add(e); + seenMessages.add(el); let completionTime = Math.floor((Date.now() - startTime) / 1000); // If awaiting times are available, use them first (i.e. the messages section just got opened). if (awaitingTimes.length) completionTime = awaitingTimes.shift(); - const messageNode = e.parentNode.parentNode.parentNode.parentNode; const rootNode = messageNode.parentNode.parentNode; const name = rootNode.firstChild.firstChild.innerHTML; const dTime = displayTime(completionTime); if (startTime > 0) { - messages.push({completionTime: completionTime, name: name, text: e.innerHTML, displayTime: dTime}); - - // Set timeout for rendering the completion time, required to avoid weird stuff. - setTimeout(() => { - e.innerHTML = `(${dTime}) ${e.innerHTML}`; - }, 20); + messages.push({completionTime: completionTime, name: name, text: el.innerHTML, displayTime: dTime}); + const messageContent = `(${dTime}) ${el.innerHTML}`; + messageContents.set(el, messageContent); + + // Re-show all finishing times, as GMeet reset those each time a new message is written. + setTimeout(updateMessageContents, 30); + setTimeout(updateMessageContents, 60); + setTimeout(updateMessageContents, 90); + setTimeout(updateMessageContents, 120); + setTimeout(updateMessageContents, 150); + setTimeout(updateMessageContents, 180); } }