feat(lyrics): тексты песен внутри приложения через LRCLIB
- LrcLibApi (api/get + api/search, User-Agent), DI @Named(lrclib) Retrofit - LyricsRepository.fetchLyrics -> LyricsResult (plain/synced/instrumental) - LyricsViewModel + LyricsSheet (загрузка/инструментал/найдено/не найдено), прокрутка + атрибуция LRCLIB - кнопка «Текст песни» открывает встроенный экран (плеер + деталь трека чартов), вместо ссылки в браузере
This commit is contained in:
24
app/src/main/java/com/radiola/data/remote/LrcLibApi.kt
Normal file
24
app/src/main/java/com/radiola/data/remote/LrcLibApi.kt
Normal file
@@ -0,0 +1,24 @@
|
||||
package com.radiola.data.remote
|
||||
|
||||
import com.radiola.data.remote.dto.LrcLibLyricsDto
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.Header
|
||||
import retrofit2.http.Query
|
||||
|
||||
interface LrcLibApi {
|
||||
|
||||
@GET("api/get")
|
||||
suspend fun get(
|
||||
@Header("User-Agent") userAgent: String = "radiOLA Android (https://radiorecord.ru)",
|
||||
@Query("artist_name") artistName: String,
|
||||
@Query("track_name") trackName: String,
|
||||
@Query("duration") durationSec: Int? = null
|
||||
): LrcLibLyricsDto
|
||||
|
||||
@GET("api/search")
|
||||
suspend fun search(
|
||||
@Header("User-Agent") userAgent: String = "radiOLA Android (https://radiorecord.ru)",
|
||||
@Query("artist_name") artistName: String,
|
||||
@Query("track_name") trackName: String
|
||||
): List<LrcLibLyricsDto>
|
||||
}
|
||||
16
app/src/main/java/com/radiola/data/remote/dto/LrcLibDto.kt
Normal file
16
app/src/main/java/com/radiola/data/remote/dto/LrcLibDto.kt
Normal file
@@ -0,0 +1,16 @@
|
||||
package com.radiola.data.remote.dto
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class LrcLibLyricsDto(
|
||||
@SerialName("id") val id: Int? = null,
|
||||
@SerialName("trackName") val trackName: String? = null,
|
||||
@SerialName("artistName") val artistName: String? = null,
|
||||
@SerialName("albumName") val albumName: String? = null,
|
||||
@SerialName("duration") val duration: Double? = null,
|
||||
@SerialName("instrumental") val instrumental: Boolean = false,
|
||||
@SerialName("plainLyrics") val plainLyrics: String? = null,
|
||||
@SerialName("syncedLyrics") val syncedLyrics: String? = null
|
||||
)
|
||||
Reference in New Issue
Block a user