Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

jackson serialisation #12

Merged
merged 7 commits into from
Dec 13, 2023
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Clean track update builder
duncte123 committed Dec 12, 2023

Verified

This commit was signed with the committer’s verified signature.
akorchyn Artur Yurii Korchynskyi
commit eec699b26210d304ab105ee75cb70961c15d6b7d
53 changes: 26 additions & 27 deletions src/main/kotlin/dev/arbjerg/lavalink/client/PlayerUpdateBuilder.kt
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
package dev.arbjerg.lavalink.client

import dev.arbjerg.lavalink.client.protocol.Track
import dev.arbjerg.lavalink.internal.toKotlin
import dev.arbjerg.lavalink.internal.toLavalinkPlayer
import dev.arbjerg.lavalink.protocol.v4.*
import kotlinx.serialization.json.JsonObject
import reactor.core.CoreSubscriber
import reactor.core.publisher.Mono

class PlayerUpdateBuilder internal constructor(private val node: LavalinkNode, private val guildId: Long) : Mono<LavalinkPlayer>(), IUpdatablePlayer {
private var encodedTrack: Omissible<String?> = Omissible.omitted()
private var identifier: Omissible<String> = Omissible.omitted()
private var trackUserData: Omissible<JsonObject> = Omissible.Omitted()
private var trackUpdate: Omissible<PlayerUpdateTrack> = Omissible.omitted()
private var position: Omissible<Long> = Omissible.omitted()
private var endTime: Omissible<Long?> = Omissible.omitted()
private var volume: Omissible<Int> = Omissible.omitted()
@@ -20,34 +18,43 @@ class PlayerUpdateBuilder internal constructor(private val node: LavalinkNode, p
private var noReplace = false

override fun setTrack(track: Track?): PlayerUpdateBuilder {
this.encodedTrack = Omissible.of(track?.encoded)
this.trackUserData = track?.rawUserData.toOmissible()
this.trackUpdate = PlayerUpdateTrack(
encoded = Omissible.of(track?.encoded),
userData = track?.userData?.toKotlin().toOmissible()
).toOmissible()

return this
}

override fun stopTrack(): PlayerUpdateBuilder {
this.encodedTrack = Omissible.of(null)
this.identifier = Omissible.omitted()
this.trackUserData = Omissible.omitted()
this.trackUpdate = PlayerUpdateTrack(
encoded = Omissible.of(null),
).toOmissible()
return this
}

override fun setEncodedTrack(encodedTrack: String?): PlayerUpdateBuilder {
this.encodedTrack = Omissible.of(encodedTrack)
this.identifier = Omissible.omitted()
this.trackUserData = Omissible.omitted()
this.trackUpdate = PlayerUpdateTrack(
encoded = Omissible.of(encodedTrack),
).toOmissible()
return this
}

// TODO: keep this?
override fun omitEncodedTrack(): PlayerUpdateBuilder {
this.encodedTrack = Omissible.omitted()
val curTrackUpdate = this.trackUpdate

if (curTrackUpdate.isPresent()) {
this.trackUpdate = curTrackUpdate.value.copy(encoded = Omissible.omitted()).toOmissible()
}

return this
}

override fun setIdentifier(identifier: String?): PlayerUpdateBuilder {
this.encodedTrack = Omissible.omitted()
this.identifier = identifier.toOmissible()
this.trackUserData = Omissible.omitted()
this.trackUpdate = PlayerUpdateTrack(
identifier = identifier.toOmissible(),
).toOmissible()
return this
}

@@ -68,7 +75,7 @@ class PlayerUpdateBuilder internal constructor(private val node: LavalinkNode, p

override fun setVolume(volume: Int): PlayerUpdateBuilder {
if (volume < 0 || volume > 1000) {
throw IllegalArgumentException("Volume must not be less than 0 or greater than 1000");
throw IllegalArgumentException("Volume must not be less than 0 or greater than 1000")
}

this.volume = volume.toOmissible()
@@ -96,8 +103,7 @@ class PlayerUpdateBuilder internal constructor(private val node: LavalinkNode, p
}

internal fun applyBuilder(builder: PlayerUpdateBuilder): PlayerUpdateBuilder {
this.encodedTrack = builder.encodedTrack
this.identifier = builder.identifier
this.trackUpdate = builder.trackUpdate
this.position = builder.position
this.endTime = builder.endTime
this.volume = builder.volume
@@ -111,14 +117,7 @@ class PlayerUpdateBuilder internal constructor(private val node: LavalinkNode, p

@Suppress("MemberVisibilityCanBePrivate")
fun build() = PlayerUpdate(
track = if (encodedTrack is Omissible.Present || identifier.isPresent())
PlayerUpdateTrack(
encodedTrack,
identifier,
trackUserData,
).toOmissible()
else
Omissible.omitted(),
track = trackUpdate,
position = position,
endTime = endTime,
volume = volume,
5 changes: 3 additions & 2 deletions src/main/kotlin/dev/arbjerg/lavalink/client/protocol/Track.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.arbjerg.lavalink.client.protocol

import com.fasterxml.jackson.databind.JsonNode
import dev.arbjerg.lavalink.internal.fromJsonElement
import dev.arbjerg.lavalink.internal.toJackson
import dev.arbjerg.lavalink.internal.toJsonElement
@@ -10,8 +11,8 @@ internal fun ProtocolTrack.toCustom() = Track(this)

class Track internal constructor(private var internalTrack: ProtocolTrack) {
val encoded = internalTrack.encoded
val rawUserData: JsonObject
get() = internalTrack.userData
val userData: JsonNode
get() = internalTrack.userData.toJackson()
val info = internalTrack.info
val pluginInfo = internalTrack.pluginInfo.toJackson()

2 changes: 2 additions & 0 deletions src/main/kotlin/dev/arbjerg/lavalink/internal/JsonParser.kt
Original file line number Diff line number Diff line change
@@ -4,12 +4,14 @@ import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.databind.ObjectMapper
import dev.arbjerg.lavalink.protocol.v4.json
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonObject
import java.io.InputStream


private val objectMapper = ObjectMapper()

fun JsonElement.toJackson(): JsonNode = objectMapper.readTree(this.toString())
fun JsonNode.toKotlin(): JsonObject = toJsonElement(this) as JsonObject

fun toJsonElement(obj: Any): JsonElement {
val jsonString = objectMapper.writeValueAsString(obj)
Original file line number Diff line number Diff line change
@@ -4,11 +4,9 @@ import dev.arbjerg.lavalink.client.LavalinkNode
import dev.arbjerg.lavalink.client.http.HttpBuilder
import dev.arbjerg.lavalink.internal.error.RestException
import dev.arbjerg.lavalink.protocol.v4.*
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import okhttp3.Call
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody
import okhttp3.Response
2 changes: 1 addition & 1 deletion src/test/java/JavaJDAExample.java
Original file line number Diff line number Diff line change
@@ -273,7 +273,7 @@ public void loadFailed(@NotNull LoadFailed result) {
case "custom-json-request": {
final Link link = this.client.getLink(event.getGuild().getIdLong());
link.getNode().customJsonRequest(com.github.topi314.lavasearch.protocol.SearchResult.Companion.serializer(),
(builder) -> builder.path("/v4/loadsearch?query=ytsefarch%3Anever%20gonna%20give%20you%20up").get()
(builder) -> builder.path("/v4/loadsearch?query=ytsearch%3Anever%20gonna%20give%20you%20up").get()
).doOnSuccess((loadResult -> {
if (loadResult == null) {
event.reply("No load result!").queue();