diff --git a/package.json b/package.json
index 796c7aee..33c72458 100644
--- a/package.json
+++ b/package.json
@@ -65,6 +65,7 @@
"he": "^1.2.0",
"history": "^5.3.0",
"js-sha256": "^0.9.0",
+ "lande": "^1.0.10",
"lodash.chunk": "^4.2.0",
"lodash.clonedeep": "^4.5.0",
"lodash.debounce": "^4.0.8",
diff --git a/src/lib/api/feed-manip.ts b/src/lib/api/feed-manip.ts
index 7abcaffc..67ca8f95 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 664d6bd0..c412065d 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 d50100de..3c280583 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) => (
- {child}
+
+ {child}
+
))}
{tabBarPosition === 'bottom' &&
renderTabBar({
diff --git a/yarn.lock b/yarn.lock
index 6d7564be..f3b747e8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -10492,6 +10492,13 @@ kysely@^0.22.0:
resolved "https://registry.yarnpkg.com/kysely/-/kysely-0.22.0.tgz#8aac53942da3cadc604d7d154a746d983fe8f7b9"
integrity sha512-ZE3qWtnqLOalodzfK5QUEcm7AEulhxsPNuKaGFsC3XiqO92vMLm+mAHk/NnbSIOtC4RmGm0nsv700i8KDp1gfQ==
+lande@^1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/lande/-/lande-1.0.10.tgz#1f6c6542e628338eb18def22edd1038f5fce9e7a"
+ integrity sha512-yT52DQh+UV2pEp08jOYrA4drDv0DbjpiRyZYgl25ak9G2cVR2AimzrqkYQWrD9a7Ud+qkAcaiDDoNH9DXfHPmw==
+ dependencies:
+ toygrad "^2.6.0"
+
language-subtag-registry@~0.3.2:
version "0.3.22"
resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d"
@@ -15679,6 +15686,11 @@ tough-cookie@^4.0.0, tough-cookie@^4.1.2:
universalify "^0.2.0"
url-parse "^1.5.3"
+toygrad@^2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/toygrad/-/toygrad-2.6.0.tgz#e814bb7da026db8e08dc7da14c7155f49cdb4d54"
+ integrity sha512-g4zBmlSbvzOE5FOILxYkAybTSxijKLkj1WoNqVGnbMcWDyj4wWQ+eYSr3ik7XOpIgMq/7eBcPRTJX3DM2E0YMg==
+
tr46@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"