fix(player): отображение трека и обложки — объединение REST и socket now-playing

REST-поллинг (refreshNowPlaying -> api.getNowPlaying, 200 OK) писал данные в
_nowPlaying, который нигде не читался; getNowPlaying() брал только сокет (пустой).
Теперь getNowPlaying/getAllNowPlaying объединяют оба источника (socket ?: REST),
поэтому название трека, обложка и deep-link сервисов работают.
This commit is contained in:
nk
2026-06-02 22:23:37 +03:00
parent 58f735823e
commit 8a951dd4c5

View File

@@ -7,7 +7,7 @@ import com.radiola.domain.model.Track
import com.radiola.domain.repository.NowPlayingRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.combine
import javax.inject.Inject
class NowPlayingRepositoryImpl @Inject constructor(
@@ -21,11 +21,19 @@ class NowPlayingRepositoryImpl @Inject constructor(
socketClient.connect()
}
// Объединяем два источника: сокет (реалтайм, приоритет) и REST-поллинг
// (refreshNowPlaying). Раньше REST-данные писались в _nowPlaying, но никем
// не читались — из-за этого трек и обложка не отображались.
override fun getNowPlaying(stationId: Int): Flow<Track?> {
return socketClient.nowPlaying.map { it[stationId] }
return combine(socketClient.nowPlaying, _nowPlaying) { socketMap, restMap ->
socketMap[stationId] ?: restMap[stationId]
}
}
override fun getAllNowPlaying(): Flow<Map<Int, Track>> = socketClient.nowPlaying
override fun getAllNowPlaying(): Flow<Map<Int, Track>> =
combine(socketClient.nowPlaying, _nowPlaying) { socketMap, restMap ->
restMap + socketMap
}
override suspend fun refreshNowPlaying(): Result<Unit> {
return try {