Fix msg not auto loading backwards
authorAjay Bura <ajbura@gmail.com>
Thu, 9 Dec 2021 06:30:19 +0000 (12:00 +0530)
committerAjay Bura <ajbura@gmail.com>
Thu, 9 Dec 2021 06:30:19 +0000 (12:00 +0530)
Signed-off-by: Ajay Bura <ajbura@gmail.com>
src/app/organisms/room/RoomViewContent.jsx
src/client/state/RoomTimeline.js

index 0a5e9c65673f4196e12e6306fd4c9c816f3d2834..2b2a2749362940df3ada2998e6bf7563292e7d3a 100644 (file)
@@ -346,18 +346,17 @@ function usePaginate(roomTimeline, readEventStore, forceUpdateLimit) {
   const [info, setInfo] = useState(null);
 
   useEffect(() => {
-    const handleOnPagination = (backwards, loaded, canLoadMore) => {
+    const handleOnPagination = (backwards, loaded) => {
       if (loaded === 0) return;
       if (!readEventStore.getItem()) {
         const readUpToId = roomTimeline.getReadUpToEventId();
         readEventStore.setItem(roomTimeline.findEventByIdInTimelineSet(readUpToId));
       }
       limit.setFrom(limit.calcNextFrom(backwards, roomTimeline.timeline.length));
-      setInfo({
+      setTimeout(() => setInfo({
         backwards,
         loaded,
-        canLoadMore,
-      });
+      }));
     };
     roomTimeline.on(cons.events.roomTimeline.PAGINATED, handleOnPagination);
     return () => {
@@ -365,7 +364,7 @@ function usePaginate(roomTimeline, readEventStore, forceUpdateLimit) {
     };
   }, [roomTimeline]);
 
-  const autoPaginate = useCallback(() => {
+  const autoPaginate = useCallback(async () => {
     if (roomTimeline.isOngoingPagination) return;
     const tLength = roomTimeline.timeline.length;
 
@@ -376,7 +375,7 @@ function usePaginate(roomTimeline, readEventStore, forceUpdateLimit) {
         forceUpdateLimit();
       } else if (roomTimeline.canPaginateForward()) {
         // paginate from server.
-        roomTimeline.paginateTimeline(false, PAG_LIMIT);
+        await roomTimeline.paginateTimeline(false, PAG_LIMIT);
         return;
       }
     }
@@ -387,7 +386,7 @@ function usePaginate(roomTimeline, readEventStore, forceUpdateLimit) {
         forceUpdateLimit();
       } else if (roomTimeline.canPaginateBackward()) {
         // paginate from server.
-        roomTimeline.paginateTimeline(true, PAG_LIMIT);
+        await roomTimeline.paginateTimeline(true, PAG_LIMIT);
       }
     }
   }, [roomTimeline]);
index b6800ab199f6a6922eecdf7fce89582cfb4b3168..b6a5c146173e74c0473817dd6e2f06deb22f1b04 100644 (file)
@@ -90,7 +90,7 @@ class RoomTimeline extends EventEmitter {
   }
 
   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);
     return tm.getPaginationToken('b') !== null;
   }
@@ -173,26 +173,25 @@ class RoomTimeline extends EventEmitter {
       : getLastLinkedTimeline(this.activeTimeline);
 
     if (timelineToPaginate.getPaginationToken(backwards ? 'b' : 'f') === null) {
+      this.emit(cons.events.roomTimeline.PAGINATED, backwards, 0);
       this.isOngoingPagination = false;
-      this.emit(cons.events.roomTimeline.PAGINATED, backwards, 0, false);
       return false;
     }
 
     const oldSize = this.timeline.length;
     try {
-      const canPaginateMore = await this.matrixClient
-        .paginateEventTimeline(timelineToPaginate, { backwards, limit });
+      await this.matrixClient.paginateEventTimeline(timelineToPaginate, { backwards, limit });
 
       if (this.isEncrypted()) await this.decryptAllEventsOfTimeline(this.activeTimeline);
       this._populateTimelines();
 
       const loaded = this.timeline.length - oldSize;
+      this.emit(cons.events.roomTimeline.PAGINATED, backwards, loaded);
       this.isOngoingPagination = false;
-      this.emit(cons.events.roomTimeline.PAGINATED, backwards, loaded, canPaginateMore);
       return true;
     } catch {
+      this.emit(cons.events.roomTimeline.PAGINATED, backwards, 0);
       this.isOngoingPagination = false;
-      this.emit(cons.events.roomTimeline.PAGINATED, backwards, 0, true);
       return false;
     }
   }