diff --git a/server/lib/matrix-utils/fetch-accessible-rooms.js b/server/lib/matrix-utils/fetch-accessible-rooms.js index 04184db..2b39b07 100644 --- a/server/lib/matrix-utils/fetch-accessible-rooms.js +++ b/server/lib/matrix-utils/fetch-accessible-rooms.js @@ -61,6 +61,11 @@ async function fetchAccessibleRooms( assert(accessToken); assert([DIRECTION.forward, DIRECTION.backward].includes(direction), 'direction must be [f|b]'); + console.log( + `fetchAccessibleRooms searchTerm=${searchTerm} direction=${direction} paginationToken=${paginationToken} limit=${limit}\n` + + '--------------------------------' + ); + // Based off of the matrix.org room directory, only 42% of rooms are world_readable, // which means our best bet to fill up the results to the limit is to request 2.5 times as many. const bulkPaginationLimit = Math.ceil(2.5 * limit); @@ -95,6 +100,14 @@ async function fetchAccessibleRooms( lastLoopToken = loopToken; lastResponse = publicRoomsRes; + console.log( + `publicRoomsRes currentRequestCount=${currentRequestCount} direction=${direction}, publicRoomsRes=${JSON.stringify( + publicRoomsRes.chunk.map((room) => room.name), + null, + 2 + )}` + ); + if (currentRequestCount === 0) { firstResponse = publicRoomsRes; } @@ -106,11 +119,21 @@ async function fetchAccessibleRooms( loopToken = direction === DIRECTION.forward ? publicRoomsRes.next_batch : publicRoomsRes.prev_batch; + const fetchedRooms = publicRoomsRes.chunk; + const fetchedRoomsInDirection = + direction === DIRECTION.forward ? fetchedRooms : fetchedRooms.reverse(); + // We only want to see world_readable rooms in the archive let index = 0; - for (let room of publicRoomsRes.chunk) { + for (let room of fetchedRoomsInDirection) { if (room.world_readable) { - accessibleRooms.push(room); + if (direction === DIRECTION.forward) { + accessibleRooms.push(room); + } else if (direction === DIRECTION.backward) { + accessibleRooms.unshift(room); + } else { + throw new Error(`Invalid direction: ${direction}`); + } } if (accessibleRooms.length === limit && !continuationIndex) { @@ -158,6 +181,14 @@ async function fetchAccessibleRooms( abortSignal, }); + console.log( + `publicRoomsRes back-track direction=${direction}, publicRoomsRes=${JSON.stringify( + publicRoomsRes.chunk.map((room) => room.name), + null, + 2 + )}` + ); + // console.log('firstResponse', firstResponse.prev_batch, firstResponse.next_batch); // console.log('back-track publicRoomsRes', publicRoomsRes.prev_batch, publicRoomsRes.next_batch); @@ -182,6 +213,14 @@ async function fetchAccessibleRooms( } } + console.log( + `return accessibleRooms=${JSON.stringify( + accessibleRooms.map((room) => room.name), + null, + 2 + )}` + ); + return { rooms: accessibleRooms, prevPaginationToken,