Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update musicbrainz metadata #240

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
40 changes: 21 additions & 19 deletions db/model.go
Expand Up @@ -79,25 +79,27 @@ type AudioFile interface {
}

type Track struct {
ID int `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
Filename string `gorm:"not null; unique_index:idx_folder_filename" sql:"default: null"`
FilenameUDec string `sql:"default: null"`
Album *Album
AlbumID int `gorm:"not null; unique_index:idx_folder_filename" sql:"default: null; type:int REFERENCES albums(id) ON DELETE CASCADE"`
Artist *Artist
ArtistID int `gorm:"not null" sql:"default: null; type:int REFERENCES artists(id) ON DELETE CASCADE"`
Genres []*Genre `gorm:"many2many:track_genres"`
Size int `sql:"default: null"`
Length int `sql:"default: null"`
Bitrate int `sql:"default: null"`
TagTitle string `sql:"default: null"`
TagTitleUDec string `sql:"default: null"`
TagTrackArtist string `sql:"default: null"`
TagTrackNumber int `sql:"default: null"`
TagDiscNumber int `sql:"default: null"`
TagBrainzID string `sql:"default: null"`
ID int `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
Filename string `gorm:"not null; unique_index:idx_folder_filename" sql:"default: null"`
FilenameUDec string `sql:"default: null"`
Album *Album
AlbumID int `gorm:"not null; unique_index:idx_folder_filename" sql:"default: null; type:int REFERENCES albums(id) ON DELETE CASCADE"`
Artist *Artist
ArtistID int `gorm:"not null" sql:"default: null; type:int REFERENCES artists(id) ON DELETE CASCADE"`
Genres []*Genre `gorm:"many2many:track_genres"`
Size int `sql:"default: null"`
Length int `sql:"default: null"`
Bitrate int `sql:"default: null"`
TagTitle string `sql:"default: null"`
TagTitleUDec string `sql:"default: null"`
TagTrackArtist string `sql:"default: null"`
TagTrackNumber int `sql:"default: null"`
TagDiscNumber int `sql:"default: null"`
TagBrainzRecordingID string `sql:"default: null"`
TagBrainzReleaseID string `sql:"default: null"`
TagBrainzTrackID string `sql:"default: null"`
}

func (t *Track) AudioLength() int { return t.Length }
Expand Down
4 changes: 3 additions & 1 deletion scanner/scanner.go
Expand Up @@ -302,7 +302,9 @@ func populateTrack(tx *db.DB, album *db.Album, track *db.Track, trags tags.Parse
track.TagTrackArtist = trags.Artist()
track.TagTrackNumber = trags.TrackNumber()
track.TagDiscNumber = trags.DiscNumber()
track.TagBrainzID = trags.BrainzID()
track.TagBrainzRecordingID = trags.RecordingID()
track.TagBrainzTrackID = trags.TrackID()
track.TagBrainzReleaseID = trags.AlbumBrainzID()

track.Length = trags.Length() // these two should be calculated
track.Bitrate = trags.Bitrate() // ...from the file instead of tags
Expand Down
6 changes: 4 additions & 2 deletions scanner/tags/tags.go
Expand Up @@ -38,7 +38,8 @@ func (t *Tagger) firstInt(sep string, keys ...string) int {
}

func (t *Tagger) Title() string { return t.first("title") }
func (t *Tagger) BrainzID() string { return t.first("musicbrainz_trackid") }
func (t *Tagger) RecordingID() string { return t.first("musicbrainz_trackid") }
func (t *Tagger) TrackID() string { return t.first("musicbrainz_releasetrackid") }
func (t *Tagger) Artist() string { return t.first("artist") }
func (t *Tagger) Album() string { return t.first("album") }
func (t *Tagger) AlbumArtist() string { return t.first("albumartist", "album artist") }
Expand All @@ -63,7 +64,8 @@ type Reader interface {

type Parser interface {
Title() string
BrainzID() string
RecordingID() string
TrackID() string
Artist() string
Album() string
AlbumArtist() string
Expand Down
2 changes: 1 addition & 1 deletion scrobble/lastfm/lastfm.go
Expand Up @@ -260,7 +260,7 @@ func (s *Scrobbler) Scrobble(user *db.User, track *db.Track, stamp time.Time, su
params.Add("track", track.TagTitle)
params.Add("trackNumber", strconv.Itoa(track.TagTrackNumber))
params.Add("album", track.Album.TagTitle)
params.Add("mbid", track.TagBrainzID)
params.Add("mbid", track.TagBrainzTrackID)
params.Add("albumArtist", track.Artist.Name)
params.Add("duration", strconv.Itoa(track.Length))
params.Add("api_sig", getParamSignature(params, secret))
Expand Down
16 changes: 10 additions & 6 deletions scrobble/listenbrainz/listenbrainz.go
Expand Up @@ -27,9 +27,11 @@ var (
)

type AdditionalInfo struct {
TrackNumber int `json:"tracknumber,omitempty"`
TrackMBID string `json:"track_mbid,omitempty"`
TrackLength int `json:"track_length,omitempty"`
TrackNumber int `json:"tracknumber,omitempty"`
TrackMBID string `json:"track_mbid,omitempty"`
RecordingMBID string `json:"recording_mbid,omitempty"`
ReleaseMBID string `json:"release_mbid,omitempty"`
TrackLength int `json:"track_length,omitempty"`
}

type TrackMetadata struct {
Expand Down Expand Up @@ -58,9 +60,11 @@ func (s *Scrobbler) Scrobble(user *db.User, track *db.Track, stamp time.Time, su
payload := &Payload{
TrackMetadata: &TrackMetadata{
AdditionalInfo: &AdditionalInfo{
TrackNumber: track.TagTrackNumber,
TrackMBID: track.TagBrainzID,
TrackLength: track.Length,
TrackNumber: track.TagTrackNumber,
TrackMBID: track.TagBrainzTrackID,
RecordingMBID: track.TagBrainzRecordingID,
ReleaseMBID: track.TagBrainzReleaseID,
TrackLength: track.Length,
},
ArtistName: track.TagTrackArtist,
TrackName: track.TagTitle,
Expand Down