Convert internal disc number representation to int

This commit is contained in:
Deluan 2023-12-08 22:07:58 -05:00
parent 2c9035fdd0
commit 465cc091b0
5 changed files with 11 additions and 31 deletions

View File

@ -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 {

View File

@ -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"}))
})
})
})

View File

@ -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)

View File

@ -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

View File

@ -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))
})
})
})