package at.lockstep.player.data import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject import java.io.IOException class MetadataSyncClient( private val httpClient: OkHttpClient, private val baseUrl: String, ) { @Throws(IOException::class) fun uploadCollection( accessToken: String, trackId: String, type: String, version: Int, collection: JSONObject, ) { val payload = JSONObject() .apply { put("trackId", trackId) put("type", type) put("version", version) put("collection", collection) }.toString() val request = Request.Builder() .url("$baseUrl/metadata") .addHeader("Authorization", "Bearer $accessToken") .post(payload.toRequestBody(JSON_MEDIA)) .build() httpClient.newCall(request).execute().use { response -> if (response.isSuccessful) { return } val bodyText = response.body?.string().orEmpty() val message = runCatching { JSONObject(bodyText).optString("error") } .getOrNull() ?.takeIf { it.isNotBlank() } ?: response.message throw IOException(message) } } companion object { private val JSON_MEDIA = "application/json; charset=utf-8".toMediaType() } }