@Override public void next() { log.log(LogType.PLAYER, "next"); if (nextHandler != null) { nextHandler.run(); } else if (currentPlaylist != null && currentTrack != null) { if (shuffle) { open(currentPlaylist.get((int) (Math.random() * currentPlaylist.size()))); } else { if (repeat) { open(currentPlaylist.get(playlistPosition)); } else if (currentPlaylist.size() > playlistPosition + 1) { open(currentPlaylist.get(++playlistPosition)); } else { // try to load new entries currentPlaylist.loadNextEntries(); // TODO: create temp listener try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } if (currentPlaylist.size() > playlistPosition + 1) { open(currentPlaylist.get(++playlistPosition)); } else { log.log(LogType.PLAYER, "end of list"); } } } } }
@Override public void play() { if (player != null) { if (isPlaying) { player.pause(); isPlaying = false; log.log(LogType.PLAYER, "Pause"); } else { player.play(); isPlaying = true; log.log(LogType.PLAYER, "Play"); } UIManager.setPlayPauseIcon(isPlaying); } }
public void open(PagedListEntry entry) { try { if (MediaManager.canPlayProtocol("https")) BackgroundLoader.addTaskWithTimeout( () -> { if (entry instanceof PlayList) { // expand inner playlists currentPlaylist.remove(entry); PagedList<PagedListEntry> innerPlaylist = ((PlayList) entry).getTrackList(); currentPlaylist.addAll(playlistPosition, innerPlaylist); currentTrack = (Track) currentPlaylist.get(++playlistPosition); } else { currentTrack = (Track) entry; } String url = currentTrack.getStreamURL(); currentMedia = new Media(url); stop(); currentTrack.getWaveform().resetProgress(); player = new MediaPlayer(currentMedia); player.volumeProperty().bindBidirectional(volumeSliderProb); player.setOnEndOfMedia(this::next); // TODO: append listener to new player player.setAudioSpectrumListener(audioSpectrumListener); player.play(); isPlaying = true; UIManager.setTrackForPlayerUI(currentTrack, currentPlaylist); UIManager.setPlayPauseIcon(isPlaying); }, 3 * 1000); } catch (NoSuchMethodError error) { // the support came together with that method String version = com.sun.javafx.runtime.VersionInfo.getRuntimeVersion(); log.log(LogType.PLAYER, "JavaFx version does not support https protocol"); log.log(LogType.PLAYER, "Min version = 8.0.72. Current version " + version); } }
@Override public void previous() { log.log(LogType.PLAYER, "previous"); if (previousHandler != null) { previousHandler.run(); } else if (currentPlaylist != null && currentTrack != null) { int current = currentPlaylist.indexOf(currentTrack); if (current > 1) { open(currentPlaylist.get(--current)); } } }
@Override public void pause() { log.log(LogType.PLAYER, "pause"); player.pause(); }
@Override public void toggleShuffle() { log.log(LogType.PLAYER, "toggleShuffle"); shuffle = !shuffle; }
@Override public void setMediaPausedListener(MediaEventListener listener) { log.log(LogType.PLAYER, "setMediaPausedListener"); player.setOnPaused(listener::mediaEvent); }
@Override public void toggleRepeat() { log.log(LogType.PLAYER, "toggleRepeat"); repeat = !repeat; }