@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'LegionAnime'
|
extName = 'LegionAnime'
|
||||||
pkgNameSuffix = 'es.legionanime'
|
pkgNameSuffix = 'es.legionanime'
|
||||||
extClass = '.LegionAnime'
|
extClass = '.LegionAnime'
|
||||||
extVersionCode = 1
|
extVersionCode = 2
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 34 KiB |
@ -33,6 +33,8 @@ import org.jsoup.nodes.Element
|
|||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.Locale
|
||||||
|
|
||||||
class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||||
|
|
||||||
@ -57,13 +59,13 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
override fun animeDetailsParse(document: Document): SAnime {
|
override fun animeDetailsParse(document: Document): SAnime {
|
||||||
val jsonResponse = json.decodeFromString<JsonObject>(document.body().text())["response"]!!.jsonObject
|
val jsonResponse = json.decodeFromString<JsonObject>(document.body().text())["response"]!!.jsonObject
|
||||||
val anime = jsonResponse["anime"]!!.jsonObject
|
val anime = jsonResponse["anime"]!!.jsonObject
|
||||||
val studioId = anime["studios"]!!
|
val studioId = anime["studios"]!!.jsonPrimitive.content.split(",")
|
||||||
val studio = studiosMap.filter { it.value == studioId.jsonPrimitive.content.toInt() }.keys.firstOrNull()
|
val studio = studioId.map { id -> studiosMap.filter { it.value == id.toInt() }.keys.first() }
|
||||||
return SAnime.create().apply {
|
return SAnime.create().apply {
|
||||||
title = anime["name"]!!.jsonPrimitive.content
|
title = anime["name"]!!.jsonPrimitive.content
|
||||||
description = anime["synopsis"]!!.jsonPrimitive.content
|
description = anime["synopsis"]!!.jsonPrimitive.content
|
||||||
genre = anime["genres"]!!.jsonPrimitive.content
|
genre = anime["genres"]!!.jsonPrimitive.content
|
||||||
author = studio
|
author = studio.joinToString { it.toString() }
|
||||||
status = when (anime["status"]!!.jsonPrimitive.content) {
|
status = when (anime["status"]!!.jsonPrimitive.content) {
|
||||||
"En emisión" -> SAnime.ONGOING
|
"En emisión" -> SAnime.ONGOING
|
||||||
"Finalizado" -> SAnime.COMPLETED
|
"Finalizado" -> SAnime.COMPLETED
|
||||||
@ -80,8 +82,10 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
return episodes.map {
|
return episodes.map {
|
||||||
SEpisode.create().apply {
|
SEpisode.create().apply {
|
||||||
name = it.jsonObject["name"]!!.jsonPrimitive.content
|
name = "Episodio " + it.jsonObject["name"]!!.jsonPrimitive.content
|
||||||
url = "$baseUrl/v2/episode_links/${it.jsonObject["id"]!!.jsonPrimitive.content}"
|
url = "$baseUrl/v2/episode_links/${it.jsonObject["id"]!!.jsonPrimitive.content}"
|
||||||
|
date_upload = parseDate(it.jsonObject["release_date"]!!.jsonPrimitive.content)
|
||||||
|
episode_number = it.jsonObject["name"]!!.jsonPrimitive.content.toFloat()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -129,31 +133,27 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
|
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
|
||||||
val body = FormBody.Builder().add("apyki", apyki).build()
|
val body = FormBody.Builder().add("apyki", apyki).build()
|
||||||
val genreFilter = (filters.find { it is TagFilter } as TagFilter).state
|
|
||||||
val excludeGenreFilter = (filters.find { it is ExcludeTagFilter } as ExcludeTagFilter).state
|
|
||||||
val studioFilter = (filters.find { it is StudioFilter } as StudioFilter).state
|
|
||||||
val stateFilter = (filters.find { it is StateFilter } as StateFilter)
|
|
||||||
|
|
||||||
val genre = if (genreFilter.isNotEmpty()) {
|
val genreFilter = ((filters.find { it is TagFilter }) as? TagFilter)?.state ?: emptyList()
|
||||||
genreFilter.filter { it.state }.map { genres[it.name] }.joinToString("%2C") { it.toString() }
|
val excludeGenreFilter = (filters.find { it is ExcludeTagFilter } as? ExcludeTagFilter)?.state ?: emptyList()
|
||||||
} else {
|
val studioFilter = (filters.find { it is StudioFilter } as? StudioFilter)?.state ?: emptyList()
|
||||||
""
|
val stateFilter = (filters.find { it is StateFilter } as? StateFilter) ?: StateFilter()
|
||||||
}
|
|
||||||
val excludeGenre = if (genreFilter.isNotEmpty()) {
|
val genre = try {
|
||||||
|
if (genreFilter.isNotEmpty()) {
|
||||||
|
genreFilter.filter { it.state }.map { genres[it.name] }.joinToString("%2C") { it.toString() }
|
||||||
|
} else ""
|
||||||
|
} catch (e: Exception) { "" }
|
||||||
|
|
||||||
|
val excludeGenre = if (excludeGenreFilter.isNotEmpty()) {
|
||||||
excludeGenreFilter.filter { it.state }.map { genres[it.name] }.joinToString("%2C") { it.toString() }
|
excludeGenreFilter.filter { it.state }.map { genres[it.name] }.joinToString("%2C") { it.toString() }
|
||||||
} else {
|
} else ""
|
||||||
""
|
|
||||||
}
|
|
||||||
val studio = if (studioFilter.isNotEmpty()) {
|
val studio = if (studioFilter.isNotEmpty()) {
|
||||||
studioFilter.filter { it.state }.map { studiosMap[it.name] }.joinToString("%2C") { it.toString() }
|
studioFilter.filter { it.state }.map { studiosMap[it.name] }.joinToString("%2C") { it.toString() }
|
||||||
} else {
|
} else 0
|
||||||
"0"
|
|
||||||
}
|
val status = if (stateFilter.state != 0) stateFilter.toUriPart() else ""
|
||||||
val status = if (stateFilter.state != 0) {
|
|
||||||
stateFilter.toUriPart()
|
|
||||||
} else {
|
|
||||||
""
|
|
||||||
}
|
|
||||||
|
|
||||||
val url = "$baseUrl/v2/directories?studio=$studio¬_genre=$excludeGenre&year=&orderBy=4&language=&type=&duration=&search=$query&letter=0&limit=24&genre=$genre&season=&page=${(page - 1) * 24}&status=$status"
|
val url = "$baseUrl/v2/directories?studio=$studio¬_genre=$excludeGenre&year=&orderBy=4&language=&type=&duration=&search=$query&letter=0&limit=24&genre=$genre&season=&page=${(page - 1) * 24}&status=$status"
|
||||||
|
|
||||||
@ -163,7 +163,26 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun searchAnimeParse(response: Response): AnimesPage = popularAnimeParse(response)
|
override fun searchAnimeParse(response: Response): AnimesPage {
|
||||||
|
val responseJson = json.decodeFromString<JsonObject>(response.asJsoup().body().text())
|
||||||
|
try {
|
||||||
|
val animeArray = responseJson["response"]!!.jsonArray
|
||||||
|
return AnimesPage(
|
||||||
|
animeArray.map {
|
||||||
|
val animeDetail = it.jsonObject
|
||||||
|
val animeId = animeDetail["id"]!!.jsonPrimitive.content
|
||||||
|
SAnime.create().apply {
|
||||||
|
title = animeDetail["nombre"]!!.jsonPrimitive.content
|
||||||
|
url = "$baseUrl/v1/episodes/$animeId"
|
||||||
|
thumbnail_url = aip.random() + animeDetail["img_url"]!!.jsonPrimitive.content
|
||||||
|
}
|
||||||
|
},
|
||||||
|
false
|
||||||
|
)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
return AnimesPage(emptyList(), false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun videoListParse(response: Response): List<Video> {
|
override fun videoListParse(response: Response): List<Video> {
|
||||||
val jsonResponse = json.decodeFromString<JsonObject>(response.asJsoup().body().text())
|
val jsonResponse = json.decodeFromString<JsonObject>(response.asJsoup().body().text())
|
||||||
@ -261,6 +280,16 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
TODO("Not yet implemented")
|
TODO("Not yet implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun parseDate(dateStr: String): Long {
|
||||||
|
return runCatching { DATE_FORMATTER.parse(dateStr)?.time }
|
||||||
|
.getOrNull() ?: 0L
|
||||||
|
}
|
||||||
|
companion object {
|
||||||
|
private val DATE_FORMATTER by lazy {
|
||||||
|
SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* --Unused stuff-- */
|
/* --Unused stuff-- */
|
||||||
|
|
||||||
override fun popularAnimeSelector(): String = throw Exception("not used")
|
override fun popularAnimeSelector(): String = throw Exception("not used")
|
||||||
|