A
zE)Jdu<&yyUot6QK2tVtH36U$XT+1nKtTe#V2J!_=F`{#xz`qP=EnY@^LZ1Kt002ov
JPDHLkV1gZTp#uN_
diff --git a/src/pt/lermanga/res/mipmap-xhdpi/ic_launcher.png b/src/pt/lermanga/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 65aa209440a304071b814d011bd02c32a848af52..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 3136
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
diff --git a/src/pt/lermanga/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/lermanga/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index a4dbc9a97e7e30de08e63c849608b35d2c07cc7b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 7270
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
diff --git a/src/pt/lermanga/src/eu/kanade/tachiyomi/extension/pt/lermanga/LerManga.kt b/src/pt/lermanga/src/eu/kanade/tachiyomi/extension/pt/lermanga/LerManga.kt
deleted file mode 100644
index 99d37aa41..000000000
--- a/src/pt/lermanga/src/eu/kanade/tachiyomi/extension/pt/lermanga/LerManga.kt
+++ /dev/null
@@ -1,206 +0,0 @@
-package eu.kanade.tachiyomi.extension.pt.lermanga
-
-import android.util.Base64
-import eu.kanade.tachiyomi.network.GET
-import eu.kanade.tachiyomi.network.interceptor.rateLimitHost
-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.ParsedHttpSource
-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.Document
-import org.jsoup.nodes.Element
-import uy.kohesive.injekt.injectLazy
-import java.text.SimpleDateFormat
-import java.util.Locale
-import java.util.concurrent.TimeUnit
-import kotlin.UnsupportedOperationException
-
-class LerManga : ParsedHttpSource() {
-
- override val name = "Ler Mangá"
-
- override val baseUrl = "https://lermanga.org"
-
- override val lang = "pt-BR"
-
- override val supportsLatest = true
-
- override val client: OkHttpClient = network.cloudflareClient.newBuilder()
- .rateLimitHost(baseUrl.toHttpUrl(), 1, 1, TimeUnit.SECONDS)
- .rateLimitHost(IMG_CDN_URL.toHttpUrl(), 1, 2, TimeUnit.SECONDS)
- .build()
-
- private val json: Json by injectLazy()
-
- override fun headersBuilder(): Headers.Builder = Headers.Builder()
- .add("Referer", "$baseUrl/")
-
- private fun apiHeadersBuilder(): Headers.Builder = headersBuilder()
- .add("Accept", "application/json")
-
- private val apiHeaders by lazy { apiHeadersBuilder().build() }
-
- override fun popularMangaRequest(page: Int): Request {
- val path = if (page > 1) "page/$page/" else ""
- return GET("$baseUrl/mangas/$path?orderby=views&order=desc", headers)
- }
-
- override fun popularMangaSelector(): String = "div.film_list div.flw-item"
-
- override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply {
- title = element.selectFirst("h3.film-name")!!.text()
- thumbnail_url = element.selectFirst("img.film-poster-img")!!.srcAttr()
- setUrlWithoutDomain(element.selectFirst("a.dynamic-name")!!.attr("href"))
- }
-
- override fun popularMangaNextPageSelector(): String = "div.wp-pagenavi > a:last-child"
-
- override fun latestUpdatesRequest(page: Int): Request = GET(baseUrl, headers)
-
- override fun latestUpdatesSelector() = "div.capitulo_recentehome"
-
- override fun latestUpdatesFromElement(element: Element): SManga = SManga.create().apply {
- title = element.selectFirst("h3")!!.text()
- thumbnail_url = element.selectFirst("img")!!.absUrl("data-src")
- setUrlWithoutDomain(element.selectFirst("h3 > a")!!.attr("href"))
- }
-
- override fun latestUpdatesNextPageSelector(): String? = null
-
- override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
- if (query.startsWith(PREFIX_SLUG_SEARCH)) {
- val slug = query.removePrefix(PREFIX_SLUG_SEARCH)
- val tempManga = SManga.create().apply { url = "/mangas/$slug" }
-
- return mangaDetailsRequest(tempManga)
- }
-
- val apiRequest = "$API_BASE_URL/mangas".toHttpUrl().newBuilder()
- .addQueryParameter("page", page.toString())
- .addQueryParameter("search", query)
- .addQueryParameter("_fields", "title,slug")
- .build()
-
- return GET(apiRequest, apiHeaders)
- }
-
- override fun searchMangaParse(response: Response): MangasPage {
- if (response.request.url.queryParameter("slug") != null) {
- val manga = mangaDetailsParse(response)
- return MangasPage(listOf(manga), hasNextPage = false)
- }
-
- val result = response.parseAs>()
- val mangaList = result.map(LmMangaDto::toSManga)
-
- val currentPage = response.request.url.queryParameter("page")
- .orEmpty().toIntOrNull() ?: 1
- val lastPage = response.headers["X-Wp-TotalPages"]!!.toInt()
- val hasNextPage = currentPage < lastPage
-
- return MangasPage(mangaList, hasNextPage)
- }
-
- override fun searchMangaSelector() = throw UnsupportedOperationException()
-
- override fun searchMangaFromElement(element: Element) = throw UnsupportedOperationException()
-
- override fun searchMangaNextPageSelector() = throw UnsupportedOperationException()
-
- override fun getMangaUrl(manga: SManga): String = baseUrl + manga.url
-
- override fun mangaDetailsRequest(manga: SManga): Request {
- val slug = manga.url.removePrefix("/mangas/").removeSuffix("/")
-
- val apiRequest = "$API_BASE_URL/mangas".toHttpUrl().newBuilder()
- .addQueryParameter("slug", slug)
- .addQueryParameter("limit", "1")
- .addQueryParameter("_embed", "wp:term")
- .addQueryParameter("_fields", "title,slug,content,_links.wp:term,_embedded.wp:term")
- .build()
-
- return GET(apiRequest, apiHeaders)
- }
-
- override fun mangaDetailsParse(response: Response): SManga {
- return response.parseAs>().first().toSManga()
- }
-
- override fun mangaDetailsParse(document: Document): SManga = throw UnsupportedOperationException()
-
- override fun chapterListSelector() = "div.manga-chapters div.single-chapter"
-
- override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
- name = element.selectFirst("a")!!.text()
- date_upload = element.selectFirst("small small")!!.text().toDate()
- setUrlWithoutDomain(element.selectFirst("a")!!.attr("href"))
- }
-
- override fun pageListParse(document: Document): List {
- val pagesScript = document.selectFirst("h1.heading-header + script")
- ?: return emptyList()
-
- val pagesJson = when {
- pagesScript.hasAttr("src") -> {
- pagesScript.attr("src")
- .substringAfter("base64,")
- .let { Base64.decode(it, Base64.DEFAULT).toString(Charsets.UTF_8) }
- }
- else -> pagesScript.data()
- }
-
- return pagesJson
- .replace(PAGES_VARIABLE_REGEX, "")
- .substringBeforeLast(";")
- .let { json.decodeFromString>(it) }
- .filter { it.isNotBlank() }
- .mapIndexed { index, imageUrl ->
- Page(index, imageUrl = imageUrl)
- }
- }
-
- override fun imageUrlParse(document: Document) = throw UnsupportedOperationException()
-
- override fun imageRequest(page: Page): Request {
- val newHeaders = headersBuilder()
- .set("Referer", page.url)
- .build()
-
- return GET(page.imageUrl!!, newHeaders)
- }
-
- private inline fun Response.parseAs(): T = use {
- json.decodeFromString(it.body.string())
- }
-
- private fun Element.srcAttr(): String = when {
- hasAttr("data-src") -> absUrl("data-src")
- else -> absUrl("src")
- }
-
- private fun String.toDate(): Long {
- return runCatching { DATE_FORMATTER.parse(trim())?.time }
- .getOrNull() ?: 0L
- }
-
- companion object {
- const val API_BASE_URL = "https://lermanga.org/wp-json/wp/v2"
- const val IMG_CDN_URL = "https://img.lermanga.org"
- private val PAGES_VARIABLE_REGEX = "var imagens_cap\\s*=\\s*".toRegex()
- private val DATE_FORMATTER by lazy {
- SimpleDateFormat("dd-MM-yyyy", Locale("pt", "BR"))
- }
-
- const val PREFIX_SLUG_SEARCH = "slug:"
- private const val ERROR_NO_SEARCH_AVAILABLE = "O site não possui busca própria."
- }
-}
diff --git a/src/pt/lermanga/src/eu/kanade/tachiyomi/extension/pt/lermanga/LerMangaDto.kt b/src/pt/lermanga/src/eu/kanade/tachiyomi/extension/pt/lermanga/LerMangaDto.kt
deleted file mode 100644
index 2e5a305e4..000000000
--- a/src/pt/lermanga/src/eu/kanade/tachiyomi/extension/pt/lermanga/LerMangaDto.kt
+++ /dev/null
@@ -1,38 +0,0 @@
-package eu.kanade.tachiyomi.extension.pt.lermanga
-
-import eu.kanade.tachiyomi.source.model.SManga
-import kotlinx.serialization.SerialName
-import kotlinx.serialization.Serializable
-import org.jsoup.Jsoup
-import org.jsoup.nodes.Entities
-
-@Serializable
-data class LmMangaDto(
- val slug: String,
- val title: LmContentDto,
- val content: LmContentDto? = null,
- @SerialName("_embedded") val embedded: LmEmbedDto? = null,
-) {
-
- fun toSManga(): SManga = SManga.create().apply {
- title = Entities.unescape(this@LmMangaDto.title.rendered)
- thumbnail_url = "${LerManga.IMG_CDN_URL}/${slug.first().uppercase()}/$slug/capa.jpg"
- description = content?.rendered?.let { Jsoup.parseBodyFragment(it) }?.text()?.trim()
- genre = embedded?.wpTerm.orEmpty().flatten()
- .filter { it.taxonomy == "generomanga" }
- .joinToString { it.name }
- url = "/mangas/$slug"
- }
-}
-
-@Serializable
-data class LmContentDto(val rendered: String)
-
-@Serializable
-data class LmEmbedDto(@SerialName("wp:term") val wpTerm: List>)
-
-@Serializable
-data class LmTaxonomyDto(
- val name: String,
- val taxonomy: String,
-)
diff --git a/src/pt/lermanga/src/eu/kanade/tachiyomi/extension/pt/lermanga/LerMangaUrlActivity.kt b/src/pt/lermanga/src/eu/kanade/tachiyomi/extension/pt/lermanga/LerMangaUrlActivity.kt
deleted file mode 100644
index 716a5d6fb..000000000
--- a/src/pt/lermanga/src/eu/kanade/tachiyomi/extension/pt/lermanga/LerMangaUrlActivity.kt
+++ /dev/null
@@ -1,49 +0,0 @@
-package eu.kanade.tachiyomi.extension.pt.lermanga
-
-import android.app.Activity
-import android.content.ActivityNotFoundException
-import android.content.Intent
-import android.os.Bundle
-import android.util.Log
-import kotlin.system.exitProcess
-
-/**
- * Activity that accepts https://lermanga.org/mangas/xxx intents and redirects them to
- * the main Tachiyomi process. The idea is to not install the intent filter unless
- * you have this extension installed, but still let the main Tachiyomi app control
- * things.
- *
- * Main goal was to make it easier to open manga in Tachiyomi in spite of the DDoS blocking
- * the usual search screen from working.
- *
- * Added as the site removed their own search and are using an embedded Google search.
- * As Google has a lot of measures to prevent scrapping, this is the best that can
- * be done at the moment.
- */
-class LerMangaUrlActivity : Activity() {
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- val pathSegments = intent?.data?.pathSegments
-
- if (pathSegments != null && pathSegments.size > 1) {
- val slug = pathSegments[1]
- val intent = Intent().apply {
- action = "eu.kanade.tachiyomi.SEARCH"
- putExtra("query", LerManga.PREFIX_SLUG_SEARCH + slug)
- putExtra("filter", packageName)
- }
-
- try {
- startActivity(intent)
- } catch (e: ActivityNotFoundException) {
- Log.e("LerMangaUrlActivity", e.toString())
- }
- } else {
- Log.e("LerMangaUrlActivity", "Could not parse URI from intent $intent")
- }
-
- finish()
- exitProcess(0)
- }
-}