Merge pull request #1762 from matrix-org/luke/fix-new-rooms-not-in-RoomList
Regenerate room lists on Room eventpull/21833/head
						commit
						e7eb02cbf3
					
				|  | @ -62,10 +62,75 @@ function createAccountDataAction(matrixClient, accountDataEvent) { | |||
|     }; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @typedef RoomAction | ||||
|  * @type {Object} | ||||
|  * @property {string} action 'MatrixActions.Room'. | ||||
|  * @property {Room} room the Room that was stored. | ||||
|  */ | ||||
| 
 | ||||
| /** | ||||
|  * Create a MatrixActions.Room action that represents a MatrixClient `Room` | ||||
|  * matrix event, emitted when a Room is stored in the client. | ||||
|  * | ||||
|  * @param {MatrixClient} matrixClient the matrix client. | ||||
|  * @param {Room} room the Room that was stored. | ||||
|  * @returns {RoomAction} an action of type `MatrixActions.Room`. | ||||
|  */ | ||||
| function createRoomAction(matrixClient, room) { | ||||
|     return { action: 'MatrixActions.Room', room }; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @typedef RoomTagsAction | ||||
|  * @type {Object} | ||||
|  * @property {string} action 'MatrixActions.Room.tags'. | ||||
|  * @property {Room} room the Room whose tags changed. | ||||
|  */ | ||||
| 
 | ||||
| /** | ||||
|  * Create a MatrixActions.Room.tags action that represents a MatrixClient | ||||
|  * `Room.tags` matrix event, emitted when the m.tag room account data | ||||
|  * event is updated. | ||||
|  * | ||||
|  * @param {MatrixClient} matrixClient the matrix client. | ||||
|  * @param {MatrixEvent} roomTagsEvent the m.tag event. | ||||
|  * @param {Room} room the Room whose tags were changed. | ||||
|  * @returns {RoomTagsAction} an action of type `MatrixActions.Room.tags`. | ||||
|  */ | ||||
| function createRoomTagsAction(matrixClient, roomTagsEvent, room) { | ||||
|     return { action: 'MatrixActions.Room.tags', room }; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @typedef RoomTimelineAction | ||||
|  * @type {Object} | ||||
|  * @property {string} action 'MatrixActions.Room.timeline'. | ||||
|  * @property {boolean} isLiveEvent whether the event was attached to a | ||||
|  * live timeline. | ||||
|  * @property {boolean} isLiveUnfilteredRoomTimelineEvent whether the | ||||
|  * event was attached to a timeline in the set of unfiltered timelines. | ||||
|  * @property {Room} room the Room whose tags changed. | ||||
|  */ | ||||
| 
 | ||||
| /** | ||||
|  * Create a MatrixActions.Room.timeline action that represents a | ||||
|  * MatrixClient `Room.timeline` matrix event, emitted when an event | ||||
|  * is added to or removed from a timeline of a room. | ||||
|  * | ||||
|  * @param {MatrixClient} matrixClient the matrix client. | ||||
|  * @param {MatrixEvent} timelineEvent the event that was added/removed. | ||||
|  * @param {Room} room the Room that was stored. | ||||
|  * @param {boolean} toStartOfTimeline whether the event is being added | ||||
|  * to the start (and not the end) of the timeline. | ||||
|  * @param {boolean} removed whether the event was removed from the | ||||
|  * timeline. | ||||
|  * @param {Object} data | ||||
|  * @param {boolean} data.liveEvent whether the event is a live event, | ||||
|  * belonging to a live timeline. | ||||
|  * @param {EventTimeline} data.timeline the timeline being altered. | ||||
|  * @returns {RoomTimelineAction} an action of type `MatrixActions.Room.timeline`. | ||||
|  */ | ||||
| function createRoomTimelineAction(matrixClient, timelineEvent, room, toStartOfTimeline, removed, data) { | ||||
|     return { | ||||
|         action: 'MatrixActions.Room.timeline', | ||||
|  | @ -76,6 +141,24 @@ function createRoomTimelineAction(matrixClient, timelineEvent, room, toStartOfTi | |||
|     }; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @typedef RoomMembershipAction | ||||
|  * @type {Object} | ||||
|  * @property {string} action 'MatrixActions.RoomMember.membership'. | ||||
|  * @property {RoomMember} member the member whose membership was updated. | ||||
|  */ | ||||
| 
 | ||||
| /** | ||||
|  * Create a MatrixActions.RoomMember.membership action that represents | ||||
|  * a MatrixClient `RoomMember.membership` matrix event, emitted when a | ||||
|  * member's membership is updated. | ||||
|  * | ||||
|  * @param {MatrixClient} matrixClient the matrix client. | ||||
|  * @param {MatrixEvent} membershipEvent the m.room.member event. | ||||
|  * @param {RoomMember} member the member whose membership was updated. | ||||
|  * @param {string} oldMembership the member's previous membership. | ||||
|  * @returns {RoomMembershipAction} an action of type `MatrixActions.RoomMember.membership`. | ||||
|  */ | ||||
| function createRoomMembershipAction(matrixClient, membershipEvent, member, oldMembership) { | ||||
|     return { action: 'MatrixActions.RoomMember.membership', member }; | ||||
| } | ||||
|  | @ -96,6 +179,7 @@ export default { | |||
|     start(matrixClient) { | ||||
|         this._addMatrixClientListener(matrixClient, 'sync', createSyncAction); | ||||
|         this._addMatrixClientListener(matrixClient, 'accountData', createAccountDataAction); | ||||
|         this._addMatrixClientListener(matrixClient, 'Room', createRoomAction); | ||||
|         this._addMatrixClientListener(matrixClient, 'Room.tags', createRoomTagsAction); | ||||
|         this._addMatrixClientListener(matrixClient, 'Room.timeline', createRoomTimelineAction); | ||||
|         this._addMatrixClientListener(matrixClient, 'RoomMember.membership', createRoomMembershipAction); | ||||
|  |  | |||
|  | @ -97,6 +97,14 @@ class RoomListStore extends Store { | |||
|                 this._generateRoomLists(); | ||||
|             } | ||||
|             break; | ||||
|             // This could be a new room that we've been invited to, joined or created
 | ||||
|             // we won't get a RoomMember.membership for these cases if we're not already
 | ||||
|             // a member.
 | ||||
|             case 'MatrixActions.Room': { | ||||
|                 if (!this._state.ready || !this._matrixClient.credentials.userId) break; | ||||
|                 this._generateRoomLists(); | ||||
|             } | ||||
|             break; | ||||
|             case 'RoomListActions.tagRoom.pending': { | ||||
|                 // XXX: we only show one optimistic update at any one time.
 | ||||
|                 // Ideally we should be making a list of in-flight requests
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 David Baker
						David Baker