Update to desired post-feed usage

This commit is contained in:
Eric Bailey
2024-04-25 10:43:05 -05:00
parent 6aded4f257
commit 38aa11adea
+38 -17
View File
@@ -4,6 +4,7 @@ import {
AppBskyFeedDefs, AppBskyFeedDefs,
AppBskyFeedPost, AppBskyFeedPost,
AtUri, AtUri,
BskyAgent,
ModerationDecision, ModerationDecision,
} from '@atproto/api' } from '@atproto/api'
import { import {
@@ -19,7 +20,7 @@ import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
import {logger} from '#/logger' import {logger} from '#/logger'
import {STALE} from '#/state/queries' import {STALE} from '#/state/queries'
import {DEFAULT_LOGGED_OUT_PREFERENCES} from '#/state/queries/preferences/const' import {DEFAULT_LOGGED_OUT_PREFERENCES} from '#/state/queries/preferences/const'
import {getAgent} from '#/state/session' import {getAgent, useSession} from '#/state/session'
import {AuthorFeedAPI} from 'lib/api/feed/author' import {AuthorFeedAPI} from 'lib/api/feed/author'
import {CustomFeedAPI} from 'lib/api/feed/custom' import {CustomFeedAPI} from 'lib/api/feed/custom'
import {FollowingFeedAPI} from 'lib/api/feed/following' import {FollowingFeedAPI} from 'lib/api/feed/following'
@@ -104,6 +105,7 @@ export function usePostFeedQuery(
const queryClient = useQueryClient() const queryClient = useQueryClient()
const feedTuners = useFeedTuners(feedDesc) const feedTuners = useFeedTuners(feedDesc)
const moderationOpts = useModerationOpts() const moderationOpts = useModerationOpts()
const {hasSession} = useSession()
const enabled = opts?.enabled !== false && Boolean(moderationOpts) const enabled = opts?.enabled !== false && Boolean(moderationOpts)
const lastRun = useRef<{ const lastRun = useRef<{
data: InfiniteData<FeedPageUnselected> data: InfiniteData<FeedPageUnselected>
@@ -135,11 +137,17 @@ export function usePostFeedQuery(
queryKey: RQKEY(feedDesc, params), queryKey: RQKEY(feedDesc, params),
async queryFn({pageParam}: {pageParam: RQPageParam}) { async queryFn({pageParam}: {pageParam: RQPageParam}) {
logger.debug('usePostFeedQuery', {feedDesc, cursor: pageParam?.cursor}) logger.debug('usePostFeedQuery', {feedDesc, cursor: pageParam?.cursor})
const agent = getAgent()
const {api, cursor} = pageParam const {api, cursor} = pageParam
? pageParam ? pageParam
: { : {
api: createApi(feedDesc, params || {}, feedTuners), api: createApi({
feedDesc,
feedParams: params || {},
feedTuners,
agent,
}),
cursor: undefined, cursor: undefined,
} }
@@ -153,7 +161,7 @@ export function usePostFeedQuery(
* moderations happen later, which results in some posts being shown and * moderations happen later, which results in some posts being shown and
* some not. * some not.
*/ */
if (!getAgent().session) { if (!hasSession) {
assertSomePostsPassModeration(res.feed) assertSomePostsPassModeration(res.feed)
} }
@@ -365,34 +373,47 @@ export async function pollLatest(page: FeedPage | undefined) {
return false return false
} }
function createApi( function createApi({
feedDesc: FeedDescriptor, agent,
params: FeedParams, feedDesc,
feedTuners: FeedTunerFn[], feedParams,
) { feedTuners,
}: {
agent?: BskyAgent
feedDesc: FeedDescriptor
feedParams: FeedParams
feedTuners: FeedTunerFn[]
}) {
if (feedDesc === 'home') { if (feedDesc === 'home') {
if (params.mergeFeedEnabled) { if (feedParams.mergeFeedEnabled) {
return new MergeFeedAPI(params, feedTuners) return new MergeFeedAPI({
agent,
feedParams,
feedTuners,
})
} else { } else {
return new HomeFeedAPI() return new HomeFeedAPI({agent})
} }
} else if (feedDesc === 'following') { } else if (feedDesc === 'following') {
return new FollowingFeedAPI() return new FollowingFeedAPI({agent})
} else if (feedDesc.startsWith('author')) { } else if (feedDesc.startsWith('author')) {
const [_, actor, filter] = feedDesc.split('|') const [_, actor, filter] = feedDesc.split('|')
return new AuthorFeedAPI({actor, filter}) return new AuthorFeedAPI({agent, actor, filter})
} else if (feedDesc.startsWith('likes')) { } else if (feedDesc.startsWith('likes')) {
const [_, actor] = feedDesc.split('|') const [_, actor] = feedDesc.split('|')
return new LikesFeedAPI({actor}) return new LikesFeedAPI({agent, actor})
} else if (feedDesc.startsWith('feedgen')) { } else if (feedDesc.startsWith('feedgen')) {
const [_, feed] = feedDesc.split('|') const [_, feed] = feedDesc.split('|')
return new CustomFeedAPI({feed}) return new CustomFeedAPI({
agent,
feedParams: {feed},
})
} else if (feedDesc.startsWith('list')) { } else if (feedDesc.startsWith('list')) {
const [_, list] = feedDesc.split('|') const [_, list] = feedDesc.split('|')
return new ListFeedAPI({list}) return new ListFeedAPI({agent, list})
} else { } else {
// shouldnt happen // shouldnt happen
return new FollowingFeedAPI() return new FollowingFeedAPI({agent})
} }
} }