feat(covers): клиентское обогащение обложек через iTunes (обход бана сервера)
Серверный IP забанен Apple (iTunes search 429), а Deezer из РФ пуст — обложки перестали наливаться. Теперь iTunes-поиск делает КЛИЕНТ (его IP не забанен): для now-playing-треков без обложки ищет арт в iTunes и шлёт ССЫЛКУ на наш бэкенд (POST /covers/submit), сервер качает её (CDN из РФ доступен) и кладёт WebP — дальше обложка приходит всем через /now-playing. Дедуп по треку + троттлинг 1.5с (CoverEnrichmentManager). Сервер: host-whitelist (SSRF), идемпотентность (first-write-wins). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package com.radiola.data.repository
|
||||
|
||||
import com.radiola.data.remote.CoverEnrichmentManager
|
||||
import com.radiola.data.remote.NowPlayingSocketClient
|
||||
import com.radiola.data.remote.RadiolaApi
|
||||
import com.radiola.domain.model.Track
|
||||
@@ -11,7 +12,8 @@ import javax.inject.Inject
|
||||
|
||||
class NowPlayingRepositoryImpl @Inject constructor(
|
||||
private val radiolaApi: RadiolaApi,
|
||||
private val socketClient: NowPlayingSocketClient
|
||||
private val socketClient: NowPlayingSocketClient,
|
||||
private val coverEnrichment: CoverEnrichmentManager
|
||||
) : NowPlayingRepository {
|
||||
|
||||
private val _nowPlaying = MutableStateFlow<Map<Int, Track>>(emptyMap())
|
||||
@@ -45,6 +47,8 @@ class NowPlayingRepositoryImpl @Inject constructor(
|
||||
stationName = dto.name
|
||||
)
|
||||
}
|
||||
// Треки без обложки — обогащаем через iTunes с устройства (наш IP забанен).
|
||||
coverEnrichment.enqueue(_nowPlaying.value.values)
|
||||
Result.success(Unit)
|
||||
} catch (e: Exception) {
|
||||
Result.failure(e)
|
||||
|
||||
Reference in New Issue
Block a user