{"record":{"id":"4470c2ee86c791dc","repo":"unoplatform/uno","slug":"playlist-items-could-not-be-set","errorCode":null,"errorMessage":"Playlist Items could not be set","messagePattern":"Playlist Items could not be set","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/AddIns/Uno.UI.MediaPlayer.WebAssembly/MediaPlayerExtension.cs","lineNumber":310,"sourceCode":"\t\t\treturn;\n\t\t}\n\n\t\ttry\n\t\t{\n\t\t\t_owner.PlaybackSession.PlaybackState = MediaPlaybackState.Opening;\n\t\t\tInitializePlayer();\n\n\t\t\tswitch (_owner.Source)\n\t\t\t{\n\t\t\t\tcase MediaPlaybackList playlist when playlist.Items.Count > 0:\n\t\t\t\t\tSetPlaylistItems(playlist);\n\t\t\t\t\tif (_playlistItems is not null && _playlistItems.Any())\n\t\t\t\t\t{\n\t\t\t\t\t\t_uri = _playlistItems[0];\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tthrow new InvalidOperationException(\"Playlist Items could not be set\");\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MediaPlaybackItem item:\n\t\t\t\t\t_uri = item.Source.Uri;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MediaSource source:\n\t\t\t\t\t_uri = source.Uri;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new InvalidOperationException(\"Unsupported media source type\");\n\t\t\t}\n\n\t\t\tApplyVideoSource();\n\t\t\tEvents?.RaiseSourceChanged();\n\t\t}","sourceCodeStart":292,"sourceCodeEnd":328,"githubUrl":"https://github.com/unoplatform/uno/blob/04183404888ea21b4e5bfa3493e8d5f15e972c3a/src/AddIns/Uno.UI.MediaPlayer.WebAssembly/MediaPlayerExtension.cs#L292-L328","documentation":"InvalidOperationException thrown in InitializeSource (WebAssembly) when the source is a MediaPlaybackList with Items.Count > 0 but after SetPlaylistItems the _playlistItems list is null or empty — i.e. none of the playlist items produced a usable Uri. SetPlaylistItems maps each item to i.Source.Uri, so items with null Source/Uri yield no playable URI.","triggerScenarios":"MediaPlayer.Source is a MediaPlaybackList whose items exist but each item's Source is null or Source.Uri is null; items were concurrently removed between the Count>0 check and SetPlaylistItems; playlist built with MediaPlaybackItems whose backing MediaSource has no Uri (e.g. stream-backed sources unsupported on WASM).","commonSituations":"Building a playlist from MediaPlaybackItems constructed without a Uri (e.g. from an IMediaSource/stream); concurrent mutation of the playlist; a deserialization path that created items with null Source. Note: a null Source.Uri would throw NullReferenceException inside SetPlaylistItems' Select rather than reach this guard, so the empty-list case implies items whose Uri resolved to nothing or were cleared.","solutions":["Ensure every MediaPlaybackItem in the list has a Source with a non-null Uri before assigning the playlist.","Guard against concurrent modification: snapshot playlist.Items before the count check and the mapping.","Filter out items with null Source/Uri before building the MediaPlaybackList.","If using stream-backed sources, switch to Uri-backed MediaSource.CreateFromUri for WASM compatibility.","Log each item's Source.Uri during construction to identify the offending entry."],"exampleFix":"// before — items may have null Uri\nvar list = new MediaPlaybackList();\nlist.Items.Add(new MediaPlaybackItem(MediaSource.CreateFromStream(stream, \"\")));\nplayer.Source = list;\n\n// after — ensure Uri-backed items\nvar list = new MediaPlaybackList();\nlist.Items.Add(new MediaPlaybackItem(MediaSource.CreateFromUri(new Uri(url))));\nplayer.Source = list;","handlingStrategy":"validation","validationCode":"// Ensure every playlist item has a Uri before assigning\nif (playlist.Items.All(i => i?.Source?.Uri is not null))\n    player.Source = playlist;\nelse\n    throw new InvalidOperationException(\"Playlist contains items without a Uri\");","typeGuard":"bool PlaylistHasPlayableUris(MediaPlaybackList list)\n    => list.Items.Count > 0 && list.Items.All(i => i?.Source?.Uri is not null);","tryCatchPattern":"try { player.Source = playlist; }\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"Playlist Items could not be set\"))\n{ Log.Error(\"Playlist produced no playable URI\"); OnMediaFailed(ex); }","preventionTips":["Build playlists from Uri-backed MediaPlaybackItems only on WASM.","Snapshot and validate Items before assignment to avoid races.","Filter out items with null Source/Uri."],"tags":["media-player","wasm","playlist","uno-platform"],"backgroundTag":null,"analyzedSha":"04183404888ea21b4e5bfa3493e8d5f15e972c3a","analyzedAt":"2026-08-13T21:08:11.651Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}