From 6e7480f48a4be0a20273295ba9f15e2d4ca792c9 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Sun, 30 Mar 2025 14:39:27 -0700 Subject: [PATCH] pass MIME type and seekable flag to DLNA players --- backend/mediaprovider/model.go | 2 ++ backend/playbackengine.go | 9 +++++++++ backend/player/dlna/dlnaplayer.go | 12 ++++++++---- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/backend/mediaprovider/model.go b/backend/mediaprovider/model.go index a39477d..bd7b4d7 100644 --- a/backend/mediaprovider/model.go +++ b/backend/mediaprovider/model.go @@ -183,6 +183,7 @@ const ( type MediaItemMetadata struct { Type MediaItemType + MIMEType string ID string Name string Artists []string @@ -204,6 +205,7 @@ func (t *Track) Metadata() MediaItemMetadata { } return MediaItemMetadata{ Type: MediaItemTypeTrack, + MIMEType: t.ContentType, ID: t.ID, Name: t.Title, Artists: t.ArtistNames, diff --git a/backend/playbackengine.go b/backend/playbackengine.go index 52b6e78..8ed8654 100644 --- a/backend/playbackengine.go +++ b/backend/playbackengine.go @@ -140,6 +140,14 @@ func (p *playbackEngine) registerPlayerCallbacks(pl player.BasePlayer) { }) } +func (p *playbackEngine) unregisterPlayerCallbacks(pl player.BasePlayer) { + pl.OnPaused(nil) + pl.OnPlaying(nil) + pl.OnStopped(nil) + pl.OnSeek(nil) + pl.OnTrackChange(nil) +} + func (p *playbackEngine) SetPlayer(pl player.BasePlayer) error { // even if we don't successfully change players, // make sure UI updates if needed (eg enabling cast button) @@ -162,6 +170,7 @@ func (p *playbackEngine) SetPlayer(pl player.BasePlayer) error { p.pendingPlayerChangeTimePos = stat.TimePos p.pendingPlayerChange = true } + p.unregisterPlayerCallbacks(p.player) if err := p.player.Stop(true); err != nil { log.Printf("failed to stop player: %v", err) } diff --git a/backend/player/dlna/dlnaplayer.go b/backend/player/dlna/dlnaplayer.go index 939824f..0dcb38f 100644 --- a/backend/player/dlna/dlnaplayer.go +++ b/backend/player/dlna/dlnaplayer.go @@ -156,8 +156,10 @@ func (d *DLNAPlayer) PlayFile(urlstr string, meta mediaprovider.MediaItemMetadat key := d.addURLToProxy(urlstr) media := avtransport.MediaItem{ - URL: d.urlForItem(key), - Title: meta.Name, + URL: d.urlForItem(key), + Title: meta.Name, + ContentType: meta.MIMEType, + Seekable: true, } if err := d.playAVTransportMedia(&media); err != nil { @@ -224,8 +226,10 @@ func (d *DLNAPlayer) SetNextFile(url string, meta mediaprovider.MediaItemMetadat key := d.addURLToProxy(url) media = &avtransport.MediaItem{ - URL: d.urlForItem(key), - Title: meta.Name, + URL: d.urlForItem(key), + ContentType: meta.MIMEType, + Title: meta.Name, + Seekable: true, } }