feat(stations): скрывать украинские станции (ROKS, Kiss FM) для РФ

Radio ROKS и Kiss FM (TavR Media, хосты radioroks.ua / kissfm.ua) недоступны
с российских IP без VPN. Теперь для пользователей из РФ они полностью скрыты
— и сами станции (везде, где используется список), и их чипы-категории.

Страна определяется по IP (api.country.is → ipapi.co; при VPN вернёт страну
выходного узла, тогда станции доступны и НЕ скрываются), с фолбэком на страну
SIM/сети/локали устройства, если IP-сервис недоступен (в РФ часто заблокирован).
Код страны кэшируется (DataStore). Фильтр в GetStationsUseCase (combine со
страной) + чипы в StationsViewModel. id 741 «Радио РОКС» (stream.roks.com) —
российская, под правило не попадает.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
nk
2026-06-04 14:46:42 +03:00
parent 4697e27eb4
commit 8d2c53c441
8 changed files with 162 additions and 4 deletions

View File

@@ -0,0 +1,12 @@
package com.radiola.domain.repository
import kotlinx.coroutines.flow.Flow
/** Регион пользователя (по IP) — для гео-фильтрации станций. */
interface RegionRepository {
/** Код страны пользователя (напр. "RU"), null пока не определён. */
fun countryCode(): Flow<String?>
/** Обновить код страны по IP (кэшируется). */
suspend fun refresh()
}

View File

@@ -17,4 +17,7 @@ interface SettingsRepository {
// Предпочитаемый битрейт (kbps). 0 = авто (брать качество по умолчанию станции).
fun getPreferredBitrate(): Flow<Int>
suspend fun setPreferredBitrate(bitrate: Int)
// Код страны пользователя (по IP), напр. "RU". null — не определён.
fun getCountryCode(): Flow<String?>
suspend fun setCountryCode(code: String)
}