diff --git a/app/src/main/java/com/radiola/data/repository/NowPlayingRepositoryImpl.kt b/app/src/main/java/com/radiola/data/repository/NowPlayingRepositoryImpl.kt index 39729ff..06db09c 100644 --- a/app/src/main/java/com/radiola/data/repository/NowPlayingRepositoryImpl.kt +++ b/app/src/main/java/com/radiola/data/repository/NowPlayingRepositoryImpl.kt @@ -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 { - return socketClient.nowPlaying.map { it[stationId] } + return combine(socketClient.nowPlaying, _nowPlaying) { socketMap, restMap -> + socketMap[stationId] ?: restMap[stationId] + } } - override fun getAllNowPlaying(): Flow> = socketClient.nowPlaying + override fun getAllNowPlaying(): Flow> = + combine(socketClient.nowPlaying, _nowPlaying) { socketMap, restMap -> + restMap + socketMap + } override suspend fun refreshNowPlaying(): Result { return try {