add discnumber
This commit is contained in:
@@ -16,17 +16,18 @@ type Artist struct {
|
|||||||
type Track struct {
|
type Track struct {
|
||||||
IDBase
|
IDBase
|
||||||
CrudBase
|
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"`
|
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
|
Artist *Artist
|
||||||
ArtistID int `gorm:"not null; index" sql:"default: null; type:int REFERENCES artists(id) ON DELETE CASCADE"`
|
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"`
|
Size int `gorm:"not null" sql:"default: null"`
|
||||||
|
Duration int `gorm:"not null" sql:"default: null"`
|
||||||
Bitrate int `gorm:"not null" sql:"default: null"`
|
Bitrate int `gorm:"not null" sql:"default: null"`
|
||||||
TagTitle string `sql:"default: null"`
|
TagTitle string `sql:"default: null"`
|
||||||
TagTrackArtist string `sql:"default: null"`
|
TagTrackArtist string `sql:"default: null"`
|
||||||
TagTrackNumber int `sql:"default: null"`
|
TagTrackNumber int `sql:"default: null"`
|
||||||
|
TagDiscNumber int `sql:"default: null"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Track) Ext() string {
|
func (t *Track) Ext() string {
|
||||||
|
|||||||
@@ -261,6 +261,7 @@ func (s *Scanner) handleTrack(it *item) error {
|
|||||||
track.TagTitle = tags.Title()
|
track.TagTitle = tags.Title()
|
||||||
track.TagTrackArtist = tags.Artist()
|
track.TagTrackArtist = tags.Artist()
|
||||||
track.TagTrackNumber = tags.TrackNumber()
|
track.TagTrackNumber = tags.TrackNumber()
|
||||||
|
track.TagDiscNumber = tags.DiscNumber()
|
||||||
track.Duration = tags.DurationSecs() // these two should be calculated
|
track.Duration = tags.DurationSecs() // these two should be calculated
|
||||||
track.Bitrate = tags.Bitrate() // from the file instead of tags
|
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
|
// set album if this is the first track in the folder
|
||||||
folder := s.curFolder()
|
folder := s.curFolder()
|
||||||
if !folder.ReceivedPaths || folder.ReceivedTags {
|
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
|
return nil
|
||||||
}
|
}
|
||||||
folder.TagTitle = tags.Album()
|
folder.TagTitle = tags.Album()
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ func newTCTrackByFolder(t *model.Track, parent *model.Album) *subsonic.TrackChil
|
|||||||
Artist: t.TagTrackArtist,
|
Artist: t.TagTrackArtist,
|
||||||
Title: t.TagTitle,
|
Title: t.TagTitle,
|
||||||
TrackNumber: t.TagTrackNumber,
|
TrackNumber: t.TagTrackNumber,
|
||||||
|
DiscNumber: t.TagDiscNumber,
|
||||||
Path: path.Join(
|
Path: path.Join(
|
||||||
parent.LeftPath,
|
parent.LeftPath,
|
||||||
parent.RightPath,
|
parent.RightPath,
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ func newTrackByTags(t *model.Track, album *model.Album) *subsonic.TrackChild {
|
|||||||
Title: t.TagTitle,
|
Title: t.TagTitle,
|
||||||
Artist: t.TagTrackArtist,
|
Artist: t.TagTrackArtist,
|
||||||
TrackNumber: t.TagTrackNumber,
|
TrackNumber: t.TagTrackNumber,
|
||||||
|
DiscNumber: t.TagDiscNumber,
|
||||||
Path: path.Join(
|
Path: path.Join(
|
||||||
album.LeftPath,
|
album.LeftPath,
|
||||||
album.RightPath,
|
album.RightPath,
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ func (c *Controller) GetAlbum(w http.ResponseWriter, r *http.Request) {
|
|||||||
err = c.DB.
|
err = c.DB.
|
||||||
Preload("TagArtist").
|
Preload("TagArtist").
|
||||||
Preload("Tracks", func(db *gorm.DB) *gorm.DB {
|
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).
|
First(album, id).
|
||||||
Error
|
Error
|
||||||
|
|||||||
@@ -102,6 +102,7 @@ type TrackChild struct {
|
|||||||
Suffix string `xml:"suffix,attr,omitempty" json:"suffix,omitempty"`
|
Suffix string `xml:"suffix,attr,omitempty" json:"suffix,omitempty"`
|
||||||
Title string `xml:"title,attr,omitempty" json:"title,omitempty"`
|
Title string `xml:"title,attr,omitempty" json:"title,omitempty"`
|
||||||
TrackNumber int `xml:"track,attr,omitempty" json:"track,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"`
|
Type string `xml:"type,attr,omitempty" json:"type,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user