use errors.Wrap everywhere

This commit is contained in:
sentriz
2019-05-24 14:45:36 +01:00
parent 4398077d1b
commit 128a326c8a
2 changed files with 38 additions and 38 deletions

View File

@@ -23,6 +23,41 @@ var (
} }
) )
func GetSession(apiKey, secret, token string) (string, error) {
params := url.Values{}
params.Add("method", "auth.getSession")
params.Add("api_key", apiKey)
params.Add("token", token)
params.Add("api_sig", getParamSignature(params, secret))
resp, err := makeRequest("GET", params)
if err != nil {
return "", errors.Wrap(err, "making session GET")
}
return resp.Session.Key, nil
}
func Scrobble(apiKey, secret, session string, track *model.Track,
stampMili int, submission bool) error {
params := url.Values{}
if submission {
params.Add("method", "track.Scrobble")
// last.fm wants the timestamp in seconds
params.Add("timestamp", strconv.Itoa(stampMili/1e3))
} else {
params.Add("method", "track.updateNowPlaying")
}
params.Add("api_key", apiKey)
params.Add("sk", session)
params.Add("artist", track.Artist)
params.Add("track", track.Title)
params.Add("album", track.Album.Title)
params.Add("albumArtist", track.AlbumArtist.Name)
params.Add("trackNumber", strconv.Itoa(track.TrackNumber))
params.Add("api_sig", getParamSignature(params, secret))
_, err := makeRequest("POST", params)
return err
}
func getParamSignature(params url.Values, secret string) string { func getParamSignature(params url.Values, secret string) string {
// the parameters must be in order before hashing // the parameters must be in order before hashing
paramKeys := make([]string, 0) paramKeys := make([]string, 0)
@@ -59,38 +94,3 @@ func makeRequest(method string, params url.Values) (*LastFM, error) {
} }
return &lastfm, nil return &lastfm, nil
} }
func GetSession(apiKey, secret, token string) (string, error) {
params := url.Values{}
params.Add("method", "auth.getSession")
params.Add("api_key", apiKey)
params.Add("token", token)
params.Add("api_sig", getParamSignature(params, secret))
resp, err := makeRequest("GET", params)
if err != nil {
return "", fmt.Errorf("error when getting session step '%v'", err)
}
return resp.Session.Key, nil
}
func Scrobble(apiKey, secret, session string,
track *model.Track, stampMili int, submission bool) error {
params := url.Values{}
if submission {
params.Add("method", "track.Scrobble")
// last.fm wants the timestamp in seconds
params.Add("timestamp", strconv.Itoa(stampMili / 1e3))
} else {
params.Add("method", "track.updateNowPlaying")
}
params.Add("api_key", apiKey)
params.Add("sk", session)
params.Add("artist", track.Artist)
params.Add("track", track.Title)
params.Add("album", track.Album.Title)
params.Add("albumArtist", track.AlbumArtist.Name)
params.Add("trackNumber", strconv.Itoa(track.TrackNumber))
params.Add("api_sig", getParamSignature(params, secret))
_, err := makeRequest("POST", params)
return err
}

View File

@@ -1,13 +1,13 @@
package scanner package scanner
import ( import (
"fmt"
"os" "os"
"path" "path"
"path/filepath" "path/filepath"
"strings" "strings"
"github.com/dhowden/tag" "github.com/dhowden/tag"
"github.com/pkg/errors"
) )
var trackExtensions = map[string]string{ var trackExtensions = map[string]string{
@@ -51,12 +51,12 @@ func isCover(fullPath string) bool {
func readTags(path string) (tag.Metadata, error) { func readTags(path string) (tag.Metadata, error) {
trackData, err := os.Open(path) trackData, err := os.Open(path)
if err != nil { if err != nil {
return nil, fmt.Errorf("when tags from disk: %v", err) return nil, errors.Wrap(err, "reading track from disk")
} }
defer trackData.Close() defer trackData.Close()
tags, err := tag.ReadFrom(trackData) tags, err := tag.ReadFrom(trackData)
if err != nil { if err != nil {
return nil, err return nil, errors.Wrap(err, "reading tags from track")
} }
return tags, nil return tags, nil
} }