Merge branch 'develop' into travis/room-list/perf/dedupe-recalc
commit
ef18cd5ca1
|
@ -73,6 +73,18 @@ $tagPanelWidth: 70px; // only applies in this file, used for calculations
|
||||||
overflow-y: hidden;
|
overflow-y: hidden;
|
||||||
overflow-x: scroll;
|
overflow-x: scroll;
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
|
|
||||||
|
&.mx_IndicatorScrollbar_leftOverflow {
|
||||||
|
mask-image: linear-gradient(90deg, transparent, black 10%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.mx_IndicatorScrollbar_rightOverflow {
|
||||||
|
mask-image: linear-gradient(90deg, black, black 90%, transparent);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.mx_IndicatorScrollbar_rightOverflow.mx_IndicatorScrollbar_leftOverflow {
|
||||||
|
mask-image: linear-gradient(90deg, transparent, black 10%, black 90%, transparent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,9 @@ declare global {
|
||||||
mx_RoomListStore2: RoomListStore2;
|
mx_RoomListStore2: RoomListStore2;
|
||||||
mx_RoomListLayoutStore: RoomListLayoutStore;
|
mx_RoomListLayoutStore: RoomListLayoutStore;
|
||||||
mxPlatformPeg: PlatformPeg;
|
mxPlatformPeg: PlatformPeg;
|
||||||
|
|
||||||
|
// TODO: Remove flag before launch: https://github.com/vector-im/riot-web/issues/14231
|
||||||
|
mx_QuietRoomListLogging: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
// workaround for https://github.com/microsoft/TypeScript/issues/30933
|
// workaround for https://github.com/microsoft/TypeScript/issues/30933
|
||||||
|
|
|
@ -105,7 +105,7 @@ export default class RoomSearch extends React.PureComponent<IProps, IState> {
|
||||||
ev.target.select();
|
ev.target.select();
|
||||||
};
|
};
|
||||||
|
|
||||||
private onBlur = () => {
|
private onBlur = (ev: React.FocusEvent<HTMLInputElement>) => {
|
||||||
this.setState({focused: false});
|
this.setState({focused: false});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -219,7 +219,10 @@ export default class RoomList2 extends React.Component<IProps, IState> {
|
||||||
|
|
||||||
private updateLists = () => {
|
private updateLists = () => {
|
||||||
const newLists = RoomListStore.instance.orderedLists;
|
const newLists = RoomListStore.instance.orderedLists;
|
||||||
console.log("new lists", newLists);
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log("new lists", newLists);
|
||||||
|
}
|
||||||
|
|
||||||
this.setState({sublists: newLists}, () => {
|
this.setState({sublists: newLists}, () => {
|
||||||
this.props.onResize();
|
this.props.onResize();
|
||||||
|
@ -293,6 +296,7 @@ export default class RoomList2 extends React.Component<IProps, IState> {
|
||||||
isMinimized={this.props.isMinimized}
|
isMinimized={this.props.isMinimized}
|
||||||
onResize={this.props.onResize}
|
onResize={this.props.onResize}
|
||||||
extraBadTilesThatShouldntExist={extraTiles}
|
extraBadTilesThatShouldntExist={extraTiles}
|
||||||
|
isFiltered={!!this.searchFilter.search}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,7 @@ interface IProps {
|
||||||
isMinimized: boolean;
|
isMinimized: boolean;
|
||||||
tagId: TagID;
|
tagId: TagID;
|
||||||
onResize: () => void;
|
onResize: () => void;
|
||||||
|
isFiltered: boolean;
|
||||||
|
|
||||||
// TODO: Don't use this. It's for community invites, and community invites shouldn't be here.
|
// TODO: Don't use this. It's for community invites, and community invites shouldn't be here.
|
||||||
// You should feel bad if you use this.
|
// You should feel bad if you use this.
|
||||||
|
@ -92,6 +93,7 @@ interface IState {
|
||||||
notificationState: ListNotificationState;
|
notificationState: ListNotificationState;
|
||||||
contextMenuPosition: PartialDOMRect;
|
contextMenuPosition: PartialDOMRect;
|
||||||
isResizing: boolean;
|
isResizing: boolean;
|
||||||
|
isExpanded: boolean; // used for the for expand of the sublist when the room list is being filtered
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class RoomSublist2 extends React.Component<IProps, IState> {
|
export default class RoomSublist2 extends React.Component<IProps, IState> {
|
||||||
|
@ -109,6 +111,7 @@ export default class RoomSublist2 extends React.Component<IProps, IState> {
|
||||||
notificationState: RoomNotificationStateStore.instance.getListState(this.props.tagId),
|
notificationState: RoomNotificationStateStore.instance.getListState(this.props.tagId),
|
||||||
contextMenuPosition: null,
|
contextMenuPosition: null,
|
||||||
isResizing: false,
|
isResizing: false,
|
||||||
|
isExpanded: this.props.isFiltered ? this.props.isFiltered : !this.layout.isCollapsed
|
||||||
};
|
};
|
||||||
this.state.notificationState.setRooms(this.props.rooms);
|
this.state.notificationState.setRooms(this.props.rooms);
|
||||||
this.dispatcherRef = defaultDispatcher.register(this.onAction);
|
this.dispatcherRef = defaultDispatcher.register(this.onAction);
|
||||||
|
@ -123,8 +126,15 @@ export default class RoomSublist2 extends React.Component<IProps, IState> {
|
||||||
return Math.min(nVisible, this.numTiles);
|
return Math.min(nVisible, this.numTiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
public componentDidUpdate() {
|
public componentDidUpdate(prevProps: Readonly<IProps>) {
|
||||||
this.state.notificationState.setRooms(this.props.rooms);
|
this.state.notificationState.setRooms(this.props.rooms);
|
||||||
|
if (prevProps.isFiltered !== this.props.isFiltered) {
|
||||||
|
if (this.props.isFiltered) {
|
||||||
|
this.setState({isExpanded: true});
|
||||||
|
} else {
|
||||||
|
this.setState({isExpanded: !this.layout.isCollapsed});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public componentWillUnmount() {
|
public componentWillUnmount() {
|
||||||
|
@ -137,10 +147,9 @@ export default class RoomSublist2 extends React.Component<IProps, IState> {
|
||||||
// XXX: we have to do this a tick later because we have incorrect intermediate props during a room change
|
// XXX: we have to do this a tick later because we have incorrect intermediate props during a room change
|
||||||
// where we lose the room we are changing from temporarily and then it comes back in an update right after.
|
// where we lose the room we are changing from temporarily and then it comes back in an update right after.
|
||||||
setImmediate(() => {
|
setImmediate(() => {
|
||||||
const isCollapsed = this.layout.isCollapsed;
|
|
||||||
const roomIndex = this.props.rooms.findIndex((r) => r.roomId === payload.room_id);
|
const roomIndex = this.props.rooms.findIndex((r) => r.roomId === payload.room_id);
|
||||||
|
|
||||||
if (isCollapsed && roomIndex > -1) {
|
if (!this.state.isExpanded && roomIndex > -1) {
|
||||||
this.toggleCollapsed();
|
this.toggleCollapsed();
|
||||||
}
|
}
|
||||||
// extend the visible section to include the room if it is entirely invisible
|
// extend the visible section to include the room if it is entirely invisible
|
||||||
|
@ -295,24 +304,23 @@ export default class RoomSublist2 extends React.Component<IProps, IState> {
|
||||||
};
|
};
|
||||||
|
|
||||||
private toggleCollapsed = () => {
|
private toggleCollapsed = () => {
|
||||||
this.layout.isCollapsed = !this.layout.isCollapsed;
|
this.layout.isCollapsed = this.state.isExpanded;
|
||||||
this.forceUpdate(); // because the layout doesn't trigger an update
|
this.setState({isExpanded: !this.layout.isCollapsed});
|
||||||
setImmediate(() => this.props.onResize()); // needs to happen when the DOM is updated
|
setImmediate(() => this.props.onResize()); // needs to happen when the DOM is updated
|
||||||
};
|
};
|
||||||
|
|
||||||
private onHeaderKeyDown = (ev: React.KeyboardEvent) => {
|
private onHeaderKeyDown = (ev: React.KeyboardEvent) => {
|
||||||
const isCollapsed = this.layout && this.layout.isCollapsed;
|
|
||||||
switch (ev.key) {
|
switch (ev.key) {
|
||||||
case Key.ARROW_LEFT:
|
case Key.ARROW_LEFT:
|
||||||
ev.stopPropagation();
|
ev.stopPropagation();
|
||||||
if (!isCollapsed) {
|
if (this.state.isExpanded) {
|
||||||
// On ARROW_LEFT collapse the room sublist if it isn't already
|
// On ARROW_LEFT collapse the room sublist if it isn't already
|
||||||
this.toggleCollapsed();
|
this.toggleCollapsed();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Key.ARROW_RIGHT: {
|
case Key.ARROW_RIGHT: {
|
||||||
ev.stopPropagation();
|
ev.stopPropagation();
|
||||||
if (isCollapsed) {
|
if (!this.state.isExpanded) {
|
||||||
// On ARROW_RIGHT expand the room sublist if it isn't already
|
// On ARROW_RIGHT expand the room sublist if it isn't already
|
||||||
this.toggleCollapsed();
|
this.toggleCollapsed();
|
||||||
} else if (this.sublistRef.current) {
|
} else if (this.sublistRef.current) {
|
||||||
|
@ -341,7 +349,7 @@ export default class RoomSublist2 extends React.Component<IProps, IState> {
|
||||||
};
|
};
|
||||||
|
|
||||||
private renderVisibleTiles(): React.ReactElement[] {
|
private renderVisibleTiles(): React.ReactElement[] {
|
||||||
if (this.layout && this.layout.isCollapsed) {
|
if (!this.state.isExpanded) {
|
||||||
// don't waste time on rendering
|
// don't waste time on rendering
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
@ -498,7 +506,7 @@ export default class RoomSublist2 extends React.Component<IProps, IState> {
|
||||||
|
|
||||||
const collapseClasses = classNames({
|
const collapseClasses = classNames({
|
||||||
'mx_RoomSublist2_collapseBtn': true,
|
'mx_RoomSublist2_collapseBtn': true,
|
||||||
'mx_RoomSublist2_collapseBtn_collapsed': this.layout && this.layout.isCollapsed,
|
'mx_RoomSublist2_collapseBtn_collapsed': !this.state.isExpanded,
|
||||||
});
|
});
|
||||||
|
|
||||||
const classes = classNames({
|
const classes = classNames({
|
||||||
|
@ -526,7 +534,7 @@ export default class RoomSublist2 extends React.Component<IProps, IState> {
|
||||||
tabIndex={tabIndex}
|
tabIndex={tabIndex}
|
||||||
className="mx_RoomSublist2_headerText"
|
className="mx_RoomSublist2_headerText"
|
||||||
role="treeitem"
|
role="treeitem"
|
||||||
aria-expanded={!this.layout.isCollapsed}
|
aria-expanded={this.state.isExpanded}
|
||||||
aria-level={1}
|
aria-level={1}
|
||||||
onClick={this.onHeaderClick}
|
onClick={this.onHeaderClick}
|
||||||
onContextMenu={this.onContextMenu}
|
onContextMenu={this.onContextMenu}
|
||||||
|
|
|
@ -256,7 +256,7 @@ export default class RoomTile2 extends React.Component<IProps, IState> {
|
||||||
0
|
0
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
console.log(`Unexpected tag ${tagId} applied to ${this.props.room.room_id}`);
|
console.warn(`Unexpected tag ${tagId} applied to ${this.props.room.room_id}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ev as React.KeyboardEvent).key === Key.ENTER) {
|
if ((ev as React.KeyboardEvent).key === Key.ENTER) {
|
||||||
|
|
|
@ -105,8 +105,10 @@ export class RoomListStore2 extends AsyncStore<ActionPayload> {
|
||||||
console.warn(`${activeRoomId} is current in RVS but missing from client - clearing sticky room`);
|
console.warn(`${activeRoomId} is current in RVS but missing from client - clearing sticky room`);
|
||||||
await this.algorithm.setStickyRoom(null);
|
await this.algorithm.setStickyRoom(null);
|
||||||
} else if (activeRoom !== this.algorithm.stickyRoom) {
|
} else if (activeRoom !== this.algorithm.stickyRoom) {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`Changing sticky room to ${activeRoomId}`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`Changing sticky room to ${activeRoomId}`);
|
||||||
|
}
|
||||||
await this.algorithm.setStickyRoom(activeRoom);
|
await this.algorithm.setStickyRoom(activeRoom);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -183,16 +185,20 @@ export class RoomListStore2 extends AsyncStore<ActionPayload> {
|
||||||
console.warn(`Own read receipt was in unknown room ${room.roomId}`);
|
console.warn(`Own read receipt was in unknown room ${room.roomId}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`[RoomListDebug] Got own read receipt in ${room.roomId}`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[RoomListDebug] Got own read receipt in ${room.roomId}`);
|
||||||
|
}
|
||||||
await this.handleRoomUpdate(room, RoomUpdateCause.ReadReceipt);
|
await this.handleRoomUpdate(room, RoomUpdateCause.ReadReceipt);
|
||||||
this.updateFn.trigger();
|
this.updateFn.trigger();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else if (payload.action === 'MatrixActions.Room.tags') {
|
} else if (payload.action === 'MatrixActions.Room.tags') {
|
||||||
const roomPayload = (<any>payload); // TODO: Type out the dispatcher types
|
const roomPayload = (<any>payload); // TODO: Type out the dispatcher types
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`[RoomListDebug] Got tag change in ${roomPayload.room.roomId}`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[RoomListDebug] Got tag change in ${roomPayload.room.roomId}`);
|
||||||
|
}
|
||||||
await this.handleRoomUpdate(roomPayload.room, RoomUpdateCause.PossibleTagChange);
|
await this.handleRoomUpdate(roomPayload.room, RoomUpdateCause.PossibleTagChange);
|
||||||
this.updateFn.trigger();
|
this.updateFn.trigger();
|
||||||
} else if (payload.action === 'MatrixActions.Room.timeline') {
|
} else if (payload.action === 'MatrixActions.Room.timeline') {
|
||||||
|
@ -204,12 +210,16 @@ export class RoomListStore2 extends AsyncStore<ActionPayload> {
|
||||||
const roomId = eventPayload.event.getRoomId();
|
const roomId = eventPayload.event.getRoomId();
|
||||||
const room = this.matrixClient.getRoom(roomId);
|
const room = this.matrixClient.getRoom(roomId);
|
||||||
const tryUpdate = async (updatedRoom: Room) => {
|
const tryUpdate = async (updatedRoom: Room) => {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`[RoomListDebug] Live timeline event ${eventPayload.event.getId()}` +
|
|
||||||
` in ${updatedRoom.roomId}`);
|
|
||||||
if (eventPayload.event.getType() === 'm.room.tombstone' && eventPayload.event.getStateKey() === '') {
|
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
console.log(`[RoomListDebug] Got tombstone event - trying to remove now-dead room`);
|
console.log(`[RoomListDebug] Live timeline event ${eventPayload.event.getId()}` +
|
||||||
|
` in ${updatedRoom.roomId}`);
|
||||||
|
}
|
||||||
|
if (eventPayload.event.getType() === 'm.room.tombstone' && eventPayload.event.getStateKey() === '') {
|
||||||
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[RoomListDebug] Got tombstone event - trying to remove now-dead room`);
|
||||||
|
}
|
||||||
const newRoom = this.matrixClient.getRoom(eventPayload.event.getContent()['replacement_room']);
|
const newRoom = this.matrixClient.getRoom(eventPayload.event.getContent()['replacement_room']);
|
||||||
if (newRoom) {
|
if (newRoom) {
|
||||||
// If we have the new room, then the new room check will have seen the predecessor
|
// If we have the new room, then the new room check will have seen the predecessor
|
||||||
|
@ -239,14 +249,18 @@ export class RoomListStore2 extends AsyncStore<ActionPayload> {
|
||||||
console.warn(`Event ${eventPayload.event.getId()} was decrypted in an unknown room ${roomId}`);
|
console.warn(`Event ${eventPayload.event.getId()} was decrypted in an unknown room ${roomId}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`[RoomListDebug] Decrypted timeline event ${eventPayload.event.getId()} in ${roomId}`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[RoomListDebug] Decrypted timeline event ${eventPayload.event.getId()} in ${roomId}`);
|
||||||
|
}
|
||||||
await this.handleRoomUpdate(room, RoomUpdateCause.Timeline);
|
await this.handleRoomUpdate(room, RoomUpdateCause.Timeline);
|
||||||
this.updateFn.trigger();
|
this.updateFn.trigger();
|
||||||
} else if (payload.action === 'MatrixActions.accountData' && payload.event_type === 'm.direct') {
|
} else if (payload.action === 'MatrixActions.accountData' && payload.event_type === 'm.direct') {
|
||||||
const eventPayload = (<any>payload); // TODO: Type out the dispatcher types
|
const eventPayload = (<any>payload); // TODO: Type out the dispatcher types
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`[RoomListDebug] Received updated DM map`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[RoomListDebug] Received updated DM map`);
|
||||||
|
}
|
||||||
const dmMap = eventPayload.event.getContent();
|
const dmMap = eventPayload.event.getContent();
|
||||||
for (const userId of Object.keys(dmMap)) {
|
for (const userId of Object.keys(dmMap)) {
|
||||||
const roomIds = dmMap[userId];
|
const roomIds = dmMap[userId];
|
||||||
|
@ -270,38 +284,54 @@ export class RoomListStore2 extends AsyncStore<ActionPayload> {
|
||||||
const oldMembership = getEffectiveMembership(membershipPayload.oldMembership);
|
const oldMembership = getEffectiveMembership(membershipPayload.oldMembership);
|
||||||
const newMembership = getEffectiveMembership(membershipPayload.membership);
|
const newMembership = getEffectiveMembership(membershipPayload.membership);
|
||||||
if (oldMembership !== EffectiveMembership.Join && newMembership === EffectiveMembership.Join) {
|
if (oldMembership !== EffectiveMembership.Join && newMembership === EffectiveMembership.Join) {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`[RoomListDebug] Handling new room ${membershipPayload.room.roomId}`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[RoomListDebug] Handling new room ${membershipPayload.room.roomId}`);
|
||||||
|
}
|
||||||
|
|
||||||
// If we're joining an upgraded room, we'll want to make sure we don't proliferate
|
// If we're joining an upgraded room, we'll want to make sure we don't proliferate
|
||||||
// the dead room in the list.
|
// the dead room in the list.
|
||||||
const createEvent = membershipPayload.room.currentState.getStateEvents("m.room.create", "");
|
const createEvent = membershipPayload.room.currentState.getStateEvents("m.room.create", "");
|
||||||
if (createEvent && createEvent.getContent()['predecessor']) {
|
if (createEvent && createEvent.getContent()['predecessor']) {
|
||||||
console.log(`[RoomListDebug] Room has a predecessor`);
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[RoomListDebug] Room has a predecessor`);
|
||||||
|
}
|
||||||
const prevRoom = this.matrixClient.getRoom(createEvent.getContent()['predecessor']['room_id']);
|
const prevRoom = this.matrixClient.getRoom(createEvent.getContent()['predecessor']['room_id']);
|
||||||
if (prevRoom) {
|
if (prevRoom) {
|
||||||
const isSticky = this.algorithm.stickyRoom === prevRoom;
|
const isSticky = this.algorithm.stickyRoom === prevRoom;
|
||||||
if (isSticky) {
|
if (isSticky) {
|
||||||
console.log(`[RoomListDebug] Clearing sticky room due to room upgrade`);
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[RoomListDebug] Clearing sticky room due to room upgrade`);
|
||||||
|
}
|
||||||
await this.algorithm.setStickyRoom(null);
|
await this.algorithm.setStickyRoom(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: we hit the algorithm instead of our handleRoomUpdate() function to
|
// Note: we hit the algorithm instead of our handleRoomUpdate() function to
|
||||||
// avoid redundant updates.
|
// avoid redundant updates.
|
||||||
console.log(`[RoomListDebug] Removing previous room from room list`);
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[RoomListDebug] Removing previous room from room list`);
|
||||||
|
}
|
||||||
await this.algorithm.handleRoomUpdate(prevRoom, RoomUpdateCause.RoomRemoved);
|
await this.algorithm.handleRoomUpdate(prevRoom, RoomUpdateCause.RoomRemoved);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`[RoomListDebug] Adding new room to room list`);
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[RoomListDebug] Adding new room to room list`);
|
||||||
|
}
|
||||||
await this.handleRoomUpdate(membershipPayload.room, RoomUpdateCause.NewRoom);
|
await this.handleRoomUpdate(membershipPayload.room, RoomUpdateCause.NewRoom);
|
||||||
this.updateFn.trigger();
|
this.updateFn.trigger();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oldMembership !== EffectiveMembership.Invite && newMembership === EffectiveMembership.Invite) {
|
if (oldMembership !== EffectiveMembership.Invite && newMembership === EffectiveMembership.Invite) {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`[RoomListDebug] Handling invite to ${membershipPayload.room.roomId}`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[RoomListDebug] Handling invite to ${membershipPayload.room.roomId}`);
|
||||||
|
}
|
||||||
await this.handleRoomUpdate(membershipPayload.room, RoomUpdateCause.NewRoom);
|
await this.handleRoomUpdate(membershipPayload.room, RoomUpdateCause.NewRoom);
|
||||||
this.updateFn.trigger();
|
this.updateFn.trigger();
|
||||||
return;
|
return;
|
||||||
|
@ -309,8 +339,10 @@ export class RoomListStore2 extends AsyncStore<ActionPayload> {
|
||||||
|
|
||||||
// If it's not a join, it's transitioning into a different list (possibly historical)
|
// If it's not a join, it's transitioning into a different list (possibly historical)
|
||||||
if (oldMembership !== newMembership) {
|
if (oldMembership !== newMembership) {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`[RoomListDebug] Handling membership change in ${membershipPayload.room.roomId}`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[RoomListDebug] Handling membership change in ${membershipPayload.room.roomId}`);
|
||||||
|
}
|
||||||
await this.handleRoomUpdate(membershipPayload.room, RoomUpdateCause.PossibleTagChange);
|
await this.handleRoomUpdate(membershipPayload.room, RoomUpdateCause.PossibleTagChange);
|
||||||
this.updateFn.trigger();
|
this.updateFn.trigger();
|
||||||
return;
|
return;
|
||||||
|
@ -321,8 +353,10 @@ export class RoomListStore2 extends AsyncStore<ActionPayload> {
|
||||||
private async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise<any> {
|
private async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise<any> {
|
||||||
const shouldUpdate = await this.algorithm.handleRoomUpdate(room, cause);
|
const shouldUpdate = await this.algorithm.handleRoomUpdate(room, cause);
|
||||||
if (shouldUpdate) {
|
if (shouldUpdate) {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`[DEBUG] Room "${room.name}" (${room.roomId}) triggered by ${cause} requires list update`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[DEBUG] Room "${room.name}" (${room.roomId}) triggered by ${cause} requires list update`);
|
||||||
|
}
|
||||||
this.updateFn.mark();
|
this.updateFn.mark();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -433,8 +467,10 @@ export class RoomListStore2 extends AsyncStore<ActionPayload> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private onAlgorithmListUpdated = () => {
|
private onAlgorithmListUpdated = () => {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log("Underlying algorithm has triggered a list update - marking");
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log("Underlying algorithm has triggered a list update - marking");
|
||||||
|
}
|
||||||
this.updateFn.mark();
|
this.updateFn.mark();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -467,8 +503,10 @@ export class RoomListStore2 extends AsyncStore<ActionPayload> {
|
||||||
}
|
}
|
||||||
|
|
||||||
public addFilter(filter: IFilterCondition): void {
|
public addFilter(filter: IFilterCondition): void {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log("Adding filter condition:", filter);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log("Adding filter condition:", filter);
|
||||||
|
}
|
||||||
this.filterConditions.push(filter);
|
this.filterConditions.push(filter);
|
||||||
if (this.algorithm) {
|
if (this.algorithm) {
|
||||||
this.algorithm.addFilterCondition(filter);
|
this.algorithm.addFilterCondition(filter);
|
||||||
|
@ -477,8 +515,10 @@ export class RoomListStore2 extends AsyncStore<ActionPayload> {
|
||||||
}
|
}
|
||||||
|
|
||||||
public removeFilter(filter: IFilterCondition): void {
|
public removeFilter(filter: IFilterCondition): void {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log("Removing filter condition:", filter);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log("Removing filter condition:", filter);
|
||||||
|
}
|
||||||
const idx = this.filterConditions.indexOf(filter);
|
const idx = this.filterConditions.indexOf(filter);
|
||||||
if (idx >= 0) {
|
if (idx >= 0) {
|
||||||
this.filterConditions.splice(idx, 1);
|
this.filterConditions.splice(idx, 1);
|
||||||
|
|
|
@ -315,8 +315,10 @@ export class Algorithm extends EventEmitter {
|
||||||
}
|
}
|
||||||
newMap[tagId] = allowedRoomsInThisTag;
|
newMap[tagId] = allowedRoomsInThisTag;
|
||||||
|
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`[DEBUG] ${newMap[tagId].length}/${rooms.length} rooms filtered into ${tagId}`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[DEBUG] ${newMap[tagId].length}/${rooms.length} rooms filtered into ${tagId}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const allowedRooms = Object.values(newMap).reduce((rv, v) => { rv.push(...v); return rv; }, <Room[]>[]);
|
const allowedRooms = Object.values(newMap).reduce((rv, v) => { rv.push(...v); return rv; }, <Room[]>[]);
|
||||||
|
@ -325,26 +327,13 @@ export class Algorithm extends EventEmitter {
|
||||||
this.emit(LIST_UPDATED_EVENT);
|
this.emit(LIST_UPDATED_EVENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Remove or use.
|
|
||||||
protected addPossiblyFilteredRoomsToTag(tagId: TagID, added: Room[]): void {
|
|
||||||
const filters = this.allowedByFilter.keys();
|
|
||||||
for (const room of added) {
|
|
||||||
for (const filter of filters) {
|
|
||||||
if (filter.isVisible(room)) {
|
|
||||||
this.allowedRoomsByFilters.add(room);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now that we've updated the allowed rooms, recalculate the tag
|
|
||||||
this.recalculateFilteredRoomsForTag(tagId);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected recalculateFilteredRoomsForTag(tagId: TagID): void {
|
protected recalculateFilteredRoomsForTag(tagId: TagID): void {
|
||||||
if (!this.hasFilters) return; // don't bother doing work if there's nothing to do
|
if (!this.hasFilters) return; // don't bother doing work if there's nothing to do
|
||||||
|
|
||||||
console.log(`Recalculating filtered rooms for ${tagId}`);
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`Recalculating filtered rooms for ${tagId}`);
|
||||||
|
}
|
||||||
delete this.filteredRooms[tagId];
|
delete this.filteredRooms[tagId];
|
||||||
const rooms = this.cachedRooms[tagId].map(r => r); // cheap clone
|
const rooms = this.cachedRooms[tagId].map(r => r); // cheap clone
|
||||||
this.tryInsertStickyRoomToFilterSet(rooms, tagId);
|
this.tryInsertStickyRoomToFilterSet(rooms, tagId);
|
||||||
|
@ -353,8 +342,10 @@ export class Algorithm extends EventEmitter {
|
||||||
this.filteredRooms[tagId] = filteredRooms;
|
this.filteredRooms[tagId] = filteredRooms;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`[DEBUG] ${filteredRooms.length}/${rooms.length} rooms filtered into ${tagId}`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[DEBUG] ${filteredRooms.length}/${rooms.length} rooms filtered into ${tagId}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected tryInsertStickyRoomToFilterSet(rooms: Room[], tagId: TagID) {
|
protected tryInsertStickyRoomToFilterSet(rooms: Room[], tagId: TagID) {
|
||||||
|
@ -393,8 +384,10 @@ export class Algorithm extends EventEmitter {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this._cachedStickyRooms || !updatedTag) {
|
if (!this._cachedStickyRooms || !updatedTag) {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`Generating clone of cached rooms for sticky room handling`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`Generating clone of cached rooms for sticky room handling`);
|
||||||
|
}
|
||||||
const stickiedTagMap: ITagMap = {};
|
const stickiedTagMap: ITagMap = {};
|
||||||
for (const tagId of Object.keys(this.cachedRooms)) {
|
for (const tagId of Object.keys(this.cachedRooms)) {
|
||||||
stickiedTagMap[tagId] = this.cachedRooms[tagId].map(r => r); // shallow clone
|
stickiedTagMap[tagId] = this.cachedRooms[tagId].map(r => r); // shallow clone
|
||||||
|
@ -405,8 +398,10 @@ export class Algorithm extends EventEmitter {
|
||||||
if (updatedTag) {
|
if (updatedTag) {
|
||||||
// Update the tag indicated by the caller, if possible. This is mostly to ensure
|
// Update the tag indicated by the caller, if possible. This is mostly to ensure
|
||||||
// our cache is up to date.
|
// our cache is up to date.
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`Replacing cached sticky rooms for ${updatedTag}`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`Replacing cached sticky rooms for ${updatedTag}`);
|
||||||
|
}
|
||||||
this._cachedStickyRooms[updatedTag] = this.cachedRooms[updatedTag].map(r => r); // shallow clone
|
this._cachedStickyRooms[updatedTag] = this.cachedRooms[updatedTag].map(r => r); // shallow clone
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -415,8 +410,10 @@ export class Algorithm extends EventEmitter {
|
||||||
// we might have updated from the cache is also our sticky room.
|
// we might have updated from the cache is also our sticky room.
|
||||||
const sticky = this._stickyRoom;
|
const sticky = this._stickyRoom;
|
||||||
if (!updatedTag || updatedTag === sticky.tag) {
|
if (!updatedTag || updatedTag === sticky.tag) {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`Inserting sticky room ${sticky.room.roomId} at position ${sticky.position} in ${sticky.tag}`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`Inserting sticky room ${sticky.room.roomId} at position ${sticky.position} in ${sticky.tag}`);
|
||||||
|
}
|
||||||
this._cachedStickyRooms[sticky.tag].splice(sticky.position, 0, sticky.room);
|
this._cachedStickyRooms[sticky.tag].splice(sticky.position, 0, sticky.room);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -641,8 +638,10 @@ export class Algorithm extends EventEmitter {
|
||||||
* processing.
|
* processing.
|
||||||
*/
|
*/
|
||||||
public async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise<boolean> {
|
public async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise<boolean> {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`Handle room update for ${room.roomId} called with cause ${cause}`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`Handle room update for ${room.roomId} called with cause ${cause}`);
|
||||||
|
}
|
||||||
if (!this.algorithms) throw new Error("Not ready: no algorithms to determine tags from");
|
if (!this.algorithms) throw new Error("Not ready: no algorithms to determine tags from");
|
||||||
|
|
||||||
// Note: check the isSticky against the room ID just in case the reference is wrong
|
// Note: check the isSticky against the room ID just in case the reference is wrong
|
||||||
|
@ -699,16 +698,20 @@ export class Algorithm extends EventEmitter {
|
||||||
const diff = arrayDiff(oldTags, newTags);
|
const diff = arrayDiff(oldTags, newTags);
|
||||||
if (diff.removed.length > 0 || diff.added.length > 0) {
|
if (diff.removed.length > 0 || diff.added.length > 0) {
|
||||||
for (const rmTag of diff.removed) {
|
for (const rmTag of diff.removed) {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`Removing ${room.roomId} from ${rmTag}`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`Removing ${room.roomId} from ${rmTag}`);
|
||||||
|
}
|
||||||
const algorithm: OrderingAlgorithm = this.algorithms[rmTag];
|
const algorithm: OrderingAlgorithm = this.algorithms[rmTag];
|
||||||
if (!algorithm) throw new Error(`No algorithm for ${rmTag}`);
|
if (!algorithm) throw new Error(`No algorithm for ${rmTag}`);
|
||||||
await algorithm.handleRoomUpdate(room, RoomUpdateCause.RoomRemoved);
|
await algorithm.handleRoomUpdate(room, RoomUpdateCause.RoomRemoved);
|
||||||
this.cachedRooms[rmTag] = algorithm.orderedRooms;
|
this.cachedRooms[rmTag] = algorithm.orderedRooms;
|
||||||
}
|
}
|
||||||
for (const addTag of diff.added) {
|
for (const addTag of diff.added) {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`Adding ${room.roomId} to ${addTag}`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`Adding ${room.roomId} to ${addTag}`);
|
||||||
|
}
|
||||||
const algorithm: OrderingAlgorithm = this.algorithms[addTag];
|
const algorithm: OrderingAlgorithm = this.algorithms[addTag];
|
||||||
if (!algorithm) throw new Error(`No algorithm for ${addTag}`);
|
if (!algorithm) throw new Error(`No algorithm for ${addTag}`);
|
||||||
await algorithm.handleRoomUpdate(room, RoomUpdateCause.NewRoom);
|
await algorithm.handleRoomUpdate(room, RoomUpdateCause.NewRoom);
|
||||||
|
@ -718,13 +721,17 @@ export class Algorithm extends EventEmitter {
|
||||||
// Update the tag map so we don't regen it in a moment
|
// Update the tag map so we don't regen it in a moment
|
||||||
this.roomIdsToTags[room.roomId] = newTags;
|
this.roomIdsToTags[room.roomId] = newTags;
|
||||||
|
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`Changing update cause for ${room.roomId} to Timeline to sort rooms`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`Changing update cause for ${room.roomId} to Timeline to sort rooms`);
|
||||||
|
}
|
||||||
cause = RoomUpdateCause.Timeline;
|
cause = RoomUpdateCause.Timeline;
|
||||||
didTagChange = true;
|
didTagChange = true;
|
||||||
} else {
|
} else {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.warn(`Received no-op update for ${room.roomId} - changing to Timeline update`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`Received no-op update for ${room.roomId} - changing to Timeline update`);
|
||||||
|
}
|
||||||
cause = RoomUpdateCause.Timeline;
|
cause = RoomUpdateCause.Timeline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -750,20 +757,27 @@ export class Algorithm extends EventEmitter {
|
||||||
// as the sticky room relies on this.
|
// as the sticky room relies on this.
|
||||||
if (cause !== RoomUpdateCause.NewRoom && cause !== RoomUpdateCause.RoomRemoved) {
|
if (cause !== RoomUpdateCause.NewRoom && cause !== RoomUpdateCause.RoomRemoved) {
|
||||||
if (this.stickyRoom === room) {
|
if (this.stickyRoom === room) {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.warn(`[RoomListDebug] Received ${cause} update for sticky room ${room.roomId} - ignoring`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.warn(`[RoomListDebug] Received ${cause} update for sticky room ${room.roomId} - ignoring`);
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.roomIdsToTags[room.roomId]) {
|
if (!this.roomIdsToTags[room.roomId]) {
|
||||||
if (CAUSES_REQUIRING_ROOM.includes(cause)) {
|
if (CAUSES_REQUIRING_ROOM.includes(cause)) {
|
||||||
console.warn(`Skipping tag update for ${room.roomId} because we don't know about the room`);
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.warn(`Skipping tag update for ${room.roomId} because we don't know about the room`);
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`[RoomListDebug] Updating tags for room ${room.roomId} (${room.name})`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[RoomListDebug] Updating tags for room ${room.roomId} (${room.name})`);
|
||||||
|
}
|
||||||
|
|
||||||
// Get the tags for the room and populate the cache
|
// Get the tags for the room and populate the cache
|
||||||
const roomTags = this.getTagsForRoom(room).filter(t => !isNullOrUndefined(this.cachedRooms[t]));
|
const roomTags = this.getTagsForRoom(room).filter(t => !isNullOrUndefined(this.cachedRooms[t]));
|
||||||
|
@ -774,12 +788,16 @@ export class Algorithm extends EventEmitter {
|
||||||
|
|
||||||
this.roomIdsToTags[room.roomId] = roomTags;
|
this.roomIdsToTags[room.roomId] = roomTags;
|
||||||
|
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`[RoomListDebug] Updated tags for ${room.roomId}:`, roomTags);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[RoomListDebug] Updated tags for ${room.roomId}:`, roomTags);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`[RoomListDebug] Reached algorithmic handling for ${room.roomId} and cause ${cause}`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[RoomListDebug] Reached algorithmic handling for ${room.roomId} and cause ${cause}`);
|
||||||
|
}
|
||||||
|
|
||||||
const tags = this.roomIdsToTags[room.roomId];
|
const tags = this.roomIdsToTags[room.roomId];
|
||||||
if (!tags) {
|
if (!tags) {
|
||||||
|
@ -801,8 +819,10 @@ export class Algorithm extends EventEmitter {
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
if (!window.mx_QuietRoomListLogging) {
|
||||||
console.log(`[RoomListDebug] Finished handling ${room.roomId} with cause ${cause} (changed=${changed})`);
|
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
||||||
|
console.log(`[RoomListDebug] Finished handling ${room.roomId} with cause ${cause} (changed=${changed})`);
|
||||||
|
}
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,9 +87,6 @@ export class ImportanceAlgorithm extends OrderingAlgorithm {
|
||||||
|
|
||||||
public constructor(tagId: TagID, initialSortingAlgorithm: SortAlgorithm) {
|
public constructor(tagId: TagID, initialSortingAlgorithm: SortAlgorithm) {
|
||||||
super(tagId, initialSortingAlgorithm);
|
super(tagId, initialSortingAlgorithm);
|
||||||
|
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
|
||||||
console.log(`[RoomListDebug] Constructed an ImportanceAlgorithm for ${tagId}`);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// noinspection JSMethodCanBeStatic
|
// noinspection JSMethodCanBeStatic
|
||||||
|
|
|
@ -28,9 +28,6 @@ export class NaturalAlgorithm extends OrderingAlgorithm {
|
||||||
|
|
||||||
public constructor(tagId: TagID, initialSortingAlgorithm: SortAlgorithm) {
|
public constructor(tagId: TagID, initialSortingAlgorithm: SortAlgorithm) {
|
||||||
super(tagId, initialSortingAlgorithm);
|
super(tagId, initialSortingAlgorithm);
|
||||||
|
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
|
||||||
console.log(`[RoomListDebug] Constructed a NaturalAlgorithm for ${tagId}`);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async setRooms(rooms: Room[]): Promise<any> {
|
public async setRooms(rooms: Room[]): Promise<any> {
|
||||||
|
|
|
@ -52,8 +52,6 @@ export class CommunityFilterCondition extends EventEmitter implements IFilterCon
|
||||||
const beforeRoomIds = this.roomIds;
|
const beforeRoomIds = this.roomIds;
|
||||||
this.roomIds = (await GroupStore.getGroupRooms(this.community.groupId)).map(r => r.roomId);
|
this.roomIds = (await GroupStore.getGroupRooms(this.community.groupId)).map(r => r.roomId);
|
||||||
if (arrayHasDiff(beforeRoomIds, this.roomIds)) {
|
if (arrayHasDiff(beforeRoomIds, this.roomIds)) {
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
|
||||||
console.log("Updating filter for group: ", this.community.groupId);
|
|
||||||
this.emit(FILTER_CHANGED);
|
this.emit(FILTER_CHANGED);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -41,8 +41,6 @@ export class NameFilterCondition extends EventEmitter implements IFilterConditio
|
||||||
|
|
||||||
public set search(val: string) {
|
public set search(val: string) {
|
||||||
this._search = val;
|
this._search = val;
|
||||||
// TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035
|
|
||||||
console.log("Updating filter for room name search:", this._search);
|
|
||||||
this.emit(FILTER_CHANGED);
|
this.emit(FILTER_CHANGED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue