Add option to stop sending read receipts (delabs MSC2285: private read receipts) (#8629)
Co-authored-by: Travis Ralston <travisr@matrix.org>
This commit is contained in:
parent
b61cc4850b
commit
7eaed1a3f8
11 changed files with 188 additions and 68 deletions
|
@ -30,6 +30,7 @@ import { ClientEvent } from "matrix-js-sdk/src/client";
|
|||
import { Thread } from 'matrix-js-sdk/src/models/thread';
|
||||
import { ReceiptType } from "matrix-js-sdk/src/@types/read_receipts";
|
||||
import { MatrixError } from 'matrix-js-sdk/src/http-api';
|
||||
import { getPrivateReadReceiptField } from "matrix-js-sdk/src/utils";
|
||||
|
||||
import SettingsStore from "../../settings/SettingsStore";
|
||||
import { Layout } from "../../settings/enums/Layout";
|
||||
|
@ -965,29 +966,35 @@ class TimelinePanel extends React.Component<IProps, IState> {
|
|||
this.lastRMSentEventId = this.state.readMarkerEventId;
|
||||
|
||||
const roomId = this.props.timelineSet.room.roomId;
|
||||
const hiddenRR = SettingsStore.getValue("feature_hidden_read_receipts", roomId);
|
||||
const sendRRs = SettingsStore.getValue("sendReadReceipts", roomId);
|
||||
|
||||
debuglog(
|
||||
`Sending Read Markers for ${this.props.timelineSet.room.roomId}: `,
|
||||
`rm=${this.state.readMarkerEventId} `,
|
||||
`rr=${sendRRs ? lastReadEvent?.getId() : null} `,
|
||||
`prr=${lastReadEvent?.getId()}`,
|
||||
|
||||
debuglog('Sending Read Markers for ',
|
||||
this.props.timelineSet.room.roomId,
|
||||
'rm', this.state.readMarkerEventId,
|
||||
lastReadEvent ? 'rr ' + lastReadEvent.getId() : '',
|
||||
' hidden:' + hiddenRR,
|
||||
);
|
||||
MatrixClientPeg.get().setRoomReadMarkers(
|
||||
roomId,
|
||||
this.state.readMarkerEventId,
|
||||
hiddenRR ? null : lastReadEvent, // Could be null, in which case no RR is sent
|
||||
lastReadEvent, // Could be null, in which case no private RR is sent
|
||||
).catch((e) => {
|
||||
sendRRs ? lastReadEvent : null, // Public read receipt (could be null)
|
||||
lastReadEvent, // Private read receipt (could be null)
|
||||
).catch(async (e) => {
|
||||
// /read_markers API is not implemented on this HS, fallback to just RR
|
||||
if (e.errcode === 'M_UNRECOGNIZED' && lastReadEvent) {
|
||||
return MatrixClientPeg.get().sendReadReceipt(
|
||||
lastReadEvent,
|
||||
hiddenRR ? ReceiptType.ReadPrivate : ReceiptType.Read,
|
||||
).catch((e) => {
|
||||
const privateField = await getPrivateReadReceiptField(MatrixClientPeg.get());
|
||||
if (!sendRRs && !privateField) return;
|
||||
|
||||
try {
|
||||
return await MatrixClientPeg.get().sendReadReceipt(
|
||||
lastReadEvent,
|
||||
sendRRs ? ReceiptType.Read : privateField,
|
||||
);
|
||||
} catch (error) {
|
||||
logger.error(e);
|
||||
this.lastRRSentEventId = undefined;
|
||||
});
|
||||
}
|
||||
} else {
|
||||
logger.error(e);
|
||||
}
|
||||
|
@ -1575,8 +1582,10 @@ class TimelinePanel extends React.Component<IProps, IState> {
|
|||
const isNodeInView = (node) => {
|
||||
if (node) {
|
||||
const boundingRect = node.getBoundingClientRect();
|
||||
if ((allowPartial && boundingRect.top < wrapperRect.bottom) ||
|
||||
(!allowPartial && boundingRect.bottom < wrapperRect.bottom)) {
|
||||
if (
|
||||
(allowPartial && boundingRect.top <= wrapperRect.bottom) ||
|
||||
(!allowPartial && boundingRect.bottom <= wrapperRect.bottom)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue