Fix msg not auto loading backwards

Signed-off-by: Ajay Bura <ajbura@gmail.com>
This commit is contained in:
Ajay Bura 2021-12-09 12:00:19 +05:30
parent c291729ed6
commit 74b8a0f10f
2 changed files with 11 additions and 13 deletions

View file

@ -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]);

View file

@ -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;
} }
} }