From 6b79b5b04ba9adab5130577456c35274b85bf578 Mon Sep 17 00:00:00 2001 From: Chopper <156493704+choppeh@users.noreply.github.com> Date: Mon, 17 Jun 2024 09:31:35 -0300 Subject: [PATCH] Multsrc: TerraScan - Add MangaBR (#3568) * Add lib-multsrc and mangaBR * Cleanup * Remove extra newline * Remove filter separator --- .../terrascan}/AndroidManifest.xml | 8 +- lib-multisrc/terrascan/build.gradle.kts | 5 + .../tachiyomi/multsrc/terrascan/TerraScan.kt | 245 ++++++++++++++++++ .../multsrc/terrascan/TerraScanFilters.kt | 2 +- .../multsrc/terrascan/TerraScanUrlActivity.kt | 6 +- src/pt/mangabr/build.gradle | 11 + .../mangabr/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5908 bytes .../mangabr/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3011 bytes .../mangabr/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 9052 bytes .../mangabr/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 17943 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 29252 bytes .../tachiyomi/extension/pt/mangabr/MangaBR.kt | 15 ++ src/pt/mangaterra/build.gradle | 4 +- .../extension/pt/mangaterra/MangaTerra.kt | 243 +---------------- 14 files changed, 295 insertions(+), 244 deletions(-) rename {src/pt/mangaterra => lib-multisrc/terrascan}/AndroidManifest.xml (72%) create mode 100644 lib-multisrc/terrascan/build.gradle.kts create mode 100644 lib-multisrc/terrascan/src/eu/kanade/tachiyomi/multsrc/terrascan/TerraScan.kt rename src/pt/mangaterra/src/eu/kanade/tachiyomi/extension/pt/mangaterra/MangaTerraFilters.kt => lib-multisrc/terrascan/src/eu/kanade/tachiyomi/multsrc/terrascan/TerraScanFilters.kt (81%) rename src/pt/mangaterra/src/eu/kanade/tachiyomi/extension/pt/mangaterra/MangaTerraUrlActivity.kt => lib-multisrc/terrascan/src/eu/kanade/tachiyomi/multsrc/terrascan/TerraScanUrlActivity.kt (85%) create mode 100644 src/pt/mangabr/build.gradle create mode 100644 src/pt/mangabr/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/mangabr/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/mangabr/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/mangabr/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/mangabr/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/mangabr/src/eu/kanade/tachiyomi/extension/pt/mangabr/MangaBR.kt diff --git a/src/pt/mangaterra/AndroidManifest.xml b/lib-multisrc/terrascan/AndroidManifest.xml similarity index 72% rename from src/pt/mangaterra/AndroidManifest.xml rename to lib-multisrc/terrascan/AndroidManifest.xml index 0b740e3f6..795883568 100644 --- a/src/pt/mangaterra/AndroidManifest.xml +++ b/lib-multisrc/terrascan/AndroidManifest.xml @@ -2,7 +2,7 @@ @@ -13,9 +13,9 @@ + android:host="${SOURCEHOST}" + android:pathPattern="/manga/..*" + android:scheme="${SOURCESCHEME}" /> diff --git a/lib-multisrc/terrascan/build.gradle.kts b/lib-multisrc/terrascan/build.gradle.kts new file mode 100644 index 000000000..dc076cc37 --- /dev/null +++ b/lib-multisrc/terrascan/build.gradle.kts @@ -0,0 +1,5 @@ +plugins { + id("lib-multisrc") +} + +baseVersionCode = 1 diff --git a/lib-multisrc/terrascan/src/eu/kanade/tachiyomi/multsrc/terrascan/TerraScan.kt b/lib-multisrc/terrascan/src/eu/kanade/tachiyomi/multsrc/terrascan/TerraScan.kt new file mode 100644 index 000000000..c286c4f87 --- /dev/null +++ b/lib-multisrc/terrascan/src/eu/kanade/tachiyomi/multsrc/terrascan/TerraScan.kt @@ -0,0 +1,245 @@ +package eu.kanade.tachiyomi.multisrc.terrascan + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.asObservableSuccess +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.ParsedHttpSource +import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import okhttp3.Response +import org.jsoup.Jsoup +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import rx.Observable +import uy.kohesive.injekt.injectLazy +import java.text.SimpleDateFormat +import java.util.Locale + +abstract class TerraScan( + override val name: String, + override val baseUrl: String, + override val lang: String, + private val dateFormat: SimpleDateFormat = SimpleDateFormat("dd-MM-yyyy", Locale("pt", "BR")), +) : ParsedHttpSource() { + + override val supportsLatest: Boolean = true + + override val client = network.cloudflareClient + + private val noRedirectClient = network.cloudflareClient.newBuilder() + .followRedirects(false) + .build() + + private val json: Json by injectLazy() + + private var genresList: List = emptyList() + + override fun popularMangaRequest(page: Int) = GET("$baseUrl/manga?q=p&page=$page", headers) + + open val popularMangaTitleSelector: String = "p, h3" + open val popularMangaThumbnailSelector: String = "img" + + override fun popularMangaFromElement(element: Element) = SManga.create().apply { + title = element.selectFirst(popularMangaTitleSelector)!!.ownText() + thumbnail_url = element.selectFirst(popularMangaThumbnailSelector)?.srcAttr() + setUrlWithoutDomain(element.selectFirst("a")!!.absUrl("href")) + } + + override fun popularMangaNextPageSelector() = ".pagination > .page-item:not(.disabled):last-child" + + override fun popularMangaSelector(): String = ".series-paginated .grid-item-series, .series-paginated .series" + + override fun popularMangaParse(response: Response): MangasPage { + val document = response.asJsoup() + if (genresList.isEmpty()) { + genresList = parseGenres(document) + } + val mangas = document.select(popularMangaSelector()) + .map(::popularMangaFromElement) + + return MangasPage(mangas, document.selectFirst(popularMangaNextPageSelector()) != null) + } + + override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/manga?q=u&page=$page", headers) + + override fun latestUpdatesFromElement(element: Element) = popularMangaFromElement(element) + + override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() + + override fun latestUpdatesSelector() = popularMangaSelector() + + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { + if (query.startsWith(URL_SEARCH_PREFIX)) { + val slug = query.substringAfter(URL_SEARCH_PREFIX) + return client.newCall(GET("$baseUrl/manga/$slug", headers)) + .asObservableSuccess().map { response -> + MangasPage(listOf(mangaDetailsParse(response)), false) + } + } + return super.fetchSearchManga(page, query, filters) + } + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = baseUrl.toHttpUrl().newBuilder() + + if (query.isNotBlank()) { + url.addPathSegment("search") + .addQueryParameter("q", query) + return GET(url.build(), headers) + } + + url.addPathSegment("manga") + + filters.forEach { filter -> + when (filter) { + is GenreFilter -> { + filter.state.forEach { + if (it.state) { + url.addQueryParameter(it.query, it.value) + } + } + } + else -> {} + } + } + + url.addQueryParameter("page", "$page") + + return GET(url.build(), headers) + } + + override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element) + + override fun searchMangaNextPageSelector() = null + + override fun searchMangaSelector() = ".col-6.col-sm-3.col-md-3.col-lg-2.p-1" + + override fun searchMangaParse(response: Response): MangasPage { + if (response.request.url.pathSegments.contains("search")) { + return searchByQueryMangaParse(response) + } + return super.searchMangaParse(response) + } + + override fun getFilterList(): FilterList { + val filters = mutableListOf>() + if (genresList.isNotEmpty()) { + filters += GenreFilter( + title = "Gêneros", + genres = genresList, + ) + } else { + filters += Filter.Header("Aperte 'Redefinir' mostrar os gêneros disponíveis") + } + return FilterList(filters) + } + + open val mangaDetailsContainerSelector: String = "main" + open val mangaDetailsTitleSelector: String = "h1" + open val mangaDetailsThumbnailSelector: String = "img" + open val mangaDetailsDescriptionSelector: String = "p" + open val mangaDetailsGenreSelector: String = ".card:has(h5:contains(Categorias)) a, .card:has(h5:contains(Categorias)) div" + + override fun mangaDetailsParse(document: Document) = SManga.create().apply { + with(document.selectFirst(mangaDetailsContainerSelector)!!) { + title = selectFirst(mangaDetailsTitleSelector)!!.text() + thumbnail_url = selectFirst(mangaDetailsThumbnailSelector)?.absUrl("href") + description = selectFirst(mangaDetailsDescriptionSelector)?.text() + genre = document.select(mangaDetailsGenreSelector) + .joinToString { it.ownText() } + } + setUrlWithoutDomain(document.location()) + } + + override fun chapterFromElement(element: Element) = SChapter.create().apply { + with(element.selectFirst("h5")!!) { + name = ownText() + date_upload = selectFirst("div")!!.ownText().toDate() + } + setUrlWithoutDomain(element.absUrl("href")) + } + + override fun chapterListSelector() = ".col-chapter a" + + override fun pageListParse(document: Document): List { + val mangaChapterUrl = document.location() + val maxPage = findPageCount(mangaChapterUrl) + return (1..maxPage).map { page -> Page(page - 1, "$mangaChapterUrl/$page") } + } + + override fun imageUrlParse(document: Document) = document.selectFirst("main img")!!.srcAttr() + + private fun searchByQueryMangaParse(response: Response): MangasPage { + val fragment = Jsoup.parseBodyFragment( + json.decodeFromString(response.body.string()), + baseUrl, + ) + + return MangasPage( + mangas = fragment.select(searchMangaSelector()).map(::searchMangaFromElement), + hasNextPage = false, + ) + } + + private fun findPageCount(pageUrl: String): Int { + var lowerBound = 1 + var upperBound = 100 + + while (lowerBound <= upperBound) { + val midpoint = lowerBound + (upperBound - lowerBound) / 2 + + val request = Request.Builder().apply { + url("$pageUrl/$midpoint") + headers(headers) + head() + }.build() + + val response = try { + noRedirectClient.newCall(request).execute() + } catch (e: Exception) { + throw Exception("Failed to fetch $pageUrl") + } + + if (response.code == 302) { + upperBound = midpoint - 1 + } else { + lowerBound = midpoint + 1 + } + } + + return lowerBound + } + + private fun Element.srcAttr(): String = when { + hasAttr("data-src") -> absUrl("data-src") + else -> absUrl("src") + } + + private fun String.toDate() = try { dateFormat.parse(trim())!!.time } catch (_: Exception) { 0L } + + open val genreFilterSelector: String = "form div > div:has(input) div" + + private fun parseGenres(document: Document): List { + return document.select(genreFilterSelector) + .map { element -> + val input = element.selectFirst("input")!! + Genre( + name = element.selectFirst("label")!!.ownText(), + query = input.attr("name"), + value = input.attr("value"), + ) + } + } + + companion object { + const val URL_SEARCH_PREFIX = "slug:" + } +} diff --git a/src/pt/mangaterra/src/eu/kanade/tachiyomi/extension/pt/mangaterra/MangaTerraFilters.kt b/lib-multisrc/terrascan/src/eu/kanade/tachiyomi/multsrc/terrascan/TerraScanFilters.kt similarity index 81% rename from src/pt/mangaterra/src/eu/kanade/tachiyomi/extension/pt/mangaterra/MangaTerraFilters.kt rename to lib-multisrc/terrascan/src/eu/kanade/tachiyomi/multsrc/terrascan/TerraScanFilters.kt index 2f823e692..169d23490 100644 --- a/src/pt/mangaterra/src/eu/kanade/tachiyomi/extension/pt/mangaterra/MangaTerraFilters.kt +++ b/lib-multisrc/terrascan/src/eu/kanade/tachiyomi/multsrc/terrascan/TerraScanFilters.kt @@ -1,4 +1,4 @@ -package eu.kanade.tachiyomi.extension.pt.mangaterra +package eu.kanade.tachiyomi.multisrc.terrascan import eu.kanade.tachiyomi.source.model.Filter diff --git a/src/pt/mangaterra/src/eu/kanade/tachiyomi/extension/pt/mangaterra/MangaTerraUrlActivity.kt b/lib-multisrc/terrascan/src/eu/kanade/tachiyomi/multsrc/terrascan/TerraScanUrlActivity.kt similarity index 85% rename from src/pt/mangaterra/src/eu/kanade/tachiyomi/extension/pt/mangaterra/MangaTerraUrlActivity.kt rename to lib-multisrc/terrascan/src/eu/kanade/tachiyomi/multsrc/terrascan/TerraScanUrlActivity.kt index d4fdc09e1..12824b8fb 100644 --- a/src/pt/mangaterra/src/eu/kanade/tachiyomi/extension/pt/mangaterra/MangaTerraUrlActivity.kt +++ b/lib-multisrc/terrascan/src/eu/kanade/tachiyomi/multsrc/terrascan/TerraScanUrlActivity.kt @@ -1,4 +1,4 @@ -package eu.kanade.tachiyomi.extension.pt.mangaterra +package eu.kanade.tachiyomi.multisrc.terrascan import android.app.Activity import android.content.ActivityNotFoundException @@ -7,7 +7,7 @@ import android.os.Bundle import android.util.Log import kotlin.system.exitProcess -class MangaTerraUrlActivity : Activity() { +class TerraScanUrlActivity : Activity() { private val tag = javaClass.simpleName @@ -35,5 +35,5 @@ class MangaTerraUrlActivity : Activity() { } private fun slug(pathSegments: List) = - "${MangaTerra.PREFIX_SEARCH}${pathSegments[pathSegments.size - 1]}" + "${TerraScan.URL_SEARCH_PREFIX}${pathSegments[pathSegments.size - 1]}" } diff --git a/src/pt/mangabr/build.gradle b/src/pt/mangabr/build.gradle new file mode 100644 index 000000000..839d7f368 --- /dev/null +++ b/src/pt/mangabr/build.gradle @@ -0,0 +1,11 @@ +ext { + extName = 'Manga BR' + extClass = '.MangaBR' + themePkg = 'terrascan' + baseUrl = 'https://mangabr.net' + overrideVersionCode = 0 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" + diff --git a/src/pt/mangabr/res/mipmap-hdpi/ic_launcher.png b/src/pt/mangabr/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9313f9d9ae77ad3eccbe47c631cb681ba9508487 GIT binary patch literal 5908 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 FV1gW!uAl$_ literal 0 HcmV?d00001 diff --git a/src/pt/mangabr/res/mipmap-xhdpi/ic_launcher.png b/src/pt/mangabr/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..150a75da8b3e377c983959ff6e50e261670df61c GIT binary patch literal 9052 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 O0000QWph&r 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 = emptyList() - - override fun chapterFromElement(element: Element) = SChapter.create().apply { - name = element.selectFirst("h5")!!.ownText() - date_upload = element.selectFirst("h5 > div")!!.ownText().toDate() - setUrlWithoutDomain(element.absUrl("href")) - } - - override fun chapterListSelector() = ".card-list-chapter a" - - override fun imageUrlParse(document: Document) = document.selectFirst("img")!!.srcAttr() - - override fun latestUpdatesFromElement(element: Element) = popularMangaFromElement(element) - - override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() - - override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/manga?q=u&page=$page", headers) - - override fun latestUpdatesSelector() = popularMangaSelector() - - override fun mangaDetailsParse(document: Document) = SManga.create().apply { - title = document.selectFirst(".card-body h1")!!.ownText() - description = document.selectFirst(".card-body p")?.ownText() - thumbnail_url = document.selectFirst(".card-body img")?.srcAttr() - genre = document.select(".card-series-about a").joinToString { it.ownText() } - setUrlWithoutDomain(document.location()) - } - - override fun pageListParse(document: Document): List { - val mangaChapterUrl = document.location() - val maxPage = findPageCount(mangaChapterUrl) - return (1..maxPage).map { page -> Page(page - 1, "$mangaChapterUrl/$page") } - } - - override fun popularMangaFromElement(element: Element) = SManga.create().apply { - title = element.selectFirst("p")!!.ownText() - thumbnail_url = element.selectFirst("img")?.srcAttr() - setUrlWithoutDomain(element.selectFirst("a")!!.absUrl("href")) - } - - override fun popularMangaNextPageSelector() = ".pagination > .page-item:not(.disabled):last-child" - - override fun popularMangaRequest(page: Int) = GET("$baseUrl/manga?q=p&page=$page", headers) - - override fun popularMangaSelector(): String = ".card-body .row > div" - - override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element) - - override fun searchMangaParse(response: Response): MangasPage { - if (response.request.url.pathSegments.contains("search")) { - return searchByQueryMangaParse(response) - } - return super.searchMangaParse(response) - } - - override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() - - override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { - if (query.startsWith(PREFIX_SEARCH)) { - val slug = query.substringAfter(PREFIX_SEARCH) - return client.newCall(GET("$baseUrl/manga/$slug", headers)) - .asObservableSuccess().map { response -> - MangasPage(listOf(mangaDetailsParse(response)), false) - } - } - return super.fetchSearchManga(page, query, filters) - } - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = baseUrl.toHttpUrl().newBuilder() - - if (query.isNotBlank()) { - url.addPathSegment("search") - .addQueryParameter("q", query) - return GET(url.build(), headers) - } - - url.addPathSegment("manga") - - filters.forEach { filter -> - when (filter) { - is GenreFilter -> { - filter.state.forEach { - if (it.state) { - url.addQueryParameter(it.query, it.value) - } - } - } - else -> {} - } - } - - url.addQueryParameter("page", "$page") - - return GET(url.build(), headers) - } - - override fun searchMangaSelector() = popularMangaSelector() - - override fun getFilterList(): FilterList { - CoroutineScope(Dispatchers.IO).launch { fetchGenres() } - val filters = mutableListOf>() - - if (genresList.isNotEmpty()) { - filters += GenreFilter( - title = "Gêneros", - genres = genresList, - ) - } else { - filters += listOf( - Filter.Separator(), - Filter.Header("Aperte 'Redefinir' mostrar os gêneros disponíveis"), - ) - } - return FilterList(filters) - } - - private fun searchByQueryMangaParse(response: Response): MangasPage { - val fragment = Jsoup.parseBodyFragment( - json.decodeFromString(response.body.string()), - baseUrl, - ) - - return MangasPage( - mangas = fragment.select("div.grid-item-series").map(::searchMangaFromElement), - hasNextPage = false, - ) - } - - private fun findPageCount(pageUrl: String): Int { - var lowerBound = 1 - var upperBound = 100 - - while (lowerBound <= upperBound) { - val midpoint = lowerBound + (upperBound - lowerBound) / 2 - - val request = Request.Builder().apply { - url("$pageUrl/$midpoint") - headers(headers) - head() - }.build() - - val response = try { - noRedirectClient.newCall(request).execute() - } catch (e: Exception) { - throw Exception("Failed to fetch $pageUrl") - } - - if (response.code == 302) { - upperBound = midpoint - 1 - } else { - lowerBound = midpoint + 1 - } - } - - return lowerBound - } - - private fun Element.srcAttr(): String = when { - hasAttr("data-src") -> absUrl("data-src") - else -> absUrl("src") - } - - private fun String.toDate() = try { dateFormat.parse(trim())!!.time } catch (_: Exception) { 0L } - - private fun fetchGenres() { - if (fetchGenresAttempts < 3 && genresList.isEmpty()) { - try { - genresList = client.newCall(GET("$baseUrl/manga")).execute() - .use { parseGenres(it.asJsoup()) } - } catch (_: Exception) { - } finally { - fetchGenresAttempts++ - } - } - } - - private fun parseGenres(document: Document): List { - return document.select(".form-filters .custom-checkbox") - .map { element -> - val input = element.selectFirst("input")!! - Genre( - name = element.selectFirst("label")!!.ownText(), - query = input.attr("name"), - value = input.attr("value"), - ) - } - } - - companion object { - val dateFormat = SimpleDateFormat("dd-MM-yyyy", Locale("pt", "BR")) - const val PREFIX_SEARCH = "slug:" - } }