forked from fair/matrix-puppeteer-line
Fix tracking "Read by" counts in group chats
This commit is contained in:
parent
e13f59a8f3
commit
4305d8f994
|
@ -72,7 +72,7 @@ window.__mautrixReceiveMessageID = function(id) {}
|
||||||
/**
|
/**
|
||||||
* @return {Promise<Element>}
|
* @return {Promise<Element>}
|
||||||
*/
|
*/
|
||||||
window.__mautrixGetParticipantsList = function() {}
|
window.__mautrixShowParticipantsList = function() {}
|
||||||
|
|
||||||
const ChatTypeEnum = Object.freeze({
|
const ChatTypeEnum = Object.freeze({
|
||||||
DIRECT: 1,
|
DIRECT: 1,
|
||||||
|
@ -615,10 +615,10 @@ class MautrixController {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {[MutationRecord]} mutations - The mutation records that occurred
|
* @param {[MutationRecord]} mutations - The mutation records that occurred
|
||||||
* @param {str} chat_id - The ID of the chat being observed.
|
* @param {str} chatID - The ID of the chat being observed.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
_observeReceiptsDirect(mutations, chat_id) {
|
_observeReceiptsDirect(mutations, chatID) {
|
||||||
let receipt_id
|
let receipt_id
|
||||||
for (const change of mutations) {
|
for (const change of mutations) {
|
||||||
if ( change.target.classList.contains("mdRGT07Read") &&
|
if ( change.target.classList.contains("mdRGT07Read") &&
|
||||||
|
@ -634,7 +634,7 @@ class MautrixController {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (receipt_id) {
|
if (receipt_id) {
|
||||||
window.__mautrixReceiveReceiptDirectLatest(chat_id, receipt_id).then(
|
window.__mautrixReceiveReceiptDirectLatest(chatID, receipt_id).then(
|
||||||
() => console.debug(`Receipt sent for message ${receipt_id}`),
|
() => console.debug(`Receipt sent for message ${receipt_id}`),
|
||||||
err => console.error(`Error sending receipt for message ${receipt_id}:`, err))
|
err => console.error(`Error sending receipt for message ${receipt_id}:`, err))
|
||||||
}
|
}
|
||||||
|
@ -642,23 +642,17 @@ class MautrixController {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {[MutationRecord]} mutations - The mutation records that occurred
|
* @param {[MutationRecord]} mutations - The mutation records that occurred
|
||||||
* @param {str} chat_id - The ID of the chat being observed.
|
* @param {str} chatID - The ID of the chat being observed.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
_observeReceiptsMulti(mutations, chat_id) {
|
_observeReceiptsMulti(mutations, chatID) {
|
||||||
const ids = new Set()
|
const ids = new Set()
|
||||||
const receipts = []
|
const receipts = []
|
||||||
for (const change of mutations) {
|
for (const change of mutations) {
|
||||||
let success = false
|
const target = change.type == "characterData" ? change.target.parentElement : change.target
|
||||||
if (change.type == "attributes") {
|
|
||||||
if ( change.target.classList.contains("mdRGT07Read") &&
|
if ( change.target.classList.contains("mdRGT07Read") &&
|
||||||
!change.target.classList.contains("MdNonDisp")) {
|
!change.target.classList.contains("MdNonDisp"))
|
||||||
success = true
|
{
|
||||||
}
|
|
||||||
} else if (change.type == "characterData") {
|
|
||||||
success = true
|
|
||||||
}
|
|
||||||
if (success) {
|
|
||||||
const msgElement = change.target.closest(".mdRGT07Own")
|
const msgElement = change.target.closest(".mdRGT07Own")
|
||||||
if (msgElement) {
|
if (msgElement) {
|
||||||
const id = +msgElement.getAttribute("data-local-id")
|
const id = +msgElement.getAttribute("data-local-id")
|
||||||
|
@ -674,7 +668,7 @@ class MautrixController {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (receipts.length > 0) {
|
if (receipts.length > 0) {
|
||||||
window.__mautrixReceiveReceiptMulti(chat_id, receipts).then(
|
window.__mautrixReceiveReceiptMulti(chatID, receipts).then(
|
||||||
() => console.debug(`Receipts sent for ${receipts.length} messages`),
|
() => console.debug(`Receipts sent for ${receipts.length} messages`),
|
||||||
err => console.error(`Error sending receipts for ${receipts.length} messages`, err))
|
err => console.error(`Error sending receipts for ${receipts.length} messages`, err))
|
||||||
}
|
}
|
||||||
|
@ -739,8 +733,13 @@ class MautrixController {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
this.receiptObserver.observe(
|
this.receiptObserver.observe(
|
||||||
chat_room_msg_list,
|
chat_room_msg_list, {
|
||||||
{ subtree: true, attributes: true, attributeFilter: ["class"] })
|
subtree: true,
|
||||||
|
attributes: true,
|
||||||
|
attributeFilter: ["class"],
|
||||||
|
// TODO Consider using the same observer to watch for "ⓘ Decrypting..."
|
||||||
|
characterData: chatType != ChatTypeEnum.DIRECT,
|
||||||
|
})
|
||||||
|
|
||||||
console.debug("Started receipt observer")
|
console.debug("Started receipt observer")
|
||||||
}
|
}
|
||||||
|
|
|
@ -681,7 +681,6 @@ export default class MessagesPuppeteer {
|
||||||
// Use async to ensure that receipts are sent in order
|
// Use async to ensure that receipts are sent in order
|
||||||
this.log(`Received bulk read receipts for chat ${chat_id}:`, receipts)
|
this.log(`Received bulk read receipts for chat ${chat_id}:`, receipts)
|
||||||
if (this.client) {
|
if (this.client) {
|
||||||
this.client.sendReceipt()
|
|
||||||
for (const receipt of receipts) {
|
for (const receipt of receipts) {
|
||||||
receipt.chat_id = chat_id
|
receipt.chat_id = chat_id
|
||||||
try {
|
try {
|
||||||
|
|
Loading…
Reference in New Issue