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 92b0c00..72e51f2 100644 Binary files a/server/handler/test_data/db and b/server/handler/test_data/db differ 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