mirror of
https://github.com/navidrome/navidrome.git
synced 2025-06-08 19:32:16 +03:00
Added DiscNumber field, used to sort tracks
This commit is contained in:
parent
1aeb22dcb7
commit
ffd6304a23
@ -57,7 +57,7 @@ func (c *GetMusicDirectoryController) Get() {
|
|||||||
dir.Child[i].Year = mf.Year
|
dir.Child[i].Year = mf.Year
|
||||||
dir.Child[i].Artist = mf.Artist
|
dir.Child[i].Artist = mf.Artist
|
||||||
dir.Child[i].Genre = mf.Genre
|
dir.Child[i].Genre = mf.Genre
|
||||||
dir.Child[i].Track = mf.Track
|
dir.Child[i].Track = mf.TrackNumber
|
||||||
dir.Child[i].Duration = mf.Duration
|
dir.Child[i].Duration = mf.Duration
|
||||||
dir.Child[i].Size = mf.Size
|
dir.Child[i].Size = mf.Size
|
||||||
dir.Child[i].Suffix = mf.Suffix
|
dir.Child[i].Suffix = mf.Suffix
|
||||||
|
@ -12,7 +12,8 @@ type MediaFile struct {
|
|||||||
Artist string
|
Artist string
|
||||||
AlbumArtist string
|
AlbumArtist string
|
||||||
AlbumId string `parent:"album"`
|
AlbumId string `parent:"album"`
|
||||||
Track int
|
TrackNumber int
|
||||||
|
DiscNumber int
|
||||||
Year int
|
Year int
|
||||||
Size string
|
Size string
|
||||||
Suffix string
|
Suffix string
|
||||||
|
@ -2,6 +2,7 @@ package persistence
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/deluan/gosonic/domain"
|
"github.com/deluan/gosonic/domain"
|
||||||
|
"sort"
|
||||||
)
|
)
|
||||||
|
|
||||||
type mediaFileRepository struct {
|
type mediaFileRepository struct {
|
||||||
@ -20,6 +21,19 @@ func (r *mediaFileRepository) Put(m *domain.MediaFile) error {
|
|||||||
|
|
||||||
func (r *mediaFileRepository) FindByAlbum(albumId string) ([]domain.MediaFile, error) {
|
func (r *mediaFileRepository) FindByAlbum(albumId string) ([]domain.MediaFile, error) {
|
||||||
var mfs = make([]domain.MediaFile, 0)
|
var mfs = make([]domain.MediaFile, 0)
|
||||||
err := r.loadChildren("album", albumId, &mfs, "Track", false)
|
err := r.loadChildren("album", albumId, &mfs, "", false)
|
||||||
|
sort.Sort(byTrackNumber(mfs))
|
||||||
return mfs, err
|
return mfs, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type byTrackNumber []domain.MediaFile
|
||||||
|
|
||||||
|
func (a byTrackNumber) Len() int {
|
||||||
|
return len(a)
|
||||||
|
}
|
||||||
|
func (a byTrackNumber) Swap(i, j int) {
|
||||||
|
a[i], a[j] = a[j], a[i]
|
||||||
|
}
|
||||||
|
func (a byTrackNumber) Less(i, j int) bool {
|
||||||
|
return (a[i].DiscNumber * 1000 + a[i].TrackNumber) < (a[j].DiscNumber * 1000 + a[j].TrackNumber)
|
||||||
|
}
|
||||||
|
@ -28,6 +28,7 @@ func (s *ItunesScanner) LoadFolder(path string) []Track {
|
|||||||
mediaFiles[i].Compilation = t.Compilation
|
mediaFiles[i].Compilation = t.Compilation
|
||||||
mediaFiles[i].Year = t.Year
|
mediaFiles[i].Year = t.Year
|
||||||
mediaFiles[i].TrackNumber = t.TrackNumber
|
mediaFiles[i].TrackNumber = t.TrackNumber
|
||||||
|
mediaFiles[i].DiscNumber = t.DiscNumber
|
||||||
if t.Size > 0 {
|
if t.Size > 0 {
|
||||||
mediaFiles[i].Size = strconv.Itoa(t.Size)
|
mediaFiles[i].Size = strconv.Itoa(t.Size)
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,8 @@ func parseTrack(t *Track) (*domain.MediaFile, *domain.Album, *domain.Artist) {
|
|||||||
Path: t.Path,
|
Path: t.Path,
|
||||||
CreatedAt: t.CreatedAt,
|
CreatedAt: t.CreatedAt,
|
||||||
UpdatedAt: t.UpdatedAt,
|
UpdatedAt: t.UpdatedAt,
|
||||||
Track: t.TrackNumber,
|
TrackNumber: t.TrackNumber,
|
||||||
|
DiscNumber: t.DiscNumber,
|
||||||
Genre: t.Genre,
|
Genre: t.Genre,
|
||||||
Year: t.Year,
|
Year: t.Year,
|
||||||
Size: t.Size,
|
Size: t.Size,
|
||||||
|
@ -13,6 +13,7 @@ type Track struct {
|
|||||||
AlbumArtist string
|
AlbumArtist string
|
||||||
Genre string
|
Genre string
|
||||||
TrackNumber int
|
TrackNumber int
|
||||||
|
DiscNumber int
|
||||||
Year int
|
Year int
|
||||||
Size string
|
Size string
|
||||||
Suffix string
|
Suffix string
|
||||||
|
Loading…
x
Reference in New Issue
Block a user