React to read receipt changes from ourselves
When a room is read on another device, it should be re-sorted
This commit is contained in:
parent
2eb80f793c
commit
821b34b487
2 changed files with 35 additions and 1 deletions
|
@ -131,6 +131,24 @@ function createRoomTagsAction(matrixClient, roomTagsEvent, room) {
|
||||||
return { action: 'MatrixActions.Room.tags', room };
|
return { action: 'MatrixActions.Room.tags', room };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a MatrixActions.Room.receipt action that represents a MatrixClient
|
||||||
|
* `Room.receipt` event, each parameter mapping to a key-value in the action.
|
||||||
|
*
|
||||||
|
* @param {MatrixClient} matrixClient the matrix client
|
||||||
|
* @param {MatrixEvent} event the receipt event.
|
||||||
|
* @param {Room} room the room the receipt happened in.
|
||||||
|
* @returns {Object} an action of type MatrixActions.Room.receipt.
|
||||||
|
*/
|
||||||
|
function createRoomReceiptAction(matrixClient, event, room) {
|
||||||
|
return {
|
||||||
|
action: 'MatrixActions.Room.receipt',
|
||||||
|
event,
|
||||||
|
room,
|
||||||
|
matrixClient,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef RoomTimelineAction
|
* @typedef RoomTimelineAction
|
||||||
* @type {Object}
|
* @type {Object}
|
||||||
|
@ -233,6 +251,7 @@ export default {
|
||||||
this._addMatrixClientListener(matrixClient, 'Room.accountData', createRoomAccountDataAction);
|
this._addMatrixClientListener(matrixClient, 'Room.accountData', createRoomAccountDataAction);
|
||||||
this._addMatrixClientListener(matrixClient, 'Room', createRoomAction);
|
this._addMatrixClientListener(matrixClient, 'Room', createRoomAction);
|
||||||
this._addMatrixClientListener(matrixClient, 'Room.tags', createRoomTagsAction);
|
this._addMatrixClientListener(matrixClient, 'Room.tags', createRoomTagsAction);
|
||||||
|
this._addMatrixClientListener(matrixClient, 'Room.receipt', createRoomReceiptAction);
|
||||||
this._addMatrixClientListener(matrixClient, 'Room.timeline', createRoomTimelineAction);
|
this._addMatrixClientListener(matrixClient, 'Room.timeline', createRoomTimelineAction);
|
||||||
this._addMatrixClientListener(matrixClient, 'Room.myMembership', createSelfMembershipAction);
|
this._addMatrixClientListener(matrixClient, 'Room.myMembership', createSelfMembershipAction);
|
||||||
this._addMatrixClientListener(matrixClient, 'Event.decrypted', createEventDecryptedAction);
|
this._addMatrixClientListener(matrixClient, 'Event.decrypted', createEventDecryptedAction);
|
||||||
|
|
|
@ -93,6 +93,20 @@ class RoomListStore extends Store {
|
||||||
this._generateInitialRoomLists();
|
this._generateInitialRoomLists();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'MatrixActions.Room.receipt': {
|
||||||
|
if (!logicallyReady) break;
|
||||||
|
|
||||||
|
// First see if the receipt event is for our own user
|
||||||
|
const myUserId = this._matrixClient.getUserId();
|
||||||
|
for (const eventId of Object.keys(payload.event.getContent())) {
|
||||||
|
const receiptUsers = Object.keys(payload.event.getContent()[eventId]['m.read'] || {});
|
||||||
|
if (receiptUsers.includes(myUserId)) {
|
||||||
|
this._roomUpdateTriggered(payload.room.roomId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'MatrixActions.Room.tags': {
|
case 'MatrixActions.Room.tags': {
|
||||||
if (!logicallyReady) break;
|
if (!logicallyReady) break;
|
||||||
// TODO: Figure out which rooms changed in the tag and only change those.
|
// TODO: Figure out which rooms changed in the tag and only change those.
|
||||||
|
@ -212,7 +226,8 @@ class RoomListStore extends Store {
|
||||||
if (!room) return;
|
if (!room) return;
|
||||||
|
|
||||||
if (this._state.stickyRoomId !== room.roomId) {
|
if (this._state.stickyRoomId !== room.roomId) {
|
||||||
this._setRoomCategory(room, this._calculateCategory(room));
|
const category = this._calculateCategory(room);
|
||||||
|
this._setRoomCategory(room, category);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue