pstream is dead; long live pstream taciturnaxolotl.github.io/pstream-ng/
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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.

Pas 732d1d5c 7b8afedb

+7 -7
+1 -1
src/components/player/atoms/settings/SourceSelectingView.tsx
··· 171 171 const allSources = getCachedMetadata() 172 172 .filter((v) => v.type === "source") 173 173 .filter((v) => v.mediaTypes?.includes(metaType)) 174 - .filter((v) => !disabledSources.includes(v.id)); 174 + .filter((v) => !(disabledSources || []).includes(v.id)); 175 175 176 176 if (!enableSourceOrder || preferredSourceOrder.length === 0) { 177 177 // Even without custom source order, prioritize last successful source if enabled
+4 -4
src/hooks/useProviderScrape.tsx
··· 179 179 let baseSourceOrder = allSources 180 180 .filter( 181 181 (source) => 182 - !disabledSources.includes(source.id) && 182 + !(disabledSources || []).includes(source.id) && 183 183 !failedSources.includes(source.id), 184 184 ) 185 185 .map((source) => source.id); 186 186 187 187 // Apply custom source ordering if enabled 188 - if (enableSourceOrder && preferredSourceOrder.length > 0) { 188 + if (enableSourceOrder && (preferredSourceOrder || []).length > 0) { 189 189 const orderedSources: string[] = []; 190 190 const remainingSources = [...baseSourceOrder]; 191 191 ··· 227 227 228 228 // Filter out disabled and failed embeds from the embed order 229 229 const filteredEmbedOrder = enableEmbedOrder 230 - ? preferredEmbedOrder.filter( 230 + ? (preferredEmbedOrder || []).filter( 231 231 (id) => 232 - !disabledEmbeds.includes(id) && !allFailedEmbedIds.includes(id), 232 + !(disabledEmbeds || []).includes(id) && !allFailedEmbedIds.includes(id), 233 233 ) 234 234 : undefined; 235 235
+1 -1
src/pages/Settings.tsx
··· 576 576 const availableSources = useMemo(() => { 577 577 const sources = getAllProviders().listSources(); 578 578 const sourceIDs = sources.map((s) => s.id); 579 - const stateSources = state.sourceOrder.state; 579 + const stateSources = state.sourceOrder.state || []; 580 580 581 581 // Filter out sources that are not in `stateSources` and are in `sources` 582 582 const updatedSources = stateSources.filter((ss) => sourceIDs.includes(ss));
+1 -1
src/pages/parts/player/SourceSelectPart.tsx
··· 161 161 const allSources = getCachedMetadata() 162 162 .filter((v) => v.type === "source") 163 163 .filter((v) => v.mediaTypes?.includes(metaType)) 164 - .filter((v) => !disabledSources.includes(v.id)); 164 + .filter((v) => !(disabledSources || []).includes(v.id)); 165 165 166 166 if (!enableSourceOrder || preferredSourceOrder.length === 0) { 167 167 // Even without custom source order, prioritize last successful source if enabled