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 23a81e2..87de702 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 { musixmatchSongInfo = it } ?: 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 f7501cb..57c5159 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 @@ -19,7 +19,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 artistName = withContext(Dispatchers.IO) { URLEncoder.encode( "${query.artistName}", @@ -46,7 +46,7 @@ class MusixmatchAPI { return null val result = json.decodeFromString(responseBody) - + return SongInfo( songName = result.songName, artistName = result.artistName, 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..57dd6f7 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,9 @@ 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 && + viewModel.userSettingsController.selectedProvider != Providers.MUSIXMATCH ) is QueryStatus.Failed -> FailedDialogue(