diff options
author | Eric Bailey <git@esb.lol> | 2023-06-16 14:59:29 -0500 |
---|---|---|
committer | Eric Bailey <git@esb.lol> | 2023-06-16 15:01:43 -0500 |
commit | 896aea98374188ac33ac92e1ed582d5d7f189ac6 (patch) | |
tree | 11543a99ca926d8b83e544b5e12a15e909e983ef /src/lib/api/feed-manip.ts | |
parent | 17e7590bcd36f9ec3433cb2714a9319fac4aeebf (diff) | |
download | voidsky-896aea98374188ac33ac92e1ed582d5d7f189ac6.tar.zst |
feat: add home feed preferences settings modal and tuners
Diffstat (limited to 'src/lib/api/feed-manip.ts')
-rw-r--r-- | src/lib/api/feed-manip.ts | 69 |
1 files changed, 54 insertions, 15 deletions
diff --git a/src/lib/api/feed-manip.ts b/src/lib/api/feed-manip.ts index 3ff156dd6..c39667765 100644 --- a/src/lib/api/feed-manip.ts +++ b/src/lib/api/feed-manip.ts @@ -1,4 +1,9 @@ -import {AppBskyFeedDefs, AppBskyFeedPost} from '@atproto/api' +import { + AppBskyFeedDefs, + AppBskyFeedPost, + AppBskyEmbedRecordWithMedia, + AppBskyEmbedRecord, +} from '@atproto/api' import lande from 'lande' import {hasProp} from 'lib/type-guards' import {LANGUAGES_MAP_CODE2} from '../../locale/languages' @@ -156,6 +161,38 @@ export class FeedTuner { return slices } + static removeReplies(tuner: FeedTuner, slices: FeedViewPostsSlice[]) { + for (let i = slices.length - 1; i >= 0; i--) { + if (slices[i].isReply) { + slices.splice(i, 1) + } + } + return slices + } + + static removeReposts(tuner: FeedTuner, slices: FeedViewPostsSlice[]) { + for (let i = slices.length - 1; i >= 0; i--) { + const reason = slices[i].rootItem.reason + if (AppBskyFeedDefs.isReasonRepost(reason)) { + slices.splice(i, 1) + } + } + return slices + } + + static removeQuotePosts(tuner: FeedTuner, slices: FeedViewPostsSlice[]) { + for (let i = slices.length - 1; i >= 0; i--) { + const embed = slices[i].rootItem.post.embed + if ( + AppBskyEmbedRecord.isView(embed) || + AppBskyEmbedRecordWithMedia.isView(embed) + ) { + slices.splice(i, 1) + } + } + return slices + } + static dedupReposts( tuner: FeedTuner, slices: FeedViewPostsSlice[], @@ -178,23 +215,25 @@ export class FeedTuner { return slices } - static likedRepliesOnly( - tuner: FeedTuner, - slices: FeedViewPostsSlice[], - ): FeedViewPostsSlice[] { - // remove any replies without at least 2 likes - for (let i = slices.length - 1; i >= 0; i--) { - if (slices[i].isFullThread || !slices[i].isReply) { - continue - } + static likedRepliesOnly({repliesThreshold}: {repliesThreshold: number}) { + return ( + tuner: FeedTuner, + slices: FeedViewPostsSlice[], + ): FeedViewPostsSlice[] => { + // remove any replies without at least 2 likes + for (let i = slices.length - 1; i >= 0; i--) { + if (slices[i].isFullThread || !slices[i].isReply) { + continue + } - const item = slices[i].rootItem - const isRepost = Boolean(item.reason) - if (!isRepost && (item.post.likeCount || 0) < 2) { - slices.splice(i, 1) + const item = slices[i].rootItem + const isRepost = Boolean(item.reason) + if (!isRepost && (item.post.likeCount || 0) < repliesThreshold) { + slices.splice(i, 1) + } } + return slices } - return slices } static preferredLangOnly(langsCode2: string[]) { |