Fix msg not auto loading backwards
Signed-off-by: Ajay Bura <ajbura@gmail.com>
This commit is contained in:
parent
c291729ed6
commit
74b8a0f10f
2 changed files with 11 additions and 13 deletions
|
@ -346,18 +346,17 @@ function usePaginate(roomTimeline, readEventStore, forceUpdateLimit) {
|
||||||
const [info, setInfo] = useState(null);
|
const [info, setInfo] = useState(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handleOnPagination = (backwards, loaded, canLoadMore) => {
|
const handleOnPagination = (backwards, loaded) => {
|
||||||
if (loaded === 0) return;
|
if (loaded === 0) return;
|
||||||
if (!readEventStore.getItem()) {
|
if (!readEventStore.getItem()) {
|
||||||
const readUpToId = roomTimeline.getReadUpToEventId();
|
const readUpToId = roomTimeline.getReadUpToEventId();
|
||||||
readEventStore.setItem(roomTimeline.findEventByIdInTimelineSet(readUpToId));
|
readEventStore.setItem(roomTimeline.findEventByIdInTimelineSet(readUpToId));
|
||||||
}
|
}
|
||||||
limit.setFrom(limit.calcNextFrom(backwards, roomTimeline.timeline.length));
|
limit.setFrom(limit.calcNextFrom(backwards, roomTimeline.timeline.length));
|
||||||
setInfo({
|
setTimeout(() => setInfo({
|
||||||
backwards,
|
backwards,
|
||||||
loaded,
|
loaded,
|
||||||
canLoadMore,
|
}));
|
||||||
});
|
|
||||||
};
|
};
|
||||||
roomTimeline.on(cons.events.roomTimeline.PAGINATED, handleOnPagination);
|
roomTimeline.on(cons.events.roomTimeline.PAGINATED, handleOnPagination);
|
||||||
return () => {
|
return () => {
|
||||||
|
@ -365,7 +364,7 @@ function usePaginate(roomTimeline, readEventStore, forceUpdateLimit) {
|
||||||
};
|
};
|
||||||
}, [roomTimeline]);
|
}, [roomTimeline]);
|
||||||
|
|
||||||
const autoPaginate = useCallback(() => {
|
const autoPaginate = useCallback(async () => {
|
||||||
if (roomTimeline.isOngoingPagination) return;
|
if (roomTimeline.isOngoingPagination) return;
|
||||||
const tLength = roomTimeline.timeline.length;
|
const tLength = roomTimeline.timeline.length;
|
||||||
|
|
||||||
|
@ -376,7 +375,7 @@ function usePaginate(roomTimeline, readEventStore, forceUpdateLimit) {
|
||||||
forceUpdateLimit();
|
forceUpdateLimit();
|
||||||
} else if (roomTimeline.canPaginateForward()) {
|
} else if (roomTimeline.canPaginateForward()) {
|
||||||
// paginate from server.
|
// paginate from server.
|
||||||
roomTimeline.paginateTimeline(false, PAG_LIMIT);
|
await roomTimeline.paginateTimeline(false, PAG_LIMIT);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -387,7 +386,7 @@ function usePaginate(roomTimeline, readEventStore, forceUpdateLimit) {
|
||||||
forceUpdateLimit();
|
forceUpdateLimit();
|
||||||
} else if (roomTimeline.canPaginateBackward()) {
|
} else if (roomTimeline.canPaginateBackward()) {
|
||||||
// paginate from server.
|
// paginate from server.
|
||||||
roomTimeline.paginateTimeline(true, PAG_LIMIT);
|
await roomTimeline.paginateTimeline(true, PAG_LIMIT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [roomTimeline]);
|
}, [roomTimeline]);
|
||||||
|
|
|
@ -90,7 +90,7 @@ class RoomTimeline extends EventEmitter {
|
||||||
}
|
}
|
||||||
|
|
||||||
canPaginateBackward() {
|
canPaginateBackward() {
|
||||||
if (this.timeline[0].getType() === 'm.room.create') return false;
|
if (this.timeline[0]?.getType() === 'm.room.create') return false;
|
||||||
const tm = getFirstLinkedTimeline(this.activeTimeline);
|
const tm = getFirstLinkedTimeline(this.activeTimeline);
|
||||||
return tm.getPaginationToken('b') !== null;
|
return tm.getPaginationToken('b') !== null;
|
||||||
}
|
}
|
||||||
|
@ -173,26 +173,25 @@ class RoomTimeline extends EventEmitter {
|
||||||
: getLastLinkedTimeline(this.activeTimeline);
|
: getLastLinkedTimeline(this.activeTimeline);
|
||||||
|
|
||||||
if (timelineToPaginate.getPaginationToken(backwards ? 'b' : 'f') === null) {
|
if (timelineToPaginate.getPaginationToken(backwards ? 'b' : 'f') === null) {
|
||||||
|
this.emit(cons.events.roomTimeline.PAGINATED, backwards, 0);
|
||||||
this.isOngoingPagination = false;
|
this.isOngoingPagination = false;
|
||||||
this.emit(cons.events.roomTimeline.PAGINATED, backwards, 0, false);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const oldSize = this.timeline.length;
|
const oldSize = this.timeline.length;
|
||||||
try {
|
try {
|
||||||
const canPaginateMore = await this.matrixClient
|
await this.matrixClient.paginateEventTimeline(timelineToPaginate, { backwards, limit });
|
||||||
.paginateEventTimeline(timelineToPaginate, { backwards, limit });
|
|
||||||
|
|
||||||
if (this.isEncrypted()) await this.decryptAllEventsOfTimeline(this.activeTimeline);
|
if (this.isEncrypted()) await this.decryptAllEventsOfTimeline(this.activeTimeline);
|
||||||
this._populateTimelines();
|
this._populateTimelines();
|
||||||
|
|
||||||
const loaded = this.timeline.length - oldSize;
|
const loaded = this.timeline.length - oldSize;
|
||||||
|
this.emit(cons.events.roomTimeline.PAGINATED, backwards, loaded);
|
||||||
this.isOngoingPagination = false;
|
this.isOngoingPagination = false;
|
||||||
this.emit(cons.events.roomTimeline.PAGINATED, backwards, loaded, canPaginateMore);
|
|
||||||
return true;
|
return true;
|
||||||
} catch {
|
} catch {
|
||||||
|
this.emit(cons.events.roomTimeline.PAGINATED, backwards, 0);
|
||||||
this.isOngoingPagination = false;
|
this.isOngoingPagination = false;
|
||||||
this.emit(cons.events.roomTimeline.PAGINATED, backwards, 0, true);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue