diff --git a/server/handler/construct_sub_by_folder.go b/server/handler/construct_sub_by_folder.go index 883a272..bc4b2ec 100644 --- a/server/handler/construct_sub_by_folder.go +++ b/server/handler/construct_sub_by_folder.go @@ -7,12 +7,23 @@ import ( "github.com/sentriz/gonic/server/subsonic" ) -func makeChildFromFolder(f *model.Album, parent *model.Album) *subsonic.Track { - child := &subsonic.Track{ - ID: f.ID, +func newAlbumByFolder(f *model.Album) *subsonic.Album { + return &subsonic.Album{ + Artist: f.Parent.RightPath, + CoverID: f.ID, + ID: f.ID, + IsDir: true, + ParentID: f.ParentID, + Title: f.RightPath, + } +} + +func newTCAlbumByFolder(f *model.Album, parent *model.Album) *subsonic.TrackChild { + child := &subsonic.TrackChild{ CoverID: f.ID, - Title: f.RightPath, + ID: f.ID, IsDir: true, + Title: f.RightPath, } if parent != nil { child.ParentID = parent.ID @@ -20,8 +31,8 @@ func makeChildFromFolder(f *model.Album, parent *model.Album) *subsonic.Track { return child } -func makeChildFromTrack(t *model.Track, parent *model.Album) *subsonic.Track { - return &subsonic.Track{ +func newTCTrackByFolder(t *model.Track, parent *model.Album) *subsonic.TrackChild { + return &subsonic.TrackChild{ ID: t.ID, Album: t.Album.RightPath, ContentType: t.MIME(), @@ -43,25 +54,14 @@ func makeChildFromTrack(t *model.Track, parent *model.Album) *subsonic.Track { } } -func makeAlbumFromFolder(f *model.Album) *subsonic.Album { - return &subsonic.Album{ - ID: f.ID, - Title: f.RightPath, - CoverID: f.ID, - ParentID: f.ParentID, - Artist: f.Parent.RightPath, - IsDir: true, - } -} - -func makeArtistFromFolder(f *model.Album) *subsonic.Artist { +func newArtistByFolder(f *model.Album) *subsonic.Artist { return &subsonic.Artist{ ID: f.ID, Name: f.RightPath, } } -func makeDirFromFolder(f *model.Album, children []*subsonic.Track) *subsonic.Directory { +func newDirectoryByFolder(f *model.Album, children []*subsonic.TrackChild) *subsonic.Directory { return &subsonic.Directory{ ID: f.ID, Parent: f.ParentID, diff --git a/server/handler/construct_sub_by_tags.go b/server/handler/construct_sub_by_tags.go index fda5408..b285c3e 100644 --- a/server/handler/construct_sub_by_tags.go +++ b/server/handler/construct_sub_by_tags.go @@ -7,12 +7,12 @@ import ( "github.com/sentriz/gonic/server/subsonic" ) -func makeAlbumFromAlbum(a *model.Album, artist *model.Artist) *subsonic.Album { +func newAlbumByTags(a *model.Album, artist *model.Artist) *subsonic.Album { ret := &subsonic.Album{ + CoverID: a.ID, + Created: a.CreatedAt, ID: a.ID, Name: a.TagTitle, - Created: a.CreatedAt, - CoverID: a.ID, } if artist != nil { ret.Artist = artist.Name @@ -21,8 +21,8 @@ func makeAlbumFromAlbum(a *model.Album, artist *model.Artist) *subsonic.Album { return ret } -func makeTrackFromTrack(t *model.Track, album *model.Album) *subsonic.Track { - return &subsonic.Track{ +func newTrackByTags(t *model.Track, album *model.Album) *subsonic.TrackChild { + return &subsonic.TrackChild{ ID: t.ID, ContentType: t.MIME(), Suffix: t.Ext(), @@ -45,7 +45,7 @@ func makeTrackFromTrack(t *model.Track, album *model.Album) *subsonic.Track { } } -func makeArtistFromArtist(a *model.Artist) *subsonic.Artist { +func newArtistByTags(a *model.Artist) *subsonic.Artist { return &subsonic.Artist{ ID: a.ID, Name: a.Name, diff --git a/server/handler/handler_sub_by_folder.go b/server/handler/handler_sub_by_folder.go index 26c798e..317fb2b 100644 --- a/server/handler/handler_sub_by_folder.go +++ b/server/handler/handler_sub_by_folder.go @@ -37,7 +37,7 @@ func (c *Controller) GetIndexes(w http.ResponseWriter, r *http.Request) { indexes = append(indexes, index) } index.Artists = append(index.Artists, - makeArtistFromFolder(folder)) + newArtistByFolder(folder)) } sort.Slice(indexes, func(i, j int) bool { return indexes[i].Name < indexes[j].Name @@ -56,7 +56,7 @@ func (c *Controller) GetMusicDirectory(w http.ResponseWriter, r *http.Request) { respondError(w, r, 10, "please provide an `id` parameter") return } - childrenObj := []*subsonic.Track{} + childrenObj := []*subsonic.TrackChild{} folder := &model.Album{} c.DB.First(folder, id) // @@ -67,7 +67,7 @@ func (c *Controller) GetMusicDirectory(w http.ResponseWriter, r *http.Request) { Find(&childFolders) for _, c := range childFolders { childrenObj = append(childrenObj, - makeChildFromFolder(c, folder)) + newTCAlbumByFolder(c, folder)) } // // start looking for child childTracks in the current dir @@ -78,7 +78,7 @@ func (c *Controller) GetMusicDirectory(w http.ResponseWriter, r *http.Request) { Order("filename"). Find(&childTracks) for _, c := range childTracks { - toAppend := makeChildFromTrack(c, folder) + toAppend := newTCTrackByFolder(c, folder) if getStrParam(r, "c") == "Jamstash" { // jamstash thinks it can't play flacs toAppend.ContentType = "audio/mpeg" @@ -89,7 +89,7 @@ func (c *Controller) GetMusicDirectory(w http.ResponseWriter, r *http.Request) { // // respond section sub := subsonic.NewResponse() - sub.Directory = makeDirFromFolder(folder, childrenObj) + sub.Directory = newDirectoryByFolder(folder, childrenObj) respond(w, r, sub) } @@ -144,7 +144,7 @@ func (c *Controller) GetAlbumList(w http.ResponseWriter, r *http.Request) { sub.Albums = &subsonic.Albums{} for _, folder := range folders { sub.Albums.List = append(sub.Albums.List, - makeAlbumFromFolder(folder)) + newAlbumByFolder(folder)) } respond(w, r, sub) } @@ -168,7 +168,7 @@ func (c *Controller) SearchTwo(w http.ResponseWriter, r *http.Request) { Find(&artists) for _, a := range artists { results.Artists = append(results.Artists, - makeDirFromFolder(a, nil)) + newDirectoryByFolder(a, nil)) } // // search "albums" @@ -181,7 +181,7 @@ func (c *Controller) SearchTwo(w http.ResponseWriter, r *http.Request) { Find(&albums) for _, a := range albums { results.Albums = append(results.Albums, - makeChildFromFolder(a, a.Parent)) + newTCAlbumByFolder(a, a.Parent)) } // // search tracks @@ -194,7 +194,7 @@ func (c *Controller) SearchTwo(w http.ResponseWriter, r *http.Request) { Find(&tracks) for _, t := range tracks { results.Tracks = append(results.Tracks, - makeChildFromTrack(t, t.Album)) + newTCTrackByFolder(t, t.Album)) } // sub := subsonic.NewResponse() diff --git a/server/handler/handler_sub_by_tags.go b/server/handler/handler_sub_by_tags.go index 1801abf..bb60fde 100644 --- a/server/handler/handler_sub_by_tags.go +++ b/server/handler/handler_sub_by_tags.go @@ -29,7 +29,7 @@ func (c *Controller) GetArtists(w http.ResponseWriter, r *http.Request) { indexes.List = append(indexes.List, index) } index.Artists = append(index.Artists, - makeArtistFromArtist(artist)) + newArtistByTags(artist)) } sort.Slice(indexes.List, func(i, j int) bool { return indexes.List[i].Name < indexes.List[j].Name @@ -50,10 +50,10 @@ func (c *Controller) GetArtist(w http.ResponseWriter, r *http.Request) { Preload("Albums"). First(artist, id) sub := subsonic.NewResponse() - sub.Artist = makeArtistFromArtist(artist) + sub.Artist = newArtistByTags(artist) for _, album := range artist.Albums { sub.Artist.Albums = append(sub.Artist.Albums, - makeAlbumFromAlbum(album, artist)) + newAlbumByTags(album, artist)) } respond(w, r, sub) } @@ -77,10 +77,10 @@ func (c *Controller) GetAlbum(w http.ResponseWriter, r *http.Request) { return } sub := subsonic.NewResponse() - sub.Album = makeAlbumFromAlbum(album, album.TagArtist) + sub.Album = newAlbumByTags(album, album.TagArtist) for _, track := range album.Tracks { sub.Album.Tracks = append(sub.Album.Tracks, - makeTrackFromTrack(track, album)) + newTrackByTags(track, album)) } respond(w, r, sub) } @@ -142,7 +142,7 @@ func (c *Controller) GetAlbumListTwo(w http.ResponseWriter, r *http.Request) { sub.AlbumsTwo = &subsonic.Albums{} for _, album := range albums { sub.AlbumsTwo.List = append(sub.AlbumsTwo.List, - makeAlbumFromAlbum(album, album.TagArtist)) + newAlbumByTags(album, album.TagArtist)) } respond(w, r, sub) } @@ -166,7 +166,7 @@ func (c *Controller) SearchThree(w http.ResponseWriter, r *http.Request) { Find(&artists) for _, a := range artists { results.Artists = append(results.Artists, - makeArtistFromArtist(a)) + newArtistByTags(a)) } // // search "albums" @@ -179,7 +179,7 @@ func (c *Controller) SearchThree(w http.ResponseWriter, r *http.Request) { Find(&albums) for _, a := range albums { results.Albums = append(results.Albums, - makeAlbumFromAlbum(a, a.TagArtist)) + newAlbumByTags(a, a.TagArtist)) } // // search tracks @@ -192,7 +192,7 @@ func (c *Controller) SearchThree(w http.ResponseWriter, r *http.Request) { Find(&tracks) for _, t := range tracks { results.Tracks = append(results.Tracks, - makeTrackFromTrack(t, t.Album)) + newTrackByTags(t, t.Album)) } sub := subsonic.NewResponse() sub.SearchResultThree = results diff --git a/server/subsonic/subsonic.go b/server/subsonic/subsonic.go index fe66a6b..722a8fa 100644 --- a/server/subsonic/subsonic.go +++ b/server/subsonic/subsonic.go @@ -17,7 +17,7 @@ type Response struct { Albums *Albums `xml:"albumList" json:"albumList,omitempty"` AlbumsTwo *Albums `xml:"albumList2" json:"albumList2,omitempty"` Album *Album `xml:"album" json:"album,omitempty"` - Track *Track `xml:"song" json:"song,omitempty"` + Track *TrackChild `xml:"song" json:"song,omitempty"` Indexes *Indexes `xml:"indexes" json:"indexes,omitempty"` Artists *Artists `xml:"artists" json:"artists,omitempty"` Artist *Artist `xml:"artist" json:"artist,omitempty"` @@ -71,18 +71,18 @@ type Album struct { ParentID int `xml:"parent,attr,omitempty" json:"parent,omitempty"` IsDir bool `xml:"isDir,attr,omitempty" json:"isDir,omitempty"` // browsing by tags (getAlbumList2) - Name string `xml:"name,attr,omitempty" json:"name,omitempty"` - TrackCount int `xml:"songCount,attr,omitempty" json:"songCount,omitempty"` - Duration int `xml:"duration,attr,omitempty" json:"duration,omitempty"` - Created time.Time `xml:"created,attr,omitempty" json:"created,omitempty"` - Tracks []*Track `xml:"song,omitempty" json:"song,omitempty"` + Name string `xml:"name,attr,omitempty" json:"name,omitempty"` + TrackCount int `xml:"songCount,attr,omitempty" json:"songCount,omitempty"` + Duration int `xml:"duration,attr,omitempty" json:"duration,omitempty"` + Created time.Time `xml:"created,attr,omitempty" json:"created,omitempty"` + Tracks []*TrackChild `xml:"song,omitempty" json:"song,omitempty"` } type RandomTracks struct { - Tracks []*Track `xml:"song" json:"song"` + Tracks []*TrackChild `xml:"song" json:"song"` } -type Track struct { +type TrackChild struct { Album string `xml:"album,attr,omitempty" json:"album,omitempty"` AlbumID int `xml:"albumId,attr,omitempty" json:"albumId,omitempty"` Artist string `xml:"artist,attr,omitempty" json:"artist,omitempty"` @@ -128,11 +128,11 @@ type Index struct { } type Directory struct { - ID int `xml:"id,attr,omitempty" json:"id"` - Parent int `xml:"parent,attr,omitempty" json:"parent"` - Name string `xml:"name,attr,omitempty" json:"name"` - Starred string `xml:"starred,attr,omitempty" json:"starred,omitempty"` - Children []*Track `xml:"child,omitempty" json:"child,omitempty"` + ID int `xml:"id,attr,omitempty" json:"id"` + Parent int `xml:"parent,attr,omitempty" json:"parent"` + Name string `xml:"name,attr,omitempty" json:"name"` + Starred string `xml:"starred,attr,omitempty" json:"starred,omitempty"` + Children []*TrackChild `xml:"child,omitempty" json:"child,omitempty"` } type MusicFolders struct { @@ -154,13 +154,13 @@ type ScanStatus struct { } type SearchResultTwo struct { - Artists []*Directory `xml:"artist,omitempty" json:"artist,omitempty"` - Albums []*Track `xml:"album,omitempty" json:"album,omitempty"` - Tracks []*Track `xml:"song,omitempty" json:"song,omitempty"` + Artists []*Directory `xml:"artist,omitempty" json:"artist,omitempty"` + Albums []*TrackChild `xml:"album,omitempty" json:"album,omitempty"` + Tracks []*TrackChild `xml:"song,omitempty" json:"song,omitempty"` } type SearchResultThree struct { - Artists []*Artist `xml:"artist,omitempty" json:"artist,omitempty"` - Albums []*Album `xml:"album,omitempty" json:"album,omitempty"` - Tracks []*Track `xml:"song,omitempty" json:"song,omitempty"` + Artists []*Artist `xml:"artist,omitempty" json:"artist,omitempty"` + Albums []*Album `xml:"album,omitempty" json:"album,omitempty"` + Tracks []*TrackChild `xml:"song,omitempty" json:"song,omitempty"` }