Skip to content

Commit 12615a3

Browse files
committed
Update internal track cache on track start
1 parent e6919c8 commit 12615a3

File tree

4 files changed

+33
-13
lines changed

4 files changed

+33
-13
lines changed

src/main/kotlin/dev/arbjerg/lavalink/client/IUpdatablePlayer.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,15 @@ interface IUpdatablePlayer {
1212
*
1313
* @return The updated builder, useful for chaining
1414
*/
15-
fun applyTrack(track: Track?): PlayerUpdateBuilder
15+
fun setTrack(track: Track?): PlayerUpdateBuilder
16+
17+
@Deprecated(
18+
message = "Use setTrack instead",
19+
replaceWith = ReplaceWith("setTrack(track)")
20+
)
21+
fun applyTrack(track: Track?): PlayerUpdateBuilder {
22+
return setTrack(track)
23+
}
1624

1725
/**
1826
* Shortcut for setting the encoded track to {@code null}. This will also clear the user data.

src/main/kotlin/dev/arbjerg/lavalink/client/LavalinkPlayer.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ class LavalinkPlayer(private val node: LavalinkNode, protocolPlayer: Player) : I
1111
*
1212
* To get the current position of the track, use [position].
1313
*/
14-
val track = protocolPlayer.track
14+
var track = protocolPlayer.track
15+
internal set
1516

1617
/**
1718
* Number between 0 and 1000, where 100 is 100% volume.
@@ -30,15 +31,16 @@ class LavalinkPlayer(private val node: LavalinkNode, protocolPlayer: Player) : I
3031

3132
val position: Long
3233
get() {
34+
val checkedTrack = track
3335
return when {
34-
track == null -> 0
36+
checkedTrack == null -> 0
3537
paused -> state.position
36-
else -> min(state.position + (System.currentTimeMillis() - state.time), track.info.length)
38+
else -> min(state.position + (System.currentTimeMillis() - state.time), checkedTrack.info.length)
3739
}
3840
}
3941

40-
override fun applyTrack(track: Track?) = PlayerUpdateBuilder(node, guildId)
41-
.applyTrack(track)
42+
override fun setTrack(track: Track?) = PlayerUpdateBuilder(node, guildId)
43+
.setTrack(track)
4244

4345
override fun stopTrack() = PlayerUpdateBuilder(node, guildId)
4446
.stopTrack()

src/main/kotlin/dev/arbjerg/lavalink/client/PlayerUpdateBuilder.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package dev.arbjerg.lavalink.client
33
import dev.arbjerg.lavalink.internal.toLavalinkPlayer
44
import dev.arbjerg.lavalink.protocol.v4.*
55
import kotlinx.serialization.json.JsonObject
6+
import org.checkerframework.checker.optional.qual.Present
67
import reactor.core.publisher.Mono
78
import kotlin.math.max
89
import kotlin.math.min
@@ -19,7 +20,7 @@ class PlayerUpdateBuilder internal constructor(private val node: LavalinkNode, p
1920
private var state: Omissible<VoiceState> = Omissible.omitted()
2021
private var noReplace = false
2122

22-
override fun applyTrack(track: Track?): PlayerUpdateBuilder {
23+
override fun setTrack(track: Track?): PlayerUpdateBuilder {
2324
this.encodedTrack = Omissible.of(track?.encoded)
2425
this.trackUserData = track?.userData.toOmissible()
2526
return this
@@ -107,11 +108,14 @@ class PlayerUpdateBuilder internal constructor(private val node: LavalinkNode, p
107108

108109
@Suppress("MemberVisibilityCanBePrivate")
109110
fun build() = PlayerUpdate(
110-
track = PlayerUpdateTrack(
111-
encodedTrack,
112-
identifier,
113-
trackUserData,
114-
).toOmissible(),
111+
track = if (encodedTrack is Omissible.Present || identifier.isPresent())
112+
PlayerUpdateTrack(
113+
encodedTrack,
114+
identifier,
115+
trackUserData,
116+
).toOmissible()
117+
else
118+
Omissible.omitted(),
115119
position = position,
116120
endTime = endTime,
117121
volume = volume,

src/main/kotlin/dev/arbjerg/lavalink/internal/LavalinkSocket.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,14 @@ class LavalinkSocket(private val node: LavalinkNode) : WebSocketListener(), Clos
7676
}
7777

7878
Message.Op.Event -> {
79+
event as Message.EmittedEvent
80+
81+
if (event is Message.EmittedEvent.TrackStartEvent) {
82+
node.playerCache[event.guildId.toLong()]?.track = event.track
83+
}
84+
7985
// TODO: handle websocket closed event from discord?
80-
node.penalties.handleTrackEvent(event as Message.EmittedEvent)
86+
node.penalties.handleTrackEvent(event)
8187
}
8288

8389
else -> {

0 commit comments

Comments
 (0)