From 2e08d2c95a999608820e5ac540f0eb3c1cb2e6ba Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Sun, 25 Jan 2026 04:41:59 +0100 Subject: [PATCH] Fix "Sources::filter" The "showNsfw" filter could only filter for either all sources or sources that aren't nsfw. The "pinned" and "enabled" filtered behaved similarly, but at the same time they were also completely buggy. E.g. "pinned = false" just returned all sources including pinned ones. --- src/features/browse/sources/Sources.tsx | 4 ++-- src/features/global-search/screens/SearchAll.tsx | 2 +- src/features/source/services/Sources.ts | 15 ++++++--------- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/features/browse/sources/Sources.tsx b/src/features/browse/sources/Sources.tsx index 1e463cec..86c27a3f 100644 --- a/src/features/browse/sources/Sources.tsx +++ b/src/features/browse/sources/Sources.tsx @@ -49,7 +49,7 @@ export function Sources({ tabsMenuHeight }: { tabsMenuHeight: number }) { const filteredSources = useMemo( () => SourceService.filter(sources ?? [], { - showNsfw, + isNsfw: showNsfw ? undefined : true, languages: shownLangs, keepLocalSource: true, enabled: true, @@ -59,7 +59,7 @@ export function Sources({ tabsMenuHeight }: { tabsMenuHeight: number }) { const sourcesForLanguageFilter = useMemo( () => SourceService.filter(sources ?? [], { - showNsfw, + isNsfw: showNsfw ? undefined : true, removeLocalSource: true, }), [sources], diff --git a/src/features/global-search/screens/SearchAll.tsx b/src/features/global-search/screens/SearchAll.tsx index 628b45ba..1348b73d 100644 --- a/src/features/global-search/screens/SearchAll.tsx +++ b/src/features/global-search/screens/SearchAll.tsx @@ -259,7 +259,7 @@ export const SearchAll: React.FC = () => { const filteredSources = useMemo( () => Sources.filter(sources, { - showNsfw, + isNsfw: showNsfw ? undefined : false, languages: shownLangs, keepLocalSource: true, pinned: shouldShowOnlyPinnedSources, diff --git a/src/features/source/services/Sources.ts b/src/features/source/services/Sources.ts index 06063fa3..c7fac179 100644 --- a/src/features/source/services/Sources.ts +++ b/src/features/source/services/Sources.ts @@ -93,14 +93,14 @@ export class Sources { static filter( sources: Source[], { - showNsfw, + isNsfw, languages, keepLocalSource, pinned, enabled, removeLocalSource, }: { - showNsfw?: boolean; + isNsfw?: boolean; languages?: string[]; keepLocalSource?: boolean; pinned?: boolean; @@ -113,9 +113,8 @@ export class Sources { return sources .filter( (source) => - showNsfw === undefined || - showNsfw || - !source.isNsfw || + isNsfw === undefined || + source.isNsfw === isNsfw || (keepLocalSource && Sources.isLocalSource(source)), ) .filter( @@ -127,15 +126,13 @@ export class Sources { .filter( (source) => pinned === undefined || - !pinned || - getSourceMetadata(source).isPinned || + getSourceMetadata(source).isPinned === pinned || (keepLocalSource && Sources.isLocalSource(source)), ) .filter( (source) => enabled === undefined || - !enabled || - getSourceMetadata(source).isEnabled || + getSourceMetadata(source).isEnabled === enabled || (keepLocalSource && Sources.isLocalSource(source)), ) .filter((source) => !removeLocalSource || !Sources.isLocalSource(source));