From a9d7d4d2420529ee393443129b9438f01b9e5d8e Mon Sep 17 00:00:00 2001 From: Deluan Date: Mon, 21 Mar 2016 12:26:55 -0400 Subject: [PATCH] Even more metadata for playlists --- api/playlists.go | 17 ++++++++++++----- api/responses/responses.go | 7 +++---- domain/playlist.go | 3 +++ engine/playlists.go | 19 +++++++++++++++---- scanner/importer.go | 2 ++ scanner/itunes_scanner.go | 3 ++- 6 files changed, 37 insertions(+), 14 deletions(-) diff --git a/api/playlists.go b/api/playlists.go index 4778400cb..f428e1374 100644 --- a/api/playlists.go +++ b/api/playlists.go @@ -23,11 +23,14 @@ func (c *PlaylistsController) GetAll() { c.SendError(responses.ERROR_GENERIC, "Internal error") } playlists := make([]responses.Playlist, len(allPls)) - for i, f := range allPls { - playlists[i].Id = f.Id - playlists[i].Name = f.Name - playlists[i].Comment = "Original: " + f.FullPath - playlists[i].SongCount = len(f.Tracks) + for i, p := range allPls { + playlists[i].Id = p.Id + playlists[i].Name = p.Name + playlists[i].Comment = "Original: " + p.FullPath + playlists[i].SongCount = len(p.Tracks) + playlists[i].Duration = p.Duration + playlists[i].Owner = p.Owner + playlists[i].Public = p.Public } response := c.NewEmpty() response.Playlists = &responses.Playlists{Playlist: playlists} @@ -56,6 +59,10 @@ func (c *PlaylistsController) buildPlaylist(d *engine.PlaylistInfo) *responses.P pls := &responses.PlaylistWithSongs{} pls.Id = d.Id pls.Name = d.Name + pls.SongCount = d.SongCount + pls.Owner = d.Owner + pls.Duration = d.Duration + pls.Public = d.Public pls.Entry = c.ToChildren(d.Entries) return pls diff --git a/api/responses/responses.go b/api/responses/responses.go index c00295358..d966bb761 100644 --- a/api/responses/responses.go +++ b/api/responses/responses.go @@ -124,15 +124,14 @@ type Playlist struct { Name string `xml:"name,attr" json:"name"` Comment string `xml:"comment,attr,omitempty" json:"comment,omitempty"` SongCount int `xml:"songCount,attr,omitempty" json:"songCount,omitempty"` + Duration int `xml:"duration,attr,omitempty" json:"duration,omitempty"` + Public bool `xml:"public,attr,omitempty" json:"public,omitempty"` + Owner string `xml:"owner,attr,omitempty" json:"owner,omitempty"` /* - - - - diff --git a/domain/playlist.go b/domain/playlist.go index ce6ae9495..c8ce1afa8 100644 --- a/domain/playlist.go +++ b/domain/playlist.go @@ -4,6 +4,9 @@ type Playlist struct { Id string Name string FullPath string + Duration int + Owner string + Public bool Tracks []string } diff --git a/engine/playlists.go b/engine/playlists.go index 79f1eda62..ebeefe9f6 100644 --- a/engine/playlists.go +++ b/engine/playlists.go @@ -23,9 +23,13 @@ func (p playlists) GetAll() (domain.Playlists, error) { } type PlaylistInfo struct { - Id string - Name string - Entries Entries + Id string + Name string + Entries Entries + SongCount int + Duration int + Public bool + Owner string } func (p playlists) Get(id string) (*PlaylistInfo, error) { @@ -37,7 +41,14 @@ func (p playlists) Get(id string) (*PlaylistInfo, error) { return nil, err } - pinfo := &PlaylistInfo{Id: pl.Id, Name: pl.Name} + pinfo := &PlaylistInfo{ + Id: pl.Id, + Name: pl.Name, + SongCount: len(pl.Tracks), + Duration: pl.Duration, + Public: pl.Public, + Owner: pl.Owner, + } pinfo.Entries = make(Entries, len(pl.Tracks)) // TODO Optimize: Get all tracks at once diff --git a/scanner/importer.go b/scanner/importer.go index 159bcf3b7..1b594820e 100644 --- a/scanner/importer.go +++ b/scanner/importer.go @@ -199,6 +199,8 @@ func (i *Importer) importLibrary() (err error) { j = 0 for _, pl := range i.scanner.Playlists() { + pl.Public = true + pl.Owner = beego.AppConfig.String("user") pls[j] = *pl j++ if err := i.plsRepo.Put(pl); err != nil { diff --git a/scanner/itunes_scanner.go b/scanner/itunes_scanner.go index 90a521d37..30915f949 100644 --- a/scanner/itunes_scanner.go +++ b/scanner/itunes_scanner.go @@ -150,8 +150,9 @@ func (s *ItunesScanner) collectPlaylists(p *itl.Playlist, fullPath string) { pl.Tracks = make([]string, 0, len(p.PlaylistItems)) for _, item := range p.PlaylistItems { id := strconv.Itoa(item.TrackID) - if _, found := s.mediaFiles[id]; found { + if mf, found := s.mediaFiles[id]; found { pl.Tracks = append(pl.Tracks, id) + pl.Duration += mf.Duration } } if len(pl.Tracks) > 0 {