Replace Manga1000/1001 with Comick and MangaPro (#11058)

* Replace Manga1000/1001 with Comick and MangaPro

* Moved everything to override methods
This commit is contained in:
ringosham 2022-03-11 14:43:46 +00:00 committed by GitHub
parent a3e6979515
commit df75c86c7c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 53 additions and 19 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'MangaRaw' extName = 'MangaRaw'
pkgNameSuffix = 'ja.mangaraw' pkgNameSuffix = 'ja.mangaraw'
extClass = '.MangaRawFactory' extClass = '.MangaRawFactory'
extVersionCode = 4 extVersionCode = 5
} }
apply from: "$rootDir/common.gradle" apply from: "$rootDir/common.gradle"

View File

@ -7,29 +7,27 @@ import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import okhttp3.Headers import okhttp3.Headers
import okhttp3.OkHttpClient import okhttp3.Request
import okhttp3.Protocol
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
abstract class MangaRaw( abstract class MangaRaw(
override val name: String, override val name: String,
override val baseUrl: String override val baseUrl: String,
) : ParsedHttpSource() { ) : ParsedHttpSource() {
protected open val imageSelector = ".wp-block-image > img"
override val lang = "ja" override val lang = "ja"
override val supportsLatest = true override val supportsLatest = true
override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.protocols(listOf(Protocol.HTTP_1_1))
.build()
override fun headersBuilder(): Headers.Builder { override fun headersBuilder(): Headers.Builder {
return super.headersBuilder().add("Referer", baseUrl) return super.headersBuilder().add("Referer", baseUrl)
} }
override fun popularMangaRequest(page: Int) = GET("$baseUrl/seachlist/page/$page/?cat=-1", headers) override fun popularMangaRequest(page: Int): Request =
GET("$baseUrl/seachlist/page/$page/?cat=-1", headers)
override fun popularMangaSelector() = "article" override fun popularMangaSelector() = "article"
@ -49,7 +47,8 @@ abstract class MangaRaw(
override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector()
override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = GET("$baseUrl/page/$page/?s=$query", headers) override fun searchMangaRequest(page: Int, query: String, filters: FilterList) =
GET("$baseUrl/page/$page/?s=$query", headers)
override fun searchMangaSelector() = popularMangaSelector() override fun searchMangaSelector() = popularMangaSelector()
@ -58,8 +57,10 @@ abstract class MangaRaw(
override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() override fun searchMangaNextPageSelector() = popularMangaNextPageSelector()
override fun mangaDetailsParse(document: Document) = SManga.create().apply { override fun mangaDetailsParse(document: Document) = SManga.create().apply {
genre = document.select("p.has-text-color:has(strong) a").joinToString { it.text() } // All manga details are located in the same <p> tag
description = document.select("p.has-text-color:not(:has(strong))").first().text() // So here are some jank way of extracting them
description = document.select("#main > article > div > div > div > div > p").html()
.substringAfterLast("<br>")
thumbnail_url = document.select(".wp-block-image img").attr("abs:src") thumbnail_url = document.select(".wp-block-image img").attr("abs:src")
} }
@ -71,13 +72,14 @@ abstract class MangaRaw(
} }
override fun pageListParse(document: Document): List<Page> { override fun pageListParse(document: Document): List<Page> {
return document.select(".wp-block-image > img").mapIndexed { i, element -> return document.select(imageSelector).mapIndexed { i, element ->
val attribute = if (element.hasAttr("data-src")) "data-src" else "src" val attribute = if (element.hasAttr("data-src")) "data-src" else "src"
Page(i, "", element.attr(attribute)) Page(i, "", element.attr(attribute))
} }
} }
override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not Used") override fun imageUrlParse(document: Document): String =
throw UnsupportedOperationException("Not Used")
override fun getFilterList() = FilterList() override fun getFilterList() = FilterList()
} }

View File

@ -1,14 +1,13 @@
package eu.kanade.tachiyomi.extension.ja.mangaraw package eu.kanade.tachiyomi.extension.ja.mangaraw
import eu.kanade.tachiyomi.extension.ja.mangaraw.sources.Comick
import eu.kanade.tachiyomi.extension.ja.mangaraw.sources.MangaPro
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.SourceFactory import eu.kanade.tachiyomi.source.SourceFactory
class MangaRawFactory : SourceFactory { class MangaRawFactory : SourceFactory {
override fun createSources(): List<Source> = listOf( override fun createSources(): List<Source> = listOf(
Manga1000(), Comick(),
Manga1001() MangaPro()
) )
} }
class Manga1000 : MangaRaw("Manga1000", "https://manga1000.com")
class Manga1001 : MangaRaw("Manga1001", "https://manga1001.com")

View File

@ -0,0 +1,15 @@
package eu.kanade.tachiyomi.extension.ja.mangaraw.sources
import eu.kanade.tachiyomi.extension.ja.mangaraw.MangaRaw
import okhttp3.Request
// Comick has a slightly different layout in html, even though it looks exactly the same to MangaRaw visually
class Comick : MangaRaw("Comick", "https://comick.top") {
override val imageSelector =
"#main > article > div > div > div.entry-content > center > p > img"
// comick.top doesn't have a popular manga page
// redirect to latest manga request
override fun popularMangaRequest(page: Int): Request = latestUpdatesRequest(page)
}

View File

@ -0,0 +1,18 @@
package eu.kanade.tachiyomi.extension.ja.mangaraw.sources
import eu.kanade.tachiyomi.extension.ja.mangaraw.MangaRaw
import eu.kanade.tachiyomi.source.model.SManga
import org.jsoup.nodes.Document
class MangaPro : MangaRaw("MangaPro", "https://mangapro.top") {
override fun mangaDetailsParse(document: Document) = SManga.create().apply {
// Extract the author, take out the colon and quotes
author = document.select("#main > article > div > div > div > div > p").html()
.substringAfter("</strong>").substringBefore("<br>").drop(1)
genre = document.select("#main > article > div > div > div > div > p > a")
.joinToString(separator = ", ", transform = { it.text() })
description = document.select("#main > article > div > div > div > div > p").html()
.substringAfterLast("<br>")
thumbnail_url = document.select(".wp-block-image img").attr("abs:src")
}
}