From d345cd40b88b26e9e84dc8e1e99395fdec31065b Mon Sep 17 00:00:00 2001 From: nk Date: Mon, 1 Jun 2026 12:05:13 +0300 Subject: [PATCH] feat(domain): add Station, Track, PlayerState, DeeplinkService models --- .../radiola/domain/model/DeeplinkService.kt | 21 +++++++++++++++++++ .../com/radiola/domain/model/PlayerState.kt | 8 +++++++ .../java/com/radiola/domain/model/Station.kt | 12 +++++++++++ .../java/com/radiola/domain/model/Track.kt | 8 +++++++ 4 files changed, 49 insertions(+) create mode 100644 app/src/main/java/com/radiola/domain/model/DeeplinkService.kt create mode 100644 app/src/main/java/com/radiola/domain/model/PlayerState.kt create mode 100644 app/src/main/java/com/radiola/domain/model/Station.kt create mode 100644 app/src/main/java/com/radiola/domain/model/Track.kt diff --git a/app/src/main/java/com/radiola/domain/model/DeeplinkService.kt b/app/src/main/java/com/radiola/domain/model/DeeplinkService.kt new file mode 100644 index 0000000..d70a4d0 --- /dev/null +++ b/app/src/main/java/com/radiola/domain/model/DeeplinkService.kt @@ -0,0 +1,21 @@ +package com.radiola.domain.model + +enum class DeeplinkService( + val serviceId: String, + val displayName: String, + val searchUrlTemplate: String +) { + YANDEX("yandex", "Яндекс Музыка", "https://music.yandex.ru/search?text=%s"), + VK("vk", "ВК Музыка", "https://vk.com/audio?q=%s"), + BOOM("boom", "BOOM", "https://boom.ru/search?query=%s"), + SPOTIFY("spotify", "Spotify", "https://open.spotify.com/search/%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"), + TIDAL("tidal", "Tidal", "https://listen.tidal.com/search?q=%s"), + DEEZER("deezer", "Deezer", "https://www.deezer.com/search/%s"); + + fun buildSearchUrl(artist: String, song: String): String { + val query = java.net.URLEncoder.encode("$artist $song", "UTF-8") + return searchUrlTemplate.format(query) + } +} diff --git a/app/src/main/java/com/radiola/domain/model/PlayerState.kt b/app/src/main/java/com/radiola/domain/model/PlayerState.kt new file mode 100644 index 0000000..950ac86 --- /dev/null +++ b/app/src/main/java/com/radiola/domain/model/PlayerState.kt @@ -0,0 +1,8 @@ +package com.radiola.domain.model + +sealed class PlayerState { + data object Idle : PlayerState() + data class Playing(val station: Station, val track: Track?) : PlayerState() + data class Buffering(val station: Station) : PlayerState() + data class Error(val message: String) : PlayerState() +} diff --git a/app/src/main/java/com/radiola/domain/model/Station.kt b/app/src/main/java/com/radiola/domain/model/Station.kt new file mode 100644 index 0000000..9faeb45 --- /dev/null +++ b/app/src/main/java/com/radiola/domain/model/Station.kt @@ -0,0 +1,12 @@ +package com.radiola.domain.model + +data class Station( + val id: Int, + val name: String, + val prefix: String, + val streamUrl: String, + val coverUrl: String, + val genre: String, + val tags: List, + val sortOrder: Int +) diff --git a/app/src/main/java/com/radiola/domain/model/Track.kt b/app/src/main/java/com/radiola/domain/model/Track.kt new file mode 100644 index 0000000..f11b91a --- /dev/null +++ b/app/src/main/java/com/radiola/domain/model/Track.kt @@ -0,0 +1,8 @@ +package com.radiola.domain.model + +data class Track( + val artist: String, + val song: String, + val coverUrl: String?, + val stationName: String +)