feat(stations): обложка текущего трека на карточке станции + подпись
Для станций без своей обложки (и для Radio Record — единый стиль) карточка показывает обложку играющего трека с тёмным градиентом и подписью трек/исполнитель. Источник — /now-playing (теперь с name станции), матч по имени, обновление 20с. Приоритет: трек -> логотип станции -> фирменная плитка.
This commit is contained in:
@@ -16,6 +16,10 @@ class NowPlayingRepositoryImpl @Inject constructor(
|
||||
|
||||
private val _nowPlaying = MutableStateFlow<Map<Int, Track>>(emptyMap())
|
||||
|
||||
// Карта по lowercase-имени станции: заполняется при REST-поллинге,
|
||||
// используется для матчинга карточек (id локальных станций может отличаться).
|
||||
private val _nowPlayingByName = MutableStateFlow<Map<String, Track>>(emptyMap())
|
||||
|
||||
init {
|
||||
socketClient.connect()
|
||||
}
|
||||
@@ -34,6 +38,8 @@ class NowPlayingRepositoryImpl @Inject constructor(
|
||||
restMap + socketMap
|
||||
}
|
||||
|
||||
override fun getAllNowPlayingByName(): Flow<Map<String, Track>> = _nowPlayingByName
|
||||
|
||||
override suspend fun refreshNowPlaying(): Result<Unit> {
|
||||
return try {
|
||||
// Берём now-playing с нашего бэкенда: там корректный маппинг
|
||||
@@ -45,9 +51,20 @@ class NowPlayingRepositoryImpl @Inject constructor(
|
||||
artist = dto.artist,
|
||||
song = dto.song,
|
||||
coverUrl = dto.coverUrl,
|
||||
stationName = ""
|
||||
stationName = dto.name
|
||||
)
|
||||
}
|
||||
// Параллельный индекс по имени — для матчинга карточек станций.
|
||||
_nowPlayingByName.value = list
|
||||
.filter { it.name.isNotBlank() }
|
||||
.associate { dto ->
|
||||
dto.name.trim().lowercase() to Track(
|
||||
artist = dto.artist,
|
||||
song = dto.song,
|
||||
coverUrl = dto.coverUrl,
|
||||
stationName = dto.name
|
||||
)
|
||||
}
|
||||
Result.success(Unit)
|
||||
} catch (e: Exception) {
|
||||
Result.failure(e)
|
||||
|
||||
Reference in New Issue
Block a user