diff --git a/model/model.go b/model/model.go index c555efd..289f23f 100644 --- a/model/model.go +++ b/model/model.go @@ -16,17 +16,18 @@ type Artist struct { type Track struct { IDBase CrudBase - Album *Album - AlbumID int `gorm:"not null; unique_index:idx_folder_filename" sql:"default: null; type:int REFERENCES albums(id) ON DELETE CASCADE"` Filename string `gorm:"not null; unique_index:idx_folder_filename" 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; index" sql:"default: null; type:int REFERENCES artists(id) ON DELETE CASCADE"` - Duration int `gorm:"not null" sql:"default: null"` Size int `gorm:"not null" sql:"default: null"` + Duration int `gorm:"not null" sql:"default: null"` Bitrate int `gorm:"not null" sql:"default: null"` TagTitle string `sql:"default: null"` TagTrackArtist string `sql:"default: null"` TagTrackNumber int `sql:"default: null"` + TagDiscNumber int `sql:"default: null"` } func (t *Track) Ext() string { diff --git a/scanner/scanner.go b/scanner/scanner.go index ade8da5..9bbd705 100644 --- a/scanner/scanner.go +++ b/scanner/scanner.go @@ -261,6 +261,7 @@ func (s *Scanner) handleTrack(it *item) error { track.TagTitle = tags.Title() track.TagTrackArtist = tags.Artist() track.TagTrackNumber = tags.TrackNumber() + track.TagDiscNumber = tags.DiscNumber() track.Duration = tags.DurationSecs() // these two should be calculated track.Bitrate = tags.Bitrate() // from the file instead of tags // @@ -282,7 +283,8 @@ func (s *Scanner) handleTrack(it *item) error { // set album if this is the first track in the folder folder := s.curFolder() if !folder.ReceivedPaths || folder.ReceivedTags { - // the folder hasn't been modified or already has it's tags + // the folder hasn't been modified + // or already has it's tags return nil } folder.TagTitle = tags.Album() diff --git a/server/handler/construct_sub_by_folder.go b/server/handler/construct_sub_by_folder.go index f197c8a..a76046a 100644 --- a/server/handler/construct_sub_by_folder.go +++ b/server/handler/construct_sub_by_folder.go @@ -41,6 +41,7 @@ func newTCTrackByFolder(t *model.Track, parent *model.Album) *subsonic.TrackChil Artist: t.TagTrackArtist, Title: t.TagTitle, TrackNumber: t.TagTrackNumber, + DiscNumber: t.TagDiscNumber, Path: path.Join( parent.LeftPath, parent.RightPath, diff --git a/server/handler/construct_sub_by_tags.go b/server/handler/construct_sub_by_tags.go index c748f5b..e5a895e 100644 --- a/server/handler/construct_sub_by_tags.go +++ b/server/handler/construct_sub_by_tags.go @@ -34,6 +34,7 @@ func newTrackByTags(t *model.Track, album *model.Album) *subsonic.TrackChild { Title: t.TagTitle, Artist: t.TagTrackArtist, TrackNumber: t.TagTrackNumber, + DiscNumber: t.TagDiscNumber, Path: path.Join( album.LeftPath, album.RightPath, diff --git a/server/handler/handler_sub_by_tags.go b/server/handler/handler_sub_by_tags.go index 5e993e8..716d1eb 100644 --- a/server/handler/handler_sub_by_tags.go +++ b/server/handler/handler_sub_by_tags.go @@ -68,7 +68,7 @@ func (c *Controller) GetAlbum(w http.ResponseWriter, r *http.Request) { err = c.DB. Preload("TagArtist"). Preload("Tracks", func(db *gorm.DB) *gorm.DB { - return db.Order("tracks.tag_track_number") + return db.Order("tracks.tag_disc_number, tracks.tag_track_number") }). First(album, id). Error diff --git a/server/subsonic/subsonic.go b/server/subsonic/subsonic.go index 722a8fa..711d8b6 100644 --- a/server/subsonic/subsonic.go +++ b/server/subsonic/subsonic.go @@ -102,6 +102,7 @@ type TrackChild struct { Suffix string `xml:"suffix,attr,omitempty" json:"suffix,omitempty"` Title string `xml:"title,attr,omitempty" json:"title,omitempty"` TrackNumber int `xml:"track,attr,omitempty" json:"track,omitempty"` + DiscNumber int `xml:"discNumber,attr,omitempty" json:"discNumber,omitempty"` Type string `xml:"type,attr,omitempty" json:"type,omitempty"` }