fix(en/AniPlay): Better episode list parsing
This commit is contained in:
parent
62bec46292
commit
311776429d
1 changed files with 26 additions and 2 deletions
|
@ -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) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue