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:
18
app/src/main/java/com/radiola/data/remote/ItunesApi.kt
Normal file
18
app/src/main/java/com/radiola/data/remote/ItunesApi.kt
Normal file
@@ -0,0 +1,18 @@
|
||||
package com.radiola.data.remote
|
||||
|
||||
import com.radiola.data.remote.dto.ItunesSearchResponse
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.Query
|
||||
|
||||
/**
|
||||
* iTunes Search API — дёргаем С УСТРОЙСТВА пользователя (его IP не забанен
|
||||
* Apple, в отличие от нашего серверного). Нужна только обложка трека.
|
||||
*/
|
||||
interface ItunesApi {
|
||||
@GET("search")
|
||||
suspend fun search(
|
||||
@Query("term") term: String,
|
||||
@Query("entity") entity: String = "song",
|
||||
@Query("limit") limit: Int = 1,
|
||||
): ItunesSearchResponse
|
||||
}
|
||||
Reference in New Issue
Block a user