diff --git a/api/base_api_controller.go b/api/base_api_controller.go index 983623b99..d304966d8 100644 --- a/api/base_api_controller.go +++ b/api/base_api_controller.go @@ -113,5 +113,6 @@ func (c *BaseAPIController) ToChild(entry engine.Entry) responses.Child { n.AlbumId = entry.AlbumId n.ArtistId = entry.ArtistId n.Type = entry.Type + n.UserRating = entry.UserRating return n } diff --git a/api/browsing.go b/api/browsing.go index 5c861857c..2b44cdd6b 100644 --- a/api/browsing.go +++ b/api/browsing.go @@ -84,10 +84,11 @@ func (c *BrowsingController) GetDirectory() { func (c *BrowsingController) buildDirectory(d *engine.DirectoryInfo) *responses.Directory { dir := &responses.Directory{ - Id: d.Id, - Name: d.Name, - Parent: d.Parent, - PlayCount: d.PlayCount, + Id: d.Id, + Name: d.Name, + Parent: d.Parent, + PlayCount: d.PlayCount, + UserRating: d.UserRating, } if !d.Starred.IsZero() { dir.Starred = &d.Starred diff --git a/api/browsing_test.go b/api/browsing_test.go index 2cb50bc58..0636d7161 100644 --- a/api/browsing_test.go +++ b/api/browsing_test.go @@ -162,7 +162,7 @@ func TestGetMusicDirectory(t *testing.T) { mockAlbumRepo.SetData(`[{"Id":"A","Name":"Tardis","ArtistId":"1"}]`, 1) _, w := Get(AddParams("/rest/getMusicDirectory.view", "id=1"), "TestGetMusicDirectory") - So(w.Body, ShouldContainJSON, `"child":[{"album":"Tardis","id":"A","isDir":true,"parent":"1","title":"Tardis"}]`) + So(w.Body, ShouldContainJSON, `"child":[{"album":"Tardis","albumId":"A","artistId":"1","id":"A","isDir":true,"parent":"1","title":"Tardis"}]`) }) }) Convey("When id matches an album with tracks", func() { @@ -171,7 +171,7 @@ func TestGetMusicDirectory(t *testing.T) { mockMediaFileRepo.SetData(`[{"Id":"3","Title":"Cangote","AlbumId":"A"}]`, 1) _, w := Get(AddParams("/rest/getMusicDirectory.view", "id=A"), "TestGetMusicDirectory") - So(w.Body, ShouldContainJSON, `"child":[{"id":"3","isDir":false,"parent":"A","title":"Cangote"}]`) + So(w.Body, ShouldContainJSON, `"child":[{"albumId":"A","id":"3","isDir":false,"parent":"A","title":"Cangote","type":"music"}]`) }) Reset(func() { mockArtistRepo.SetData("[]", 0) diff --git a/api/responses/responses.go b/api/responses/responses.go index 0c0a87dff..c00295358 100644 --- a/api/responses/responses.go +++ b/api/responses/responses.go @@ -92,9 +92,9 @@ type Child struct { AlbumId string `xml:"albumId,attr,omitempty" json:"albumId,omitempty"` ArtistId string `xml:"artistId,attr,omitempty" json:"artistId,omitempty"` Type string `xml:"type,attr,omitempty" json:"type,omitempty"` + UserRating int `xml:"userRating,attr,omitempty" json:"userRating,omitempty"` /* - @@ -103,14 +103,14 @@ type Child struct { } type Directory struct { - Child []Child `xml:"child" json:"child,omitempty"` - Id string `xml:"id,attr" json:"id"` - Name string `xml:"name,attr" json:"name"` - Parent string `xml:"parent,attr,omitempty" json:"parent,omitempty"` - Starred *time.Time `xml:"starred,attr,omitempty" json:"starred,omitempty"` - PlayCount int32 `xml:"playCount,attr,omitempty" json:"playcount,omitempty"` + Child []Child `xml:"child" json:"child,omitempty"` + Id string `xml:"id,attr" json:"id"` + Name string `xml:"name,attr" json:"name"` + Parent string `xml:"parent,attr,omitempty" json:"parent,omitempty"` + Starred *time.Time `xml:"starred,attr,omitempty" json:"starred,omitempty"` + PlayCount int32 `xml:"playCount,attr,omitempty" json:"playcount,omitempty"` + UserRating int `xml:"userRating,attr,omitempty" json:"userRating,omitempty"` /* - */ } diff --git a/engine/browser.go b/engine/browser.go index 2b2f5d763..f63eb434d 100644 --- a/engine/browser.go +++ b/engine/browser.go @@ -54,12 +54,13 @@ func (b browser) Indexes(ifModifiedSince time.Time) (domain.ArtistIndexes, time. } type DirectoryInfo struct { - Id string - Name string - Entries Entries - Parent string - Starred time.Time - PlayCount int32 + Id string + Name string + Entries Entries + Parent string + Starred time.Time + PlayCount int32 + UserRating int } func (c browser) Directory(id string) (*DirectoryInfo, error) { @@ -100,10 +101,11 @@ func (c browser) buildArtistDir(a *domain.Artist, albums domain.Albums) *Directo func (c browser) buildAlbumDir(al *domain.Album, tracks domain.MediaFiles) *DirectoryInfo { dir := &DirectoryInfo{ - Id: al.Id, - Name: al.Name, - Parent: al.ArtistId, - PlayCount: int32(al.PlayCount), + Id: al.Id, + Name: al.Name, + Parent: al.ArtistId, + PlayCount: int32(al.PlayCount), + UserRating: al.Rating, } if al.Starred { dir.Starred = al.UpdatedAt diff --git a/engine/common.go b/engine/common.go index b6cda4fc5..9b56ac97f 100644 --- a/engine/common.go +++ b/engine/common.go @@ -31,6 +31,7 @@ type Entry struct { AlbumId string ArtistId string Type string + UserRating int UserName string MinutesAgo int @@ -62,6 +63,7 @@ func FromAlbum(al *domain.Album) Entry { c.Created = al.CreatedAt c.AlbumId = al.Id c.ArtistId = al.ArtistId + c.UserRating = al.Rating return c } @@ -94,5 +96,6 @@ func FromMediaFile(mf *domain.MediaFile) Entry { c.AlbumId = mf.AlbumId c.ArtistId = mf.ArtistId c.Type = "music" // TODO Hardcoded for now + c.UserRating = mf.Rating return c } diff --git a/scanner/itunes_scanner.go b/scanner/itunes_scanner.go index 7241e8b76..90a521d37 100644 --- a/scanner/itunes_scanner.go +++ b/scanner/itunes_scanner.go @@ -213,7 +213,7 @@ func (s *ItunesScanner) collectMediaFiles(t *itl.Track) *domain.MediaFile { mf.Genre = unescape(t.Genre) mf.Compilation = t.Compilation mf.Starred = t.Loved - mf.Rating = t.Rating + mf.Rating = t.Rating / 20 mf.PlayCount = t.PlayCount mf.PlayDate = t.PlayDateUTC mf.Year = t.Year @@ -257,7 +257,7 @@ func (s *ItunesScanner) collectAlbums(t *itl.Track, mf *domain.MediaFile, ar *do al.Year = t.Year al.Compilation = t.Compilation al.Starred = t.AlbumLoved - al.Rating = t.AlbumRating + al.Rating = t.AlbumRating / 20 al.PlayCount += t.PlayCount al.Genre = mf.Genre al.Artist = mf.Artist