feat: add auto-load profile pictures setting (#712)

This commit is contained in:
gzuuus 2025-12-29 15:42:02 +01:00 committed by GitHub
parent ec03a49e32
commit 6dc662bd2b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
28 changed files with 170 additions and 47 deletions

View file

@ -1,6 +1,6 @@
import { MEDIA_AUTO_LOAD_POLICY } from '@/constants'
import { MEDIA_AUTO_LOAD_POLICY, PROFILE_PICTURE_AUTO_LOAD_POLICY } from '@/constants'
import storage from '@/services/local-storage.service'
import { TMediaAutoLoadPolicy, TNsfwDisplayPolicy } from '@/types'
import { TMediaAutoLoadPolicy, TProfilePictureAutoLoadPolicy, TNsfwDisplayPolicy } from '@/types'
import { createContext, useContext, useEffect, useMemo, useState } from 'react'
type TContentPolicyContext = {
@ -17,6 +17,10 @@ type TContentPolicyContext = {
mediaAutoLoadPolicy: TMediaAutoLoadPolicy
setMediaAutoLoadPolicy: (policy: TMediaAutoLoadPolicy) => void
autoLoadProfilePicture: boolean
profilePictureAutoLoadPolicy: TProfilePictureAutoLoadPolicy
setProfilePictureAutoLoadPolicy: (policy: TProfilePictureAutoLoadPolicy) => void
faviconUrlTemplate: string
setFaviconUrlTemplate: (template: string) => void
}
@ -38,6 +42,9 @@ export function ContentPolicyProvider({ children }: { children: React.ReactNode
storage.getHideContentMentioningMutedUsers()
)
const [mediaAutoLoadPolicy, setMediaAutoLoadPolicy] = useState(storage.getMediaAutoLoadPolicy())
const [profilePictureAutoLoadPolicy, setProfilePictureAutoLoadPolicy] = useState(
storage.getProfilePictureAutoLoadPolicy()
)
const [faviconUrlTemplate, setFaviconUrlTemplate] = useState(storage.getFaviconUrlTemplate())
const [connectionType, setConnectionType] = useState((navigator as any).connection?.type)
@ -67,6 +74,17 @@ export function ContentPolicyProvider({ children }: { children: React.ReactNode
return connectionType === 'wifi' || connectionType === 'ethernet'
}, [mediaAutoLoadPolicy, connectionType])
const autoLoadProfilePicture = useMemo(() => {
if (profilePictureAutoLoadPolicy === PROFILE_PICTURE_AUTO_LOAD_POLICY.ALWAYS) {
return true
}
if (profilePictureAutoLoadPolicy === PROFILE_PICTURE_AUTO_LOAD_POLICY.NEVER) {
return false
}
// WIFI_ONLY
return connectionType === 'wifi' || connectionType === 'ethernet'
}, [profilePictureAutoLoadPolicy, connectionType])
const updateAutoplay = (autoplay: boolean) => {
storage.setAutoplay(autoplay)
setAutoplay(autoplay)
@ -87,6 +105,11 @@ export function ContentPolicyProvider({ children }: { children: React.ReactNode
setMediaAutoLoadPolicy(policy)
}
const updateProfilePictureAutoLoadPolicy = (policy: TProfilePictureAutoLoadPolicy) => {
storage.setProfilePictureAutoLoadPolicy(policy)
setProfilePictureAutoLoadPolicy(policy)
}
const updateFaviconUrlTemplate = (template: string) => {
storage.setFaviconUrlTemplate(template)
setFaviconUrlTemplate(template)
@ -104,6 +127,9 @@ export function ContentPolicyProvider({ children }: { children: React.ReactNode
autoLoadMedia,
mediaAutoLoadPolicy,
setMediaAutoLoadPolicy: updateMediaAutoLoadPolicy,
autoLoadProfilePicture,
profilePictureAutoLoadPolicy,
setProfilePictureAutoLoadPolicy: updateProfilePictureAutoLoadPolicy,
faviconUrlTemplate,
setFaviconUrlTemplate: updateFaviconUrlTemplate
}}