feat(deeplink): кнопка поиска в SOVA (re.sova.five, только sideload)

This commit is contained in:
nk
2026-06-08 14:41:42 +03:00
parent c75ff8cb9a
commit ab09d92b0d
3 changed files with 15 additions and 4 deletions

View File

@@ -15,7 +15,10 @@ enum class DeeplinkService(
APPLE_MUSIC("apple", "Apple Music", "https://music.apple.com/search?term=%s"), APPLE_MUSIC("apple", "Apple Music", "https://music.apple.com/search?term=%s"),
YOUTUBE_MUSIC("youtube", "YouTube Music", "https://music.youtube.com/search?q=%s"), YOUTUBE_MUSIC("youtube", "YouTube Music", "https://music.youtube.com/search?q=%s"),
TIDAL("tidal", "Tidal", "https://listen.tidal.com/search?q=%s"), TIDAL("tidal", "Tidal", "https://listen.tidal.com/search?q=%s"),
DEEZER("deezer", "Deezer", "https://www.deezer.com/search/%s"); DEEZER("deezer", "Deezer", "https://www.deezer.com/search/%s"),
// Сторонний клиент ВК (мод VK 6.12). Открываем поиск музыки напрямую в его
// пакете через LinkRedirActivity. Доступен только в sideload-сборке.
SOVA("sova", "SOVA", "https://vk.com/audio?q=%s", packageName = "re.sova.five");
fun buildSearchUrl(artist: String, song: String): String { fun buildSearchUrl(artist: String, song: String): String {
val query = java.net.URLEncoder.encode("$artist $song", "UTF-8") val query = java.net.URLEncoder.encode("$artist $song", "UTF-8")

View File

@@ -108,7 +108,11 @@ class PlayerViewModel @Inject constructor(
} }
viewModelScope.launch { viewModelScope.launch {
settingsRepository.getEnabledDeeplinkServices().collect { ids -> settingsRepository.getEnabledDeeplinkServices().collect { ids ->
_enabledServices.value = DeeplinkService.entries.filter { it.serviceId in ids } _enabledServices.value = DeeplinkService.entries.filter {
it.serviceId in ids &&
// SOVA (сторонний мод ВК) — только в sideload-сборке.
(com.radiola.BuildConfig.SHOW_DEV_TOOLS || it != DeeplinkService.SOVA)
}
} }
} }
viewModelScope.launch { viewModelScope.launch {

View File

@@ -407,7 +407,11 @@ fun SettingsScreen(
.background(colors.surface) .background(colors.surface)
.border(1.dp, colors.border, RoundedCornerShape(16.dp)) .border(1.dp, colors.border, RoundedCornerShape(16.dp))
) { ) {
DeeplinkService.entries.forEachIndexed { index, service -> // В store-сборке скрываем SOVA (сторонний мод ВК) — только sideload.
val services = DeeplinkService.entries.filter {
com.radiola.BuildConfig.SHOW_DEV_TOOLS || it != DeeplinkService.SOVA
}
services.forEachIndexed { index, service ->
val checked = service.serviceId in enabledServices val checked = service.serviceId in enabledServices
val trackColor by animateColorAsState( val trackColor by animateColorAsState(
targetValue = if (checked) colors.accent else colors.surface2, targetValue = if (checked) colors.accent else colors.surface2,
@@ -438,7 +442,7 @@ fun SettingsScreen(
) )
) )
} }
if (index < DeeplinkService.entries.size - 1) { if (index < services.size - 1) {
HorizontalDivider( HorizontalDivider(
color = colors.border, color = colors.border,
modifier = Modifier.padding(horizontal = 16.dp) modifier = Modifier.padding(horizontal = 16.dp)