From 65297f26f4e7e8e40715c00a3e3bbdd1eb5fa6ca Mon Sep 17 00:00:00 2001 From: Sebastien Date: Mon, 5 Mar 2018 12:01:03 +0100 Subject: [PATCH] Correct AutoFlow loop --- .../java/net/Broken/audio/TrackScheduler.java | 16 +++++++++++++++- .../net/Broken/audio/Youtube/YoutubeTools.java | 18 +++++++++++++----- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/Broken/audio/TrackScheduler.java b/src/main/java/net/Broken/audio/TrackScheduler.java index 2c78b60..e2cffda 100644 --- a/src/main/java/net/Broken/audio/TrackScheduler.java +++ b/src/main/java/net/Broken/audio/TrackScheduler.java @@ -28,6 +28,7 @@ public class TrackScheduler extends AudioEventAdapter { private final BlockingDeque queue; private UserAudioTrack currentPlayingTrack; private boolean autoPlay = true; + private ArrayList history = new ArrayList<>(); 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 // 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. + if(track.getSubmittedUser() != MainBot.jda.getSelfUser()){ + logger.debug("Flush history"); + history = new ArrayList<>(); + } + + history.add(track.getAudioTrack().getIdentifier()); if (!player.startTrack(track.getAudioTrack(), true)) { 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 // 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. + if(track.getSubmittedUser() != MainBot.jda.getSelfUser()){ + logger.debug("Flush history"); + history = new ArrayList<>(); + } + + history.add(track.getAudioTrack().getIdentifier()); if (!player.startTrack(track.getAudioTrack(), true)) { queue.addFirst(track); } @@ -163,7 +176,7 @@ public class TrackScheduler extends AudioEventAdapter { AudioM audioM = AudioM.getInstance(null); YoutubeTools youtubeTools = YoutubeTools.getInstance(null); try { - String id = youtubeTools.getRelatedVideo(currentPlayingTrack.getAudioTrack().getInfo().identifier); + String id = youtubeTools.getRelatedVideo(currentPlayingTrack.getAudioTrack().getInfo().identifier, history); logger.info("Related id: "+id); audioM.loadAndPlayAuto(id); @@ -178,5 +191,6 @@ public class TrackScheduler extends AudioEventAdapter { public void setAutoPlay(boolean autoPlay) { this.autoPlay = autoPlay; + needAutoPlay(); } } diff --git a/src/main/java/net/Broken/audio/Youtube/YoutubeTools.java b/src/main/java/net/Broken/audio/Youtube/YoutubeTools.java index b78e49a..600f2e5 100644 --- a/src/main/java/net/Broken/audio/Youtube/YoutubeTools.java +++ b/src/main/java/net/Broken/audio/Youtube/YoutubeTools.java @@ -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.YouTubeScopes; import com.google.api.services.youtube.model.SearchListResponse; +import com.google.api.services.youtube.model.SearchResult; import net.dv8tion.jda.core.entities.Guild; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.io.*; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; +import java.util.*; public class YoutubeTools { /** Application name. */ @@ -109,7 +108,7 @@ public class YoutubeTools { .build(); } - public String getRelatedVideo(String videoId) throws IOException, GoogleJsonResponseException, Throwable { + public String getRelatedVideo(String videoId, ArrayList history) throws IOException, GoogleJsonResponseException, Throwable { YouTube youtube = getYouTubeService(); @@ -118,7 +117,7 @@ public class YoutubeTools { parameters.put("relatedToVideoId", videoId); 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") != "") { searchListRelatedVideosRequest.setRelatedToVideoId(parameters.get("relatedToVideoId")); } @@ -129,6 +128,15 @@ public class YoutubeTools { 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(); }