У части станций Record поле stream_128 ведёт на мёртвый маунт {prefix}64.aacp
(404) — обложка/трек есть, а поток молчит (Summer Lounge, Beach Party, Reggae,
Mashup, Afro House, Nu Dance, Workout, Gop FM…). Поле stream_320 ({prefix}96.aacp)
живо у всех. Сменён приоритет выбора потока на stream_320.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
39 lines
1.5 KiB
Kotlin
39 lines
1.5 KiB
Kotlin
package com.radiola.data.remote
|
||
|
||
import com.radiola.data.remote.dto.NowPlayingItemDto
|
||
import com.radiola.data.remote.dto.StationDto
|
||
import com.radiola.domain.model.Station
|
||
import com.radiola.domain.model.Track
|
||
|
||
object ApiMapper {
|
||
|
||
fun StationDto.toDomain(): Station {
|
||
val cover = iconFillColored ?: bgImageMobile ?: bgImage ?: ""
|
||
// ВНИМАНИЕ: поле stream_128 у части станций Record указывает на мёртвый
|
||
// маунт {prefix}64.aacp (404) — звука нет, хотя обложка/трек есть. Поле
|
||
// stream_320 (= {prefix}96.aacp) живо у ВСЕХ станций. Поэтому 320 первым.
|
||
val stream = stream320 ?: stream128 ?: streamHls ?: "https://air.radiorecord.ru:805/${prefix}_128"
|
||
return Station(
|
||
id = id,
|
||
name = name,
|
||
prefix = prefix,
|
||
streamUrl = stream,
|
||
coverUrl = cover,
|
||
genre = tooltip ?: "",
|
||
// Жанры-категории станции лежат в "genre"; "tags" обычно пуст. Берём
|
||
// оба, чтобы работали жанровые чипы Record (Лето и пр.).
|
||
tags = (genres + tags).map { it.name }.distinct(),
|
||
sortOrder = sort
|
||
)
|
||
}
|
||
|
||
fun NowPlayingItemDto.toDomain(): Track {
|
||
return Track(
|
||
artist = track.artist,
|
||
song = track.song,
|
||
coverUrl = track.image600 ?: track.image100,
|
||
stationName = ""
|
||
)
|
||
}
|
||
}
|