1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-08-09 10:22:46 +03:00

Fix missing threads in thread list (#2226)

Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
Germain
2022-03-10 16:44:42 +00:00
committed by GitHub
parent 40d1674a5c
commit dbcd01bb43
5 changed files with 52 additions and 9 deletions

View File

@@ -126,7 +126,46 @@ describe("Filter Component", function() {
event: true, event: true,
}); });
const eventWithMultipleRelations = mkEvent({
"type": "m.room.message",
"content": {},
"unsigned": {
"m.relations": {
"testtesttest": {},
"m.annotation": {
"chunk": [
{
"type": "m.reaction",
"key": "🤫",
"count": 1,
},
],
},
[RelationType.Thread]: {
count: 2,
current_user_participated: true,
},
},
},
"room": 'roomId',
"event": true,
});
const noMatchEvent = mkEvent({
"type": "m.room.message",
"content": {},
"unsigned": {
"m.relations": {
"testtesttest": {},
},
},
"room": 'roomId',
"event": true,
});
expect(filter.check(threadRootEvent)).toBe(true); expect(filter.check(threadRootEvent)).toBe(true);
expect(filter.check(eventWithMultipleRelations)).toBe(true);
expect(filter.check(noMatchEvent)).toBe(false);
}); });
}); });
}); });

View File

@@ -5383,7 +5383,7 @@ export class MatrixClient extends TypedEventEmitter<EmittedEvents, ClientEventHa
only: 'highlight', only: 'highlight',
}; };
if (token && token !== "end") { if (token !== "end") {
params.from = token; params.from = token;
} }

View File

@@ -183,8 +183,8 @@ export class FilterComponent {
} }
private arrayMatchesFilter(filter: any[], values: any[]): boolean { private arrayMatchesFilter(filter: any[], values: any[]): boolean {
return values.length > 0 && values.every(value => { return values.length > 0 && filter.every(value => {
return filter.includes(value); return values.includes(value);
}); });
} }

View File

@@ -177,7 +177,7 @@ export type RoomEventHandlerMap = {
oldEventId?: string, oldEventId?: string,
oldStatus?: EventStatus, oldStatus?: EventStatus,
) => void; ) => void;
[ThreadEvent.New]: (thread: Thread) => void; [ThreadEvent.New]: (thread: Thread, toStartOfTimeline: boolean) => void;
} & ThreadHandlerMap; } & ThreadHandlerMap;
export class Room extends TypedEventEmitter<EmittedEvents, RoomEventHandlerMap> { export class Room extends TypedEventEmitter<EmittedEvents, RoomEventHandlerMap> {
@@ -1435,14 +1435,18 @@ export class Room extends TypedEventEmitter<EmittedEvents, RoomEventHandlerMap>
// it. If it wasn't fetched successfully the thread will work // it. If it wasn't fetched successfully the thread will work
// in "limited" mode and won't benefit from all the APIs a homeserver // in "limited" mode and won't benefit from all the APIs a homeserver
// can provide to enhance the thread experience // can provide to enhance the thread experience
thread = this.createThread(rootEvent, events); thread = this.createThread(rootEvent, events, toStartOfTimeline);
} }
} }
this.emit(ThreadEvent.Update, thread); this.emit(ThreadEvent.Update, thread);
} }
public createThread(rootEvent: MatrixEvent | undefined, events: MatrixEvent[] = []): Thread | undefined { public createThread(
rootEvent: MatrixEvent | undefined,
events: MatrixEvent[] = [],
toStartOfTimeline: boolean,
): Thread | undefined {
if (rootEvent) { if (rootEvent) {
const tl = this.getTimelineForEvent(rootEvent.getId()); const tl = this.getTimelineForEvent(rootEvent.getId());
const relatedEvents = tl?.getTimelineSet().getAllRelationsEventForEvent(rootEvent.getId()); const relatedEvents = tl?.getTimelineSet().getAllRelationsEventForEvent(rootEvent.getId());
@@ -1470,7 +1474,7 @@ export class Room extends TypedEventEmitter<EmittedEvents, RoomEventHandlerMap>
this.lastThread = thread; this.lastThread = thread;
} }
this.emit(ThreadEvent.New, thread); this.emit(ThreadEvent.New, thread, toStartOfTimeline);
return thread; return thread;
} }
} }

View File

@@ -240,7 +240,7 @@ export class TimelineWindow {
} }
return Boolean(tl.timeline.getNeighbouringTimeline(direction) || return Boolean(tl.timeline.getNeighbouringTimeline(direction) ||
tl.timeline.getPaginationToken(direction)); tl.timeline.getPaginationToken(direction) !== null);
} }
/** /**
@@ -297,7 +297,7 @@ export class TimelineWindow {
// try making a pagination request // try making a pagination request
const token = tl.timeline.getPaginationToken(direction); const token = tl.timeline.getPaginationToken(direction);
if (!token) { if (token === null) {
debuglog("TimelineWindow: no token"); debuglog("TimelineWindow: no token");
return Promise.resolve(false); return Promise.resolve(false);
} }