Skip to content

Commit dd76101

Browse files
committed
Add repeating
1 parent 594568a commit dd76101

File tree

7 files changed

+53
-4
lines changed

7 files changed

+53
-4
lines changed

TestBot/src/main/java/com/shirkanesi/magmaplayer/testbot/MagmaPlayerTestBot.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ private static void updateSlashCommands(Guild guild) {
7878
Commands.slash("skip", "Skip the current track"),
7979
Commands.slash("queue", "Output the current queue"),
8080
Commands.slash("track", "Output information about current track"),
81-
Commands.slash("pause", "Pause or resume the current track")
81+
Commands.slash("pause", "Pause or resume the current track"),
82+
Commands.slash("repeat", "Repeat the currently playing track")
8283
);
8384

8485
commands.queue();

TestBot/src/main/java/com/shirkanesi/magmaplayer/testbot/discord/SlashCommandListener.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,14 @@ public void onSlashCommandInteraction(SlashCommandInteractionEvent event) {
103103
event.reply("Audio player paused").setEphemeral(true).queue();
104104
}
105105
}
106+
case "repeat" -> {
107+
audioPlayer.toggleRepeating();
108+
if (audioPlayer.isRepeating()) {
109+
event.reply("Audio player is now repeated").setEphemeral(true).queue();
110+
} else {
111+
event.reply("Audio player is now *not* repeated").setEphemeral(true).queue();
112+
}
113+
}
106114
}
107115
}
108116
}

main/src/main/java/com/shirkanesi/magmaplayer/AudioPlayer.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
import com.shirkanesi.magmaplayer.listener.FiresEvent;
66
import com.shirkanesi.magmaplayer.listener.events.AudioTrackEndEvent;
77
import com.shirkanesi.magmaplayer.listener.events.AudioTrackPauseEvent;
8+
import com.shirkanesi.magmaplayer.listener.events.AudioTrackRepeatEvent;
89
import com.shirkanesi.magmaplayer.listener.events.AudioTrackSkippedEvent;
910
import com.shirkanesi.magmaplayer.model.AudioPlaylist;
1011
import com.shirkanesi.magmaplayer.model.AudioTrack;
1112
import com.shirkanesi.magmaplayer.model.Pauseable;
13+
import lombok.Getter;
1214
import lombok.extern.slf4j.Slf4j;
1315
import net.dv8tion.jda.api.audio.AudioSendHandler;
1416
import net.dv8tion.jda.api.entities.channel.concrete.VoiceChannel;
@@ -28,6 +30,8 @@ public class AudioPlayer implements Pauseable, Closeable, AudioTrackEventListene
2830
private final BlockingQueue<AudioTrack> trackQueue = new LinkedBlockingQueue<>();
2931

3032
private boolean paused = false;
33+
@Getter
34+
private boolean repeating = false;
3135

3236
private AudioSendHandler sendHandler;
3337

@@ -170,8 +174,20 @@ public void clearQueue() {
170174
this.trackQueue.clear();
171175
}
172176

177+
@FiresEvent(value = AudioTrackRepeatEvent.class, onEveryPass = true)
178+
public void toggleRepeating() {
179+
this.repeating = !this.repeating;
180+
if (this.audioTrack != null) {
181+
this.audioTrack.getAudioTrackObserver().triggerAudioTrackRepeat(repeating);
182+
}
183+
}
184+
173185
@Override
174186
public void onAudioTrackEnded(AudioTrackEndEvent event) {
175-
next();
187+
if (repeating) {
188+
setTrack(this.audioTrack);
189+
} else {
190+
next();
191+
}
176192
}
177193
}

main/src/main/java/com/shirkanesi/magmaplayer/listener/AudioTrackEventListener.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.shirkanesi.magmaplayer.listener.events.AudioTrackEndEvent;
44
import com.shirkanesi.magmaplayer.listener.events.AudioTrackJumpEvent;
55
import com.shirkanesi.magmaplayer.listener.events.AudioTrackPauseEvent;
6+
import com.shirkanesi.magmaplayer.listener.events.AudioTrackRepeatEvent;
67
import com.shirkanesi.magmaplayer.listener.events.AudioTrackSkippedEvent;
78
import com.shirkanesi.magmaplayer.listener.events.AudioTrackStartedEvent;
89

@@ -20,4 +21,6 @@ default void onAudioTrackPaused(final AudioTrackPauseEvent event) {}
2021

2122
default void onAudioTrackJump(final AudioTrackJumpEvent event) {}
2223

24+
default void onAudioTrackRepeat(final AudioTrackRepeatEvent event) {}
25+
2326
}

main/src/main/java/com/shirkanesi/magmaplayer/listener/AudioTrackObserver.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.shirkanesi.magmaplayer.listener;
22

3+
import com.shirkanesi.magmaplayer.listener.events.AudioTrackRepeatEvent;
34
import com.shirkanesi.magmaplayer.model.AudioTrack;
45
import com.shirkanesi.magmaplayer.listener.events.AudioTrackEndEvent;
56
import com.shirkanesi.magmaplayer.listener.events.AudioTrackJumpEvent;
@@ -45,6 +46,11 @@ public void triggerAudioTrackJump(long from, long to) {
4546
this.listeners.forEach(listener -> listener.onAudioTrackJump(event));
4647
}
4748

49+
public void triggerAudioTrackRepeat(boolean repeating) {
50+
AudioTrackRepeatEvent event = new AudioTrackRepeatEvent(audioTrack, repeating);
51+
this.listeners.forEach(listener -> listener.onAudioTrackRepeat(event));
52+
}
53+
4854
public void addEventListener(AudioTrackEventListener listener) {
4955
this.listeners.add(listener);
5056
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.shirkanesi.magmaplayer.listener.events;
2+
3+
import com.shirkanesi.magmaplayer.model.AudioTrack;
4+
import lombok.Getter;
5+
import org.jetbrains.annotations.NotNull;
6+
7+
@Getter
8+
public class AudioTrackRepeatEvent extends AudioTrackEvent {
9+
10+
private final boolean repeating;
11+
12+
public AudioTrackRepeatEvent(@NotNull AudioTrack audioTrack, boolean repeating) {
13+
super(audioTrack);
14+
this.repeating = repeating;
15+
}
16+
}

main/src/main/java/com/shirkanesi/magmaplayer/ytdlp/YTDLPAudioTrack.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import com.shirkanesi.magmaplayer.listener.FiresEvent;
1010
import com.shirkanesi.magmaplayer.listener.events.AudioTrackJumpEvent;
1111
import com.shirkanesi.magmaplayer.listener.events.AudioTrackStartedEvent;
12-
import com.shirkanesi.magmaplayer.model.UserData;
1312
import com.shirkanesi.magmaplayer.util.FormatUtils;
1413
import lombok.Setter;
1514
import com.shirkanesi.magmaplayer.ytdlp.model.YTDLPAudioTrackInformation;
@@ -215,7 +214,7 @@ public void restart() throws AudioPlayerException {
215214
try {
216215
this.ready = false;
217216
if (this.opusFile != null) {
218-
this.opusFile.close();
217+
this.opusFile = null;
219218
}
220219

221220
// This looks like busy-waiting. Well that's right. However, this will wait at most seconds.

0 commit comments

Comments
 (0)