diff options
Diffstat (limited to 'src/state')
-rw-r--r-- | src/state/models/feeds/posts.ts | 63 | ||||
-rw-r--r-- | src/state/models/ui/preferences.ts | 47 |
2 files changed, 59 insertions, 51 deletions
diff --git a/src/state/models/feeds/posts.ts b/src/state/models/feeds/posts.ts index d4e62533e..bb619147f 100644 --- a/src/state/models/feeds/posts.ts +++ b/src/state/models/feeds/posts.ts @@ -139,53 +139,6 @@ export class PostsFeedModel { this.tuner.reset() } - get feedTuners() { - const areRepliesEnabled = this.rootStore.preferences.homeFeedRepliesEnabled - const areRepliesByFollowedOnlyEnabled = - this.rootStore.preferences.homeFeedRepliesByFollowedOnlyEnabled - const repliesThreshold = this.rootStore.preferences.homeFeedRepliesThreshold - const areRepostsEnabled = this.rootStore.preferences.homeFeedRepostsEnabled - const areQuotePostsEnabled = - this.rootStore.preferences.homeFeedQuotePostsEnabled - - if (this.feedType === 'custom') { - return [ - FeedTuner.dedupReposts, - FeedTuner.preferredLangOnly( - this.rootStore.preferences.contentLanguages, - ), - ] - } - if (this.feedType === 'home' || this.feedType === 'following') { - const feedTuners = [] - - if (areRepostsEnabled) { - feedTuners.push(FeedTuner.dedupReposts) - } else { - feedTuners.push(FeedTuner.removeReposts) - } - - if (areRepliesEnabled) { - feedTuners.push( - FeedTuner.thresholdRepliesOnly({ - userDid: this.rootStore.session.data?.did || '', - minLikes: repliesThreshold, - followedOnly: areRepliesByFollowedOnlyEnabled, - }), - ) - } else { - feedTuners.push(FeedTuner.removeReplies) - } - - if (!areQuotePostsEnabled) { - feedTuners.push(FeedTuner.removeQuotePosts) - } - - return feedTuners - } - return [] - } - /** * Load for first render */ @@ -275,9 +228,14 @@ export class PostsFeedModel { } const post = await this.api.peekLatest() if (post) { - const slices = this.tuner.tune([post], this.feedTuners, { - dryRun: true, - }) + const slices = this.tuner.tune( + [post], + this.rootStore.preferences.getFeedTuners(this.feedType), + { + dryRun: true, + maintainOrder: true, + }, + ) if (slices[0]) { const sliceModel = new PostsFeedSliceModel(this.rootStore, slices[0]) if (sliceModel.moderation.content.filter) { @@ -363,7 +321,10 @@ export class PostsFeedModel { const slices = this.options.isSimpleFeed ? res.feed.map(item => new FeedViewPostsSlice([item])) - : this.tuner.tune(res.feed, this.feedTuners) + : this.tuner.tune( + res.feed, + this.rootStore.preferences.getFeedTuners(this.feedType), + ) const toAppend: PostsFeedSliceModel[] = [] for (const slice of slices) { diff --git a/src/state/models/ui/preferences.ts b/src/state/models/ui/preferences.ts index 5c6ea230b..5e07685ca 100644 --- a/src/state/models/ui/preferences.ts +++ b/src/state/models/ui/preferences.ts @@ -8,6 +8,7 @@ import {ModerationOpts} from '@atproto/api' import {DEFAULT_FEEDS} from 'lib/constants' import {deviceLocales} from 'platform/detection' import {getAge} from 'lib/strings/time' +import {FeedTuner} from 'lib/api/feed-manip' import {LANGUAGES} from '../../../locale/languages' // TEMP we need to permanently convert 'show' to 'ignore', for now we manually convert -prf @@ -540,6 +541,52 @@ export class PreferencesModel { toggleRequireAltTextEnabled() { this.requireAltTextEnabled = !this.requireAltTextEnabled } + + getFeedTuners( + feedType: 'home' | 'following' | 'author' | 'custom' | 'likes', + ) { + const areRepliesEnabled = this.homeFeedRepliesEnabled + const areRepliesByFollowedOnlyEnabled = + this.homeFeedRepliesByFollowedOnlyEnabled + const repliesThreshold = this.homeFeedRepliesThreshold + const areRepostsEnabled = this.homeFeedRepostsEnabled + const areQuotePostsEnabled = this.homeFeedQuotePostsEnabled + + if (feedType === 'custom') { + return [ + FeedTuner.dedupReposts, + FeedTuner.preferredLangOnly(this.contentLanguages), + ] + } + if (feedType === 'home' || feedType === 'following') { + const feedTuners = [] + + if (areRepostsEnabled) { + feedTuners.push(FeedTuner.dedupReposts) + } else { + feedTuners.push(FeedTuner.removeReposts) + } + + if (areRepliesEnabled) { + feedTuners.push( + FeedTuner.thresholdRepliesOnly({ + userDid: this.rootStore.session.data?.did || '', + minLikes: repliesThreshold, + followedOnly: areRepliesByFollowedOnlyEnabled, + }), + ) + } else { + feedTuners.push(FeedTuner.removeReplies) + } + + if (!areQuotePostsEnabled) { + feedTuners.push(FeedTuner.removeQuotePosts) + } + + return feedTuners + } + return [] + } } // TEMP we need to permanently convert 'show' to 'ignore', for now we manually convert -prf |