From 36dafe4889e9fc65c419d04931e5c892d420cb35 Mon Sep 17 00:00:00 2001 From: Rob Emery Date: Sat, 8 Feb 2025 17:27:26 +0000 Subject: [PATCH] Fixing artwork urls --- dlna/contenddirectoryservice.go | 8 ++++++++ dlna/dlnaserver.go | 27 ++++++++++++++------------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/dlna/contenddirectoryservice.go b/dlna/contenddirectoryservice.go index ef2e0bb54..1463d63c0 100644 --- a/dlna/contenddirectoryservice.go +++ b/dlna/contenddirectoryservice.go @@ -275,6 +275,14 @@ func (cds *contentDirectoryService) doMediaFiles(tracks model.MediaFiles, basePa OriginalTrackNumber: track.TrackNumber, Date: upnpav.Timestamp{Time:trackDateAsTimeObject}, } + + if(track.HasCoverArt) { + obj.AlbumArtURI = (&url.URL{ + Scheme: "http", + Host: host, + Path: path.Join(resourcePath, resourceArtPath, track.CoverArtID().String()), + }).String() + } //TODO figure out how this fits with transcoding etc var mimeType = "audio/mp3" diff --git a/dlna/dlnaserver.go b/dlna/dlnaserver.go index fd0ecbcb5..4f88aefc5 100644 --- a/dlna/dlnaserver.go +++ b/dlna/dlnaserver.go @@ -322,8 +322,7 @@ func (s *SSDPServer) resourceHandler(w http.ResponseWriter, r *http.Request) { http.ServeContent(w, r, remotePath, time.Now(), fileHandle) break; - case resourceStreamPath: - //Copypasta stream.go:52 + case resourceStreamPath: //TODO refactor this with stream.go:52? fileId := components[1] @@ -331,8 +330,7 @@ func (s *SSDPServer) resourceHandler(w http.ResponseWriter, r *http.Request) { stream, err := s.ms.NewStream(r.Context(), fileId, "mp3", 0, 0) if err != nil { log.Error("Error streaming file", "id", fileId, err) - //TODO throw 500 - //eturn nil, err + return } defer func() { if err := stream.Close(); err != nil && log.IsGreaterOrEqualTo(log.LevelDebug) { @@ -343,19 +341,22 @@ func (s *SSDPServer) resourceHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("X-Content-Duration", strconv.FormatFloat(float64(stream.Duration()), 'G', -1, 32)) http.ServeContent(w, r, stream.Name(), stream.ModTime(), stream) break; - case resourceArtPath: - log.Debug("1a") - //copy pasta handle_images.go:39 - artId, _ := model.ParseArtworkID(components[1]) - imgReader, lastUpdate, _ := s.art.Get(r.Context(), artId, 250, true) - log.Debug("2a") + case resourceArtPath: //TODO refactor this with handle_images.go:39? + artId, err := model.ParseArtworkID(components[1]) + if err != nil { + log.Error("Failure to parse ArtworkId", "inputString", components[1], err) + return + } + //TODO size (250) + imgReader, lastUpdate, err := s.art.Get(r.Context(), artId, 250, true) + if err != nil { + log.Error("Failure to retrieve artwork", "artid", artId, err) + return + } defer imgReader.Close() - log.Debug("3a") w.Header().Set("Cache-Control", "public, max-age=315360000") w.Header().Set("Last-Modified", lastUpdate.Format(time.RFC1123)) - log.Debug("4a") io.Copy(w, imgReader) - log.Debug("5a") break; } }