From ab5e81e51372ff607d66059f4cf6b5fd5f25fab1 Mon Sep 17 00:00:00 2001
From: Lambada10 <62511588+Lambada10@users.noreply.github.com>
Date: Thu, 17 Oct 2024 15:42:09 +0200
Subject: [PATCH] Fix no "try again" on providers that support this, #89
---
.idea/gradle.xml | 3 ++-
.../lyrics_providers/LyricsProviderService.kt | 6 +++---
.../remote/lyrics_providers/others/LRCLibAPI.kt | 14 ++++++++++----
.../lyrics_providers/others/MusixmatchAPI.kt | 8 ++++++--
.../ui/screens/lyricsFetch/LyricsFetchScreen.kt | 3 +--
5 files changed, 22 insertions(+), 12 deletions(-)
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 194f297..ecd50f0 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -4,6 +4,7 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/java/pl/lambada/songsync/data/remote/lyrics_providers/LyricsProviderService.kt b/app/src/main/java/pl/lambada/songsync/data/remote/lyrics_providers/LyricsProviderService.kt
index b915d81..fb02bbe 100644
--- a/app/src/main/java/pl/lambada/songsync/data/remote/lyrics_providers/LyricsProviderService.kt
+++ b/app/src/main/java/pl/lambada/songsync/data/remote/lyrics_providers/LyricsProviderService.kt
@@ -52,11 +52,11 @@ class LyricsProviderService {
UnknownHostException::class, FileNotFoundException::class, NoTrackFoundException::class,
EmptyQueryException::class, InternalErrorException::class
)
- suspend fun getSongInfo(query: SongInfo, offset: Int? = 0, provider: Providers): SongInfo? {
+ suspend fun getSongInfo(query: SongInfo, offset: Int = 0, provider: Providers): SongInfo? {
return try {
when (provider) {
Providers.SPOTIFY -> spotifyAPI.getSongInfo(query, offset)
- Providers.LRCLIB -> LRCLibAPI().getSongInfo(query).also {
+ Providers.LRCLIB -> LRCLibAPI().getSongInfo(query, offset).also {
lrcLibID = it?.lrcLibID ?: 0
} ?: throw NoTrackFoundException()
@@ -68,7 +68,7 @@ class LyricsProviderService {
appleID = it?.appleID ?: 0
} ?: throw NoTrackFoundException()
- Providers.MUSIXMATCH -> MusixmatchAPI().getSongInfo(query).also {
+ Providers.MUSIXMATCH -> MusixmatchAPI().getSongInfo(query, offset).also {
musixmatchID = it?.musixmatchID ?: 0
} ?: throw NoTrackFoundException()
}
diff --git a/app/src/main/java/pl/lambada/songsync/data/remote/lyrics_providers/others/LRCLibAPI.kt b/app/src/main/java/pl/lambada/songsync/data/remote/lyrics_providers/others/LRCLibAPI.kt
index 43a4a9e..f09c355 100644
--- a/app/src/main/java/pl/lambada/songsync/data/remote/lyrics_providers/others/LRCLibAPI.kt
+++ b/app/src/main/java/pl/lambada/songsync/data/remote/lyrics_providers/others/LRCLibAPI.kt
@@ -20,7 +20,7 @@ class LRCLibAPI {
* @param query The SongInfo object with songName and artistName fields filled.
* @return Search result as a SongInfo object.
*/
- suspend fun getSongInfo(query: SongInfo): SongInfo? {
+ suspend fun getSongInfo(query: SongInfo, offset: Int = 0): SongInfo? {
val search = withContext(Dispatchers.IO) {
URLEncoder.encode(
"${query.songName}", // it doesn't work with artist name and song name together
@@ -41,10 +41,16 @@ class LRCLibAPI {
val json = json.decodeFromString>(responseBody)
+ val song = try {
+ json[offset]
+ } catch (e: IndexOutOfBoundsException) {
+ return null
+ }
+
return SongInfo(
- songName = json[0].trackName,
- artistName = json[0].artistName,
- lrcLibID = json[0].id
+ songName = song.trackName,
+ artistName = song.artistName,
+ lrcLibID = song.id
)
}
diff --git a/app/src/main/java/pl/lambada/songsync/data/remote/lyrics_providers/others/MusixmatchAPI.kt b/app/src/main/java/pl/lambada/songsync/data/remote/lyrics_providers/others/MusixmatchAPI.kt
index be0fa9e..6de0b1f 100644
--- a/app/src/main/java/pl/lambada/songsync/data/remote/lyrics_providers/others/MusixmatchAPI.kt
+++ b/app/src/main/java/pl/lambada/songsync/data/remote/lyrics_providers/others/MusixmatchAPI.kt
@@ -20,7 +20,7 @@ class MusixmatchAPI {
* @param query The SongInfo object with songName and artistName fields filled.
* @return Search result as a SongInfo object.
*/
- suspend fun getSongInfo(query: SongInfo): SongInfo? {
+ suspend fun getSongInfo(query: SongInfo, offset: Int = 0): SongInfo? {
val search = withContext(Dispatchers.IO) {
URLEncoder.encode(
"${query.songName} ${query.artistName}",
@@ -41,7 +41,11 @@ class MusixmatchAPI {
val json = json.decodeFromString>(responseBody)
- val result = json[0]
+ val result = try {
+ json[offset]
+ } catch (e: IndexOutOfBoundsException) {
+ return null
+ }
return SongInfo(
songName = result.songName,
diff --git a/app/src/main/java/pl/lambada/songsync/ui/screens/lyricsFetch/LyricsFetchScreen.kt b/app/src/main/java/pl/lambada/songsync/ui/screens/lyricsFetch/LyricsFetchScreen.kt
index 59b3ba9..a455546 100644
--- a/app/src/main/java/pl/lambada/songsync/ui/screens/lyricsFetch/LyricsFetchScreen.kt
+++ b/app/src/main/java/pl/lambada/songsync/ui/screens/lyricsFetch/LyricsFetchScreen.kt
@@ -175,8 +175,7 @@ fun SharedTransitionScope.LyricsFetchScreen(
lyricsFetchState = viewModel.lyricsFetchState,
animatedVisibilityScope = animatedVisibilityScope,
disableMarquee = viewModel.userSettingsController.disableMarquee,
- allowTryingAgain = viewModel.userSettingsController.selectedProvider != Providers.LRCLIB
- && viewModel.userSettingsController.selectedProvider != Providers.APPLE
+ allowTryingAgain = viewModel.userSettingsController.selectedProvider != Providers.APPLE
)
is QueryStatus.Failed -> FailedDialogue(