Fix handling of undefined arrays in source selection

Updated filtering logic to safely handle cases where arrays like disabledSources, preferredSourceOrder, and preferredEmbedOrder may be undefined. This prevents runtime errors and ensures robust source and embed selection throughout the player and settings components.
This commit is contained in:
Pas 2025-12-07 21:36:44 -07:00
parent 7b8afedb8b
commit 732d1d5ca3
4 changed files with 7 additions and 7 deletions

View file

@ -171,7 +171,7 @@ export function SourceSelectionView({
const allSources = getCachedMetadata()
.filter((v) => v.type === "source")
.filter((v) => v.mediaTypes?.includes(metaType))
.filter((v) => !disabledSources.includes(v.id));
.filter((v) => !(disabledSources || []).includes(v.id));
if (!enableSourceOrder || preferredSourceOrder.length === 0) {
// Even without custom source order, prioritize last successful source if enabled

View file

@ -179,13 +179,13 @@ export function useScrape() {
let baseSourceOrder = allSources
.filter(
(source) =>
!disabledSources.includes(source.id) &&
!(disabledSources || []).includes(source.id) &&
!failedSources.includes(source.id),
)
.map((source) => source.id);
// Apply custom source ordering if enabled
if (enableSourceOrder && preferredSourceOrder.length > 0) {
if (enableSourceOrder && (preferredSourceOrder || []).length > 0) {
const orderedSources: string[] = [];
const remainingSources = [...baseSourceOrder];
@ -227,9 +227,9 @@ export function useScrape() {
// Filter out disabled and failed embeds from the embed order
const filteredEmbedOrder = enableEmbedOrder
? preferredEmbedOrder.filter(
? (preferredEmbedOrder || []).filter(
(id) =>
!disabledEmbeds.includes(id) && !allFailedEmbedIds.includes(id),
!(disabledEmbeds || []).includes(id) && !allFailedEmbedIds.includes(id),
)
: undefined;

View file

@ -576,7 +576,7 @@ export function SettingsPage() {
const availableSources = useMemo(() => {
const sources = getAllProviders().listSources();
const sourceIDs = sources.map((s) => s.id);
const stateSources = state.sourceOrder.state;
const stateSources = state.sourceOrder.state || [];
// Filter out sources that are not in `stateSources` and are in `sources`
const updatedSources = stateSources.filter((ss) => sourceIDs.includes(ss));

View file

@ -161,7 +161,7 @@ export function SourceSelectPart(props: { media: ScrapeMedia }) {
const allSources = getCachedMetadata()
.filter((v) => v.type === "source")
.filter((v) => v.mediaTypes?.includes(metaType))
.filter((v) => !disabledSources.includes(v.id));
.filter((v) => !(disabledSources || []).includes(v.id));
if (!enableSourceOrder || preferredSourceOrder.length === 0) {
// Even without custom source order, prioritize last successful source if enabled