Apply labelers and handle language for PWI home
This commit is contained in:
@@ -5,7 +5,10 @@ import {
|
|||||||
jsonStringToLex,
|
jsonStringToLex,
|
||||||
} from '@atproto/api'
|
} from '@atproto/api'
|
||||||
|
|
||||||
import {getContentLanguages} from '#/state/preferences/languages'
|
import {
|
||||||
|
getAppLanguageAsContentLanguage,
|
||||||
|
getContentLanguages,
|
||||||
|
} from '#/state/preferences/languages'
|
||||||
import {FeedAPI, FeedAPIResponse} from './types'
|
import {FeedAPI, FeedAPIResponse} from './types'
|
||||||
import {createBskyTopicsHeader, isBlueskyOwnedFeed} from './utils'
|
import {createBskyTopicsHeader, isBlueskyOwnedFeed} from './utils'
|
||||||
|
|
||||||
@@ -103,14 +106,27 @@ async function loggedOutFetch({
|
|||||||
limit: number
|
limit: number
|
||||||
cursor?: string
|
cursor?: string
|
||||||
}) {
|
}) {
|
||||||
let contentLangs = getContentLanguages().join(',')
|
let contentLangs = getAppLanguageAsContentLanguage()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copied from our root `Agent` class
|
||||||
|
* @see https://github.com/bluesky-social/atproto/blob/60df3fc652b00cdff71dd9235d98a7a4bb828f05/packages/api/src/agent.ts#L120
|
||||||
|
*/
|
||||||
|
const labelersHeader = {
|
||||||
|
'atproto-accept-labelers': BskyAgent.appLabelers
|
||||||
|
.map(l => `${l};redact`)
|
||||||
|
.join(', '),
|
||||||
|
}
|
||||||
|
|
||||||
// manually construct fetch call so we can add the `lang` cache-busting param
|
// manually construct fetch call so we can add the `lang` cache-busting param
|
||||||
let res = await fetch(
|
let res = await fetch(
|
||||||
`https://api.bsky.app/xrpc/app.bsky.feed.getFeed?feed=${feed}${
|
`https://api.bsky.app/xrpc/app.bsky.feed.getFeed?feed=${feed}${
|
||||||
cursor ? `&cursor=${cursor}` : ''
|
cursor ? `&cursor=${cursor}` : ''
|
||||||
}&limit=${limit}&lang=${contentLangs}`,
|
}&limit=${limit}&lang=${contentLangs}`,
|
||||||
{method: 'GET', headers: {'Accept-Language': contentLangs}},
|
{
|
||||||
|
method: 'GET',
|
||||||
|
headers: {'Accept-Language': contentLangs, ...labelersHeader},
|
||||||
|
},
|
||||||
)
|
)
|
||||||
let data = res.ok ? jsonStringToLex(await res.text()) : null
|
let data = res.ok ? jsonStringToLex(await res.text()) : null
|
||||||
if (data?.feed?.length) {
|
if (data?.feed?.length) {
|
||||||
@@ -125,7 +141,7 @@ async function loggedOutFetch({
|
|||||||
`https://api.bsky.app/xrpc/app.bsky.feed.getFeed?feed=${feed}${
|
`https://api.bsky.app/xrpc/app.bsky.feed.getFeed?feed=${feed}${
|
||||||
cursor ? `&cursor=${cursor}` : ''
|
cursor ? `&cursor=${cursor}` : ''
|
||||||
}&limit=${limit}`,
|
}&limit=${limit}`,
|
||||||
{method: 'GET', headers: {'Accept-Language': ''}},
|
{method: 'GET', headers: {'Accept-Language': '', ...labelersHeader}},
|
||||||
)
|
)
|
||||||
data = res.ok ? jsonStringToLex(await res.text()) : null
|
data = res.ok ? jsonStringToLex(await res.text()) : null
|
||||||
if (data?.feed?.length) {
|
if (data?.feed?.length) {
|
||||||
|
|||||||
@@ -139,6 +139,16 @@ export function getContentLanguages() {
|
|||||||
return persisted.get('languagePrefs').contentLanguages
|
return persisted.get('languagePrefs').contentLanguages
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Be careful with this. It's used for the PWI home screen so that users can
|
||||||
|
* select a UI language and have it apply to the fetched Discover feed.
|
||||||
|
*
|
||||||
|
* We only support BCP-47 two-letter codes here, hence the split.
|
||||||
|
*/
|
||||||
|
export function getAppLanguageAsContentLanguage() {
|
||||||
|
return persisted.get('languagePrefs').appLanguage.split('-')[0]
|
||||||
|
}
|
||||||
|
|
||||||
export function toPostLanguages(postLanguage: string): string[] {
|
export function toPostLanguages(postLanguage: string): string[] {
|
||||||
// filter out empty strings if exist
|
// filter out empty strings if exist
|
||||||
return postLanguage.split(',').filter(Boolean)
|
return postLanguage.split(',').filter(Boolean)
|
||||||
|
|||||||
Reference in New Issue
Block a user