diff --git a/interface/src/main/java/edu/regis/universeplayer/PlayerEnvironment.java b/interface/src/main/java/edu/regis/universeplayer/PlayerEnvironment.java index 97265bd..7466103 100644 --- a/interface/src/main/java/edu/regis/universeplayer/PlayerEnvironment.java +++ b/interface/src/main/java/edu/regis/universeplayer/PlayerEnvironment.java @@ -1,30 +1,24 @@ package edu.regis.universeplayer; +import edu.regis.universeplayer.data.Queue; +import edu.regis.universeplayer.data.*; +import edu.regis.universeplayer.gui.Interface; +import edu.regis.universeplayer.player.PlayerManager; import org.apache.commons.cli.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.*; +import javax.swing.*; +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.io.PrintStream; +import java.io.PrintWriter; import java.net.Socket; import java.util.*; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; -import java.util.regex.Pattern; import java.util.stream.Collectors; -import javax.swing.JOptionPane; - -import edu.regis.universeplayer.data.AlbumProvider; -import edu.regis.universeplayer.data.CompiledSongProvider; -import edu.regis.universeplayer.data.DefaultAlbumProvider; -import edu.regis.universeplayer.data.InternetSongProvider; -import edu.regis.universeplayer.data.LocalSongProvider; -import edu.regis.universeplayer.data.Queue; -import edu.regis.universeplayer.data.Song; -import edu.regis.universeplayer.data.SongProvider; -import edu.regis.universeplayer.gui.Interface; -import edu.regis.universeplayer.player.PlayerManager; - /** * A centralized spot to link up all of the components. * diff --git a/interface/src/main/java/edu/regis/universeplayer/player/LocalPlayer.java b/interface/src/main/java/edu/regis/universeplayer/player/LocalPlayer.java index 7509be7..ceecfd4 100644 --- a/interface/src/main/java/edu/regis/universeplayer/player/LocalPlayer.java +++ b/interface/src/main/java/edu/regis/universeplayer/player/LocalPlayer.java @@ -151,14 +151,14 @@ public class LocalPlayer implements Player, MediaPlayerEventListener this.player.mediaPlayer().submit(() -> this.player.mediaPlayer() .controls() .play()); - return new AbstractTask<>() + return this.service.submit(new AbstractTask<>() { @Override protected boolean exec() { return true; } - }; + }); } @Override @@ -168,14 +168,14 @@ public class LocalPlayer implements Player, MediaPlayerEventListener .submit(() -> this.player.mediaPlayer() .controls() .pause()); - return new AbstractTask<>() + return this.service.submit(new AbstractTask<>() { @Override protected boolean exec() { return true; } - }; + }); } @Override @@ -216,14 +216,14 @@ public class LocalPlayer implements Player, MediaPlayerEventListener .submit(() -> this.player.mediaPlayer() .controls() .stop()); - return new AbstractTask<>() + return this.service.submit(new AbstractTask<>() { @Override protected boolean exec() { return true; } - }; + }); } @Override @@ -233,14 +233,14 @@ public class LocalPlayer implements Player, MediaPlayerEventListener .submit(() -> this.player.mediaPlayer() .controls() .setTime((long) (time * 1000))); - return new AbstractTask<>() + return this.service.submit(new AbstractTask<>() { @Override protected boolean exec() { return true; } - }; + }); } @Override diff --git a/interface/src/main/java/edu/regis/universeplayer/player/PlayerManager.java b/interface/src/main/java/edu/regis/universeplayer/player/PlayerManager.java index 955c435..ae81aaf 100644 --- a/interface/src/main/java/edu/regis/universeplayer/player/PlayerManager.java +++ b/interface/src/main/java/edu/regis/universeplayer/player/PlayerManager.java @@ -15,6 +15,7 @@ import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.LinkedList; import java.util.concurrent.CancellationException; +import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; import java.util.concurrent.TimeUnit; @@ -252,30 +253,53 @@ public class PlayerManager implements PlaybackListener }; } + /** + * Loads up a requested song and immedietally begins playback. + * + * @param song - The song to load. + * @return The task that handles the request. + */ public ForkJoinTask playSong(Song song) { - if (this.currentSong != null) + return ForkJoinPool.commonPool().submit(new AbstractTask() { - this.currentPlayer.stopSong(); - } - this.currentSong = null; - this.currentPlayer = this.getCompatiblePlayer(song); - if (this.currentPlayer == null) - { - throw new IllegalArgumentException("Unknown song type " + song - .getClass()); - } - this.currentSong = song; - return this.currentPlayer.loadSong(song); + @Override + protected boolean exec() + { + if (currentSong != null) + { + currentPlayer.stopSong().join(); + } + currentSong = null; + currentPlayer = getCompatiblePlayer(song); + if (currentPlayer == null) + { + throw new IllegalArgumentException("Unknown song type " + song + .getClass()); + } + currentSong = song; + currentPlayer.loadSong(song).join(); + return true; + } + }); } + /** + * Obtains the playback status of the current player. + * + * @return A task containing the status, or EMPTY if no player is being + * used. + */ public ForkJoinTask getStatus() { if (this.currentPlayer != null) { return this.currentPlayer.getStatus(); } - return new AbstractTask<>() + /* + * If we have no player, then we return EMPTY. + */ + return ForkJoinPool.commonPool().submit(new AbstractTask<>() { @Override protected boolean exec() @@ -283,16 +307,29 @@ public class PlayerManager implements PlaybackListener complete(PlaybackStatus.EMPTY); return true; } - }; + }); } + /** + * Seeks to the specified time stamp. + * + * @param time - The time to seek to, in seconds. + * @return The task running this task. + */ public ForkJoinTask seek(float time) { if (this.currentPlayer != null) { return this.currentPlayer.seek(time); } - return null; + return ForkJoinPool.commonPool().submit(new AbstractTask<>() + { + @Override + protected boolean exec() + { + return true; + } + }); } public ForkJoinTask play() @@ -301,7 +338,14 @@ public class PlayerManager implements PlaybackListener { return this.currentPlayer.play(); } - return null; + return ForkJoinPool.commonPool().submit(new AbstractTask<>() + { + @Override + protected boolean exec() + { + return true; + } + }); } public ForkJoinTask pause() @@ -310,7 +354,14 @@ public class PlayerManager implements PlaybackListener { return this.currentPlayer.pause(); } - return null; + return ForkJoinPool.commonPool().submit(new AbstractTask<>() + { + @Override + protected boolean exec() + { + return true; + } + }); } public ForkJoinTask toggle() @@ -319,7 +370,14 @@ public class PlayerManager implements PlaybackListener { return this.currentPlayer.togglePlayback(); } - return null; + return ForkJoinPool.commonPool().submit(new AbstractTask<>() + { + @Override + protected boolean exec() + { + return true; + } + }); } public ForkJoinTask stopSong() @@ -329,7 +387,14 @@ public class PlayerManager implements PlaybackListener this.currentSong = null; return this.currentPlayer.stopSong(); } - return null; + return ForkJoinPool.commonPool().submit(new AbstractTask<>() + { + @Override + protected boolean exec() + { + return true; + } + }); } public void addPlaybackListener(PlaybackListener listener) @@ -369,6 +434,7 @@ public class PlayerManager implements PlaybackListener /** * Sends an error to the browser player. + * * @param forward - Whether the error should be thrown in a foreground * script or a background script. * @return The command future.