64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
package deezer
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"path"
|
|
"time"
|
|
|
|
"github.com/flytam/filenamify"
|
|
)
|
|
|
|
type Playlist struct {
|
|
Results struct {
|
|
Data struct {
|
|
Title string `json:"TITLE"`
|
|
Creator string `json:"PARENT_USERNAME"`
|
|
Duration int `json:"DURATION"`
|
|
} `json:"DATA"`
|
|
Tracks struct {
|
|
Data []*Track `json:"data"`
|
|
} `json:"SONGS"`
|
|
} `json:"results"`
|
|
}
|
|
|
|
func (p *Playlist) String() string {
|
|
return fmt.Sprintf(
|
|
`=============== [ Playlist Info ] ===============
|
|
Title: %s
|
|
Creator: %s
|
|
Tracks: %d
|
|
Duration: %s
|
|
=================================================`,
|
|
p.Results.Data.Title,
|
|
p.Results.Data.Creator,
|
|
len(p.Results.Tracks.Data),
|
|
time.Duration(p.Results.Data.Duration)*time.Second,
|
|
)
|
|
}
|
|
|
|
func (p *Playlist) GetType() string {
|
|
return "Playlist"
|
|
}
|
|
|
|
func (p *Playlist) GetTitle() string {
|
|
return p.Results.Data.Title
|
|
}
|
|
|
|
func (p *Playlist) GetTracks() []*Track {
|
|
return p.Results.Tracks.Data
|
|
}
|
|
|
|
func (p *Playlist) SetTracks(t []*Track) {
|
|
p.Results.Tracks.Data = t
|
|
}
|
|
|
|
func (p *Playlist) GetOutputDir(outputDir string) string {
|
|
base, _ := filenamify.Filenamify(p.Results.Data.Title, filenamify.Options{})
|
|
return path.Join(outputDir, base)
|
|
}
|
|
|
|
func (p *Playlist) Unmarshal(data []byte) error {
|
|
return json.Unmarshal(data, p)
|
|
}
|