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