From 81bf36abc11c786f4b41026320144ad846e6d8cc Mon Sep 17 00:00:00 2001 From: sentriz Date: Tue, 26 Sep 2023 01:40:40 +0100 Subject: [PATCH] add love track method to lastfm --- scrobble/lastfm/scrobbler.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/scrobble/lastfm/scrobbler.go b/scrobble/lastfm/scrobbler.go index d2e7d29f..530d23fa 100644 --- a/scrobble/lastfm/scrobbler.go +++ b/scrobble/lastfm/scrobbler.go @@ -20,6 +20,7 @@ type Scrobbler struct { var _ scrobble.Scrobbler = (*Scrobbler)(nil) +// TODO: remove dependency on db here func NewScrobbler(db *db.DB, client *Client) *Scrobbler { return &Scrobbler{ db: db, @@ -72,3 +73,30 @@ func (s *Scrobbler) Scrobble(user *db.User, track *db.Track, stamp time.Time, su _, err = s.client.makeRequest(http.MethodPost, params) return err } + +func (s *Scrobbler) LoveTrack(user *db.User, track *db.Track) error { + if user.LastFMSession == "" { + return nil + } + + apiKey, err := s.db.GetSetting(db.LastFMAPIKey) + if err != nil { + return fmt.Errorf("get api key: %w", err) + } + secret, err := s.db.GetSetting(db.LastFMSecret) + if err != nil { + return fmt.Errorf("get secret: %w", err) + } + + params := url.Values{} + params.Add("method", "track.love") + params.Add("track", track.TagTitle) + params.Add("artist", track.TagTrackArtist) + params.Add("api_key", apiKey) + params.Add("sk", user.LastFMSession) + + params.Add("api_sig", getParamSignature(params, secret)) + + _, err = s.client.makeRequest(http.MethodPost, params) + return err +}