mirror of
https://github.com/navidrome/navidrome.git
synced 2025-04-15 19:50:37 +03:00
Even more metadata for playlists
This commit is contained in:
parent
3cefc321b8
commit
a9d7d4d242
@ -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
|
||||
|
@ -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"`
|
||||
/*
|
||||
<xs:sequence>
|
||||
<xs:element name="allowedUser" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <!--Added in 1.8.0-->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="owner" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="public" type="xs:boolean" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/> <!--Added in 1.13.0-->
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/> <!--Added in 1.11.0-->
|
||||
|
@ -4,6 +4,9 @@ type Playlist struct {
|
||||
Id string
|
||||
Name string
|
||||
FullPath string
|
||||
Duration int
|
||||
Owner string
|
||||
Public bool
|
||||
Tracks []string
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user