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 0256b21..554957c 100644 --- a/app/src/main/java/com/radiola/data/repository/NowPlayingRepositoryImpl.kt +++ b/app/src/main/java/com/radiola/data/repository/NowPlayingRepositoryImpl.kt @@ -27,9 +27,16 @@ class NowPlayingRepositoryImpl @Inject constructor( // Сокет (реалтайм, приоритет) + REST-поллинг с нашего бэкенда. // Оба источника ключуются по числовому id станции (как в каталоге), // поэтому корректно сопоставляются с station.id плеера. - override fun getNowPlaying(stationId: Int): Flow { - return combine(socketClient.nowPlaying, _nowPlaying) { socketMap, restMap -> - socketMap[stationId] ?: restMap[stationId] + override fun getNowPlaying(stationId: Int, stationName: String): Flow { + val nameKey = stationName.trim().lowercase() + return combine( + socketClient.nowPlaying, + _nowPlaying, + _nowPlayingByName + ) { socketMap, restMap, byName -> + // Числовой id (сокет/REST), затем фолбэк по имени — id локальных + // станций (DFM и др.) не совпадает с каталожным, имя совпадает. + socketMap[stationId] ?: restMap[stationId] ?: byName[nameKey] } } diff --git a/app/src/main/java/com/radiola/domain/repository/NowPlayingRepository.kt b/app/src/main/java/com/radiola/domain/repository/NowPlayingRepository.kt index e3467c8..33de8d9 100644 --- a/app/src/main/java/com/radiola/domain/repository/NowPlayingRepository.kt +++ b/app/src/main/java/com/radiola/domain/repository/NowPlayingRepository.kt @@ -4,7 +4,7 @@ import com.radiola.domain.model.Track import kotlinx.coroutines.flow.Flow interface NowPlayingRepository { - fun getNowPlaying(stationId: Int): Flow + fun getNowPlaying(stationId: Int, stationName: String): Flow fun getAllNowPlaying(): Flow> // Карта по lowercase-имени станции — для матчинга с карточками (id может не совпадать). fun getAllNowPlayingByName(): Flow> diff --git a/app/src/main/java/com/radiola/domain/usecase/GetNowPlayingUseCase.kt b/app/src/main/java/com/radiola/domain/usecase/GetNowPlayingUseCase.kt index f0ac386..5846fa8 100644 --- a/app/src/main/java/com/radiola/domain/usecase/GetNowPlayingUseCase.kt +++ b/app/src/main/java/com/radiola/domain/usecase/GetNowPlayingUseCase.kt @@ -8,7 +8,7 @@ import javax.inject.Inject class GetNowPlayingUseCase @Inject constructor( private val nowPlayingRepository: NowPlayingRepository ) { - operator fun invoke(stationId: Int): Flow { - return nowPlayingRepository.getNowPlaying(stationId) + operator fun invoke(stationId: Int, stationName: String): Flow { + return nowPlayingRepository.getNowPlaying(stationId, stationName) } } diff --git a/app/src/main/java/com/radiola/ui/player/PlayerViewModel.kt b/app/src/main/java/com/radiola/ui/player/PlayerViewModel.kt index 16bf993..9198da3 100644 --- a/app/src/main/java/com/radiola/ui/player/PlayerViewModel.kt +++ b/app/src/main/java/com/radiola/ui/player/PlayerViewModel.kt @@ -98,7 +98,7 @@ class PlayerViewModel @Inject constructor( } // Collect now playing for this station (API has priority: covers + accurate metadata) launch { - getNowPlayingUseCase(station.id) + getNowPlayingUseCase(station.id, station.name) .distinctUntilChanged() .collect { track -> if (track != null) {