From 465cc091b015a1e434da7b4c5b9d34596fe35d77 Mon Sep 17 00:00:00 2001 From: Deluan Date: Fri, 8 Dec 2023 22:07:58 -0500 Subject: [PATCH] Convert internal disc number representation to int --- model/album.go | 6 +++--- model/mediafile_test.go | 4 ++-- persistence/album_repository_test.go | 2 +- server/subsonic/helpers.go | 11 ++--------- server/subsonic/helpers_test.go | 19 +++---------------- 5 files changed, 11 insertions(+), 31 deletions(-) diff --git a/model/album.go b/model/album.go index 1ad43d85..7de6864f 100644 --- a/model/album.go +++ b/model/album.go @@ -1,7 +1,6 @@ package model import ( - "strconv" "time" "github.com/navidrome/navidrome/utils/slice" @@ -62,13 +61,14 @@ func (a Album) CoverArtID() ArtworkID { return artworkIDFromAlbum(a) } -type Discs map[string]string +type Discs map[int]string +// Add adds a disc to the Discs map. If the map is nil, it is initialized. func (d *Discs) Add(discNumber int, discSubtitle string) { if *d == nil { *d = Discs{} } - (*d)[strconv.Itoa(discNumber)] = discSubtitle + (*d)[discNumber] = discSubtitle } type DiscID struct { diff --git a/model/mediafile_test.go b/model/mediafile_test.go index 99420f7a..fb8aa8a1 100644 --- a/model/mediafile_test.go +++ b/model/mediafile_test.go @@ -139,7 +139,7 @@ var _ = Describe("MediaFiles", func() { }) It("sets the correct Discs", func() { album := mfs.ToAlbum() - Expect(album.Discs).To(Equal(Discs{"1": "DiscSubtitle"})) + Expect(album.Discs).To(Equal(Discs{1: "DiscSubtitle"})) }) }) When("we have multiple discs", func() { @@ -148,7 +148,7 @@ var _ = Describe("MediaFiles", func() { }) It("sets the correct Discs", func() { album := mfs.ToAlbum() - Expect(album.Discs).To(Equal(Discs{"1": "DiscSubtitle", "2": "DiscSubtitle2"})) + Expect(album.Discs).To(Equal(Discs{1: "DiscSubtitle", 2: "DiscSubtitle2"})) }) }) }) diff --git a/persistence/album_repository_test.go b/persistence/album_repository_test.go index bc70bce8..144a7941 100644 --- a/persistence/album_repository_test.go +++ b/persistence/album_repository_test.go @@ -76,7 +76,7 @@ var _ = Describe("AlbumRepository", func() { Expect(other.Album.Discs).To(Equal(a.Discs)) }) It("maps the discs field", func() { - a.Discs = model.Discs{"1": "disc1", "2": "disc2"} + a.Discs = model.Discs{1: "disc1", 2: "disc2"} dba := dbAlbum{Album: a} m := structs.Map(dba) diff --git a/server/subsonic/helpers.go b/server/subsonic/helpers.go index 19f29a20..03ac352d 100644 --- a/server/subsonic/helpers.go +++ b/server/subsonic/helpers.go @@ -6,11 +6,9 @@ import ( "mime" "net/http" "sort" - "strconv" "strings" "github.com/navidrome/navidrome/consts" - "github.com/navidrome/navidrome/log" "github.com/navidrome/navidrome/model" "github.com/navidrome/navidrome/model/request" "github.com/navidrome/navidrome/server/public" @@ -271,18 +269,13 @@ func buildItemGenres(genres model.Genres) []responses.ItemGenre { return itemGenres } -func buildDiscSubtitles(ctx context.Context, a model.Album) responses.DiscTitles { +func buildDiscSubtitles(_ context.Context, a model.Album) responses.DiscTitles { if len(a.Discs) == 0 { return nil } discTitles := responses.DiscTitles{} for num, title := range a.Discs { - n, err := strconv.Atoi(num) - if err != nil { - log.Warn(ctx, "Invalid disc number", "num", num, "title", title, "album", a.Name, "artist", a.AlbumArtist, err) - continue - } - discTitles = append(discTitles, responses.DiscTitle{Disc: n, Title: title}) + discTitles = append(discTitles, responses.DiscTitle{Disc: num, Title: title}) } sort.Slice(discTitles, func(i, j int) bool { return discTitles[i].Disc < discTitles[j].Disc diff --git a/server/subsonic/helpers_test.go b/server/subsonic/helpers_test.go index 5cc6141b..898ca2a6 100644 --- a/server/subsonic/helpers_test.go +++ b/server/subsonic/helpers_test.go @@ -45,9 +45,9 @@ var _ = Describe("helpers", func() { It("should return correct disc titles when album has discs with valid disc numbers", func() { album := model.Album{ - Discs: map[string]string{ - "1": "Disc 1", - "2": "Disc 2", + Discs: map[int]string{ + 1: "Disc 1", + 2: "Disc 2", }, } expected := responses.DiscTitles{ @@ -56,18 +56,5 @@ var _ = Describe("helpers", func() { } Expect(buildDiscSubtitles(context.Background(), album)).To(Equal(expected)) }) - - It("should skip discs with invalid disc numbers", func() { - album := model.Album{ - Discs: map[string]string{ - "1": "Disc 1", - "two": "Disc 2", - }, - } - expected := responses.DiscTitles{ - {Disc: 1, Title: "Disc 1"}, - } - Expect(buildDiscSubtitles(context.Background(), album)).To(Equal(expected)) - }) }) })