fix(now-playing): трек/обложка не обновлялись — залипшее socket-значение
Корень: NowPlayingSocketClient копит трек по станции и не чистит; combine предпочитал socket (socketMap[id] ?: restMap[id]). Если сокет один раз прислал трек и отвалился, залипшее значение НАВСЕГДА затеняло свежий REST — на открытом плеере трек/обложка не менялись (Radio Record и др.). Теперь приоритет REST (он регулярно поллится), socket — фолбэк. Поллинг плеера ускорен 10с→5с. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -25,15 +25,19 @@ class NowPlayingRepositoryImpl @Inject constructor(
|
||||
// Сокет (реалтайм, приоритет) + REST-поллинг с нашего бэкенда.
|
||||
// Оба источника ключуются по числовому id станции каталога (== station.id),
|
||||
// поэтому матчатся однозначно — без коллизий по одинаковым названиям станций.
|
||||
// REST поллится регулярно и всегда свежий; socket-значения НАКАПЛИВАЮТСЯ и
|
||||
// НЕ обновляются, если сокет отвалился — поэтому REST в приоритете, иначе
|
||||
// залипшее socket-значение навсегда затеняет свежий трек (обложка/название
|
||||
// переставали обновляться).
|
||||
override fun getNowPlaying(stationId: Int): Flow<Track?> {
|
||||
return combine(socketClient.nowPlaying, _nowPlaying) { socketMap, restMap ->
|
||||
socketMap[stationId] ?: restMap[stationId]
|
||||
restMap[stationId] ?: socketMap[stationId]
|
||||
}
|
||||
}
|
||||
|
||||
override fun getAllNowPlaying(): Flow<Map<Int, Track>> =
|
||||
combine(socketClient.nowPlaying, _nowPlaying) { socketMap, restMap ->
|
||||
restMap + socketMap
|
||||
socketMap + restMap
|
||||
}
|
||||
|
||||
override suspend fun refreshNowPlaying(): Result<Unit> {
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user