fix(en/AniPlay): Better episode list parsing

This commit is contained in:
Josef František Straka 2024-10-31 20:48:50 +01:00
parent 62bec46292
commit 311776429d

View file

@ -110,7 +110,11 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource {
} }
val responseString = response.body.string() val responseString = response.body.string()
val episodesArrayString = responseString.split("1:").last() val episodesArrayString = extractEpisodeList(responseString)
if (episodesArrayString == null) {
Log.e("AniPlay", "Episode list not found - ${response.request}\nbody:${response.request.body}\n${responseString.substring(0,200)}")
throw Exception("Episode list not found")
}
val providers = episodesArrayString.parseAs<List<EpisodeListResponse>>() val providers = episodesArrayString.parseAs<List<EpisodeListResponse>>()
val episodes = mutableMapOf<Int, EpisodeListResponse.Episode>() val episodes = mutableMapOf<Int, EpisodeListResponse.Episode>()
@ -190,7 +194,7 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource {
try { try {
json.decodeFromString<List<EpisodeExtra>>(it) json.decodeFromString<List<EpisodeExtra>>(it)
} catch (e: SerializationException) { } catch (e: SerializationException) {
Log.e("AniPlay", "Error parsing JSON", e) Log.e("AniPlay", "Error parsing JSON extras", e)
emptyList() emptyList()
} }
} }
@ -289,6 +293,26 @@ class AniPlay : AniListAnimeHttpSource(), ConfigurableAnimeSource {
) )
} }
private fun extractEpisodeList(input: String): String? {
val startMarker = "1:["
val list1Index = input.indexOf(startMarker)
if (list1Index == -1) return null
val startIndex = list1Index + startMarker.length
var endIndex = startIndex
var bracketCount = 1
while (endIndex < input.length && bracketCount > 0) {
when (input[endIndex]) {
'[' -> bracketCount++
']' -> bracketCount--
}
endIndex++
}
return if (bracketCount == 0) input.substring(startIndex - 1, endIndex) else null
}
/* ====================================== Preferences ====================================== */ /* ====================================== Preferences ====================================== */
override fun setupPreferenceScreen(screen: PreferenceScreen) { override fun setupPreferenceScreen(screen: PreferenceScreen) {