Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 25428b0

Browse files
authored
Tidy checkForPreJoinUISI and add some logging (#8567)
* Tidy checkForPreJoinUISI * Add some logging
1 parent 0951a76 commit 25428b0

File tree

1 file changed

+18
-23
lines changed

1 file changed

+18
-23
lines changed

src/components/structures/TimelinePanel.tsx

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1456,25 +1456,24 @@ class TimelinePanel extends React.Component<IProps, IState> {
14561456
* such events were found, then it returns 0.
14571457
*/
14581458
private checkForPreJoinUISI(events: MatrixEvent[]): number {
1459+
const cli = MatrixClientPeg.get();
14591460
const room = this.props.timelineSet.room;
14601461

14611462
const isThreadTimeline = [TimelineRenderingType.Thread, TimelineRenderingType.ThreadsList]
14621463
.includes(this.context.timelineRenderingType);
1463-
if (events.length === 0
1464-
|| !room
1465-
|| !MatrixClientPeg.get().isRoomEncrypted(room.roomId)
1466-
|| isThreadTimeline) {
1464+
if (events.length === 0 || !room || !cli.isRoomEncrypted(room.roomId) || isThreadTimeline) {
1465+
logger.info("checkForPreJoinUISI: showing all messages, skipping check");
14671466
return 0;
14681467
}
14691468

1470-
const userId = MatrixClientPeg.get().credentials.userId;
1469+
const userId = cli.credentials.userId;
14711470

14721471
// get the user's membership at the last event by getting the timeline
14731472
// that the event belongs to, and traversing the timeline looking for
14741473
// that event, while keeping track of the user's membership
1475-
let i;
1474+
let i = events.length - 1;
14761475
let userMembership = "leave";
1477-
for (i = events.length - 1; i >= 0; i--) {
1476+
for (; i >= 0; i--) {
14781477
const timeline = room.getTimelineForEvent(events[i].getId());
14791478
if (!timeline) {
14801479
// Somehow, it seems to be possible for live events to not have
@@ -1486,18 +1485,15 @@ class TimelinePanel extends React.Component<IProps, IState> {
14861485
);
14871486
continue;
14881487
}
1489-
const userMembershipEvent =
1490-
timeline.getState(EventTimeline.FORWARDS).getMember(userId);
1491-
userMembership = userMembershipEvent ? userMembershipEvent.membership : "leave";
1488+
1489+
userMembership = timeline.getState(EventTimeline.FORWARDS).getMember(userId)?.membership ?? "leave";
14921490
const timelineEvents = timeline.getEvents();
14931491
for (let j = timelineEvents.length - 1; j >= 0; j--) {
14941492
const event = timelineEvents[j];
14951493
if (event.getId() === events[i].getId()) {
14961494
break;
1497-
} else if (event.getStateKey() === userId
1498-
&& event.getType() === "m.room.member") {
1499-
const prevContent = event.getPrevContent();
1500-
userMembership = prevContent.membership || "leave";
1495+
} else if (event.getStateKey() === userId && event.getType() === EventType.RoomMember) {
1496+
userMembership = event.getPrevContent().membership || "leave";
15011497
}
15021498
}
15031499
break;
@@ -1507,19 +1503,18 @@ class TimelinePanel extends React.Component<IProps, IState> {
15071503
// one that was sent when the user wasn't in the room
15081504
for (; i >= 0; i--) {
15091505
const event = events[i];
1510-
if (event.getStateKey() === userId
1511-
&& event.getType() === "m.room.member") {
1512-
const prevContent = event.getPrevContent();
1513-
userMembership = prevContent.membership || "leave";
1514-
} else if (userMembership === "leave" &&
1515-
(event.isDecryptionFailure() || event.isBeingDecrypted())) {
1516-
// reached an undecryptable message when the user wasn't in
1517-
// the room -- don't try to load any more
1506+
if (event.getStateKey() === userId && event.getType() === EventType.RoomMember) {
1507+
userMembership = event.getPrevContent().membership || "leave";
1508+
} else if (userMembership === "leave" && (event.isDecryptionFailure() || event.isBeingDecrypted())) {
1509+
// reached an undecryptable message when the user wasn't in the room -- don't try to load any more
15181510
// Note: for now, we assume that events that are being decrypted are
1519-
// not decryptable
1511+
// not decryptable - we will be called once more when it is decrypted.
1512+
logger.info("checkForPreJoinUISI: reached a pre-join UISI at index ", i);
15201513
return i + 1;
15211514
}
15221515
}
1516+
1517+
logger.info("checkForPreJoinUISI: did not find pre-join UISI");
15231518
return 0;
15241519
}
15251520

0 commit comments

Comments
 (0)