Skip to content

Commit

Permalink
feat: добавлен новый метод создания сессии для радио
Browse files Browse the repository at this point in the history
  • Loading branch information
pank-su committed Apr 29, 2024
1 parent 703aa7f commit 959b366
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 6 deletions.
28 changes: 22 additions & 6 deletions yandex-music-api/src/commonMain/kotlin/Client.kt
@@ -1,4 +1,3 @@

import dsl.YandexMusicTagMaker
import exceptions.NotAuthenticatedException
import exceptions.SessionExpiredException
Expand Down Expand Up @@ -29,6 +28,7 @@ import model.landing.*
import model.playlist.Playlist
import model.playlist.TagResult
import model.rotor.Dashboard
import model.rotor.Session
import model.rotor.StationResult
import model.search.QueryType
import model.search.Search
Expand All @@ -38,7 +38,6 @@ import model.track.SimilarTracks
import model.track.Track
import org.kotlincrypto.macs.hmac.sha2.HmacSHA256
import utils.removeCarets
import kotlin.io.encoding.ExperimentalEncodingApi


expect fun getHttpClientEngine(): HttpClientEngine
Expand Down Expand Up @@ -138,9 +137,18 @@ class Client {
return httpClient.request(baseUrl) {
basicSettings(method, components)
if (method == HttpMethod.Post) {
headers {
append(HttpHeaders.ContentType, "form-encoded")
contentType(ContentType.Application.Json)
val body = buildString {
append("{")

body.forEach {
append("\"${it.key}\": ${it.value}")
append(",")
}
this.setLength(length - 1)
append("}")
}
setBody(body)
} else if (method == HttpMethod.Get) {
url {
body.forEach {
Expand Down Expand Up @@ -252,7 +260,6 @@ class Client {
suspend fun tracksDownloadInfo(trackId: Int) =
requestPrimitive<List<DownloadInfo>>("tracks", trackId.toString(), "download-info")

@OptIn(ExperimentalEncodingApi::class, ExperimentalStdlibApi::class)
suspend fun tracksDownloadInfoNew(
trackId: Int,
canUseStreaming: Boolean = false
Expand All @@ -273,7 +280,16 @@ class Client {
),
)

} //requestPrimitive<List<DownloadInfo>>()
}

suspend fun rotorSessionNew(seeds: List<String>) =
requestPost<Session>(
"rotor",
"session",
"new",
body = hashMapOf("seeds" to "[" + seeds.joinToString(",") { "\"$it\"" } + "]",
"includeTracksInResponse" to "true")
)

suspend fun trackSupplement(trackId: Int) = request<Supplement>("tracks", trackId.toString(), "supplement")

Expand Down
@@ -0,0 +1,6 @@
package model.rotor

import kotlinx.serialization.Serializable

@Serializable
data class DescriptionSeed(val value: String, val tag: String, val type: String)
12 changes: 12 additions & 0 deletions yandex-music-api/src/commonMain/kotlin/model/rotor/Session.kt
@@ -0,0 +1,12 @@
package model.rotor

import kotlinx.serialization.Serializable
import model.Result

@Serializable
data class Session(
val radioSessionId: String,
val batchId: String,
val pumpkin: Boolean,
val descriptionSeed: DescriptionSeed
) : Result()
7 changes: 7 additions & 0 deletions yandex-music-api/src/commonTest/kotlin/rotor/RotorTest.kt
Expand Up @@ -13,4 +13,11 @@ class RotorTest {
if (token.isInvalid()) return@runTest
client { this.token = token!! }.rotorStations()
}

@Test
fun creatingNewRotorIsValid() = runTest {
val token = getenv("token")
if (token.isInvalid()) return@runTest
client { this.token = token!! }.rotorSessionNew(listOf("user:onyourwave"))
}
}

0 comments on commit 959b366

Please sign in to comment.