Skip to content

Commit 6266144

Browse files
committed
Test out new track user data branch
1 parent 1f5d0be commit 6266144

File tree

5 files changed

+42
-13
lines changed

5 files changed

+42
-13
lines changed

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
[VERSION]: https://img.shields.io/maven-central/v/dev.arbjerg/lavalink-client
22

33
# Java Lavalink client
4-
This is a client for Lavalink v4 only. You cannot use this with Lavalink v3.
4+
5+
> [!WARNING]
6+
> This is a client for Lavalink v4 only.
7+
> You cannot use this with Lavalink v3.
8+
59

610
Feature overview:
711
- Works with any discord library (as long as they allow for sending direct request to discord)

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ repositories {
4141

4242
dependencies {
4343
// package libraries
44-
api("dev.arbjerg.lavalink:protocol:8a6c376407205e8208aa452c8b59443774c2e754-SNAPSHOT")
44+
api("dev.arbjerg.lavalink:protocol:47201924be7d5a459753fc85f00ca30e49ba3cd1-SNAPSHOT")
4545
api("com.squareup.okhttp3:okhttp:4.10.0")
4646
api("io.projectreactor:reactor-core:3.5.6")
4747
api("io.projectreactor.kotlin:reactor-kotlin-extensions:1.2.2")

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
11
package dev.arbjerg.lavalink.client
22

33
import dev.arbjerg.lavalink.protocol.v4.Filters
4+
import dev.arbjerg.lavalink.protocol.v4.Track
45
import dev.arbjerg.lavalink.protocol.v4.VoiceState
56

67
interface IUpdatablePlayer {
8+
/**
9+
* Shortcut for setting the encoded track. This will also send any user-data supplied.
10+
*
11+
* @param track The track to apply to this builder
12+
*
13+
* @return The updated builder, useful for chaining
14+
*/
15+
fun applyTrack(track: Track): PlayerUpdateBuilder
16+
717
/**
818
* Sets the encoded track to be played.
919
*

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package dev.arbjerg.lavalink.client
22

3-
import dev.arbjerg.lavalink.protocol.v4.Filters
4-
import dev.arbjerg.lavalink.protocol.v4.Player
5-
import dev.arbjerg.lavalink.protocol.v4.PlayerState
6-
import dev.arbjerg.lavalink.protocol.v4.VoiceState
3+
import dev.arbjerg.lavalink.protocol.v4.*
74
import kotlin.math.min
85

96
class LavalinkPlayer(private val node: LavalinkNode, protocolPlayer: Player) : IUpdatablePlayer {
@@ -36,6 +33,9 @@ class LavalinkPlayer(private val node: LavalinkNode, protocolPlayer: Player) : I
3633
}
3734
}
3835

36+
override fun applyTrack(track: Track) = PlayerUpdateBuilder(node, guildId)
37+
.applyTrack(track)
38+
3939
override fun setEncodedTrack(encodedTrack: String?) = PlayerUpdateBuilder(node, guildId)
4040
.setEncodedTrack(encodedTrack)
4141

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

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ package dev.arbjerg.lavalink.client
22

33
import dev.arbjerg.lavalink.internal.toLavalinkPlayer
44
import dev.arbjerg.lavalink.protocol.v4.*
5+
import kotlinx.serialization.json.JsonObject
56
import reactor.core.publisher.Mono
67
import kotlin.math.max
78
import kotlin.math.min
89

910
class PlayerUpdateBuilder internal constructor(private val node: LavalinkNode, private val guildId: Long) : IUpdatablePlayer {
1011
private var encodedTrack: Omissible<String?> = Omissible.omitted()
1112
private var identifier: Omissible<String> = Omissible.omitted()
13+
private var tracKUserData: Omissible<JsonObject> = Omissible.Omitted()
1214
private var position: Omissible<Long> = Omissible.omitted()
1315
private var endTime: Omissible<Long?> = Omissible.omitted()
1416
private var volume: Omissible<Int> = Omissible.omitted()
@@ -17,6 +19,12 @@ class PlayerUpdateBuilder internal constructor(private val node: LavalinkNode, p
1719
private var state: Omissible<VoiceState> = Omissible.omitted()
1820
private var noReplace = false
1921

22+
override fun applyTrack(track: Track): PlayerUpdateBuilder {
23+
this.encodedTrack = Omissible.of(track.info.identifier)
24+
this.tracKUserData = Omissible.of(track.userData)
25+
return this
26+
}
27+
2028
override fun setEncodedTrack(encodedTrack: String?): PlayerUpdateBuilder {
2129
this.encodedTrack = Omissible.of(encodedTrack)
2230
return this
@@ -86,17 +94,24 @@ class PlayerUpdateBuilder internal constructor(private val node: LavalinkNode, p
8694
return this
8795
}
8896

97+
@Suppress("MemberVisibilityCanBePrivate")
8998
fun build() = PlayerUpdate(
90-
encodedTrack, identifier, position, endTime, volume, paused, filters, state
99+
Omissible.omitted(),
100+
Omissible.omitted(),
101+
PlayerUpdateTrack(
102+
encodedTrack,
103+
identifier,
104+
tracKUserData,
105+
).toOmissible(),
106+
position,
107+
endTime,
108+
volume,
109+
paused,
110+
filters,
111+
state
91112
)
92113

93114
fun asMono(): Mono<LavalinkPlayer> {
94-
/*val cachedPlayer = node.playerCache[guildId]
95-
96-
if ((cachedPlayer == null || !cachedPlayer.state.connected) && state.isOmitted()) {
97-
return Mono.error(IllegalStateException("Player is not connected to a voice channel."))
98-
}*/
99-
100115
return node.rest.updatePlayer(build(), guildId, noReplace)
101116
.map { it.toLavalinkPlayer(node) }
102117
.doOnNext {

0 commit comments

Comments
 (0)