playlist updates
This commit is contained in:
@@ -46,8 +46,8 @@ func (j *jellyfinMediaProvider) SetPrefetchCoverCallback(cb func(coverArtID stri
|
||||
j.prefetchCoverCB = cb
|
||||
}
|
||||
|
||||
func (jellyfinMediaProvider) CreatePlaylist(name string, trackIDs []string) error {
|
||||
return errors.New("unimplemented")
|
||||
func (j *jellyfinMediaProvider) CreatePlaylist(name string, trackIDs []string) error {
|
||||
return j.client.CreatePlaylist(name, trackIDs)
|
||||
}
|
||||
|
||||
func (j *jellyfinMediaProvider) DeletePlaylist(id string) error {
|
||||
@@ -58,12 +58,25 @@ func (s *jellyfinMediaProvider) EditPlaylist(id, name, description string, publi
|
||||
return errors.New("unimplemented")
|
||||
}
|
||||
|
||||
func (s *jellyfinMediaProvider) EditPlaylistTracks(id string, trackIDsToAdd []string, trackIndexesToRemove []int) error {
|
||||
return errors.New("unimplemented")
|
||||
func (j *jellyfinMediaProvider) AddPlaylistTracks(id string, trackIDsToAdd []string) error {
|
||||
return j.client.AddSongsToPlaylist(id, trackIDsToAdd)
|
||||
}
|
||||
|
||||
func (s *jellyfinMediaProvider) ReplacePlaylistTracks(playlistID string, trackIDs []string) error {
|
||||
return errors.New("unimplemented")
|
||||
func (j *jellyfinMediaProvider) RemovePlaylistTracks(playlistID string, removeInfo []mediaprovider.IDAndIndex) error {
|
||||
ids := sharedutil.MapSlice(removeInfo, func(x mediaprovider.IDAndIndex) string { return x.ID })
|
||||
return j.client.RemoveSongsFromPlaylist(playlistID, ids)
|
||||
}
|
||||
|
||||
func (j *jellyfinMediaProvider) ReplacePlaylistTracks(playlistID string, trackIDs []string) error {
|
||||
trs, err := j.client.GetPlaylistSongs(playlistID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
idsToDelete := sharedutil.MapSlice(trs, func(t *jellyfin.Song) string { return t.Id })
|
||||
if err = j.client.RemoveSongsFromPlaylist(playlistID, idsToDelete); err != nil {
|
||||
return err
|
||||
}
|
||||
return j.client.AddSongsToPlaylist(playlistID, trackIDs)
|
||||
}
|
||||
|
||||
func (j *jellyfinMediaProvider) GetAlbum(albumID string) (*mediaprovider.AlbumWithTracks, error) {
|
||||
@@ -420,9 +433,9 @@ func toPlaylist(p *jellyfin.Playlist) *mediaprovider.Playlist {
|
||||
func fillPlaylist(p *jellyfin.Playlist, pl *mediaprovider.Playlist) {
|
||||
pl.Name = p.Name
|
||||
pl.ID = p.ID
|
||||
//CoverArtID = pl.CoverArt
|
||||
pl.CoverArtID = p.ID
|
||||
pl.Description = p.Overview
|
||||
//.Owner = pl.Owner
|
||||
//Owner = pl.Owner
|
||||
//Public = pl.Public
|
||||
pl.TrackCount = p.SongCount
|
||||
pl.Duration = int(p.RunTimeTicks / 1_000_000)
|
||||
|
||||
@@ -66,6 +66,11 @@ type Server interface {
|
||||
MediaProvider() MediaProvider
|
||||
}
|
||||
|
||||
type IDAndIndex struct {
|
||||
ID string
|
||||
Index int
|
||||
}
|
||||
|
||||
type MediaProvider interface {
|
||||
SetPrefetchCoverCallback(cb func(coverArtID string))
|
||||
|
||||
@@ -115,7 +120,11 @@ type MediaProvider interface {
|
||||
|
||||
EditPlaylist(id, name, description string, public bool) error
|
||||
|
||||
EditPlaylistTracks(id string, trackIDsToAdd []string, trackIndexesToRemove []int) error
|
||||
AddPlaylistTracks(id string, trackIDsToAdd []string) error
|
||||
|
||||
// Some MediaProviders use ids and others indexes for removing tracks,
|
||||
// so need to supply both.
|
||||
RemovePlaylistTracks(id string, trackRemoveInfo []IDAndIndex) error
|
||||
|
||||
ReplacePlaylistTracks(id string, trackIDs []string) error
|
||||
|
||||
|
||||
@@ -51,8 +51,13 @@ func (s *subsonicMediaProvider) EditPlaylist(id, name, description string, publi
|
||||
})
|
||||
}
|
||||
|
||||
func (s *subsonicMediaProvider) EditPlaylistTracks(id string, trackIDsToAdd []string, trackIndexesToRemove []int) error {
|
||||
return s.client.UpdatePlaylistTracks(id, trackIDsToAdd, trackIndexesToRemove)
|
||||
func (s *subsonicMediaProvider) AddPlaylistTracks(id string, trackIDsToAdd []string) error {
|
||||
return s.client.UpdatePlaylistTracks(id, trackIDsToAdd, nil)
|
||||
}
|
||||
|
||||
func (s *subsonicMediaProvider) RemovePlaylistTracks(id string, removeInfo []mediaprovider.IDAndIndex) error {
|
||||
idx := sharedutil.MapSlice(removeInfo, func(x mediaprovider.IDAndIndex) int { return x.Index })
|
||||
return s.client.UpdatePlaylistTracks(id, nil, idx)
|
||||
}
|
||||
|
||||
func (s *subsonicMediaProvider) GetTrack(trackID string) (*mediaprovider.Track, error) {
|
||||
|
||||
Reference in New Issue
Block a user