forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1import {useMemo} from 'react'
2
3import {FeedTuner} from '#/lib/api/feed-manip'
4import {type FeedDescriptor} from '../queries/post-feed'
5import {usePreferencesQuery} from '../queries/preferences'
6import {useSession} from '../session'
7import {useLanguagePrefs} from './languages'
8
9export function useFeedTuners(feedDesc: FeedDescriptor) {
10 const langPrefs = useLanguagePrefs()
11 const {data: preferences} = usePreferencesQuery()
12 const {currentAccount} = useSession()
13
14 return useMemo(() => {
15 if (feedDesc.startsWith('author')) {
16 if (feedDesc.endsWith('|posts_with_replies')) {
17 // TODO: Do this on the server instead.
18 return [FeedTuner.removeReposts]
19 }
20 }
21 if (feedDesc.startsWith('feedgen')) {
22 return [
23 FeedTuner.preferredLangOnly(langPrefs.contentLanguages),
24 FeedTuner.removeMutedThreads,
25 ]
26 }
27 if (feedDesc === 'following' || feedDesc.startsWith('list')) {
28 const feedTuners = [FeedTuner.removeOrphans]
29
30 if (preferences?.feedViewPrefs.hideReposts) {
31 feedTuners.push(FeedTuner.removeReposts)
32 }
33 if (preferences?.feedViewPrefs.hideReplies) {
34 feedTuners.push(FeedTuner.removeReplies)
35 } else {
36 feedTuners.push(
37 FeedTuner.followedRepliesOnly({
38 userDid: currentAccount?.did || '',
39 }),
40 )
41 }
42 if (preferences?.feedViewPrefs.hideQuotePosts) {
43 feedTuners.push(FeedTuner.removeQuotePosts)
44 }
45 feedTuners.push(FeedTuner.dedupThreads)
46 feedTuners.push(FeedTuner.removeMutedThreads)
47
48 return feedTuners
49 }
50 return []
51 }, [feedDesc, currentAccount, preferences, langPrefs])
52}