Add language filtering to goodstuff

This commit is contained in:
Paul Frazee 2023-03-19 18:47:49 -05:00
parent a811c57480
commit 4787c8383d
5 changed files with 64 additions and 19 deletions

View file

@ -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 {

View file

@ -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) {

View file

@ -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({