From 35a4f5b42c41678533df0a7ca51f8f9de434cff1 Mon Sep 17 00:00:00 2001 From: sentriz Date: Mon, 8 Jul 2019 23:17:15 +0100 Subject: [PATCH] scan musicbrainz album id to db and scrobble with it --- model/model.go | 1 + scanner/scanner.go | 1 + scanner/tags/tags.go | 19 ++++++++++--------- server/handler/test_data/db | Bin 114688 -> 114688 bytes server/lastfm/lastfm.go | 5 +++-- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/model/model.go b/model/model.go index 7ca7c10..a98303f 100644 --- a/model/model.go +++ b/model/model.go @@ -94,6 +94,7 @@ type Album struct { TagArtistID int `sql:"default: null; type:int REFERENCES artists(id) ON DELETE CASCADE"` TagTitle string `sql:"default: null"` TagTitleUDec string `sql:"default: null"` + TagBrainzID string `sql:"default: null"` TagYear int `sql:"default: null"` Tracks []*Track ChildCount int `sql:"-"` diff --git a/scanner/scanner.go b/scanner/scanner.go index b4b85bb..f650a53 100644 --- a/scanner/scanner.go +++ b/scanner/scanner.go @@ -347,6 +347,7 @@ func (s *Scanner) handleTrack(it *item) error { } folder.TagTitle = trTags.Album() folder.TagTitleUDec = decoded(trTags.Album()) + folder.TagBrainzID = trTags.AlbumBrainzID() folder.TagYear = trTags.Year() folder.TagArtistID = artist.ID folder.ReceivedTags = true diff --git a/scanner/tags/tags.go b/scanner/tags/tags.go index fd26afd..437f38b 100644 --- a/scanner/tags/tags.go +++ b/scanner/tags/tags.go @@ -33,15 +33,16 @@ func (t *Tags) firstTag(keys ...string) string { return "" } -func (t *Tags) Title() string { return t.firstTag("title") } -func (t *Tags) Artist() string { return t.firstTag("artist") } -func (t *Tags) Album() string { return t.firstTag("album") } -func (t *Tags) AlbumArtist() string { return t.firstTag("albumartist", "album artist") } -func (t *Tags) Year() int { return intSep(t.firstTag("date", "year"), "-") } // eg. 2019-6-11 -func (t *Tags) TrackNumber() int { return intSep(t.firstTag("tracknumber"), "/") } // eg. 5/12 -func (t *Tags) DiscNumber() int { return intSep(t.firstTag("discnumber"), "/") } // eg. 1/2 -func (t *Tags) Length() int { return t.props.Length } -func (t *Tags) Bitrate() int { return t.props.Bitrate } +func (t *Tags) Title() string { return t.firstTag("title") } +func (t *Tags) Artist() string { return t.firstTag("artist") } +func (t *Tags) Album() string { return t.firstTag("album") } +func (t *Tags) AlbumArtist() string { return t.firstTag("albumartist", "album artist") } +func (t *Tags) AlbumBrainzID() string { return t.firstTag("musicbrainz_albumid") } +func (t *Tags) Year() int { return intSep(t.firstTag("date", "year"), "-") } // eg. 2019-6-11 +func (t *Tags) TrackNumber() int { return intSep(t.firstTag("tracknumber"), "/") } // eg. 5/12 +func (t *Tags) DiscNumber() int { return intSep(t.firstTag("discnumber"), "/") } // eg. 1/2 +func (t *Tags) Length() int { return t.props.Length } +func (t *Tags) Bitrate() int { return t.props.Bitrate } func intSep(in, sep string) int { if in == "" { diff --git a/server/handler/test_data/db b/server/handler/test_data/db index 92b0c00e853f6f558384e5fd90fc5bce1e30d560..72e51f2eea940e59d7c63e5c79f2da86948385e3 100644 GIT binary patch delta 119 zcmZo@U~gz(pCB#h&cMJR1H>>OFj2>t$DKh>CxDmLjzNgw(8O#>9)?3K2bmwSOkgf$ zmY6uvh^r--mt9;^lChI@EKT*e+$BjWxBa4@dlR=1CVq&%=533!^LFPv+6PQbx oB{okK=wR9`!K}u_)uPVJE-op_*rB=cj673wI{Wr?cE*`I0Q;;HUH||9 diff --git a/server/lastfm/lastfm.go b/server/lastfm/lastfm.go index 289681b..b2d87a7 100644 --- a/server/lastfm/lastfm.go +++ b/server/lastfm/lastfm.go @@ -50,9 +50,10 @@ func Scrobble(apiKey, secret, session string, track *model.Track, params.Add("sk", session) params.Add("artist", track.TagTrackArtist) params.Add("track", track.TagTitle) - params.Add("album", track.Album.TagTitle) - params.Add("albumArtist", track.Artist.Name) params.Add("trackNumber", strconv.Itoa(track.TagTrackNumber)) + params.Add("album", track.Album.TagTitle) + params.Add("mbid", track.Album.TagBrainzID) + params.Add("albumArtist", track.Artist.Name) params.Add("api_sig", getParamSignature(params, secret)) _, err := makeRequest("POST", params) return err