Grab-bag of post-feed improvements (#2140)

* Sanity check against cases where empty pages may occur

* Use the mergefeed as an emergency fallback to an empty feed

* Check for new posts on focus
zio/stable
Paul Frazee 2023-12-07 16:30:04 -08:00 committed by GitHub
parent 52a0cb8fac
commit 040ce03215
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 24 additions and 6 deletions

View File

@ -29,7 +29,7 @@ export class MergeFeedAPI implements FeedAPI {
this.feedCursor = 0
this.itemCursor = 0
this.sampleCursor = 0
if (this.params.mergeFeedEnabled && this.params.mergeFeedSources) {
if (this.params.mergeFeedSources) {
this.customFeeds = shuffle(
this.params.mergeFeedSources.map(
feedUri => new MergeFeedSource_Custom(feedUri, this.feedTuners),
@ -108,7 +108,10 @@ export class MergeFeedAPI implements FeedAPI {
// this condition establishes the frequency that custom feeds are woven into follows
const shouldSample =
i >= 15 && candidateFeeds.length >= 2 && (i % 4 === 0 || i % 5 === 0)
this.params.mergeFeedEnabled &&
i >= 15 &&
candidateFeeds.length >= 2 &&
(i % 4 === 0 || i % 5 === 0)
if (!canSample && !hasFollows) {
// no data available

View File

@ -91,11 +91,15 @@ export function useNotificationFeedQuery(opts?: {enabled?: boolean}) {
const {isFetching, hasNextPage, data} = query
let count = 0
let numEmpties = 0
for (const page of data?.pages || []) {
if (!page.items.length) {
numEmpties++
}
count += page.items.length
}
if (!isFetching && hasNextPage && count < PAGE_SIZE) {
if (!isFetching && hasNextPage && count < PAGE_SIZE && numEmpties < 3) {
query.fetchNextPage()
}
}, [query])

View File

@ -217,13 +217,17 @@ export function usePostFeedQuery(
const {isFetching, hasNextPage, data} = query
let count = 0
let numEmpties = 0
for (const page of data?.pages || []) {
if (page.slices.length === 0) {
numEmpties++
}
for (const slice of page.slices) {
count += slice.items.length
}
}
if (!isFetching && hasNextPage && count < PAGE_SIZE) {
if (!isFetching && hasNextPage && count < PAGE_SIZE && numEmpties < 3) {
query.fetchNextPage()
}
}, [query])

View File

@ -132,13 +132,20 @@ let Feed = ({
React.useEffect(() => {
// we store the interval handler in a ref to avoid needless
// reassignments of the interval
// reassignments in other effects
checkForNewRef.current = checkForNew
}, [checkForNew])
React.useEffect(() => {
if (enabled && checkForNewRef.current) {
// check for new on enable (aka on focus)
checkForNewRef.current()
}
}, [enabled])
React.useEffect(() => {
if (!pollInterval) {
return
}
// check for new on interval
const i = setInterval(() => checkForNewRef.current?.(), pollInterval)
return () => clearInterval(i)
}, [pollInterval])

View File

@ -175,7 +175,7 @@ function HomeScreenReady({
key="1"
testID="followingFeedPage"
isPageFocused={selectedPageIndex === 0}
feed={homeFeedParams.mergeFeedEnabled ? 'home' : 'following'}
feed="home"
feedParams={homeFeedParams}
renderEmptyState={renderFollowingEmptyState}
renderEndOfFeed={FollowingEndOfFeed}