feat(love): воспроизведение Love Radio через сессионный UID + now-playing главного

Потоки Love защищены: клиент берёт UID из их player/config (со своего IP) и
подставляет в n340-поток — играет музыка. LoveStreamResolver + LoveApi. Каталог
переведён на n340. Now-playing главного Love Radio по ICY; саб-каналы трек не
отдают нигде — показываем без трека.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
nk
2026-06-03 20:14:52 +03:00
parent 615e3435e3
commit 320cac546b
6 changed files with 98 additions and 16 deletions

View File

@@ -35,7 +35,8 @@ class PlayerViewModel @Inject constructor(
private val trackHistoryRepository: TrackHistoryRepository,
private val settingsRepository: SettingsRepository,
private val recordingRepository: RecordingRepository,
private val pushHistoryUseCase: PushHistoryUseCase
private val pushHistoryUseCase: PushHistoryUseCase,
private val loveStreamResolver: com.radiola.data.remote.LoveStreamResolver
) : ViewModel() {
val isPlaying: StateFlow<Boolean> = playerController.isPlaying
@@ -85,7 +86,12 @@ class PlayerViewModel @Inject constructor(
_currentStation.value = station
_currentTrack.value = null
_playlist.value = playlist ?: _stations.value
playerController.play(station.streamUrl, station.prefix, station.name)
// Love Radio: подставляем сессионный UID (иначе поток отдаёт заглушку).
// Для остальных resolve вернёт URL как есть.
viewModelScope.launch {
val url = loveStreamResolver.resolve(station.streamUrl)
playerController.play(url, station.prefix, station.name)
}
viewModelScope.launch { pushHistoryUseCase(station.id) }
nowPlayingJob?.cancel()
nowPlayingJob = viewModelScope.launch {