More custom-feed behavior fixes [APP-678] (#831)
* Remove extraneous custom-feed health check * Fixes to custom feed preference sync * Fix lint * Remove dead code (client-side suggested posts constructor) * Enforce the feed-fetch limit in the client if the generator fails to observe the parameter * Bump the number of items fetched in the multifeed per feed from 5 to 10 * Reset the currently active feed when the pinned feeds change * Some fixes to icons * Add a prompt to load latest to the multifeed * Remove debug
This commit is contained in:
parent
e9c84a192b
commit
3217c7ff32
8 changed files with 88 additions and 186 deletions
|
@ -6,7 +6,7 @@ import {CustomFeedModel} from './custom-feed'
|
|||
import {PostsFeedModel} from './posts'
|
||||
import {PostsFeedSliceModel} from './post'
|
||||
|
||||
const FEED_PAGE_SIZE = 5
|
||||
const FEED_PAGE_SIZE = 10
|
||||
const FEEDS_PAGE_SIZE = 3
|
||||
|
||||
export type MultiFeedItem =
|
||||
|
@ -147,6 +147,15 @@ export class PostsMultiFeedModel {
|
|||
await this.loadMore(true)
|
||||
}
|
||||
|
||||
/**
|
||||
* Load latest in the active feeds
|
||||
*/
|
||||
loadLatest() {
|
||||
for (const feed of this.feeds) {
|
||||
/* dont await */ feed.refresh()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load more posts to the end of the feed
|
||||
*/
|
||||
|
|
|
@ -6,15 +6,8 @@ import {
|
|||
} from '@atproto/api'
|
||||
import AwaitLock from 'await-lock'
|
||||
import {bundleAsync} from 'lib/async/bundle'
|
||||
import sampleSize from 'lodash.samplesize'
|
||||
import {RootStoreModel} from '../root-store'
|
||||
import {cleanError} from 'lib/strings/errors'
|
||||
import {SUGGESTED_FOLLOWS} from 'lib/constants'
|
||||
import {
|
||||
getCombinedCursors,
|
||||
getMultipleAuthorsPosts,
|
||||
mergePosts,
|
||||
} from 'lib/api/build-suggested-posts'
|
||||
import {FeedTuner, FeedViewPostsSlice} from 'lib/api/feed-manip'
|
||||
import {PostsFeedSliceModel} from './post'
|
||||
|
||||
|
@ -49,7 +42,7 @@ export class PostsFeedModel {
|
|||
|
||||
constructor(
|
||||
public rootStore: RootStoreModel,
|
||||
public feedType: 'home' | 'author' | 'suggested' | 'custom',
|
||||
public feedType: 'home' | 'author' | 'custom',
|
||||
params:
|
||||
| GetTimeline.QueryParams
|
||||
| GetAuthorFeed.QueryParams
|
||||
|
@ -121,14 +114,6 @@ export class PostsFeedModel {
|
|||
this.tuner.reset()
|
||||
}
|
||||
|
||||
switchFeedType(feedType: 'home' | 'suggested') {
|
||||
if (this.feedType === feedType) {
|
||||
return
|
||||
}
|
||||
this.feedType = feedType
|
||||
return this.setup()
|
||||
}
|
||||
|
||||
get feedTuners() {
|
||||
if (this.feedType === 'custom') {
|
||||
return [
|
||||
|
@ -263,7 +248,7 @@ export class PostsFeedModel {
|
|||
* Check if new posts are available
|
||||
*/
|
||||
async checkForLatest() {
|
||||
if (this.hasNewLatest || this.feedType === 'suggested') {
|
||||
if (this.hasNewLatest) {
|
||||
return
|
||||
}
|
||||
const res = await this._getFeed({limit: this.pageSize})
|
||||
|
@ -415,30 +400,20 @@ export class PostsFeedModel {
|
|||
GetTimeline.Response | GetAuthorFeed.Response | GetCustomFeed.Response
|
||||
> {
|
||||
params = Object.assign({}, this.params, params)
|
||||
if (this.feedType === 'suggested') {
|
||||
const responses = await getMultipleAuthorsPosts(
|
||||
this.rootStore,
|
||||
sampleSize(SUGGESTED_FOLLOWS(String(this.rootStore.agent.service)), 20),
|
||||
params.cursor,
|
||||
20,
|
||||
)
|
||||
const combinedCursor = getCombinedCursors(responses)
|
||||
const finalData = mergePosts(responses, {bestOfOnly: true})
|
||||
const lastHeaders = responses[responses.length - 1].headers
|
||||
return {
|
||||
success: true,
|
||||
data: {
|
||||
feed: finalData,
|
||||
cursor: combinedCursor,
|
||||
},
|
||||
headers: lastHeaders,
|
||||
}
|
||||
} else if (this.feedType === 'home') {
|
||||
if (this.feedType === 'home') {
|
||||
return this.rootStore.agent.getTimeline(params as GetTimeline.QueryParams)
|
||||
} else if (this.feedType === 'custom') {
|
||||
return this.rootStore.agent.app.bsky.feed.getFeed(
|
||||
const res = await this.rootStore.agent.app.bsky.feed.getFeed(
|
||||
params as GetCustomFeed.QueryParams,
|
||||
)
|
||||
// NOTE
|
||||
// some custom feeds fail to enforce the pagination limit
|
||||
// so we manually truncate here
|
||||
// -prf
|
||||
if (params.limit && res.data.feed.length > params.limit) {
|
||||
res.data.feed = res.data.feed.slice(0, params.limit)
|
||||
}
|
||||
return res
|
||||
} else {
|
||||
return this.rootStore.agent.getAuthorFeed(
|
||||
params as GetAuthorFeed.QueryParams,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue