Fix message finder after gmeet update
This commit is contained in:
parent
bfe0f7f476
commit
376dd1c3a9
@ -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});
|
||||
messages.push({completionTime: completionTime, name: name, text: el.innerHTML, displayTime: dTime});
|
||||
const messageContent = `(<span style="color: red;">${dTime}</span>) ${el.innerHTML}`;
|
||||
messageContents.set(el, messageContent);
|
||||
|
||||
// Set timeout for rendering the completion time, required to avoid weird stuff.
|
||||
setTimeout(() => {
|
||||
e.innerHTML = `(<span style="color: red;">${dTime}</span>) ${e.innerHTML}`;
|
||||
}, 20);
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user