feat(subsonic): add getAlbumInfo with cache

Release-As: 0.16.1
This commit is contained in:
sentriz
2023-11-07 23:43:11 +00:00
parent 3f5cf56c88
commit cc1a99f033
14 changed files with 268 additions and 48 deletions

View File

@@ -60,6 +60,26 @@ func (c *Client) ArtistGetInfo(artistName string) (Artist, error) {
return resp.Artist, nil
}
func (c *Client) AlbumGetInfo(artistName, albumName string) (Album, error) {
apiKey, _, err := c.keySecret()
if err != nil {
return Album{}, fmt.Errorf("get key and secret: %w", err)
}
params := url.Values{}
params.Add("method", "album.getInfo")
params.Add("api_key", apiKey)
params.Add("artist", artistName)
params.Add("album", albumName)
resp, err := c.makeRequest(http.MethodGet, params)
if err != nil {
return Album{}, fmt.Errorf("make request: %w", err)
}
return resp.Album, nil
}
func (c *Client) ArtistGetTopTracks(artistName string) (TopTracks, error) {
apiKey, _, err := c.keySecret()
if err != nil {

View File

@@ -9,6 +9,7 @@ type (
Session Session `xml:"session"`
Error Error `xml:"error"`
Artist Artist `xml:"artist"`
Album Album `xml:"album"`
TopTracks TopTracks `xml:"toptracks"`
SimilarTracks SimilarTracks `xml:"similartracks"`
SimilarArtists SimilarArtists `xml:"similarartists"`
@@ -61,6 +62,54 @@ type (
Bio ArtistBio `xml:"bio"`
}
Album struct {
XMLName xml.Name `xml:"album"`
Name string `xml:"name"`
Artist string `xml:"artist"`
MBID string `xml:"mbid"`
URL string `xml:"url"`
Image []struct {
Text string `xml:",chardata"`
Size string `xml:"size,attr"`
} `xml:"image"`
Listeners string `xml:"listeners"`
Playcount string `xml:"playcount"`
Tracks struct {
Text string `xml:",chardata"`
Track []struct {
Text string `xml:",chardata"`
Rank string `xml:"rank,attr"`
Name string `xml:"name"`
URL string `xml:"url"`
Duration string `xml:"duration"`
Streamable struct {
Text string `xml:",chardata"`
Fulltrack string `xml:"fulltrack,attr"`
} `xml:"streamable"`
Artist struct {
Text string `xml:",chardata"`
Name string `xml:"name"`
Mbid string `xml:"mbid"`
URL string `xml:"url"`
} `xml:"artist"`
} `xml:"track"`
} `xml:"tracks"`
Tags struct {
Text string `xml:",chardata"`
Tag []struct {
Text string `xml:",chardata"`
Name string `xml:"name"`
URL string `xml:"url"`
} `xml:"tag"`
} `xml:"tags"`
Wiki struct {
Text string `xml:",chardata"`
Published string `xml:"published"`
Summary string `xml:"summary"`
Content string `xml:"content"`
} `xml:"wiki"`
}
ArtistTag struct {
Name string `xml:"name"`
URL string `xml:"url"`