Skip to content

Commit 3fc9d5d

Browse files
committed
fix(subsonic): gracefully handle missing playqueue items
1 parent 29b7549 commit 3fc9d5d

1 file changed

Lines changed: 26 additions & 12 deletions

File tree

server/ctrlsubsonic/handlers_common.go

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -206,30 +206,44 @@ func (c *Controller) ServeGetPlayQueue(r *http.Request) *spec.Response {
206206
sub.PlayQueue.ChangedBy = queue.ChangedBy
207207

208208
trackIDs := queue.GetItems()
209-
sub.PlayQueue.List = make([]*spec.TrackChild, len(trackIDs))
209+
sub.PlayQueue.List = make([]*spec.TrackChild, 0, len(trackIDs))
210210

211211
transcodeMeta := streamGetTranscodeMeta(c.dbc, user.ID, params.GetOr("c", ""))
212212

213-
for i, id := range trackIDs {
213+
for _, id := range trackIDs {
214214
switch id.Type {
215215
case specid.Track:
216-
track := db.Track{}
217-
c.dbc.
216+
var track db.Track
217+
err := c.dbc.
218218
Where("id=?", id.Value).
219219
Preload("Album").
220220
Preload("Artists").
221221
Preload("TrackStar", "user_id=?", user.ID).
222222
Preload("TrackRating", "user_id=?", user.ID).
223-
Find(&track)
224-
sub.PlayQueue.List[i] = spec.NewTCTrackByFolder(&track, track.Album)
225-
sub.PlayQueue.List[i].TranscodeMeta = transcodeMeta
223+
Find(&track).
224+
Error
225+
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
226+
return spec.NewError(0, "error finding track")
227+
}
228+
if track.ID != 0 {
229+
tc := spec.NewTCTrackByFolder(&track, track.Album)
230+
tc.TranscodeMeta = transcodeMeta
231+
sub.PlayQueue.List = append(sub.PlayQueue.List, tc)
232+
}
226233
case specid.PodcastEpisode:
227-
pe := db.PodcastEpisode{}
228-
c.dbc.
234+
var pe db.PodcastEpisode
235+
err := c.dbc.
229236
Where("id=?", id.Value).
230-
Find(&pe)
231-
sub.PlayQueue.List[i] = spec.NewTCPodcastEpisode(&pe)
232-
sub.PlayQueue.List[i].TranscodeMeta = transcodeMeta
237+
Find(&pe).
238+
Error
239+
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
240+
return spec.NewError(0, "error finding podcast episode")
241+
}
242+
if pe.ID != 0 {
243+
tc := spec.NewTCPodcastEpisode(&pe)
244+
tc.TranscodeMeta = transcodeMeta
245+
sub.PlayQueue.List = append(sub.PlayQueue.List, tc)
246+
}
233247
}
234248
}
235249
return sub

0 commit comments

Comments
 (0)