diff --git a/src/App.tsx b/src/App.tsx index d461dfe..5a06345 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,8 +4,8 @@ import './index.css' import { ThemeProvider } from '@/providers/ThemeProvider' import { Toaster } from './components/ui/sonner' import { PageManager } from './PageManager' -import { AutoplayProvider } from './providers/AutoplayProvider' import { BookmarksProvider } from './providers/BookmarksProvider' +import { ContentPolicyProvider } from './providers/ContentPolicyProvider' import { FavoriteRelaysProvider } from './providers/FavoriteRelaysProvider' import { FeedProvider } from './providers/FeedProvider' import { FollowListProvider } from './providers/FollowListProvider' @@ -21,7 +21,7 @@ import { ZapProvider } from './providers/ZapProvider' export default function App(): JSX.Element { return ( - + @@ -48,7 +48,7 @@ export default function App(): JSX.Element { - + ) } diff --git a/src/components/Note/index.tsx b/src/components/Note/index.tsx index 0bfb857..ccaa0ab 100644 --- a/src/components/Note/index.tsx +++ b/src/components/Note/index.tsx @@ -8,6 +8,7 @@ import { isPictureEvent } from '@/lib/event' import { toNote } from '@/lib/link' +import { useContentPolicy } from '@/providers/ContentPolicyProvider' import { useMuteList } from '@/providers/MuteListProvider' import { useScreenSize } from '@/providers/ScreenSizeProvider' import { Event, kinds } from 'nostr-tools' @@ -60,6 +61,7 @@ export default function Note({ [event] ) const usingClient = useMemo(() => getUsingClient(event), [event]) + const { defaultShowNsfw } = useContentPolicy() const [showNsfw, setShowNsfw] = useState(false) const { mutePubkeys } = useMuteList() const [showMuted, setShowMuted] = useState(false) @@ -83,7 +85,7 @@ export default function Note({ content = } else if (mutePubkeys.includes(event.pubkey) && !showMuted) { content = setShowMuted(true)} /> - } else if (isNsfwEvent(event) && !showNsfw) { + } else if (!defaultShowNsfw && isNsfwEvent(event) && !showNsfw) { content = setShowNsfw(true)} /> } else if (event.kind === kinds.Highlights) { content = diff --git a/src/components/VideoPlayer/index.tsx b/src/components/VideoPlayer/index.tsx index 29f66ea..ab7c0de 100644 --- a/src/components/VideoPlayer/index.tsx +++ b/src/components/VideoPlayer/index.tsx @@ -1,10 +1,10 @@ import { cn, isInViewport } from '@/lib/utils' -import { useAutoplay } from '@/providers/AutoplayProvider' +import { useContentPolicy } from '@/providers/ContentPolicyProvider' import mediaManager from '@/services/media-manager.service' import { useEffect, useRef } from 'react' export default function VideoPlayer({ src, className }: { src: string; className?: string }) { - const { autoplay } = useAutoplay() + const { autoplay } = useContentPolicy() const videoRef = useRef(null) const containerRef = useRef(null) diff --git a/src/constants.ts b/src/constants.ts index 12b916b..285e9cc 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -34,6 +34,7 @@ export const StorageKey = { TRANSLATION_SERVICE_CONFIG_MAP: 'translationServiceConfigMap', MEDIA_UPLOAD_SERVICE_CONFIG_MAP: 'mediaUploadServiceConfigMap', HIDE_UNTRUSTED_NOTES: 'hideUntrustedNotes', + DEFAULT_SHOW_NSFW: 'defaultShowNsfw', MEDIA_UPLOAD_SERVICE: 'mediaUploadService', // deprecated HIDE_UNTRUSTED_EVENTS: 'hideUntrustedEvents', // deprecated ACCOUNT_RELAY_LIST_EVENT_MAP: 'accountRelayListEventMap', // deprecated diff --git a/src/i18n/locales/ar.ts b/src/i18n/locales/ar.ts index 10a6648..6026683 100644 --- a/src/i18n/locales/ar.ts +++ b/src/i18n/locales/ar.ts @@ -337,6 +337,7 @@ export default { FollowListNotFoundConfirmation: 'لم يتم العثور على قائمة المتابعة. هل تريد إنشاء واحدة جديدة؟ إذا كنت قد تابعت مستخدمين من قبل، يرجى عدم التأكيد لأن هذه العملية ستؤدي إلى فقدان قائمة المتابعة السابقة.', MuteListNotFoundConfirmation: - 'لم يتم العثور على قائمة الكتم. هل تريد إنشاء واحدة جديدة؟ إذا كنت قد كتمت مستخدمين من قبل، يرجى عدم التأكيد لأن هذه العملية ستؤدي إلى فقدان قائمة الكتم السابقة.' + 'لم يتم العثور على قائمة الكتم. هل تريد إنشاء واحدة جديدة؟ إذا كنت قد كتمت مستخدمين من قبل، يرجى عدم التأكيد لأن هذه العملية ستؤدي إلى فقدان قائمة الكتم السابقة.', + 'Show NSFW content by default': 'إظهار محتوى NSFW افتراضياً' } } diff --git a/src/i18n/locales/de.ts b/src/i18n/locales/de.ts index c394d1b..c89c62d 100644 --- a/src/i18n/locales/de.ts +++ b/src/i18n/locales/de.ts @@ -344,6 +344,7 @@ export default { FollowListNotFoundConfirmation: 'Folgeliste nicht gefunden. Möchten Sie eine neue erstellen? Wenn Sie zuvor Benutzer gefolgt haben, bestätigen Sie bitte NICHT, da diese Operation dazu führt, dass Sie Ihre vorherige Folgeliste verlieren.', MuteListNotFoundConfirmation: - 'Stummschaltungsliste nicht gefunden. Möchten Sie eine neue erstellen? Wenn Sie zuvor Benutzer stummgeschaltet haben, bestätigen Sie bitte NICHT, da diese Operation dazu führt, dass Sie Ihre vorherige Stummschaltungsliste verlieren.' + 'Stummschaltungsliste nicht gefunden. Möchten Sie eine neue erstellen? Wenn Sie zuvor Benutzer stummgeschaltet haben, bestätigen Sie bitte NICHT, da diese Operation dazu führt, dass Sie Ihre vorherige Stummschaltungsliste verlieren.', + 'Show NSFW content by default': 'NSFW-Inhalte standardmäßig anzeigen' } } diff --git a/src/i18n/locales/en.ts b/src/i18n/locales/en.ts index 1961cdf..c65b55b 100644 --- a/src/i18n/locales/en.ts +++ b/src/i18n/locales/en.ts @@ -338,6 +338,7 @@ export default { FollowListNotFoundConfirmation: 'Follow list not found. Do you want to create a new one? If you have followed users before, please DO NOT confirm as this operation will cause you to lose your previous follow list.', MuteListNotFoundConfirmation: - 'Mute list not found. Do you want to create a new one? If you have muted users before, please DO NOT confirm as this operation will cause you to lose your previous mute list.' + 'Mute list not found. Do you want to create a new one? If you have muted users before, please DO NOT confirm as this operation will cause you to lose your previous mute list.', + 'Show NSFW content by default': 'Show NSFW content by default' } } diff --git a/src/i18n/locales/es.ts b/src/i18n/locales/es.ts index f8fc0d0..604e018 100644 --- a/src/i18n/locales/es.ts +++ b/src/i18n/locales/es.ts @@ -343,6 +343,7 @@ export default { FollowListNotFoundConfirmation: 'Lista de seguidos no encontrada. ¿Quieres crear una nueva? Si has seguido usuarios antes, por favor NO confirmes ya que esta operación te hará perder tu lista de seguidos anterior.', MuteListNotFoundConfirmation: - 'Lista de silenciados no encontrada. ¿Quieres crear una nueva? Si has silenciado usuarios antes, por favor NO confirmes ya que esta operación te hará perder tu lista de silenciados anterior.' + 'Lista de silenciados no encontrada. ¿Quieres crear una nueva? Si has silenciado usuarios antes, por favor NO confirmes ya que esta operación te hará perder tu lista de silenciados anterior.', + 'Show NSFW content by default': 'Mostrar contenido NSFW por defecto' } } diff --git a/src/i18n/locales/fa.ts b/src/i18n/locales/fa.ts index 84559d9..9f87f6e 100644 --- a/src/i18n/locales/fa.ts +++ b/src/i18n/locales/fa.ts @@ -338,6 +338,7 @@ export default { FollowListNotFoundConfirmation: 'فهرست دنبال‌کنندگان پیدا نشد. آیا می‌خواهید یکی جدید ایجاد کنید؟ اگر قبلاً کاربرانی را دنبال کرده‌اید، لطفاً تأیید نکنید زیرا این عملیات باعث از دست رفتن فهرست دنبال‌کنندگان قبلی شما خواهد شد.', MuteListNotFoundConfirmation: - 'فهرست بی‌صدا شده‌ها پیدا نشد. آیا می‌خواهید یکی جدید ایجاد کنید؟ اگر قبلاً کاربرانی را بی‌صدا کرده‌اید، لطفاً تأیید نکنید زیرا این عملیات باعث از دست رفتن فهرست بی‌صدا شده‌های قبلی شما خواهد شد.' + 'فهرست بی‌صدا شده‌ها پیدا نشد. آیا می‌خواهید یکی جدید ایجاد کنید؟ اگر قبلاً کاربرانی را بی‌صدا کرده‌اید، لطفاً تأیید نکنید زیرا این عملیات باعث از دست رفتن فهرست بی‌صدا شده‌های قبلی شما خواهد شد.', + 'Show NSFW content by default': 'نمایش محتوای NSFW به صورت پیش‌فرض' } } diff --git a/src/i18n/locales/fr.ts b/src/i18n/locales/fr.ts index 959f290..fc12e47 100644 --- a/src/i18n/locales/fr.ts +++ b/src/i18n/locales/fr.ts @@ -343,6 +343,7 @@ export default { FollowListNotFoundConfirmation: 'Liste de suivi non trouvée. Voulez-vous en créer une nouvelle ? Si vous avez suivi des utilisateurs auparavant, veuillez NE PAS confirmer car cette opération vous fera perdre votre liste de suivi précédente.', MuteListNotFoundConfirmation: - 'Liste de mise en sourdine non trouvée. Voulez-vous en créer une nouvelle ? Si vous avez mis en sourdine des utilisateurs auparavant, veuillez NE PAS confirmer car cette opération vous fera perdre votre liste de mise en sourdine précédente.' + 'Liste de mise en sourdine non trouvée. Voulez-vous en créer une nouvelle ? Si vous avez mis en sourdine des utilisateurs auparavant, veuillez NE PAS confirmer car cette opération vous fera perdre votre liste de mise en sourdine précédente.', + 'Show NSFW content by default': 'Afficher le contenu NSFW par défaut' } } diff --git a/src/i18n/locales/it.ts b/src/i18n/locales/it.ts index 94e6bfb..ff5d176 100644 --- a/src/i18n/locales/it.ts +++ b/src/i18n/locales/it.ts @@ -342,6 +342,7 @@ export default { FollowListNotFoundConfirmation: 'Elenco seguiti non trovato. Vuoi crearne uno nuovo? Se hai già seguito degli utenti in precedenza, per favore NON confermare poiché questa operazione causerà la perdita del tuo elenco seguiti precedente.', MuteListNotFoundConfirmation: - 'Elenco utenti silenziati non trovato. Vuoi crearne uno nuovo? Se hai già silenziato degli utenti in precedenza, per favore NON confermare poiché questa operazione causerà la perdita del tuo elenco utenti silenziati precedente.' + 'Elenco utenti silenziati non trovato. Vuoi crearne uno nuovo? Se hai già silenziato degli utenti in precedenza, per favore NON confermare poiché questa operazione causerà la perdita del tuo elenco utenti silenziati precedente.', + 'Show NSFW content by default': 'Mostra contenuti NSFW per impostazione predefinita' } } diff --git a/src/i18n/locales/ja.ts b/src/i18n/locales/ja.ts index 3458970..b5b9fc8 100644 --- a/src/i18n/locales/ja.ts +++ b/src/i18n/locales/ja.ts @@ -340,6 +340,7 @@ export default { FollowListNotFoundConfirmation: 'フォローリストが見つかりません。新しいものを作成しますか?以前にユーザーをフォローしたことがある場合は、この操作により前のフォローリストが失われるため、確認しないでください。', MuteListNotFoundConfirmation: - 'ミュートリストが見つかりません。新しいものを作成しますか?以前にユーザーをミュートしたことがある場合は、この操作により前のミュートリストが失われるため、確認しないでください。' + 'ミュートリストが見つかりません。新しいものを作成しますか?以前にユーザーをミュートしたことがある場合は、この操作により前のミュートリストが失われるため、確認しないでください。', + 'Show NSFW content by default': 'デフォルトでNSFWコンテンツを表示' } } diff --git a/src/i18n/locales/ko.ts b/src/i18n/locales/ko.ts index fbbd603..83ab52c 100644 --- a/src/i18n/locales/ko.ts +++ b/src/i18n/locales/ko.ts @@ -339,6 +339,7 @@ export default { FollowListNotFoundConfirmation: '팔로우 목록을 찾을 수 없습니다. 새로 만드시겠습니까? 이전에 사용자를 팔로우한 적이 있다면 이 작업으로 인해 이전 팔로우 목록을 잃게 되므로 확인하지 마시기 바랍니다.', MuteListNotFoundConfirmation: - '음소거 목록을 찾을 수 없습니다. 새로 만드시겠습니까? 이전에 사용자를 음소거한 적이 있다면 이 작업으로 인해 이전 음소거 목록을 잃게 되므로 확인하지 마시기 바랍니다.' + '음소거 목록을 찾을 수 없습니다. 새로 만드시겠습니까? 이전에 사용자를 음소거한 적이 있다면 이 작업으로 인해 이전 음소거 목록을 잃게 되므로 확인하지 마시기 바랍니다.', + 'Show NSFW content by default': '기본적으로 NSFW 콘텐츠 표시' } } diff --git a/src/i18n/locales/pl.ts b/src/i18n/locales/pl.ts index 5e292a2..a58afd1 100644 --- a/src/i18n/locales/pl.ts +++ b/src/i18n/locales/pl.ts @@ -342,6 +342,7 @@ export default { FollowListNotFoundConfirmation: 'Lista obserwowanych nie została znaleziona. Czy chcesz utworzyć nową? Jeśli wcześniej obserwowałeś użytkowników, proszę NIE potwierdzaj, ponieważ ta operacja spowoduje utratę poprzedniej listy obserwowanych.', MuteListNotFoundConfirmation: - 'Lista wyciszonych nie została znaleziona. Czy chcesz utworzyć nową? Jeśli wcześniej wyciszałeś użytkowników, proszę NIE potwierdzaj, ponieważ ta operacja spowoduje utratę poprzedniej listy wyciszonych.' + 'Lista wyciszonych nie została znaleziona. Czy chcesz utworzyć nową? Jeśli wcześniej wyciszałeś użytkowników, proszę NIE potwierdzaj, ponieważ ta operacja spowoduje utratę poprzedniej listy wyciszonych.', + 'Show NSFW content by default': 'Domyślnie pokazuj treści NSFW' } } diff --git a/src/i18n/locales/pt-BR.ts b/src/i18n/locales/pt-BR.ts index f67293f..0667ee8 100644 --- a/src/i18n/locales/pt-BR.ts +++ b/src/i18n/locales/pt-BR.ts @@ -341,6 +341,7 @@ export default { FollowListNotFoundConfirmation: 'Lista de seguindo não encontrada. Deseja criar uma nova? Se você seguiu usuários antes, por favor NÃO confirme, pois esta operação fará você perder sua lista de seguindo anterior.', MuteListNotFoundConfirmation: - 'Lista de silenciados não encontrada. Deseja criar uma nova? Se você silenciou usuários antes, por favor NÃO confirme, pois esta operação fará você perder sua lista de silenciados anterior.' + 'Lista de silenciados não encontrada. Deseja criar uma nova? Se você silenciou usuários antes, por favor NÃO confirme, pois esta operação fará você perder sua lista de silenciados anterior.', + 'Show NSFW content by default': 'Mostrar conteúdo NSFW por padrão' } } diff --git a/src/i18n/locales/pt-PT.ts b/src/i18n/locales/pt-PT.ts index 3fb2aa2..ba20c45 100644 --- a/src/i18n/locales/pt-PT.ts +++ b/src/i18n/locales/pt-PT.ts @@ -342,6 +342,7 @@ export default { FollowListNotFoundConfirmation: 'Lista de seguir não encontrada. Deseja criar uma nova? Se seguiu utilizadores anteriormente, por favor NÃO confirme, pois esta operação fará com que perca a sua lista de seguir anterior.', MuteListNotFoundConfirmation: - 'Lista de silenciados não encontrada. Deseja criar uma nova? Se silenciou utilizadores anteriormente, por favor NÃO confirme, pois esta operação fará com que perca a sua lista de silenciados anterior.' + 'Lista de silenciados não encontrada. Deseja criar uma nova? Se silenciou utilizadores anteriormente, por favor NÃO confirme, pois esta operação fará com que perca a sua lista de silenciados anterior.', + 'Show NSFW content by default': 'Mostrar conteúdo NSFW por padrão' } } diff --git a/src/i18n/locales/ru.ts b/src/i18n/locales/ru.ts index 4cf7d4b..4b32b53 100644 --- a/src/i18n/locales/ru.ts +++ b/src/i18n/locales/ru.ts @@ -342,6 +342,7 @@ export default { FollowListNotFoundConfirmation: 'Список подписок не найден. Хотите создать новый? Если вы уже подписывались на пользователей ранее, пожалуйста, НЕ подтверждайте, так как эта операция приведет к потере вашего предыдущего списка подписок.', MuteListNotFoundConfirmation: - 'Список заблокированных не найден. Хотите создать новый? Если вы уже блокировали пользователей ранее, пожалуйста, НЕ подтверждайте, так как эта операция приведет к потере вашего предыдущего списка заблокированных.' + 'Список заблокированных не найден. Хотите создать новый? Если вы уже блокировали пользователей ранее, пожалуйста, НЕ подтверждайте, так как эта операция приведет к потере вашего предыдущего списка заблокированных.', + 'Show NSFW content by default': 'Показывать контент NSFW по умолчанию' } } diff --git a/src/i18n/locales/th.ts b/src/i18n/locales/th.ts index 2c4a674..e90b189 100644 --- a/src/i18n/locales/th.ts +++ b/src/i18n/locales/th.ts @@ -336,6 +336,7 @@ export default { FollowListNotFoundConfirmation: 'ไม่พบรายการติดตาม คุณต้องการสร้างรายการใหม่หรือไม่? หากคุณเคยติดตามผู้ใช้มาก่อน กรุณาอย่ายืนยัน เพราะการดำเนินการนี้จะทำให้คุณสูญเสียรายการติดตามก่อนหน้านี้', MuteListNotFoundConfirmation: - 'ไม่พบรายการปิดเสียง คุณต้องการสร้างรายการใหม่หรือไม่? หากคุณเคยปิดเสียงผู้ใช้มาก่อน กรุณาอย่ายืนยัน เพราะการดำเนินการนี้จะทำให้คุณสูญเสียรายการปิดเสียงก่อนหน้านี้' + 'ไม่พบรายการปิดเสียง คุณต้องการสร้างรายการใหม่หรือไม่? หากคุณเคยปิดเสียงผู้ใช้มาก่อน กรุณาอย่ายืนยัน เพราะการดำเนินการนี้จะทำให้คุณสูญเสียรายการปิดเสียงก่อนหน้านี้', + 'Show NSFW content by default': 'แสดงเนื้อหา NSFW โดยค่าเริ่มต้น' } } diff --git a/src/i18n/locales/zh.ts b/src/i18n/locales/zh.ts index 6d420ec..86b379f 100644 --- a/src/i18n/locales/zh.ts +++ b/src/i18n/locales/zh.ts @@ -335,6 +335,7 @@ export default { FollowListNotFoundConfirmation: '未找到关注列表。你想创建一个新的吗?如果你之前已经关注了用户,请不要确认,因为此操作会导致你丢失之前的关注列表。', MuteListNotFoundConfirmation: - '未找到屏蔽列表。你想创建一个新的吗?如果你之前已经屏蔽了用户,请不要确认,因为此操作会导致你丢失之前的屏蔽列表。' + '未找到屏蔽列表。你想创建一个新的吗?如果你之前已经屏蔽了用户,请不要确认,因为此操作会导致你丢失之前的屏蔽列表。', + 'Show NSFW content by default': '默认显示 NSFW 内容' } } diff --git a/src/pages/secondary/GeneralSettingsPage/index.tsx b/src/pages/secondary/GeneralSettingsPage/index.tsx index adc0e8a..2a40ccd 100644 --- a/src/pages/secondary/GeneralSettingsPage/index.tsx +++ b/src/pages/secondary/GeneralSettingsPage/index.tsx @@ -4,7 +4,7 @@ import { Switch } from '@/components/ui/switch' import { LocalizedLanguageNames, TLanguage } from '@/i18n' import SecondaryPageLayout from '@/layouts/SecondaryPageLayout' import { cn } from '@/lib/utils' -import { useAutoplay } from '@/providers/AutoplayProvider' +import { useContentPolicy } from '@/providers/ContentPolicyProvider' import { useTheme } from '@/providers/ThemeProvider' import { useUserTrust } from '@/providers/UserTrustProvider' import { SelectValue } from '@radix-ui/react-select' @@ -15,7 +15,7 @@ const GeneralSettingsPage = forwardRef(({ index }: { index?: number }, ref) => { const { t, i18n } = useTranslation() const [language, setLanguage] = useState(i18n.language as TLanguage) const { themeSetting, setThemeSetting } = useTheme() - const { autoplay, setAutoplay } = useAutoplay() + const { autoplay, setAutoplay, defaultShowNsfw, setDefaultShowNsfw } = useContentPolicy() const { hideUntrustedNotes, updateHideUntrustedNotes } = useUserTrust() const handleLanguageChange = (value: TLanguage) => { @@ -75,6 +75,12 @@ const GeneralSettingsPage = forwardRef(({ index }: { index?: number }, ref) => { onCheckedChange={updateHideUntrustedNotes} /> + + + + ) diff --git a/src/providers/AutoplayProvider.tsx b/src/providers/AutoplayProvider.tsx deleted file mode 100644 index 3ea4206..0000000 --- a/src/providers/AutoplayProvider.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { createContext, useContext, useState } from 'react' -import storage from '@/services/local-storage.service' - -type TAutoplayContext = { - autoplay: boolean - setAutoplay: (autoplay: boolean) => void -} - -const AutoplayContext = createContext(undefined) - -export const useAutoplay = () => { - const context = useContext(AutoplayContext) - if (!context) { - throw new Error('useAutoplay must be used within an AutoplayProvider') - } - return context -} - -export function AutoplayProvider({ children }: { children: React.ReactNode }) { - const [autoplay, setAutoplay] = useState(storage.getAutoplay()) - - const updateAutoplay = (autoplay: boolean) => { - storage.setAutoplay(autoplay) - setAutoplay(autoplay) - } - - return ( - - {children} - - ) -} diff --git a/src/providers/ContentPolicyProvider.tsx b/src/providers/ContentPolicyProvider.tsx new file mode 100644 index 0000000..dfe521c --- /dev/null +++ b/src/providers/ContentPolicyProvider.tsx @@ -0,0 +1,48 @@ +import storage from '@/services/local-storage.service' +import { createContext, useContext, useState } from 'react' + +type TContentPolicyContext = { + autoplay: boolean + setAutoplay: (autoplay: boolean) => void + + defaultShowNsfw: boolean + setDefaultShowNsfw: (showNsfw: boolean) => void +} + +const ContentPolicyContext = createContext(undefined) + +export const useContentPolicy = () => { + const context = useContext(ContentPolicyContext) + if (!context) { + throw new Error('useContentPolicy must be used within an ContentPolicyProvider') + } + return context +} + +export function ContentPolicyProvider({ children }: { children: React.ReactNode }) { + const [autoplay, setAutoplay] = useState(storage.getAutoplay()) + const [defaultShowNsfw, setDefaultShowNsfw] = useState(storage.getDefaultShowNsfw()) + + const updateAutoplay = (autoplay: boolean) => { + storage.setAutoplay(autoplay) + setAutoplay(autoplay) + } + + const updateDefaultShowNsfw = (defaultShowNsfw: boolean) => { + storage.setDefaultShowNsfw(defaultShowNsfw) + setDefaultShowNsfw(defaultShowNsfw) + } + + return ( + + {children} + + ) +} diff --git a/src/services/local-storage.service.ts b/src/services/local-storage.service.ts index 5b72ba1..528731c 100644 --- a/src/services/local-storage.service.ts +++ b/src/services/local-storage.service.ts @@ -32,6 +32,7 @@ class LocalStorageService { private hideUntrustedNotes: boolean = false private translationServiceConfigMap: Record = {} private mediaUploadServiceConfigMap: Record = {} + private defaultShowNsfw: boolean = false constructor() { if (!LocalStorageService.instance) { @@ -133,6 +134,9 @@ class LocalStorageService { this.mediaUploadServiceConfigMap = JSON.parse(mediaUploadServiceConfigMapStr) } + const defaultShowNsfwStr = window.localStorage.getItem(StorageKey.DEFAULT_SHOW_NSFW) + this.defaultShowNsfw = defaultShowNsfwStr === 'true' + // Clean up deprecated data window.localStorage.removeItem(StorageKey.ACCOUNT_PROFILE_EVENT_MAP) window.localStorage.removeItem(StorageKey.ACCOUNT_FOLLOW_LIST_EVENT_MAP) @@ -347,6 +351,15 @@ class LocalStorageService { ) return config } + + getDefaultShowNsfw() { + return this.defaultShowNsfw + } + + setDefaultShowNsfw(defaultShowNsfw: boolean) { + this.defaultShowNsfw = defaultShowNsfw + window.localStorage.setItem(StorageKey.DEFAULT_SHOW_NSFW, defaultShowNsfw.toString()) + } } const instance = new LocalStorageService()