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 3f58398..133f021 100644 --- a/app/src/main/java/com/radiola/data/repository/NowPlayingRepositoryImpl.kt +++ b/app/src/main/java/com/radiola/data/repository/NowPlayingRepositoryImpl.kt @@ -25,15 +25,19 @@ class NowPlayingRepositoryImpl @Inject constructor( // Сокет (реалтайм, приоритет) + REST-поллинг с нашего бэкенда. // Оба источника ключуются по числовому id станции каталога (== station.id), // поэтому матчатся однозначно — без коллизий по одинаковым названиям станций. + // REST поллится регулярно и всегда свежий; socket-значения НАКАПЛИВАЮТСЯ и + // НЕ обновляются, если сокет отвалился — поэтому REST в приоритете, иначе + // залипшее socket-значение навсегда затеняет свежий трек (обложка/название + // переставали обновляться). override fun getNowPlaying(stationId: Int): Flow { return combine(socketClient.nowPlaying, _nowPlaying) { socketMap, restMap -> - socketMap[stationId] ?: restMap[stationId] + restMap[stationId] ?: socketMap[stationId] } } override fun getAllNowPlaying(): Flow> = combine(socketClient.nowPlaying, _nowPlaying) { socketMap, restMap -> - restMap + socketMap + socketMap + restMap } override suspend fun refreshNowPlaying(): Result { 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 584f890..fa06577 100644 --- a/app/src/main/java/com/radiola/ui/player/PlayerViewModel.kt +++ b/app/src/main/java/com/radiola/ui/player/PlayerViewModel.kt @@ -123,7 +123,7 @@ class PlayerViewModel @Inject constructor( launch { while (true) { nowPlayingRepository.refreshNowPlaying() - delay(10_000) + delay(5_000) // чаще — трек/обложка на плеере обновляются быстрее } } // Collect now playing for this station (API has priority: covers + accurate metadata)