about summary refs log tree commit diff
path: root/src/state/preferences/feed-tuners.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/preferences/feed-tuners.tsx')
-rw-r--r--src/state/preferences/feed-tuners.tsx52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/state/preferences/feed-tuners.tsx b/src/state/preferences/feed-tuners.tsx
new file mode 100644
index 000000000..c4954d20a
--- /dev/null
+++ b/src/state/preferences/feed-tuners.tsx
@@ -0,0 +1,52 @@
+import {useMemo} from 'react'
+import {FeedTuner} from '#/lib/api/feed-manip'
+import {FeedDescriptor} from '../queries/post-feed'
+import {useLanguagePrefs} from './languages'
+import {usePreferencesQuery} from '../queries/preferences'
+import {useSession} from '../session'
+
+export function useFeedTuners(feedDesc: FeedDescriptor) {
+  const langPrefs = useLanguagePrefs()
+  const {data: preferences} = usePreferencesQuery()
+  const {currentAccount} = useSession()
+
+  return useMemo(() => {
+    if (feedDesc.startsWith('feedgen')) {
+      return [
+        FeedTuner.dedupReposts,
+        FeedTuner.preferredLangOnly(langPrefs.contentLanguages),
+      ]
+    }
+    if (feedDesc.startsWith('list')) {
+      return [FeedTuner.dedupReposts]
+    }
+    if (feedDesc === 'home' || feedDesc === 'following') {
+      const feedTuners = []
+
+      if (preferences?.feedViewPrefs.hideReposts) {
+        feedTuners.push(FeedTuner.removeReposts)
+      } else {
+        feedTuners.push(FeedTuner.dedupReposts)
+      }
+
+      if (preferences?.feedViewPrefs.hideReplies) {
+        feedTuners.push(FeedTuner.removeReplies)
+      } else {
+        feedTuners.push(
+          FeedTuner.thresholdRepliesOnly({
+            userDid: currentAccount?.did || '',
+            minLikes: preferences?.feedViewPrefs.hideRepliesByLikeCount || 0,
+            followedOnly: !!preferences?.feedViewPrefs.hideRepliesByUnfollowed,
+          }),
+        )
+      }
+
+      if (preferences?.feedViewPrefs.hideQuotePosts) {
+        feedTuners.push(FeedTuner.removeQuotePosts)
+      }
+
+      return feedTuners
+    }
+    return []
+  }, [feedDesc, currentAccount, preferences, langPrefs])
+}