Filter content by your device's configured languages (#354)
This commit is contained in:
parent
a369e07956
commit
449f9243f3
9 changed files with 648 additions and 23 deletions
|
@ -341,7 +341,9 @@ export class FeedModel {
|
|||
return [
|
||||
FeedTuner.dedupReposts,
|
||||
FeedTuner.likedRepliesOnly,
|
||||
FeedTuner.englishOnly,
|
||||
FeedTuner.preferredLangOnly(
|
||||
this.rootStore.preferences.contentLanguages,
|
||||
),
|
||||
]
|
||||
}
|
||||
if (this.feedType === 'home') {
|
||||
|
|
|
@ -16,6 +16,7 @@ import {ProfilesViewModel} from './profiles-view'
|
|||
import {LinkMetasCache} from './cache/link-metas'
|
||||
import {NotificationsViewItemModel} from './notifications-view'
|
||||
import {MeModel} from './me'
|
||||
import {PreferencesModel} from './ui/preferences'
|
||||
import {resetToTab} from '../../Navigation'
|
||||
import {ImageSizesCache} from './cache/image-sizes'
|
||||
|
||||
|
@ -33,6 +34,7 @@ export class RootStoreModel {
|
|||
log = new LogModel()
|
||||
session = new SessionModel(this)
|
||||
shell = new ShellUiModel(this)
|
||||
preferences = new PreferencesModel()
|
||||
me = new MeModel(this)
|
||||
profiles = new ProfilesViewModel(this)
|
||||
linkMetas = new LinkMetasCache(this)
|
||||
|
@ -83,6 +85,7 @@ export class RootStoreModel {
|
|||
session: this.session.serialize(),
|
||||
me: this.me.serialize(),
|
||||
shell: this.shell.serialize(),
|
||||
preferences: this.preferences.serialize(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -103,6 +106,9 @@ export class RootStoreModel {
|
|||
if (hasProp(v, 'shell')) {
|
||||
this.shell.hydrate(v.shell)
|
||||
}
|
||||
if (hasProp(v, 'preferences')) {
|
||||
this.preferences.hydrate(v.preferences)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
39
src/state/models/ui/preferences.ts
Normal file
39
src/state/models/ui/preferences.ts
Normal file
|
@ -0,0 +1,39 @@
|
|||
import {makeAutoObservable} from 'mobx'
|
||||
import {getLocales} from 'expo-localization'
|
||||
import {isObj, hasProp} from 'lib/type-guards'
|
||||
|
||||
const deviceLocales = getLocales()
|
||||
|
||||
export class PreferencesModel {
|
||||
_contentLanguages: string[] | undefined
|
||||
|
||||
constructor() {
|
||||
makeAutoObservable(this, {}, {autoBind: true})
|
||||
}
|
||||
|
||||
// gives an array of BCP 47 language tags without region codes
|
||||
get contentLanguages() {
|
||||
if (this._contentLanguages) {
|
||||
return this._contentLanguages
|
||||
}
|
||||
return deviceLocales.map(locale => locale.languageCode)
|
||||
}
|
||||
|
||||
serialize() {
|
||||
return {
|
||||
contentLanguages: this._contentLanguages,
|
||||
}
|
||||
}
|
||||
|
||||
hydrate(v: unknown) {
|
||||
if (isObj(v)) {
|
||||
if (
|
||||
hasProp(v, 'contentLanguages') &&
|
||||
Array.isArray(v.contentLanguages) &&
|
||||
typeof v.contentLanguages.every(item => typeof item === 'string')
|
||||
) {
|
||||
this._contentLanguages = v.contentLanguages
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue