about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authordan <dan.abramov@gmail.com>2024-08-01 22:05:40 +0100
committerGitHub <noreply@github.com>2024-08-01 22:05:40 +0100
commit7f292abf51a4cd4e25702c33a3ed75f25be5b3a3 (patch)
treebe64113565041e0676fd6569551304a0e96bb1b3 /src
parentf056cb646e22d350bda79be8e8bfe808307e6516 (diff)
downloadvoidsky-7f292abf51a4cd4e25702c33a3ed75f25be5b3a3.tar.zst
Always limit Following replies to the people you follow (#4868)
* Limit feed replies to people you follow

* Remove dead code
Diffstat (limited to 'src')
-rw-r--r--src/lib/api/feed-manip.ts14
-rw-r--r--src/state/preferences/feed-tuners.tsx9
-rw-r--r--src/state/queries/preferences/const.ts4
-rw-r--r--src/view/screens/PreferencesFollowingFeed.tsx107
4 files changed, 8 insertions, 126 deletions
diff --git a/src/lib/api/feed-manip.ts b/src/lib/api/feed-manip.ts
index 226dd17c4..01f05685d 100644
--- a/src/lib/api/feed-manip.ts
+++ b/src/lib/api/feed-manip.ts
@@ -299,15 +299,7 @@ export class FeedTuner {
     return slices
   }
 
-  static thresholdRepliesOnly({
-    userDid,
-    minLikes,
-    followedOnly,
-  }: {
-    userDid: string
-    minLikes: number
-    followedOnly: boolean
-  }) {
+  static followedRepliesOnly({userDid}: {userDid: string}) {
     return (
       tuner: FeedTuner,
       slices: FeedViewPostsSlice[],
@@ -322,9 +314,7 @@ export class FeedTuner {
           if (slice.isRepost) {
             continue
           }
-          if (slice.likeCount < minLikes) {
-            slices.splice(i, 1)
-          } else if (followedOnly && !slice.isFollowingAllAuthors(userDid)) {
+          if (!slice.isFollowingAllAuthors(userDid)) {
             slices.splice(i, 1)
           }
         }
diff --git a/src/state/preferences/feed-tuners.tsx b/src/state/preferences/feed-tuners.tsx
index 7d4451513..d816bde64 100644
--- a/src/state/preferences/feed-tuners.tsx
+++ b/src/state/preferences/feed-tuners.tsx
@@ -38,11 +38,8 @@ export function useFeedTuners(feedDesc: FeedDescriptor) {
           feedTuners.push(FeedTuner.removeReplies)
         } else {
           feedTuners.push(
-            FeedTuner.thresholdRepliesOnly({
+            FeedTuner.followedRepliesOnly({
               userDid: currentAccount?.did || '',
-              minLikes: preferences?.feedViewPrefs.hideRepliesByLikeCount || 0,
-              followedOnly:
-                !!preferences?.feedViewPrefs.hideRepliesByUnfollowed,
             }),
           )
         }
@@ -66,10 +63,8 @@ export function useFeedTuners(feedDesc: FeedDescriptor) {
         feedTuners.push(FeedTuner.removeReplies)
       } else {
         feedTuners.push(
-          FeedTuner.thresholdRepliesOnly({
+          FeedTuner.followedRepliesOnly({
             userDid: currentAccount?.did || '',
-            minLikes: preferences?.feedViewPrefs.hideRepliesByLikeCount || 0,
-            followedOnly: !!preferences?.feedViewPrefs.hideRepliesByUnfollowed,
           }),
         )
       }
diff --git a/src/state/queries/preferences/const.ts b/src/state/queries/preferences/const.ts
index 2a8c51165..1ae7d2068 100644
--- a/src/state/queries/preferences/const.ts
+++ b/src/state/queries/preferences/const.ts
@@ -7,8 +7,8 @@ import {
 export const DEFAULT_HOME_FEED_PREFS: UsePreferencesQueryResponse['feedViewPrefs'] =
   {
     hideReplies: false,
-    hideRepliesByUnfollowed: true,
-    hideRepliesByLikeCount: 0,
+    hideRepliesByUnfollowed: true, // Legacy, ignored
+    hideRepliesByLikeCount: 0, // Legacy, ignored
     hideReposts: false,
     hideQuotePosts: false,
     lab_mergeFeedEnabled: false, // experimental
diff --git a/src/view/screens/PreferencesFollowingFeed.tsx b/src/view/screens/PreferencesFollowingFeed.tsx
index daa2aba85..8aa4221e6 100644
--- a/src/view/screens/PreferencesFollowingFeed.tsx
+++ b/src/view/screens/PreferencesFollowingFeed.tsx
@@ -1,16 +1,13 @@
-import React, {useState} from 'react'
+import React from 'react'
 import {StyleSheet, View} from 'react-native'
 import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {msg, Plural, Trans} from '@lingui/macro'
+import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
-import {Slider} from '@miblanchard/react-native-slider'
-import debounce from 'lodash.debounce'
 
 import {usePalette} from '#/lib/hooks/usePalette'
 import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
 import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
 import {colors, s} from '#/lib/styles'
-import {isWeb} from '#/platform/detection'
 import {
   usePreferencesQuery,
   useSetFeedViewPreferencesMutation,
@@ -21,61 +18,6 @@ import {Text} from '#/view/com/util/text/Text'
 import {ScrollView} from '#/view/com/util/Views'
 import {atoms as a} from '#/alf'
 
-function RepliesThresholdInput({
-  enabled,
-  initialValue,
-}: {
-  enabled: boolean
-  initialValue: number
-}) {
-  const pal = usePalette('default')
-  const [value, setValue] = useState(initialValue)
-  const {mutate: setFeedViewPref} = useSetFeedViewPreferencesMutation()
-  const preValue = React.useRef(initialValue)
-  const save = React.useMemo(
-    () =>
-      debounce(
-        threshold =>
-          setFeedViewPref({
-            hideRepliesByLikeCount: threshold,
-          }),
-        500,
-      ), // debouce for 500ms
-    [setFeedViewPref],
-  )
-
-  return (
-    <View style={[!enabled && styles.dimmed]}>
-      <Slider
-        value={value}
-        onValueChange={(v: number | number[]) => {
-          let threshold = Array.isArray(v) ? v[0] : v
-          if (threshold > preValue.current) threshold = Math.floor(threshold)
-          else threshold = Math.ceil(threshold)
-
-          preValue.current = threshold
-
-          setValue(threshold)
-          save(threshold)
-        }}
-        minimumValue={0}
-        maximumValue={25}
-        containerStyle={isWeb ? undefined : s.flex1}
-        disabled={!enabled}
-        thumbTintColor={colors.blue3}
-      />
-      <Text type="xs" style={pal.text}>
-        <Plural
-          value={value}
-          _0="Show all replies"
-          one="Show replies with at least # like"
-          other="Show replies with at least # likes"
-        />
-      </Text>
-    </View>
-  )
-}
-
 type Props = NativeStackScreenProps<
   CommonNavigatorParams,
   'PreferencesFollowingFeed'
@@ -137,51 +79,6 @@ export function PreferencesFollowingFeed({}: Props) {
               }
             />
           </View>
-          <View
-            style={[pal.viewLight, styles.card, !showReplies && styles.dimmed]}>
-            <Text type="title-sm" style={[pal.text, s.pb5]}>
-              <Trans>Reply Filters</Trans>
-            </Text>
-            <Text style={[pal.text, s.pb10]}>
-              <Trans>
-                Enable this setting to only see replies between people you
-                follow.
-              </Trans>
-            </Text>
-            <ToggleButton
-              type="default-light"
-              label={_(msg`Followed users only`)}
-              isSelected={Boolean(
-                variables?.hideRepliesByUnfollowed ??
-                  preferences?.feedViewPrefs?.hideRepliesByUnfollowed,
-              )}
-              onPress={
-                showReplies
-                  ? () =>
-                      setFeedViewPref({
-                        hideRepliesByUnfollowed: !(
-                          variables?.hideRepliesByUnfollowed ??
-                          preferences?.feedViewPrefs?.hideRepliesByUnfollowed
-                        ),
-                      })
-                  : undefined
-              }
-              style={[s.mb10]}
-            />
-            <Text style={[pal.text]}>
-              <Trans>
-                Adjust the number of likes a reply must have to be shown in your
-                feed.
-              </Trans>
-            </Text>
-            {preferences && (
-              <RepliesThresholdInput
-                enabled={showReplies}
-                initialValue={preferences.feedViewPrefs.hideRepliesByLikeCount}
-              />
-            )}
-          </View>
-
           <View style={[pal.viewLight, styles.card]}>
             <Text type="title-sm" style={[pal.text, s.pb5]}>
               <Trans>Show Reposts</Trans>