Add PeachScan (#759)
* Add PeachScan
* I love linting
* Also remove old WickedWitchScan
* It's not novo anymore
* Remove unneeded className declaration
* Filter light novel entries from latest view (because we can here)
* ACTUALLY filter light novel entries from latest view (because we can here)
* Fix icon path + add Dango Scan
* Move image-decoder dependency to multisrc project
* shut up android studio
* fix dep specifier in additional.gradle
* Update multisrc/overrides/peachscan/default/additional.gradle
Co-authored-by: stevenyomi <95685115+stevenyomi@users.noreply.github.com>
* Revert "Update multisrc/overrides/peachscan/default/additional.gradle"
This reverts commit 6b8722193a
.
The comment serves as an explanation for why the dependency shouldn't
be in the Gradle version catalog; because no one else cares about this
dependency.
* Optimize icons
---------
Co-authored-by: stevenyomi <95685115+stevenyomi@users.noreply.github.com>
@ -31,6 +31,10 @@ configurations {
|
||||
dependencies {
|
||||
compileOnly(libs.bundles.common)
|
||||
|
||||
// Only PeachScan sources uses the image-decoder dependency.
|
||||
//noinspection UseTomlInstead
|
||||
compileOnly("com.github.tachiyomiorg:image-decoder:fbd6601290")
|
||||
|
||||
// Implements all :lib libraries on the multisrc generator
|
||||
// Note that this does not mean that generated sources are going to
|
||||
// implement them too; this is just to be able to compile and generate sources.
|
||||
|
@ -1,20 +0,0 @@
|
||||
package eu.kanade.tachiyomi.extension.pt.wickedwitchscan
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
||||
import okhttp3.OkHttpClient
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class WickedWitchScan : Madara(
|
||||
"Wicked Witch Scan",
|
||||
"https://wickedwitchscan.com",
|
||||
"pt-BR",
|
||||
SimpleDateFormat("MMMMM dd, yyyy", Locale("pt", "BR")),
|
||||
) {
|
||||
|
||||
override val client: OkHttpClient = super.client.newBuilder()
|
||||
.rateLimit(1, 2, TimeUnit.SECONDS)
|
||||
.build()
|
||||
}
|
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 7.7 KiB |
After Width: | Height: | Size: 12 KiB |
5
multisrc/overrides/peachscan/default/additional.gradle
Normal file
@ -0,0 +1,5 @@
|
||||
dependencies {
|
||||
// Only PeachScan sources uses the image-decoder dependency.
|
||||
//noinspection UseTomlInstead
|
||||
compileOnly("com.github.tachiyomiorg:image-decoder:fbd6601290")
|
||||
}
|
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 8.4 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 6.7 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 7.9 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 19 KiB |
@ -0,0 +1,14 @@
|
||||
package eu.kanade.tachiyomi.extension.pt.wickedwitchscannovo
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.peachscan.PeachScan
|
||||
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class WickedWitchScan : PeachScan("Wicked Witch Scan", "https://wicked-witch-scan.com", "pt-BR") {
|
||||
// Source changed from Madara to PeachScan
|
||||
override val versionId = 2
|
||||
|
||||
override val client = super.client.newBuilder()
|
||||
.rateLimit(1, 2, TimeUnit.SECONDS)
|
||||
.build()
|
||||
}
|
@ -495,7 +495,6 @@ class MadaraGenerator : ThemeSourceGenerator {
|
||||
SingleLang("WebtoonUK", "https://webtoon.uk", "en", overrideVersionCode = 2),
|
||||
SingleLang("WebtoonXYZ", "https://www.webtoon.xyz", "en", isNsfw = true, overrideVersionCode = 3),
|
||||
SingleLang("Whale Manga", "https://whalemanga.com", "en", isNsfw = true),
|
||||
SingleLang("Wicked Witch Scan", "https://wickedwitchscan.com", "pt-BR"),
|
||||
SingleLang("Winter Scan", "https://winterscan.com", "pt-BR", overrideVersionCode = 4),
|
||||
SingleLang("Wonderland Scan", "https://wonderlandscan.com", "pt-BR", overrideVersionCode = 3),
|
||||
SingleLang("WoopRead", "https://woopread.com", "en", overrideVersionCode = 1),
|
||||
|
@ -1,4 +1,4 @@
|
||||
package eu.kanade.tachiyomi.extension.pt.wickedwitchscannovo
|
||||
package eu.kanade.tachiyomi.multisrc.peachscan
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.ActivityManager
|
||||
@ -8,7 +8,6 @@ import android.graphics.Canvas
|
||||
import android.graphics.Rect
|
||||
import android.util.Base64
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import eu.kanade.tachiyomi.source.model.MangasPage
|
||||
import eu.kanade.tachiyomi.source.model.Page
|
||||
@ -39,37 +38,27 @@ import java.io.IOException
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
import java.util.TimeZone
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.zip.ZipInputStream
|
||||
|
||||
@SuppressLint("WrongConstant")
|
||||
class WickedWitchScan : ParsedHttpSource() {
|
||||
|
||||
override val name = "Wicked Witch Scan"
|
||||
|
||||
override val lang = "pt-BR"
|
||||
|
||||
override val baseUrl = "https://wicked-witch-scan.com"
|
||||
|
||||
// Source changed from Madara to homegrown website
|
||||
override val versionId = 2
|
||||
abstract class PeachScan(
|
||||
override val name: String,
|
||||
override val baseUrl: String,
|
||||
override val lang: String,
|
||||
private val dateFormat: SimpleDateFormat = SimpleDateFormat("d 'de' MMMM 'de' yyyy 'às' HH:mm", Locale("pt", "BR")).apply {
|
||||
timeZone = TimeZone.getTimeZone("America/Sao_Paulo")
|
||||
},
|
||||
) : ParsedHttpSource() {
|
||||
|
||||
override val supportsLatest = true
|
||||
|
||||
override val client = network.cloudflareClient
|
||||
.newBuilder()
|
||||
.rateLimit(1, 2, TimeUnit.SECONDS)
|
||||
.addInterceptor(::zipImageInterceptor)
|
||||
.build()
|
||||
|
||||
private val json: Json by injectLazy()
|
||||
|
||||
private val simpleDateFormat by lazy {
|
||||
SimpleDateFormat("d 'de' MMMM 'de' yyyy 'às' HH:mm", Locale("pt", "BR")).apply {
|
||||
timeZone = TimeZone.getTimeZone("America/Sao_Paulo")
|
||||
}
|
||||
}
|
||||
|
||||
override fun popularMangaRequest(page: Int) = GET("$baseUrl/todas-as-obras/", headers)
|
||||
|
||||
override fun popularMangaSelector() = ".comics__all__box"
|
||||
@ -86,7 +75,7 @@ class WickedWitchScan : ParsedHttpSource() {
|
||||
|
||||
override fun latestUpdatesRequest(page: Int) = GET(baseUrl, headers)
|
||||
|
||||
override fun latestUpdatesSelector() = "div.comic"
|
||||
override fun latestUpdatesSelector() = "div.comic:not(:has(a.box-image > p:contains(Novel)))"
|
||||
|
||||
override fun latestUpdatesFromElement(element: Element) = SManga.create().apply {
|
||||
setUrlWithoutDomain(element.selectFirst("a")!!.attr("abs:href"))
|
||||
@ -106,10 +95,10 @@ class WickedWitchScan : ParsedHttpSource() {
|
||||
}
|
||||
|
||||
override fun searchMangaParse(response: Response): MangasPage {
|
||||
val manga = json.parseToJsonElement(response.body.string()).jsonArray.map {
|
||||
val manga = json.parseToJsonElement(response.body.string()).jsonArray.mapNotNull {
|
||||
val element = Jsoup.parseBodyFragment(it.jsonObject["html"]!!.jsonPrimitive.content)
|
||||
|
||||
searchMangaFromElement(element)
|
||||
runCatching { searchMangaFromElement(element) }.getOrNull()
|
||||
}
|
||||
|
||||
return MangasPage(manga, false)
|
||||
@ -142,19 +131,6 @@ class WickedWitchScan : ParsedHttpSource() {
|
||||
description = "Tipo: $category\n\n$synopsis"
|
||||
}
|
||||
|
||||
override fun chapterListSelector() = ".link__capitulos"
|
||||
|
||||
override fun chapterFromElement(element: Element) = SChapter.create().apply {
|
||||
setUrlWithoutDomain(element.attr("href"))
|
||||
|
||||
name = element.selectFirst(".numero__capitulo")!!.text()
|
||||
date_upload = runCatching {
|
||||
val date = element.selectFirst(".data__lançamento")!!.text()
|
||||
|
||||
simpleDateFormat.parse(date)?.time
|
||||
}.getOrNull() ?: 0L
|
||||
}
|
||||
|
||||
override fun chapterListParse(response: Response): List<SChapter> {
|
||||
val document = response.asJsoup()
|
||||
val mediaType = document.selectFirst(".categoria__comic")?.text()
|
||||
@ -167,9 +143,24 @@ class WickedWitchScan : ParsedHttpSource() {
|
||||
return document.select(chapterListSelector()).map { chapterFromElement(it) }
|
||||
}
|
||||
|
||||
override fun chapterListSelector() = ".link__capitulos"
|
||||
|
||||
override fun chapterFromElement(element: Element) = SChapter.create().apply {
|
||||
setUrlWithoutDomain(element.attr("href"))
|
||||
|
||||
name = element.selectFirst(".numero__capitulo")!!.text()
|
||||
date_upload = runCatching {
|
||||
val date = element.selectFirst(".data__lançamento")!!.text()
|
||||
|
||||
dateFormat.parse(date)!!.time
|
||||
}.getOrDefault(0L)
|
||||
}
|
||||
|
||||
override fun pageListParse(document: Document): List<Page> {
|
||||
val scriptElement = document.selectFirst("script:containsData(const urls =[)")
|
||||
?: throw Exception("Não foi possível encontrar o script com dados de imagem.")
|
||||
?: return document.select("#imageContainer img").mapIndexed { i, it ->
|
||||
Page(i, imageUrl = it.attr("abs:src"))
|
||||
}
|
||||
|
||||
val urls = scriptElement.html().substringAfter("const urls =[").substringBefore("];")
|
||||
|
@ -0,0 +1,28 @@
|
||||
package eu.kanade.tachiyomi.multisrc.peachscan
|
||||
|
||||
import generator.ThemeSourceData.SingleLang
|
||||
import generator.ThemeSourceGenerator
|
||||
|
||||
class PeachScanGenerator : ThemeSourceGenerator {
|
||||
|
||||
override val themePkg = "peachscan"
|
||||
|
||||
override val themeClass = "PeachScan"
|
||||
|
||||
override val baseVersionCode = 1
|
||||
|
||||
override val sources = listOf(
|
||||
SingleLang("Dango Scan", "https://dangoscan.com.br", "pt-BR"),
|
||||
SingleLang("Mode Scanlator", "https://modescanlator.com", "pt-BR"),
|
||||
SingleLang("Nazarick Scan", "https://nazarickscan.com.br", "pt-BR"),
|
||||
SingleLang("RF Dragon Scan", "https://rfdragonscan.com", "pt-BR"),
|
||||
SingleLang("Wicked Witch Scan", "https://wicked-witch-scan.com", "pt-BR", pkgName = "wickedwitchscannovo", overrideVersionCode = 1),
|
||||
)
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun main(args: Array<String>) {
|
||||
PeachScanGenerator().createAll()
|
||||
}
|
||||
}
|
||||
}
|
@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest />
|
@ -1,11 +0,0 @@
|
||||
ext {
|
||||
extName = 'Wicked Witch Scan (Novo)'
|
||||
extClass = '.WickedWitchScan'
|
||||
extVersionCode = 1
|
||||
}
|
||||
|
||||
apply from: "$rootDir/common.gradle"
|
||||
|
||||
dependencies {
|
||||
compileOnly("com.github.tachiyomiorg:image-decoder:fbd6601290")
|
||||
}
|
Before Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 22 KiB |