diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-03-19 18:47:49 -0500 |
---|---|---|
committer | Paul Frazee <pfrazee@gmail.com> | 2023-03-19 18:47:49 -0500 |
commit | 4787c8383d09550e0ec845a7926298e6cc084d7d (patch) | |
tree | 36fd839468bedd99879a57a80f91aa8321af81b8 /src | |
parent | a811c57480afc79f72f0792aa998bb9932c0d607 (diff) | |
download | voidsky-4787c8383d09550e0ec845a7926298e6cc084d7d.tar.zst |
Add language filtering to goodstuff
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/api/feed-manip.ts | 29 | ||||
-rw-r--r-- | src/state/models/feed-view.ts | 35 | ||||
-rw-r--r-- | src/view/com/util/pager/Pager.web.tsx | 6 |
3 files changed, 51 insertions, 19 deletions
diff --git a/src/lib/api/feed-manip.ts b/src/lib/api/feed-manip.ts index 7abcaffc6..67ca8f952 100644 --- a/src/lib/api/feed-manip.ts +++ b/src/lib/api/feed-manip.ts @@ -1,5 +1,7 @@ import {AppBskyFeedFeedViewPost} from '@atproto/api' +import lande from 'lande' type FeedViewPost = AppBskyFeedFeedViewPost.Main +import {hasProp} from '@atproto/lexicon' export type FeedTunerFn = ( tuner: FeedTuner, @@ -178,6 +180,33 @@ export class FeedTuner { } } } + + static englishOnly(tuner: FeedTuner, slices: FeedViewPostsSlice[]) { + // TEMP + // remove slices with no english in them + // we very soon need to get the local user's language and filter + // according to their preferences, but for the moment + // we're just rolling with english + // -prf + for (let i = slices.length - 1; i >= 0; i--) { + let hasEnglish = false + for (const item of slices[i].items) { + if ( + hasProp(item.post.record, 'text') && + typeof item.post.record.text === 'string' + ) { + const res = lande(item.post.record.text) + if (res[0][0] === 'eng') { + hasEnglish = true + break + } + } + } + if (!hasEnglish) { + slices.splice(i, 1) + } + } + } } function getSelfReplyUri(item: FeedViewPost): string | undefined { diff --git a/src/state/models/feed-view.ts b/src/state/models/feed-view.ts index 664d6bd01..c412065dd 100644 --- a/src/state/models/feed-view.ts +++ b/src/state/models/feed-view.ts @@ -336,6 +336,20 @@ export class FeedModel { return this.setup() } + private get feedTuners() { + if (this.feedType === 'goodstuff') { + return [ + FeedTuner.dedupReposts, + FeedTuner.likedRepliesOnly, + FeedTuner.englishOnly, + ] + } + if (this.feedType === 'home') { + return [FeedTuner.dedupReposts, FeedTuner.likedRepliesOnly] + } + return [] + } + /** * Load for first render */ @@ -477,12 +491,7 @@ export class FeedModel { } const res = await this._getFeed({limit: 1}) const currentLatestUri = this.pollCursor - const slices = this.tuner.tune( - res.data.feed, - this.feedType === 'home' - ? [FeedTuner.dedupReposts, FeedTuner.likedRepliesOnly] - : [], - ) + const slices = this.tuner.tune(res.data.feed, this.feedTuners) const item = slices[0]?.rootItem if (!item) { return @@ -548,12 +557,7 @@ export class FeedModel { this.loadMoreCursor = res.data.cursor this.hasMore = !!this.loadMoreCursor - const slices = this.tuner.tune( - res.data.feed, - this.feedType === 'home' - ? [FeedTuner.dedupReposts, FeedTuner.likedRepliesOnly] - : [], - ) + const slices = this.tuner.tune(res.data.feed, this.feedTuners) const toAppend: FeedSliceModel[] = [] for (const slice of slices) { @@ -578,12 +582,7 @@ export class FeedModel { ) { this.pollCursor = res.data.feed[0]?.post.uri - const slices = this.tuner.tune( - res.data.feed, - this.feedType === 'home' - ? [FeedTuner.dedupReposts, FeedTuner.likedRepliesOnly] - : [], - ) + const slices = this.tuner.tune(res.data.feed, this.feedTuners) const toPrepend: FeedSliceModel[] = [] for (const slice of slices) { diff --git a/src/view/com/util/pager/Pager.web.tsx b/src/view/com/util/pager/Pager.web.tsx index d50100de9..3c2805833 100644 --- a/src/view/com/util/pager/Pager.web.tsx +++ b/src/view/com/util/pager/Pager.web.tsx @@ -51,7 +51,11 @@ export const Pager = ({ onSelect: onTabBarSelect, })} {children.map((child, i) => ( - <View style={selectedPage === i ? undefined : s.hidden}>{child}</View> + <View + style={selectedPage === i ? undefined : s.hidden} + key={`page-${i}`}> + {child} + </View> ))} {tabBarPosition === 'bottom' && renderTabBar({ |