Ensures that every query creates a submission to the service.

This is the only way that a Future will work, even if it doesn't do anything.
This commit is contained in:
Markil3
2021-11-13 08:53:01 -07:00
parent afce1a8628
commit 36514031f8
3 changed files with 102 additions and 42 deletions

View File

@@ -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.
*

View File

@@ -151,14 +151,14 @@ public class LocalPlayer implements Player<LocalSong>, 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<LocalSong>, 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<LocalSong>, 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<LocalSong>, 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

View File

@@ -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<Void> playSong(Song song)
{
if (this.currentSong != null)
return ForkJoinPool.commonPool().submit(new AbstractTask<Void>()
{
this.currentPlayer.stopSong();
@Override
protected boolean exec()
{
if (currentSong != null)
{
currentPlayer.stopSong().join();
}
this.currentSong = null;
this.currentPlayer = this.getCompatiblePlayer(song);
if (this.currentPlayer == null)
currentSong = null;
currentPlayer = getCompatiblePlayer(song);
if (currentPlayer == null)
{
throw new IllegalArgumentException("Unknown song type " + song
.getClass());
}
this.currentSong = song;
return this.currentPlayer.loadSong(song);
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<PlaybackStatus> 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<Void> 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<Void> 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<Void> 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<Void> 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<Void> 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.