Initial Commit

This commit is contained in:
Isaac Parenteau
2019-10-03 00:13:27 -05:00
commit 62d19faa40
8 changed files with 647 additions and 0 deletions

View File

@@ -0,0 +1,80 @@
package net.locusworks.discord.eighttrack.scheduler;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.function.Consumer;
import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
import com.sedmelluq.discord.lavaplayer.player.event.AudioEventAdapter;
import com.sedmelluq.discord.lavaplayer.player.event.AudioEventListener;
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
import com.sedmelluq.discord.lavaplayer.track.AudioTrackEndReason;
public class TrackScheduler extends AudioEventAdapter implements AudioEventListener, AudioLoadResultHandler {
private Queue<AudioTrack> trackQueue;
private boolean started;
private Consumer<AudioTrackEndReason> finished;
public TrackScheduler() {
trackQueue = new LinkedBlockingQueue<AudioTrack>();
}
@Override
public void onTrackStart(AudioPlayer player, AudioTrack track) {
this.started = true;
super.onTrackStart(player, track);
}
@Override
public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) {
this.started = false;
super.onTrackEnd(player, track, endReason);
if (finished != null) finished.accept(endReason);
}
public void setFinishedCallback(Consumer<AudioTrackEndReason> callback) {
if (this.finished == null) this.finished = callback;
}
public void trackLoaded(AudioTrack track) {
trackQueue.add(track);
}
public void playlistLoaded(AudioPlaylist playlist) {
for (AudioTrack at : playlist.getTracks()) {
trackQueue.add(at);
}
}
public void noMatches() {
// TODO Auto-generated method stub
}
public void loadFailed(FriendlyException exception) {
// TODO Auto-generated method stub
}
public AudioTrack peek() {
return trackQueue.peek();
}
public boolean hasTracks() {
return !trackQueue.isEmpty();
}
public AudioTrack getNextTrack() {
return trackQueue.poll();
}
public boolean playing() {
return started;
}
}