@@ -44,38 +44,15 @@ import type { BarMediaPlayer } from "./ha-bar-media-player";
4444import { showWebBrowserPlayMediaDialog } from "./show-media-player-dialog" ;
4545
4646const createMediaPanelUrl = ( entityId : string , items : MediaPlayerItemId [ ] ) => {
47- const path = `/media-browser/${ entityId } ` ;
48- if ( items . length <= 1 ) {
49- return path ;
47+ let path = `/media-browser/${ entityId } ` ;
48+ for ( const item of items . slice ( 1 ) ) {
49+ path +=
50+ "/" +
51+ encodeURIComponent ( `${ item . media_content_type } ,${ item . media_content_id } ` ) ;
5052 }
51- const navigateIds = items
52- . slice ( 1 )
53- . map ( ( item ) =>
54- encodeURIComponent ( `${ item . media_content_type } ,${ item . media_content_id } ` )
55- ) ;
56- const urlparams = new URLSearchParams ( ) ;
57- urlparams . set ( "ids" , navigateIds . join ( "," ) ) ;
58- return path + "?" + urlparams . toString ( ) ;
53+ return path ;
5954} ;
6055
61- const decodeNavigateIds = (
62- navigateIdsEncoded : string [ ]
63- ) : MediaPlayerItemId [ ] => [
64- {
65- media_content_id : undefined ,
66- media_content_type : undefined ,
67- } ,
68- ...navigateIdsEncoded . map ( ( navigateId ) => {
69- const decoded = decodeURIComponent ( navigateId ) ;
70- // Don't use split because media_content_id could contain commas
71- const delimiter = decoded . indexOf ( "," ) ;
72- return {
73- media_content_type : decoded . substring ( 0 , delimiter ) ,
74- media_content_id : decoded . substring ( delimiter + 1 ) ,
75- } ;
76- } ) ,
77- ] ;
78-
7956@customElement ( "ha-panel-media-browser" )
8057class PanelMediaBrowser extends LitElement {
8158 @property ( { attribute : false } ) public hass ! : HomeAssistant ;
@@ -233,19 +210,9 @@ class PanelMediaBrowser extends LitElement {
233210 return ;
234211 }
235212
236- const [ routePlayer , ...paths ] = this . route . path . substring ( 1 ) . split ( "/" ) ;
237-
238- const navigateIdsEncoded =
239- new URLSearchParams ( location . search ) . get ( "ids" ) ?. split ( "," ) || [ ] ;
240-
241- // Backwards compatibility with old URLs
242- if ( navigateIdsEncoded . length === 0 && paths . length > 0 ) {
243- const navigateIds = decodeNavigateIds ( paths ) ;
244- navigate ( createMediaPanelUrl ( this . _entityId , navigateIds ) , {
245- replace : true ,
246- } ) ;
247- return ;
248- }
213+ const [ routePlayer , ...navigateIdsEncoded ] = this . route . path
214+ . substring ( 1 )
215+ . split ( "/" ) ;
249216
250217 if ( routePlayer !== this . _entityId ) {
251218 // Detect if picked player doesn't exist (anymore)
@@ -268,15 +235,28 @@ class PanelMediaBrowser extends LitElement {
268235 this . _entityId = routePlayer ;
269236 }
270237
271- this . _navigateIds = decodeNavigateIds ( navigateIdsEncoded ) ;
238+ this . _navigateIds = [
239+ {
240+ media_content_type : undefined ,
241+ media_content_id : undefined ,
242+ } ,
243+ ...navigateIdsEncoded . map ( ( navigateId ) => {
244+ const decoded = decodeURIComponent ( navigateId ) ;
245+ // Don't use split because media_content_id could contain commas
246+ const delimiter = decoded . indexOf ( "," ) ;
247+ return {
248+ media_content_type : decoded . substring ( 0 , delimiter ) ,
249+ media_content_id : decoded . substring ( delimiter + 1 ) ,
250+ } ;
251+ } ) ,
252+ ] ;
272253 this . _currentItem = undefined ;
273254 }
274255
275256 private _goBack ( ) {
276257 navigate (
277258 createMediaPanelUrl ( this . _entityId , this . _navigateIds . slice ( 0 , - 1 ) )
278259 ) ;
279- this . requestUpdate ( "route" ) ;
280260 }
281261
282262 private _mediaBrowsed ( ev : { detail : HASSDomEvents [ "media-browsed" ] } ) {
@@ -288,7 +268,6 @@ class PanelMediaBrowser extends LitElement {
288268 navigate ( createMediaPanelUrl ( this . _entityId , ev . detail . ids ) , {
289269 replace : ev . detail . replace ,
290270 } ) ;
291- this . requestUpdate ( "route" ) ;
292271 }
293272
294273 private async _mediaPicked (
0 commit comments