Correct AutoFlow loop
This commit is contained in:
parent
0e16423ac1
commit
65297f26f4
@ -28,6 +28,7 @@ public class TrackScheduler extends AudioEventAdapter {
|
|||||||
private final BlockingDeque<UserAudioTrack> queue;
|
private final BlockingDeque<UserAudioTrack> queue;
|
||||||
private UserAudioTrack currentPlayingTrack;
|
private UserAudioTrack currentPlayingTrack;
|
||||||
private boolean autoPlay = true;
|
private boolean autoPlay = true;
|
||||||
|
private ArrayList<String> history = new ArrayList<>();
|
||||||
Logger logger = LogManager.getLogger();
|
Logger logger = LogManager.getLogger();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -49,6 +50,12 @@ public class TrackScheduler extends AudioEventAdapter {
|
|||||||
// Calling startTrack with the noInterrupt set to true will start the track only if nothing is currently playing. If
|
// Calling startTrack with the noInterrupt set to true will start the track only if nothing is currently playing. If
|
||||||
// something is playing, it returns false and does nothing. In that case the player was already playing so this
|
// something is playing, it returns false and does nothing. In that case the player was already playing so this
|
||||||
// track goes to the queue instead.
|
// track goes to the queue instead.
|
||||||
|
if(track.getSubmittedUser() != MainBot.jda.getSelfUser()){
|
||||||
|
logger.debug("Flush history");
|
||||||
|
history = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
history.add(track.getAudioTrack().getIdentifier());
|
||||||
if (!player.startTrack(track.getAudioTrack(), true)) {
|
if (!player.startTrack(track.getAudioTrack(), true)) {
|
||||||
queue.offer(track);
|
queue.offer(track);
|
||||||
}
|
}
|
||||||
@ -68,6 +75,12 @@ public class TrackScheduler extends AudioEventAdapter {
|
|||||||
// Calling startTrack with the noInterrupt set to true will start the track only if nothing is currently playing. If
|
// Calling startTrack with the noInterrupt set to true will start the track only if nothing is currently playing. If
|
||||||
// something is playing, it returns false and does nothing. In that case the player was already playing so this
|
// something is playing, it returns false and does nothing. In that case the player was already playing so this
|
||||||
// track goes to the queue instead.
|
// track goes to the queue instead.
|
||||||
|
if(track.getSubmittedUser() != MainBot.jda.getSelfUser()){
|
||||||
|
logger.debug("Flush history");
|
||||||
|
history = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
history.add(track.getAudioTrack().getIdentifier());
|
||||||
if (!player.startTrack(track.getAudioTrack(), true)) {
|
if (!player.startTrack(track.getAudioTrack(), true)) {
|
||||||
queue.addFirst(track);
|
queue.addFirst(track);
|
||||||
}
|
}
|
||||||
@ -163,7 +176,7 @@ public class TrackScheduler extends AudioEventAdapter {
|
|||||||
AudioM audioM = AudioM.getInstance(null);
|
AudioM audioM = AudioM.getInstance(null);
|
||||||
YoutubeTools youtubeTools = YoutubeTools.getInstance(null);
|
YoutubeTools youtubeTools = YoutubeTools.getInstance(null);
|
||||||
try {
|
try {
|
||||||
String id = youtubeTools.getRelatedVideo(currentPlayingTrack.getAudioTrack().getInfo().identifier);
|
String id = youtubeTools.getRelatedVideo(currentPlayingTrack.getAudioTrack().getInfo().identifier, history);
|
||||||
logger.info("Related id: "+id);
|
logger.info("Related id: "+id);
|
||||||
audioM.loadAndPlayAuto(id);
|
audioM.loadAndPlayAuto(id);
|
||||||
|
|
||||||
@ -178,5 +191,6 @@ public class TrackScheduler extends AudioEventAdapter {
|
|||||||
|
|
||||||
public void setAutoPlay(boolean autoPlay) {
|
public void setAutoPlay(boolean autoPlay) {
|
||||||
this.autoPlay = autoPlay;
|
this.autoPlay = autoPlay;
|
||||||
|
needAutoPlay();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,14 +12,13 @@ import com.google.api.client.util.store.FileDataStoreFactory;
|
|||||||
import com.google.api.services.youtube.YouTube;
|
import com.google.api.services.youtube.YouTube;
|
||||||
import com.google.api.services.youtube.YouTubeScopes;
|
import com.google.api.services.youtube.YouTubeScopes;
|
||||||
import com.google.api.services.youtube.model.SearchListResponse;
|
import com.google.api.services.youtube.model.SearchListResponse;
|
||||||
|
import com.google.api.services.youtube.model.SearchResult;
|
||||||
import net.dv8tion.jda.core.entities.Guild;
|
import net.dv8tion.jda.core.entities.Guild;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.Arrays;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
public class YoutubeTools {
|
public class YoutubeTools {
|
||||||
/** Application name. */
|
/** Application name. */
|
||||||
@ -109,7 +108,7 @@ public class YoutubeTools {
|
|||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getRelatedVideo(String videoId) throws IOException, GoogleJsonResponseException, Throwable {
|
public String getRelatedVideo(String videoId, ArrayList<String> history) throws IOException, GoogleJsonResponseException, Throwable {
|
||||||
|
|
||||||
YouTube youtube = getYouTubeService();
|
YouTube youtube = getYouTubeService();
|
||||||
|
|
||||||
@ -118,7 +117,7 @@ public class YoutubeTools {
|
|||||||
parameters.put("relatedToVideoId", videoId);
|
parameters.put("relatedToVideoId", videoId);
|
||||||
parameters.put("type", "video");
|
parameters.put("type", "video");
|
||||||
|
|
||||||
YouTube.Search.List searchListRelatedVideosRequest = youtube.search().list(parameters.get("part").toString());
|
YouTube.Search.List searchListRelatedVideosRequest = youtube.search().list(parameters.get("part"));
|
||||||
if (parameters.containsKey("relatedToVideoId") && parameters.get("relatedToVideoId") != "") {
|
if (parameters.containsKey("relatedToVideoId") && parameters.get("relatedToVideoId") != "") {
|
||||||
searchListRelatedVideosRequest.setRelatedToVideoId(parameters.get("relatedToVideoId"));
|
searchListRelatedVideosRequest.setRelatedToVideoId(parameters.get("relatedToVideoId"));
|
||||||
}
|
}
|
||||||
@ -129,6 +128,15 @@ public class YoutubeTools {
|
|||||||
|
|
||||||
SearchListResponse response = searchListRelatedVideosRequest.execute();
|
SearchListResponse response = searchListRelatedVideosRequest.execute();
|
||||||
|
|
||||||
|
for(SearchResult item : response.getItems()){
|
||||||
|
if(!history.contains(item.getId().getVideoId())){
|
||||||
|
return item.getId().getVideoId();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
logger.debug("ID already on history");
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.debug("All on history ?");
|
||||||
return response.getItems().get(0).getId().getVideoId();
|
return response.getItems().get(0).getId().getVideoId();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user