|
|
|
@ -252,6 +252,33 @@ public class PlayQueueService { |
|
|
|
|
return doPlayInternetRadio(request, player, radio).setStartPlayerAt(0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param index Start playing at this index, or play whole playlist if {@code null}. |
|
|
|
|
*/ |
|
|
|
|
public PlayQueueInfo addPlaylist(int id, Integer index) throws Exception { |
|
|
|
|
HttpServletRequest request = WebContextFactory.get().getHttpServletRequest(); |
|
|
|
|
HttpServletResponse response = WebContextFactory.get().getHttpServletResponse(); |
|
|
|
|
|
|
|
|
|
String username = securityService.getCurrentUsername(request); |
|
|
|
|
boolean queueFollowingSongs = settingsService.getUserSettings(username).isQueueFollowingSongs(); |
|
|
|
|
|
|
|
|
|
List<MediaFile> files = playlistService.getFilesInPlaylist(id, true); |
|
|
|
|
if (!files.isEmpty() && index != null) { |
|
|
|
|
if (queueFollowingSongs) { |
|
|
|
|
files = files.subList(index, files.size()); |
|
|
|
|
} else { |
|
|
|
|
files = Arrays.asList(files.get(index)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Remove non-present files
|
|
|
|
|
files.removeIf(file -> !file.isPresent()); |
|
|
|
|
|
|
|
|
|
// Add to the play queue
|
|
|
|
|
int[] ids = files.stream().mapToInt(f -> f.getId()).toArray(); |
|
|
|
|
return doAdd(request, response, ids, index); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param index Start playing at this index, or play whole playlist if {@code null}. |
|
|
|
|
*/ |
|
|
|
@ -273,6 +300,8 @@ public class PlayQueueService { |
|
|
|
|
|
|
|
|
|
// Remove non-present files
|
|
|
|
|
files.removeIf(file -> !file.isPresent()); |
|
|
|
|
|
|
|
|
|
// Play now
|
|
|
|
|
Player player = getCurrentPlayer(request, response); |
|
|
|
|
return doPlay(request, player, files).setStartPlayerAt(0); |
|
|
|
|
} |
|
|
|
|