fix(tr/animeler): Fix Json serialization in search, anime details and episode list pages (#2522)

This commit is contained in:
Claudemirovsky 2023-11-18 09:07:06 -03:00 committed by GitHub
parent 6f3b46c04c
commit 48eba9986e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 17 deletions

View File

@ -8,7 +8,7 @@ ext {
extName = 'Animeler'
pkgNameSuffix = 'tr.animeler'
extClass = '.Animeler'
extVersionCode = 5
extVersionCode = 6
libVersion = '13'
}

View File

@ -4,7 +4,7 @@ import android.app.Application
import androidx.preference.ListPreference
import androidx.preference.MultiSelectListPreference
import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.animeextension.tr.animeler.dto.EpisodeDto
import eu.kanade.tachiyomi.animeextension.tr.animeler.dto.AnimeEpisodes
import eu.kanade.tachiyomi.animeextension.tr.animeler.dto.FullAnimeDto
import eu.kanade.tachiyomi.animeextension.tr.animeler.dto.SearchRequestDto
import eu.kanade.tachiyomi.animeextension.tr.animeler.dto.SearchResponseDto
@ -76,7 +76,7 @@ class Animeler : AnimeHttpSource(), ConfigurableAnimeSource {
val animes = results.data.map {
SAnime.create().apply {
setUrlWithoutDomain(it.url)
thumbnail_url = it.image
thumbnail_url = it.thumbnail
title = it.title
}
}
@ -161,14 +161,19 @@ class Animeler : AnimeHttpSource(), ConfigurableAnimeSource {
}
// =========================== Anime Details ============================
private inline fun <reified T> Response.parseBody(): T {
val body = use { it.body.string() }
.substringAfter("const anime = ")
.substringBefore("};") + "}"
return json.decodeFromString<T>(body)
}
override fun animeDetailsParse(response: Response) = SAnime.create().apply {
val body = response.use { it.body.string() }
.substringAfter("var anime = ")
.substringBefore("}<") + "}"
val animeDto = json.decodeFromString<FullAnimeDto>(body)
val animeDto = response.parseBody<FullAnimeDto>()
setUrlWithoutDomain(animeDto.url)
thumbnail_url = animeDto.image
thumbnail_url = animeDto.thumbnail
title = animeDto.title
artist = animeDto.studios
author = animeDto.producers
@ -195,13 +200,9 @@ class Animeler : AnimeHttpSource(), ConfigurableAnimeSource {
// ============================== Episodes ==============================
override fun episodeListParse(response: Response): List<SEpisode> {
val body = response.use { it.body.string() }
.substringAfter("var episodes = ")
.substringBefore("];") + "]"
val episodes = response.parseBody<AnimeEpisodes>().episodes
val episodes = json.decodeFromString<List<EpisodeDto>>(body)
return episodes.reversed().map {
return episodes.map {
SEpisode.create().apply {
setUrlWithoutDomain(it.url)
name = "Bölüm " + it.meta.number

View File

@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.animeextension.tr.animeler.dto
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.JsonPrimitive
@Serializable
data class SearchResponseDto(
@ -15,12 +16,19 @@ data class PostDto(
val post_content: String? = null,
)
@Serializable
data class ThumbnailDto(private val featured_url: JsonPrimitive) {
val url = if (featured_url.isString) featured_url.content else null
}
@Serializable
data class SimpleAnimeDto(
val url: String,
val image: String,
val post: PostDto,
private val image: String = "",
private val images: ThumbnailDto? = null,
) {
val thumbnail = image.ifEmpty { images?.url }
val title = post.post_title
}
@ -49,12 +57,13 @@ data class SingleDto(
@Serializable
data class FullAnimeDto(
val url: String,
val image: String,
val post: PostDto,
val meta: MetaDto,
private val taxonomies: TaxonomiesDto,
private val image: String = "",
private val images: ThumbnailDto? = null,
) {
val thumbnail = image.ifEmpty { images?.url }
val title = post.post_title
@Serializable
@ -85,6 +94,9 @@ data class ItemDto(val name: String)
private fun List<ItemDto>.parseItems() = joinToString { it.name }.takeIf(String::isNotBlank)
@Serializable
data class AnimeEpisodes(val episodes: List<EpisodeDto>)
@Serializable
data class EpisodeDto(
val url: String,