From 848d85d26a4c2a6e83cd01c21e63080fdbb27cd8 Mon Sep 17 00:00:00 2001 From: Duncan Overbruck Date: Mon, 4 Oct 2021 20:12:49 +0200 Subject: [PATCH] feat: add CreatedAt to albums (#159) This change will make the GetAlbumList views with the "newest" type work as expected. --- server/ctrlsubsonic/handlers_by_tags.go | 2 +- .../ctrlsubsonic/spec/construct_by_folder.go | 3 +- server/ctrlsubsonic/spec/construct_by_tags.go | 2 +- server/ctrlsubsonic/spec/spec.go | 2 +- server/ctrlsubsonic/testdata/db | Bin 163840 -> 192512 bytes .../testdata/test_get_album_list_alpha_artist | 20 +-- .../testdata/test_get_album_list_alpha_name | 20 +-- .../testdata/test_get_album_list_newest | 20 +-- .../testdata/test_get_album_list_random | 118 +++++++++--------- .../testdata/test_get_album_list_two_random | 102 +++++++-------- .../test_get_music_directory_without_tracks | 2 +- .../testdata/test_search_two_q_13 | 2 +- .../testdata/test_search_two_q_ani | 2 +- server/db/db.go | 1 + server/db/migrations.go | 21 ++++ server/db/model.go | 1 + 16 files changed, 171 insertions(+), 147 deletions(-) diff --git a/server/ctrlsubsonic/handlers_by_tags.go b/server/ctrlsubsonic/handlers_by_tags.go index b55dc942..6424b9ff 100644 --- a/server/ctrlsubsonic/handlers_by_tags.go +++ b/server/ctrlsubsonic/handlers_by_tags.go @@ -132,7 +132,7 @@ func (c *Controller) ServeGetAlbumListTwo(r *http.Request) *spec.Response { user.ID) q = q.Order("plays.count DESC") case "newest": - q = q.Order("modified_at DESC") + q = q.Order("created_at DESC") case "random": q = q.Order(gorm.Expr("random()")) case "recent": diff --git a/server/ctrlsubsonic/spec/construct_by_folder.go b/server/ctrlsubsonic/spec/construct_by_folder.go index 6e3c9f81..8040f8f4 100644 --- a/server/ctrlsubsonic/spec/construct_by_folder.go +++ b/server/ctrlsubsonic/spec/construct_by_folder.go @@ -15,6 +15,7 @@ func NewAlbumByFolder(f *db.Album) *Album { Title: f.RightPath, TrackCount: f.ChildCount, Duration: f.Duration, + Created: f.CreatedAt, } if f.Cover != "" { a.CoverID = f.SID() @@ -28,7 +29,7 @@ func NewTCAlbumByFolder(f *db.Album) *TrackChild { IsDir: true, Title: f.RightPath, ParentID: f.ParentSID(), - CreatedAt: f.UpdatedAt, + CreatedAt: f.CreatedAt, } if f.Cover != "" { trCh.CoverID = f.SID() diff --git a/server/ctrlsubsonic/spec/construct_by_tags.go b/server/ctrlsubsonic/spec/construct_by_tags.go index c997b4cf..32509951 100644 --- a/server/ctrlsubsonic/spec/construct_by_tags.go +++ b/server/ctrlsubsonic/spec/construct_by_tags.go @@ -9,7 +9,7 @@ import ( func NewAlbumByTags(a *db.Album, artist *db.Artist) *Album { ret := &Album{ - Created: a.ModifiedAt, + Created: a.CreatedAt, ID: a.SID(), Name: a.TagTitle, Year: a.TagYear, diff --git a/server/ctrlsubsonic/spec/spec.go b/server/ctrlsubsonic/spec/spec.go index e242ed90..f30fab89 100644 --- a/server/ctrlsubsonic/spec/spec.go +++ b/server/ctrlsubsonic/spec/spec.go @@ -94,6 +94,7 @@ type Album struct { CoverID *specid.ID `xml:"coverArt,attr,omitempty" json:"coverArt,omitempty"` ArtistID *specid.ID `xml:"artistId,attr,omitempty" json:"artistId,omitempty"` Artist string `xml:"artist,attr,omitempty" json:"artist,omitempty"` + Created time.Time `xml:"created,attr,omitempty" json:"created,omitempty"` // browsing by folder (eg. getAlbumList) Title string `xml:"title,attr,omitempty" json:"title"` Album string `xml:"album,attr,omitempty" json:"album"` @@ -103,7 +104,6 @@ type Album struct { Name string `xml:"name,attr" json:"name"` TrackCount int `xml:"songCount,attr" json:"songCount"` Duration int `xml:"duration,attr" json:"duration"` - Created time.Time `xml:"created,attr,omitempty" json:"created,omitempty"` Genre string `xml:"genre,attr,omitempty" json:"genre,omitempty"` Year int `xml:"year,attr,omitempty" json:"year,omitempty"` Tracks []*TrackChild `xml:"song,omitempty" json:"song,omitempty"` diff --git a/server/ctrlsubsonic/testdata/db b/server/ctrlsubsonic/testdata/db index 849a3225e591144ce0f8bcd480c30d0a147f0020..7aad42f3acc4e14393ad2def698dbe70d85d2803 100644 GIT binary patch delta 3653 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