Set m.fully_read marker when marking rooms as read (#2587)
Previously markAsRead() only sent m.read receipts via sendReadReceipt(). This meant the read position was not persisted across page refreshes, especially noticeable in bridged rooms. Now uses setRoomReadMarkers() which sets both: - m.fully_read marker (persistent read position) - m.read receipt Fixes issue where rooms would still show as unread after refresh.
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
import { MatrixClient, ReceiptType } from 'matrix-js-sdk';
|
import { MatrixClient, ReceiptType } from 'matrix-js-sdk';
|
||||||
|
|
||||||
export async function markAsRead(mx: MatrixClient, roomId: string, privateReceipt: boolean) {
|
export async function markAsRead(mx: MatrixClient, roomId: string, privateReceipt?: boolean) {
|
||||||
const room = mx.getRoom(roomId);
|
const room = mx.getRoom(roomId);
|
||||||
if (!room) return;
|
if (!room) return;
|
||||||
|
|
||||||
@@ -19,8 +19,15 @@ export async function markAsRead(mx: MatrixClient, roomId: string, privateReceip
|
|||||||
const latestEvent = getLatestValidEvent();
|
const latestEvent = getLatestValidEvent();
|
||||||
if (latestEvent === null) return;
|
if (latestEvent === null) return;
|
||||||
|
|
||||||
await mx.sendReadReceipt(
|
const latestEventId = latestEvent.getId();
|
||||||
latestEvent,
|
if (!latestEventId) return;
|
||||||
privateReceipt ? ReceiptType.ReadPrivate : ReceiptType.Read
|
|
||||||
|
// Set both the read receipt AND the fully_read marker
|
||||||
|
// The fully_read marker is what persists your read position across sessions
|
||||||
|
await mx.setRoomReadMarkers(
|
||||||
|
roomId,
|
||||||
|
latestEventId, // m.fully_read marker
|
||||||
|
latestEvent, // m.read receipt event
|
||||||
|
privateReceipt ? { receiptType: ReceiptType.ReadPrivate } : undefined
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user