Skip to content

Commit 0b0c7d3

Browse files
committed
fix: implement runBlocking for all targets; use a better way for base64 decoding in PlayerInfoImpl
1 parent 2fde28a commit 0b0c7d3

File tree

9 files changed

+43
-15
lines changed

9 files changed

+43
-15
lines changed

mcutils-msmp/src/commonMain/kotlin/tech/aliorpse/mcutils/api/MsmpModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import kotlinx.coroutines.flow.firstOrNull
1616
import kotlinx.coroutines.flow.flatMapLatest
1717
import kotlinx.coroutines.flow.takeWhile
1818
import kotlinx.coroutines.launch
19-
import kotlinx.coroutines.runBlocking
2019
import kotlinx.coroutines.withTimeout
2120
import kotlinx.serialization.KSerializer
2221
import kotlinx.serialization.json.Json
@@ -29,6 +28,7 @@ import tech.aliorpse.mcutils.entity.MsmpEvent
2928
import tech.aliorpse.mcutils.internal.MsmpConnection
3029
import tech.aliorpse.mcutils.internal.MsmpLifecycleManager
3130
import tech.aliorpse.mcutils.internal.util.SpinLockedMutableMap
31+
import tech.aliorpse.mcutils.internal.util.runBlocking
3232
import kotlin.concurrent.atomics.ExperimentalAtomicApi
3333

3434
@Suppress("MagicNumber")

mcutils-player/src/commonMain/kotlin/tech/aliorpse/mcutils/internal/impl/PlayerInfoImpl.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package tech.aliorpse.mcutils.internal.impl
33
import io.ktor.client.call.body
44
import io.ktor.client.request.get
55
import io.ktor.client.statement.bodyAsText
6-
import io.ktor.util.decodeBase64Bytes
76
import kotlinx.serialization.json.Json
87
import kotlinx.serialization.json.jsonObject
98
import kotlinx.serialization.json.jsonPrimitive
@@ -13,6 +12,7 @@ import tech.aliorpse.mcutils.internal.entity.DecodedTextures
1312
import tech.aliorpse.mcutils.internal.entity.PlayerProfileResponse
1413
import tech.aliorpse.mcutils.internal.util.HttpClientProvider.httpClient
1514
import tech.aliorpse.mcutils.internal.util.withDispatchersIO
15+
import kotlin.io.encoding.Base64
1616

1717
internal object PlayerInfoImpl {
1818
const val UUID_LENGTH = 32
@@ -35,7 +35,7 @@ internal object PlayerInfoImpl {
3535
httpClient.get("$MOJANG_SESSION_BASE/session/minecraft/profile/$id").body()
3636

3737
val decoded = json.decodeFromString<DecodedTextures>(
38-
rawProfile.properties.first().value.decodeBase64Bytes().decodeToString()
38+
Base64.decode(rawProfile.properties.first().value).decodeToString()
3939
)
4040

4141
PlayerProfile(

mcutils-util/src/commonMain/kotlin/tech/aliorpse/mcutils/internal/util/DispatchersIO.kt renamed to mcutils-util/src/commonMain/kotlin/tech/aliorpse/mcutils/internal/util/CoroutinesUtil.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package tech.aliorpse.mcutils.internal.util
22

33
import kotlinx.coroutines.CoroutineDispatcher
4+
import kotlinx.coroutines.CoroutineScope
45
import kotlinx.coroutines.currentCoroutineContext
56
import kotlinx.coroutines.withContext
67

78
public expect val DispatchersIO: CoroutineDispatcher
89

10+
public expect fun <T> runBlocking(block: suspend CoroutineScope.() -> T): T
11+
912
public suspend fun <T> withDispatchersIO(block: suspend () -> T): T {
1013
val currentContext = currentCoroutineContext()
1114
return if (DispatchersIO.isDispatchNeeded(currentContext)) {
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package tech.aliorpse.mcutils.internal.util
2+
3+
import kotlinx.coroutines.CoroutineDispatcher
4+
import kotlinx.coroutines.CoroutineScope
5+
import kotlinx.coroutines.DelicateCoroutinesApi
6+
import kotlinx.coroutines.Dispatchers
7+
import kotlinx.coroutines.GlobalScope
8+
import kotlinx.coroutines.async
9+
10+
public actual val DispatchersIO: CoroutineDispatcher = Dispatchers.Unconfined
11+
12+
@OptIn(DelicateCoroutinesApi::class)
13+
public actual fun <T> runBlocking(block: suspend CoroutineScope.() -> T): T =
14+
GlobalScope.async { block(this) }.asDynamic()

mcutils-util/src/jsMain/kotlin/tech/aliorpse/mcutils/internal/util/DispatchersIO.js.kt

Lines changed: 0 additions & 6 deletions
This file was deleted.

mcutils-util/src/jvmMain/kotlin/tech/aliorpse/mcutils/internal/util/DispatchersIO.jvm.kt renamed to mcutils-util/src/jvmMain/kotlin/tech/aliorpse/mcutils/internal/util/CoroutinesUtil.jvm.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package tech.aliorpse.mcutils.internal.util
22

33
import kotlinx.coroutines.CoroutineDispatcher
4+
import kotlinx.coroutines.CoroutineScope
45
import kotlinx.coroutines.Dispatchers
6+
import kotlinx.coroutines.runBlocking
57

68
public actual val DispatchersIO: CoroutineDispatcher = Dispatchers.IO
9+
10+
public actual fun <T> runBlocking(block: suspend CoroutineScope.() -> T): T = runBlocking(block = block)

mcutils-util/src/nativeMain/kotlin/tech/aliorpse/mcutils/internal/util/DispatchersIO.native.kt renamed to mcutils-util/src/nativeMain/kotlin/tech/aliorpse/mcutils/internal/util/CoroutinesUtil.native.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package tech.aliorpse.mcutils.internal.util
22

33
import kotlinx.coroutines.CoroutineDispatcher
4+
import kotlinx.coroutines.CoroutineScope
45
import kotlinx.coroutines.Dispatchers
56
import kotlinx.coroutines.IO
7+
import kotlinx.coroutines.runBlocking
68

79
public actual val DispatchersIO: CoroutineDispatcher = Dispatchers.IO
10+
11+
public actual fun <T> runBlocking(block: suspend CoroutineScope.() -> T): T = runBlocking(block = block)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package tech.aliorpse.mcutils.internal.util
2+
3+
import kotlinx.coroutines.CoroutineDispatcher
4+
import kotlinx.coroutines.CoroutineScope
5+
import kotlinx.coroutines.DelicateCoroutinesApi
6+
import kotlinx.coroutines.Dispatchers
7+
import kotlinx.coroutines.ExperimentalCoroutinesApi
8+
import kotlinx.coroutines.GlobalScope
9+
import kotlinx.coroutines.async
10+
11+
public actual val DispatchersIO: CoroutineDispatcher = Dispatchers.Unconfined
12+
13+
@OptIn(DelicateCoroutinesApi::class, ExperimentalCoroutinesApi::class)
14+
public actual fun <T> runBlocking(block: suspend CoroutineScope.() -> T): T =
15+
GlobalScope.async { block(this) }.getCompleted()

mcutils-util/src/wasmJsMain/kotlin/tech/aliorpse/mcutils/internal/util/DispatchersIO.wasm.kt

Lines changed: 0 additions & 6 deletions
This file was deleted.

0 commit comments

Comments
 (0)