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 {