diff --git a/packages/nicolium/src/queries/timelines/use-timeline.ts b/packages/nicolium/src/queries/timelines/use-timeline.ts index a9d6b5587..5ee5aada7 100644 --- a/packages/nicolium/src/queries/timelines/use-timeline.ts +++ b/packages/nicolium/src/queries/timelines/use-timeline.ts @@ -60,7 +60,7 @@ const useTimeline = ( const poll = async () => { const sinceId = - useTimelinesStore.getState().timelines[timelineId]?.queuedEntries[0]?.id ?? + useTimelinesStore.getState().timelines[timelineId]?.newestStatusId ?? newestStatusId.current; if (!sinceId) return; diff --git a/packages/nicolium/src/stores/timelines.ts b/packages/nicolium/src/stores/timelines.ts index d5c97faaf..28c42e3e0 100644 --- a/packages/nicolium/src/stores/timelines.ts +++ b/packages/nicolium/src/stores/timelines.ts @@ -46,6 +46,7 @@ interface TimelineData { isError: boolean; hasNextPage: boolean; oldestStatusId?: string; + newestStatusId?: string; } interface State { @@ -202,6 +203,9 @@ const useTimelinesStore = create()( } timeline.isPending = false; timeline.isFetching = false; + if ((initialFetch || restoring) && statuses.length > 0) { + timeline.newestStatusId = statuses[0].id; + } if (typeof hasMore === 'boolean') { timeline.hasNextPage = hasMore; const oldestStatus = statuses.at(-1); @@ -220,6 +224,9 @@ const useTimelinesStore = create()( ) return; + if (!timeline.newestStatusId || timeline.newestStatusId.localeCompare(status.id) < 0) { + timeline.newestStatusId = status.id; + } timeline.queuedEntries.unshift(status); timeline.queuedCount += 1; timeline.queuedAccountIds.unshift((status.reblog || status).account.id); @@ -269,6 +276,7 @@ const useTimelinesStore = create()( const processedEntries = processPage(timeline.queuedEntries); + timeline.newestStatusId = timeline.queuedEntries.toSorted().at(-1)!.id; timeline.entries.unshift(...processedEntries); timeline.queuedEntries = []; timeline.queuedCount = 0;