Add feed tuner to remove muted threads (#8773)

This commit is contained in:
kindgracekind
2025-08-04 10:27:27 -05:00
committed by GitHub
parent 9aa35e9fbb
commit b32568260f
2 changed files with 22 additions and 2 deletions
+16
View File
@@ -41,6 +41,7 @@ export class FeedViewPostsSlice {
isIncompleteThread: boolean isIncompleteThread: boolean
isFallbackMarker: boolean isFallbackMarker: boolean
isOrphan: boolean isOrphan: boolean
isThreadMuted: boolean
rootUri: string rootUri: string
feedPostUri: string feedPostUri: string
@@ -50,6 +51,7 @@ export class FeedViewPostsSlice {
this.isIncompleteThread = false this.isIncompleteThread = false
this.isFallbackMarker = false this.isFallbackMarker = false
this.isOrphan = false this.isOrphan = false
this.isThreadMuted = post.viewer?.threadMuted ?? false
this.feedPostUri = post.uri this.feedPostUri = post.uri
if (AppBskyFeedDefs.isPostView(reply?.root)) { if (AppBskyFeedDefs.isPostView(reply?.root)) {
this.rootUri = reply.root.uri this.rootUri = reply.root.uri
@@ -361,6 +363,20 @@ export class FeedTuner {
return slices return slices
} }
static removeMutedThreads(
tuner: FeedTuner,
slices: FeedViewPostsSlice[],
_dryRun: boolean,
) {
for (let i = 0; i < slices.length; i++) {
if (slices[i].isThreadMuted) {
slices.splice(i, 1)
i--
}
}
return slices
}
static dedupThreads( static dedupThreads(
tuner: FeedTuner, tuner: FeedTuner,
slices: FeedViewPostsSlice[], slices: FeedViewPostsSlice[],
+6 -2
View File
@@ -1,7 +1,7 @@
import {useMemo} from 'react' import {useMemo} from 'react'
import {FeedTuner} from '#/lib/api/feed-manip' import {FeedTuner} from '#/lib/api/feed-manip'
import {FeedDescriptor} from '../queries/post-feed' import {type FeedDescriptor} from '../queries/post-feed'
import {usePreferencesQuery} from '../queries/preferences' import {usePreferencesQuery} from '../queries/preferences'
import {useSession} from '../session' import {useSession} from '../session'
import {useLanguagePrefs} from './languages' import {useLanguagePrefs} from './languages'
@@ -19,7 +19,10 @@ export function useFeedTuners(feedDesc: FeedDescriptor) {
} }
} }
if (feedDesc.startsWith('feedgen')) { if (feedDesc.startsWith('feedgen')) {
return [FeedTuner.preferredLangOnly(langPrefs.contentLanguages)] return [
FeedTuner.preferredLangOnly(langPrefs.contentLanguages),
FeedTuner.removeMutedThreads,
]
} }
if (feedDesc === 'following' || feedDesc.startsWith('list')) { if (feedDesc === 'following' || feedDesc.startsWith('list')) {
const feedTuners = [FeedTuner.removeOrphans] const feedTuners = [FeedTuner.removeOrphans]
@@ -40,6 +43,7 @@ export function useFeedTuners(feedDesc: FeedDescriptor) {
feedTuners.push(FeedTuner.removeQuotePosts) feedTuners.push(FeedTuner.removeQuotePosts)
} }
feedTuners.push(FeedTuner.dedupThreads) feedTuners.push(FeedTuner.dedupThreads)
feedTuners.push(FeedTuner.removeMutedThreads)
return feedTuners return feedTuners
} }