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.
This commit is contained in:
schroda
2026-01-25 04:41:59 +01:00
parent bdb9a000f2
commit 2e08d2c95a
3 changed files with 9 additions and 12 deletions

View File

@@ -49,7 +49,7 @@ export function Sources({ tabsMenuHeight }: { tabsMenuHeight: number }) {
const filteredSources = useMemo( const filteredSources = useMemo(
() => () =>
SourceService.filter(sources ?? [], { SourceService.filter(sources ?? [], {
showNsfw, isNsfw: showNsfw ? undefined : true,
languages: shownLangs, languages: shownLangs,
keepLocalSource: true, keepLocalSource: true,
enabled: true, enabled: true,
@@ -59,7 +59,7 @@ export function Sources({ tabsMenuHeight }: { tabsMenuHeight: number }) {
const sourcesForLanguageFilter = useMemo( const sourcesForLanguageFilter = useMemo(
() => () =>
SourceService.filter(sources ?? [], { SourceService.filter(sources ?? [], {
showNsfw, isNsfw: showNsfw ? undefined : true,
removeLocalSource: true, removeLocalSource: true,
}), }),
[sources], [sources],

View File

@@ -259,7 +259,7 @@ export const SearchAll: React.FC = () => {
const filteredSources = useMemo( const filteredSources = useMemo(
() => () =>
Sources.filter(sources, { Sources.filter(sources, {
showNsfw, isNsfw: showNsfw ? undefined : false,
languages: shownLangs, languages: shownLangs,
keepLocalSource: true, keepLocalSource: true,
pinned: shouldShowOnlyPinnedSources, pinned: shouldShowOnlyPinnedSources,

View File

@@ -93,14 +93,14 @@ export class Sources {
static filter<Source extends SourceIdInfo & SourceLanguageInfo & SourceNsfwInfo>( static filter<Source extends SourceIdInfo & SourceLanguageInfo & SourceNsfwInfo>(
sources: Source[], sources: Source[],
{ {
showNsfw, isNsfw,
languages, languages,
keepLocalSource, keepLocalSource,
pinned, pinned,
enabled, enabled,
removeLocalSource, removeLocalSource,
}: { }: {
showNsfw?: boolean; isNsfw?: boolean;
languages?: string[]; languages?: string[];
keepLocalSource?: boolean; keepLocalSource?: boolean;
pinned?: boolean; pinned?: boolean;
@@ -113,9 +113,8 @@ export class Sources {
return sources return sources
.filter( .filter(
(source) => (source) =>
showNsfw === undefined || isNsfw === undefined ||
showNsfw || source.isNsfw === isNsfw ||
!source.isNsfw ||
(keepLocalSource && Sources.isLocalSource(source)), (keepLocalSource && Sources.isLocalSource(source)),
) )
.filter( .filter(
@@ -127,15 +126,13 @@ export class Sources {
.filter( .filter(
(source) => (source) =>
pinned === undefined || pinned === undefined ||
!pinned || getSourceMetadata(source).isPinned === pinned ||
getSourceMetadata(source).isPinned ||
(keepLocalSource && Sources.isLocalSource(source)), (keepLocalSource && Sources.isLocalSource(source)),
) )
.filter( .filter(
(source) => (source) =>
enabled === undefined || enabled === undefined ||
!enabled || getSourceMetadata(source).isEnabled === enabled ||
getSourceMetadata(source).isEnabled ||
(keepLocalSource && Sources.isLocalSource(source)), (keepLocalSource && Sources.isLocalSource(source)),
) )
.filter((source) => !removeLocalSource || !Sources.isLocalSource(source)); .filter((source) => !removeLocalSource || !Sources.isLocalSource(source));