From 4d5d03285bb64123188ca0feac5beee41ea429ea Mon Sep 17 00:00:00 2001 From: bapeey <90949336+bapeey@users.noreply.github.com> Date: Fri, 29 Mar 2024 02:01:46 -0500 Subject: [PATCH] Add EternalMangas and move MangaEsp to multisrc (#2127) * I made this on termux * Fix regex and move dateFormat to DTO * Phase 1 * Phase 2: Prepare for intl * Phase 3: Add intl Builds are faster on my phone T.T * Apply suggestions from code review * bump --- .../assets/i18n/messages_en.properties | 13 + .../assets/i18n/messages_es.properties | 13 + lib-multisrc/mangaesp/build.gradle.kts | 9 + .../tachiyomi/multisrc/mangaesp/MangaEsp.kt | 248 ++++++++++++++++++ .../multisrc}/mangaesp/MangaEspDto.kt | 11 +- src/es/eternalmangas/build.gradle | 10 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 7132 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3579 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 10862 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 21462 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 32579 bytes .../es/eternalmangas/EternalMangas.kt | 5 + src/es/mangaesp/build.gradle | 5 +- .../extension/es/mangaesp/MangaEsp.kt | 244 +---------------- 14 files changed, 311 insertions(+), 247 deletions(-) create mode 100644 lib-multisrc/mangaesp/assets/i18n/messages_en.properties create mode 100644 lib-multisrc/mangaesp/assets/i18n/messages_es.properties create mode 100644 lib-multisrc/mangaesp/build.gradle.kts create mode 100644 lib-multisrc/mangaesp/src/eu/kanade/tachiyomi/multisrc/mangaesp/MangaEsp.kt rename {src/es/mangaesp/src/eu/kanade/tachiyomi/extension/es => lib-multisrc/mangaesp/src/eu/kanade/tachiyomi/multisrc}/mangaesp/MangaEspDto.kt (91%) create mode 100644 src/es/eternalmangas/build.gradle create mode 100644 src/es/eternalmangas/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/eternalmangas/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/eternalmangas/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/eternalmangas/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/eternalmangas/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/eternalmangas/src/eu/kanade/tachiyomi/extension/es/eternalmangas/EternalMangas.kt diff --git a/lib-multisrc/mangaesp/assets/i18n/messages_en.properties b/lib-multisrc/mangaesp/assets/i18n/messages_en.properties new file mode 100644 index 000000000..745010946 --- /dev/null +++ b/lib-multisrc/mangaesp/assets/i18n/messages_en.properties @@ -0,0 +1,13 @@ +search_length_error=The query must have at least 2 characters +comics_list_error=Comics list not found +comic_data_error=Comic data not found +sort_by_filter_title=Sort by +sort_by_filter_name=Name +sort_by_filter_views=Views +sort_by_filter_updated=Updated +sort_by_filter_added=Added +status_filter_title=Status +status_filter_ongoing=Ongoing +status_filter_hiatus=Hiatus +status_filter_dropped=Dropped +status_filter_completed=Completed diff --git a/lib-multisrc/mangaesp/assets/i18n/messages_es.properties b/lib-multisrc/mangaesp/assets/i18n/messages_es.properties new file mode 100644 index 000000000..0aa8467d6 --- /dev/null +++ b/lib-multisrc/mangaesp/assets/i18n/messages_es.properties @@ -0,0 +1,13 @@ +search_length_error=La búsqueda debe tener al menos 2 caracteres +comics_list_error=No se pudo encontrar la lista de comics +comic_data_error=No se pudo encontrar los datos del comic +sort_by_filter_title=Ordenar por +sort_by_filter_name=Nombre +sort_by_filter_views=Vistas +sort_by_filter_updated=Actualización +sort_by_filter_added=Agregado +status_filter_title=Estado +status_filter_ongoing=En curso +status_filter_hiatus=En pausa +status_filter_dropped=Abandonado +status_filter_completed=Finalizado diff --git a/lib-multisrc/mangaesp/build.gradle.kts b/lib-multisrc/mangaesp/build.gradle.kts new file mode 100644 index 000000000..590e23558 --- /dev/null +++ b/lib-multisrc/mangaesp/build.gradle.kts @@ -0,0 +1,9 @@ +plugins { + id("lib-multisrc") +} + +baseVersionCode = 1 + +dependencies { + api(project(":lib:i18n")) +} diff --git a/lib-multisrc/mangaesp/src/eu/kanade/tachiyomi/multisrc/mangaesp/MangaEsp.kt b/lib-multisrc/mangaesp/src/eu/kanade/tachiyomi/multisrc/mangaesp/MangaEsp.kt new file mode 100644 index 000000000..04634f7d5 --- /dev/null +++ b/lib-multisrc/mangaesp/src/eu/kanade/tachiyomi/multisrc/mangaesp/MangaEsp.kt @@ -0,0 +1,248 @@ +package eu.kanade.tachiyomi.multisrc.mangaesp + +import eu.kanade.tachiyomi.lib.i18n.Intl +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.asObservableSuccess +import eu.kanade.tachiyomi.network.interceptor.rateLimitHost +import eu.kanade.tachiyomi.source.model.Filter +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.online.HttpSource +import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import okhttp3.Headers +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Response +import org.jsoup.nodes.Element +import rx.Observable +import uy.kohesive.injekt.injectLazy +import kotlin.math.min + +abstract class MangaEsp( + override val name: String, + override val baseUrl: String, + override val lang: String, + protected val apiBaseUrl: String = baseUrl.replace("://", "://apis."), +) : HttpSource() { + + override val supportsLatest = true + + protected val json: Json by injectLazy() + + protected val intl = Intl( + language = lang, + baseLanguage = "en", + availableLanguages = setOf("en", "es"), + classLoader = this::class.java.classLoader!!, + ) + + override val client: OkHttpClient = network.client.newBuilder() + .rateLimitHost(baseUrl.toHttpUrl(), 2) + .build() + + override fun headersBuilder(): Headers.Builder = Headers.Builder() + .add("Referer", "$baseUrl/") + + override fun popularMangaRequest(page: Int): Request = GET("$apiBaseUrl/api/topSerie", headers) + + override fun popularMangaParse(response: Response): MangasPage { + val responseData = json.decodeFromString(response.body.string()) + + val topDaily = responseData.response.topDaily.flatten().map { it.data } + val topWeekly = responseData.response.topWeekly.flatten().map { it.data } + val topMonthly = responseData.response.topMonthly.flatten().map { it.data } + + val mangas = (topDaily + topWeekly + topMonthly).distinctBy { it.slug }.map { it.toSManga() } + + return MangasPage(mangas, false) + } + + override fun latestUpdatesRequest(page: Int): Request = GET("$apiBaseUrl/api/lastUpdates", headers) + + override fun latestUpdatesParse(response: Response): MangasPage { + val responseData = json.decodeFromString(response.body.string()) + + val mangas = responseData.response.map { it.toSManga() } + + return MangasPage(mangas, false) + } + + private var comicsList = mutableListOf() + + override fun fetchSearchManga( + page: Int, + query: String, + filters: FilterList, + ): Observable { + return if (comicsList.isEmpty()) { + client.newCall(searchMangaRequest(page, query, filters)) + .asObservableSuccess() + .map { searchMangaParse(it, page, query, filters) } + } else { + Observable.just(parseComicsList(page, query, filters)) + } + } + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request = GET("$baseUrl/comics", headers) + + override fun searchMangaParse(response: Response): MangasPage = throw UnsupportedOperationException() + + private fun searchMangaParse(response: Response, page: Int, query: String, filters: FilterList): MangasPage { + val document = response.asJsoup() + val script = document.select("script:containsData(self.__next_f.push)").joinToString { it.data() } + val jsonString = MANGA_LIST_REGEX.find(script)?.groupValues?.get(1) + ?: throw Exception(intl["comics_list_error"]) + val unescapedJson = jsonString.unescape() + comicsList = json.decodeFromString>(unescapedJson).toMutableList() + return parseComicsList(page, query, filters) + } + + private var filteredList = mutableListOf() + + private fun parseComicsList(page: Int, query: String, filterList: FilterList): MangasPage { + if (page == 1) { + filteredList.clear() + + if (query.isNotBlank()) { + if (query.length < 2) throw Exception(intl["search_length_error"]) + filteredList.addAll( + comicsList.filter { + it.name.contains(query, ignoreCase = true) || it.alternativeName?.contains(query, ignoreCase = true) == true + }, + ) + } else { + filteredList.addAll(comicsList) + } + + val statusFilter = filterList.firstInstanceOrNull() + + if (statusFilter != null) { + filteredList = filteredList.filter { it.status == statusFilter.toUriPart() }.toMutableList() + } + + val sortByFilter = filterList.firstInstanceOrNull() + + if (sortByFilter != null) { + if (sortByFilter.state?.ascending == true) { + when (sortByFilter.selected) { + "name" -> filteredList.sortBy { it.name } + "views" -> filteredList.sortBy { it.trending?.views } + "updated_at" -> filteredList.sortBy { it.lastChapterDate } + "created_at" -> filteredList.sortBy { it.createdAt } + } + } else { + when (sortByFilter.selected) { + "name" -> filteredList.sortByDescending { it.name } + "views" -> filteredList.sortByDescending { it.trending?.views } + "updated_at" -> filteredList.sortByDescending { it.lastChapterDate } + "created_at" -> filteredList.sortByDescending { it.createdAt } + } + } + } + } + + val hasNextPage = filteredList.size > page * MANGAS_PER_PAGE + + return MangasPage( + filteredList.subList((page - 1) * MANGAS_PER_PAGE, min(page * MANGAS_PER_PAGE, filteredList.size)) + .map { it.toSManga() }, + hasNextPage, + ) + } + + override fun mangaDetailsParse(response: Response): SManga { + val responseBody = response.body.string() + val mangaDetailsJson = MANGA_DETAILS_REGEX.find(responseBody)?.groupValues?.get(1) + ?: throw Exception(intl["comic_data_error"]) + val unescapedJson = mangaDetailsJson.unescape() + + return json.decodeFromString(unescapedJson).toSMangaDetails() + } + + override fun chapterListParse(response: Response): List { + val responseBody = response.body.string() + val mangaDetailsJson = MANGA_DETAILS_REGEX.find(responseBody)?.groupValues?.get(1) + ?: throw Exception(intl["comic_data_error"]) + val unescapedJson = mangaDetailsJson.unescape() + val series = json.decodeFromString(unescapedJson) + return series.chapters.map { it.toSChapter(series.slug) } + } + + override fun pageListParse(response: Response): List { + val document = response.asJsoup() + return document.select("main.contenedor.read img").mapIndexed { i, img -> + Page(i, imageUrl = img.imgAttr()) + } + } + + override fun getFilterList() = FilterList( + SortByFilter(intl["sort_by_filter_title"], getSortProperties()), + StatusFilter(intl["status_filter_title"], getStatusList()), + ) + + protected open fun getSortProperties(): List = listOf( + SortProperty(intl["sort_by_filter_name"], "name"), + SortProperty(intl["sort_by_filter_views"], "views"), + SortProperty(intl["sort_by_filter_updated"], "updated_at"), + SortProperty(intl["sort_by_filter_added"], "created_at"), + ) + + data class SortProperty(val name: String, val value: String) { + override fun toString(): String = name + } + + class SortByFilter(title: String, private val sortProperties: List) : Filter.Sort( + title, + sortProperties.map { it.name }.toTypedArray(), + Selection(2, ascending = false), + ) { + val selected: String + get() = sortProperties[state!!.index].value + } + + private class StatusFilter(title: String, statusList: Array>) : UriPartFilter( + title, + statusList, + ) + + protected open fun getStatusList() = arrayOf( + Pair(intl["status_filter_ongoing"], 1), + Pair(intl["status_filter_hiatus"], 2), + Pair(intl["status_filter_dropped"], 3), + Pair(intl["status_filter_completed"], 4), + ) + + private open class UriPartFilter(displayName: String, private val vals: Array>) : + Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { + fun toUriPart() = vals[state].second + } + + private inline fun List<*>.firstInstanceOrNull(): R? = + filterIsInstance().firstOrNull() + + override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException() + + private fun Element.imgAttr(): String = when { + hasAttr("data-lazy-src") -> attr("abs:data-lazy-src") + hasAttr("data-src") -> attr("abs:data-src") + hasAttr("data-cfsrc") -> attr("abs:data-cfsrc") + else -> attr("abs:src") + } + + private fun String.unescape(): String { + return UNESCAPE_REGEX.replace(this, "$1") + } + + companion object { + private val UNESCAPE_REGEX = """\\(.)""".toRegex() + private val MANGA_LIST_REGEX = """self\.__next_f\.push\(.*data\\":(\[.*trending.*])\}""".toRegex() + private val MANGA_DETAILS_REGEX = """self\.__next_f\.push\(.*data\\":(\{.*lastChapters.*\}).*\\"numFollow""".toRegex() + private const val MANGAS_PER_PAGE = 15 + } +} diff --git a/src/es/mangaesp/src/eu/kanade/tachiyomi/extension/es/mangaesp/MangaEspDto.kt b/lib-multisrc/mangaesp/src/eu/kanade/tachiyomi/multisrc/mangaesp/MangaEspDto.kt similarity index 91% rename from src/es/mangaesp/src/eu/kanade/tachiyomi/extension/es/mangaesp/MangaEspDto.kt rename to lib-multisrc/mangaesp/src/eu/kanade/tachiyomi/multisrc/mangaesp/MangaEspDto.kt index 2b72b9647..1e0917abd 100644 --- a/src/es/mangaesp/src/eu/kanade/tachiyomi/extension/es/mangaesp/MangaEspDto.kt +++ b/lib-multisrc/mangaesp/src/eu/kanade/tachiyomi/multisrc/mangaesp/MangaEspDto.kt @@ -1,10 +1,11 @@ -package eu.kanade.tachiyomi.extension.es.mangaesp +package eu.kanade.tachiyomi.multisrc.mangaesp import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import java.text.SimpleDateFormat +import java.util.Locale @Serializable class TopSeriesDto( @@ -101,18 +102,22 @@ class ChapterDto( private val slug: String, @SerialName("created_at") private val date: String, ) { - fun toSChapter(seriesSlug: String, dateFormat: SimpleDateFormat): SChapter { + fun toSChapter(seriesSlug: String): SChapter { return SChapter.create().apply { name = "Capítulo ${number.toString().removeSuffix(".0")}" if (!this@ChapterDto.name.isNullOrBlank()) { name += " - ${this@ChapterDto.name}" } date_upload = try { - dateFormat.parse(date)?.time ?: 0L + DATE_FORMATTER.parse(date)?.time ?: 0L } catch (e: Exception) { 0L } url = "/ver/$seriesSlug/$slug" } } + + companion object { + private val DATE_FORMATTER by lazy { SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US) } + } } diff --git a/src/es/eternalmangas/build.gradle b/src/es/eternalmangas/build.gradle new file mode 100644 index 000000000..95a07f9cb --- /dev/null +++ b/src/es/eternalmangas/build.gradle @@ -0,0 +1,10 @@ +ext { + extName = 'EternalMangas' + extClass = '.EternalMangas' + themePkg = 'mangaesp' + baseUrl = 'https://eternalmangas.com' + overrideVersionCode = 0 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/es/eternalmangas/res/mipmap-hdpi/ic_launcher.png b/src/es/eternalmangas/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0a28105344029aa3b5f1ad96a71faffde9df3a2d GIT binary patch literal 7132 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 literal 0 HcmV?d00001 diff --git a/src/es/eternalmangas/res/mipmap-xhdpi/ic_launcher.png b/src/es/eternalmangas/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d3b9007e4a8da7a115b1166bc0ea79515bc6c904 GIT binary patch literal 10862 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 B?Ir*K literal 0 HcmV?d00001 diff --git a/src/es/eternalmangas/res/mipmap-xxxhdpi/ic_launcher.png b/src/es/eternalmangas/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..435c911845b1b02e4023af05e485f2fe30774f36 GIT binary patch literal 32579 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μ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 q%C{4}ju3cD0I%b&y(response.body.string()) - - val topDaily = responseData.response.topDaily.flatten().map { it.data } - val topWeekly = responseData.response.topWeekly.flatten().map { it.data } - val topMonthly = responseData.response.topMonthly.flatten().map { it.data } - - val mangas = (topDaily + topWeekly + topMonthly).distinctBy { it.slug }.map { it.toSManga() } - - return MangasPage(mangas, false) - } - - override fun latestUpdatesRequest(page: Int): Request = GET("$apiBaseUrl/api/lastUpdates", headers) - - override fun latestUpdatesParse(response: Response): MangasPage { - val responseData = json.decodeFromString(response.body.string()) - - val mangas = responseData.response.map { it.toSManga() } - - return MangasPage(mangas, false) - } - - private var comicsList = mutableListOf() - - override fun fetchSearchManga( - page: Int, - query: String, - filters: FilterList, - ): Observable { - return if (comicsList.isEmpty()) { - client.newCall(searchMangaRequest(page, query, filters)) - .asObservableSuccess() - .map { searchMangaParse(it, page, query, filters) } - } else { - Observable.just(parseComicsList(page, query, filters)) - } - } - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request = GET("$baseUrl/comics", headers) - - override fun searchMangaParse(response: Response): MangasPage = throw UnsupportedOperationException() - - private fun searchMangaParse(response: Response, page: Int, query: String, filters: FilterList): MangasPage { - val document = response.asJsoup() - val script = document.select("script:containsData(self.__next_f.push)").joinToString { it.data() } - val jsonString = MANGA_LIST_REGEX.find(script)?.groupValues?.get(1) - ?: throw Exception("No se pudo encontrar la lista de comics") - val unescapedJson = jsonString.unescape() - comicsList = json.decodeFromString>(unescapedJson).toMutableList() - return parseComicsList(page, query, filters) - } - - private var filteredList = mutableListOf() - - private fun parseComicsList(page: Int, query: String, filterList: FilterList): MangasPage { - if (page == 1) { - filteredList.clear() - - if (query.isNotBlank()) { - if (query.length < 2) throw Exception("La búsqueda debe tener al menos 2 caracteres") - filteredList.addAll( - comicsList.filter { - it.name.contains(query, ignoreCase = true) || it.alternativeName?.contains(query, ignoreCase = true) == true - }, - ) - } else { - filteredList.addAll(comicsList) - } - - val statusFilter = filterList.firstInstanceOrNull() - - if (statusFilter != null) { - filteredList = filteredList.filter { it.status == statusFilter.toUriPart() }.toMutableList() - } - - val sortByFilter = filterList.firstInstanceOrNull() - - if (sortByFilter != null) { - if (sortByFilter.state?.ascending == true) { - when (sortByFilter.selected) { - "name" -> filteredList.sortBy { it.name } - "views" -> filteredList.sortBy { it.trending?.views } - "updated_at" -> filteredList.sortBy { it.lastChapterDate } - "created_at" -> filteredList.sortBy { it.createdAt } - } - } else { - when (sortByFilter.selected) { - "name" -> filteredList.sortByDescending { it.name } - "views" -> filteredList.sortByDescending { it.trending?.views } - "updated_at" -> filteredList.sortByDescending { it.lastChapterDate } - "created_at" -> filteredList.sortByDescending { it.createdAt } - } - } - } - } - - val hasNextPage = filteredList.size > page * MANGAS_PER_PAGE - - return MangasPage( - filteredList.subList((page - 1) * MANGAS_PER_PAGE, min(page * MANGAS_PER_PAGE, filteredList.size)) - .map { it.toSManga() }, - hasNextPage, - ) - } - - override fun mangaDetailsParse(response: Response): SManga { - val responseBody = response.body.string() - val mangaDetailsJson = MANGA_DETAILS_REGEX.find(responseBody)?.groupValues?.get(1) - ?: throw Exception("No se pudo encontrar los detalles del manga") - val unescapedJson = mangaDetailsJson.unescape() - - return json.decodeFromString(unescapedJson).toSMangaDetails() - } - - override fun chapterListParse(response: Response): List { - val responseBody = response.body.string() - val mangaDetailsJson = MANGA_DETAILS_REGEX.find(responseBody)?.groupValues?.get(1) - ?: throw Exception("No se pudo encontrar la lista de capítulos") - val unescapedJson = mangaDetailsJson.unescape() - val series = json.decodeFromString(unescapedJson) - return series.chapters.map { it.toSChapter(series.slug, dateFormat) } - } - - override fun pageListParse(response: Response): List { - val document = response.asJsoup() - return document.select("main.contenedor.read img").mapIndexed { i, img -> - Page(i, imageUrl = img.imgAttr()) - } - } - - override fun getFilterList() = FilterList( - SortByFilter("Ordenar por", getSortProperties()), - StatusFilter(), - ) - - private fun getSortProperties(): List = listOf( - SortProperty("Nombre", "name"), - SortProperty("Visitas", "views"), - SortProperty("Actualización", "updated_at"), - SortProperty("Agregado", "created_at"), - ) - - data class SortProperty(val name: String, val value: String) { - override fun toString(): String = name - } - - class SortByFilter(title: String, private val sortProperties: List) : Filter.Sort( - title, - sortProperties.map { it.name }.toTypedArray(), - Selection(2, ascending = false), - ) { - val selected: String - get() = sortProperties[state!!.index].value - } - - private class StatusFilter : UriPartFilter( - "Estado", - arrayOf( - Pair("En emisión", 1), - Pair("En pausa", 2), - Pair("Abandonado", 3), - Pair("Finalizado", 4), - ), - ) - - private open class UriPartFilter(displayName: String, private val vals: Array>) : - Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { - fun toUriPart() = vals[state].second - } - - private inline fun List<*>.firstInstanceOrNull(): R? = - filterIsInstance().firstOrNull() - - override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException() - - private fun Element.imgAttr(): String = when { - hasAttr("data-lazy-src") -> attr("abs:data-lazy-src") - hasAttr("data-src") -> attr("abs:data-src") - hasAttr("data-cfsrc") -> attr("abs:data-cfsrc") - else -> attr("abs:src") - } - - private fun String.unescape(): String { - return UNESCAPE_REGEX.replace(this, "$1") - } - - companion object { - private val UNESCAPE_REGEX = """\\(.)""".toRegex() - private val MANGA_LIST_REGEX = """self\.__next_f\.push\(.*data\\":(\[.*trending.*])\}""".toRegex() - private val MANGA_DETAILS_REGEX = """self\.__next_f\.push\(.*data\\":(\{.*lastChapters.*\}).*numFollow""".toRegex() - private const val MANGAS_PER_PAGE = 15 - } -} +class MangaEsp : MangaEsp("MangaEsp", "https://mangaesp.net", "es")