Add three new sources to Madara (#6951)
* Add two new sources to Madara. * Add one more source to Madara.
This commit is contained in:
parent
f15120b5bd
commit
02d712be26
|
@ -0,0 +1,86 @@
|
|||
package eu.kanade.tachiyomi.extension.pt.bananamecanica
|
||||
|
||||
import eu.kanade.tachiyomi.annotations.Nsfw
|
||||
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import okhttp3.OkHttpClient
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
@Nsfw
|
||||
class BananaMecanica : Madara(
|
||||
"Banana Mecânica",
|
||||
"https://leitorbm.com",
|
||||
"pt-BR",
|
||||
SimpleDateFormat("dd 'de' MMMMM 'de' yyyy", Locale("pt", "BR"))
|
||||
) {
|
||||
|
||||
override val client: OkHttpClient = super.client.newBuilder()
|
||||
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
|
||||
.build()
|
||||
|
||||
// [...document.querySelectorAll('input[name="genre[]"]')]
|
||||
// .map(x => `Genre("${document.querySelector('label[for=' + x.id + ']').innerHTML.trim()}", "${x.value}")`)
|
||||
// .join(',\n')
|
||||
override fun getGenreList(): List<Genre> = listOf(
|
||||
Genre("Ação", "acao"),
|
||||
Genre("Action", "action"),
|
||||
Genre("Adult", "adult"),
|
||||
Genre("Adventure", "adventure"),
|
||||
Genre("Anime", "anime"),
|
||||
Genre("Cartoon", "cartoon"),
|
||||
Genre("Comédia", "comedia"),
|
||||
Genre("Comedy", "comedy"),
|
||||
Genre("Comic", "comic"),
|
||||
Genre("Cooking", "cooking"),
|
||||
Genre("Cotidiano", "cotidiano"),
|
||||
Genre("Detective", "detective"),
|
||||
Genre("Doujinshi", "doujinshi"),
|
||||
Genre("Drama", "drama"),
|
||||
Genre("Ecchi", "ecchi"),
|
||||
Genre("Fantasia", "fantasia"),
|
||||
Genre("Fantasy", "fantasy"),
|
||||
Genre("Gender Bender", "gender-bender"),
|
||||
Genre("Harem", "harem"),
|
||||
Genre("Historical", "historical"),
|
||||
Genre("Horror", "horror"),
|
||||
Genre("Josei", "josei"),
|
||||
Genre("Live action", "live-action"),
|
||||
Genre("M-preg/Omegaverse", "m-preg-omegaverse"),
|
||||
Genre("Manga", "manga"),
|
||||
Genre("Manhua", "manhua"),
|
||||
Genre("Manhwa", "manhwa"),
|
||||
Genre("Martial Arts", "martial-arts"),
|
||||
Genre("Mature", "mature"),
|
||||
Genre("Mecha", "mecha"),
|
||||
Genre("Mistério", "misterio"),
|
||||
Genre("Mystery", "mystery"),
|
||||
Genre("Omegaverse", "omegaverse"),
|
||||
Genre("One shot", "one-shot"),
|
||||
Genre("Psicológico", "psicologico"),
|
||||
Genre("Psychological", "psychological"),
|
||||
Genre("Romance", "romance"),
|
||||
Genre("School Life", "school-life"),
|
||||
Genre("Sci-fi", "sci-fi"),
|
||||
Genre("Seinen", "seinen"),
|
||||
Genre("Shotacon", "shotacon"),
|
||||
Genre("Shoujo", "shoujo"),
|
||||
Genre("Shoujo Ai", "shoujo-ai"),
|
||||
Genre("Shounen", "shounen"),
|
||||
Genre("Shounen Ai", "shounen-ai"),
|
||||
Genre("Slice of Life", "slice-of-life"),
|
||||
Genre("Smut", "smut"),
|
||||
Genre("Sobrenatural", "sobrenatural"),
|
||||
Genre("Soft Yaoi", "soft-yaoi"),
|
||||
Genre("Soft Yuri", "soft-yuri"),
|
||||
Genre("Sports", "sports"),
|
||||
Genre("Supernatural", "supernatural"),
|
||||
Genre("Tragedy", "tragedy"),
|
||||
Genre("Vida Ecolar", "vida-ecolar"),
|
||||
Genre("Vida Escolar", "vida-escolar"),
|
||||
Genre("Webtoon", "webtoon"),
|
||||
Genre("Yaoi", "yaoi"),
|
||||
Genre("Yuri", "yuri")
|
||||
)
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
package eu.kanade.tachiyomi.extension.pt.fenixscanlator
|
||||
|
||||
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import okhttp3.OkHttpClient
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class FenixScanlator : Madara(
|
||||
"Fênix Scanlator",
|
||||
"https://fenixscanlator.xyz",
|
||||
"pt-BR",
|
||||
SimpleDateFormat("dd 'de' MMMMM 'de' yyyy", Locale("pt", "BR"))
|
||||
) {
|
||||
|
||||
override val client: OkHttpClient = super.client.newBuilder()
|
||||
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
|
||||
.build()
|
||||
|
||||
// [...document.querySelectorAll('input[name="genre[]"]')]
|
||||
// .map(x => `Genre("${document.querySelector('label[for=' + x.id + ']').innerHTML.trim()}", "${x.value}")`)
|
||||
// .join(',\n')
|
||||
override fun getGenreList(): List<Genre> = listOf(
|
||||
Genre("Action", "action"),
|
||||
Genre("Adult", "adult"),
|
||||
Genre("Adventure", "adventure"),
|
||||
Genre("Anime", "anime"),
|
||||
Genre("Cartoon", "cartoon"),
|
||||
Genre("Comedy", "comedy"),
|
||||
Genre("Comic", "comic"),
|
||||
Genre("Cooking", "cooking"),
|
||||
Genre("Delinquentes", "delinquentes"),
|
||||
Genre("Detective", "detective"),
|
||||
Genre("Doujinshi", "doujinshi"),
|
||||
Genre("Drama", "drama"),
|
||||
Genre("Ecchi", "ecchi"),
|
||||
Genre("Fantasmas", "fantasmas"),
|
||||
Genre("Fantasy", "fantasy"),
|
||||
Genre("Gastronomia", "gastronomia"),
|
||||
Genre("Gender Bender", "gender-bender"),
|
||||
Genre("Harem", "harem"),
|
||||
Genre("Historical", "historical"),
|
||||
Genre("Horror", "horror"),
|
||||
Genre("Isekai", "isekai"),
|
||||
Genre("Josei", "josei"),
|
||||
Genre("Live action", "live-action"),
|
||||
Genre("Long Strip", "long-strip"),
|
||||
Genre("Magia", "magia"),
|
||||
Genre("Manga", "manga"),
|
||||
Genre("Manhua", "manhua"),
|
||||
Genre("Manhwa", "manhwa"),
|
||||
Genre("Martial Arts", "martial-arts"),
|
||||
Genre("Mature", "mature"),
|
||||
Genre("Mecha", "mecha"),
|
||||
Genre("Medicina", "medicina"),
|
||||
Genre("Monstros", "monstros"),
|
||||
Genre("Mystery", "mystery"),
|
||||
Genre("One shot", "one-shot"),
|
||||
Genre("Pós-Apocalíptico", "pos-apocaliptico"),
|
||||
Genre("Psychological", "psychological"),
|
||||
Genre("Realidade Virtual", "realidade-virtual"),
|
||||
Genre("Reencarnação", "reencarnacao"),
|
||||
Genre("Romance", "romance"),
|
||||
Genre("School Life", "school-life"),
|
||||
Genre("Sci-fi", "sci-fi"),
|
||||
Genre("Seinen", "seinen"),
|
||||
Genre("Shoujo", "shoujo"),
|
||||
Genre("Shoujo Ai", "shoujo-ai"),
|
||||
Genre("Shounen", "shounen"),
|
||||
Genre("Shounen Ai", "shounen-ai"),
|
||||
Genre("Slice of Life", "slice-of-life"),
|
||||
Genre("Smut", "smut"),
|
||||
Genre("Sobrevivência", "sobrevivencia"),
|
||||
Genre("Soft Yaoi", "soft-yaoi"),
|
||||
Genre("Soft Yuri", "soft-yuri"),
|
||||
Genre("Sports", "sports"),
|
||||
Genre("Super Herói", "super-heroi"),
|
||||
Genre("Supernatural", "supernatural"),
|
||||
Genre("Thriller", "thriller"),
|
||||
Genre("Tragedy", "tragedy"),
|
||||
Genre("Vídeo Games", "video-games"),
|
||||
Genre("Web Comic", "web-comic"),
|
||||
Genre("Webtoon", "webtoon"),
|
||||
Genre("Yaoi", "yaoi"),
|
||||
Genre("Yuri", "yuri")
|
||||
)
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
package eu.kanade.tachiyomi.extension.pt.sweettimescan
|
||||
|
||||
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import eu.kanade.tachiyomi.source.model.MangasPage
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Response
|
||||
import org.jsoup.nodes.Element
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class SweetTimeScan : Madara(
|
||||
"Sweet Time Scan",
|
||||
"https://sweetscan.net",
|
||||
"pt-BR",
|
||||
SimpleDateFormat("MMMMM dd, yyyy", Locale("pt", "BR"))
|
||||
) {
|
||||
|
||||
override val client: OkHttpClient = super.client.newBuilder()
|
||||
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
|
||||
.build()
|
||||
|
||||
override fun popularMangaSelector() = "div.page-item-detail.manga"
|
||||
|
||||
// The source has novels in text format, so we need to filter them.
|
||||
override fun searchMangaParse(response: Response): MangasPage {
|
||||
val mangaPage = super.searchMangaParse(response)
|
||||
val filteredResult = mangaPage.mangas.filter { it.title.contains(NOVEL_REGEX).not() }
|
||||
|
||||
return MangasPage(filteredResult, mangaPage.hasNextPage)
|
||||
}
|
||||
|
||||
// The site uses some image cache plugin that made the thumbnails don't load.
|
||||
// This removes the plugin site base URL and returns the direct image URL.
|
||||
override fun imageFromElement(element: Element): String {
|
||||
return baseUrl + super.imageFromElement(element)?.substringAfter(baseUrl)
|
||||
}
|
||||
|
||||
// [...document.querySelectorAll('input[name="genre[]"]')]
|
||||
// .map(x => `Genre("${document.querySelector('label[for=' + x.id + ']').innerHTML.trim()}", "${x.value}")`)
|
||||
// .join(',\n')
|
||||
override fun getGenreList(): List<Genre> = listOf(
|
||||
Genre("Ação", "acao"),
|
||||
Genre("Artes Marciais", "artes-marciais"),
|
||||
Genre("Aventura", "aventura"),
|
||||
Genre("Comédia", "comedia"),
|
||||
Genre("Drama", "drama"),
|
||||
Genre("Ecchi", "ecchi"),
|
||||
Genre("Escolar", "escolar"),
|
||||
Genre("Fantasia", "fantasia"),
|
||||
Genre("Histórico", "historico"),
|
||||
Genre("Isekai", "isekai"),
|
||||
Genre("Josei", "josei"),
|
||||
Genre("Magia", "magia"),
|
||||
Genre("Médico", "medico"),
|
||||
Genre("Mistério", "misterio"),
|
||||
Genre("Psicológico", "psicologico"),
|
||||
Genre("Reencarnação", "reencarnacao"),
|
||||
Genre("Romance", "romance"),
|
||||
Genre("Sci Fi", "sci-fi"),
|
||||
Genre("Shoujo", "shoujo"),
|
||||
Genre("Slice of Life", "slice-of-life"),
|
||||
Genre("Sobrenatural", "sobrenatural")
|
||||
)
|
||||
|
||||
companion object {
|
||||
private val NOVEL_REGEX = "novel|livro".toRegex(RegexOption.IGNORE_CASE)
|
||||
}
|
||||
}
|
|
@ -351,7 +351,7 @@ abstract class Madara(
|
|||
// I don't know what's the corresponding for COMPLETED and LICENSED
|
||||
// There's no support for "Canceled" or "On Hold"
|
||||
"Completed", "Completo", "Concluído", "Concluido", "Terminé" -> SManga.COMPLETED
|
||||
"OnGoing", "Продолжается", "Updating", "Em Lançamento", "Em andamento", "Em Andamento", "En cours", "Ativo" -> SManga.ONGOING
|
||||
"OnGoing", "Продолжается", "Updating", "Em Lançamento", "Em andamento", "Em Andamento", "En cours", "Ativo", "Lançando" -> SManga.ONGOING
|
||||
else -> SManga.UNKNOWN
|
||||
}
|
||||
}
|
||||
|
@ -397,7 +397,7 @@ abstract class Madara(
|
|||
return this.contains("Updating", true).not()
|
||||
}
|
||||
|
||||
protected fun imageFromElement(element: Element): String? {
|
||||
protected open fun imageFromElement(element: Element): String? {
|
||||
return when {
|
||||
element.hasAttr("data-src") -> element.attr("abs:data-src")
|
||||
element.hasAttr("data-lazy-src") -> element.attr("abs:data-lazy-src")
|
||||
|
|
|
@ -32,6 +32,7 @@ class MadaraGenerator : ThemeSourceGenerator {
|
|||
SingleLang("AYATOON", "https://ayatoon.com", "tr"),
|
||||
SingleLang("Azora", "https://azoramanga.com", "ar", overrideVersionCode = 1),
|
||||
SingleLang("BL Manhwa Club", "https://blmanhwa.club", "pt-BR", isNsfw = true, className = "BlManhwaClub"),
|
||||
SingleLang("Banana Mecânica", "https://leitorbm.com", "pt-BR", isNsfw = true, pkgName = "bananamecanica", className = "BananaMecanica"),
|
||||
SingleLang("Bakaman", "https://bakaman.net", "th", overrideVersionCode = 1),
|
||||
SingleLang("BestManga", "https://bestmanga.club", "ru"),
|
||||
SingleLang("BestManhua", "https://bestmanhua.com", "en", overrideVersionCode = 1),
|
||||
|
@ -60,6 +61,7 @@ class MadaraGenerator : ThemeSourceGenerator {
|
|||
SingleLang("FDM Scan", "https://fdmscan.com", "pt-BR", overrideVersionCode = 1),
|
||||
SingleLang("1st Kiss", "https://1stkissmanga.com", "en", className = "FirstKissManga", overrideVersionCode = 1),
|
||||
SingleLang("1st Kiss Manhua", "https://1stkissmanhua.com", "en", className = "FirstKissManhua"),
|
||||
SingleLang("Fênix Scanlator", "https://fenixscanlator.xyz", "pt-BR", pkgName = "fenixscanlator", className = "FenixScanlator"),
|
||||
SingleLang("FreeWebtoonCoins", "https://freewebtooncoins.com", "en"),
|
||||
SingleLang("Furio Scans", "https://furioscans.com", "pt-BR", overrideVersionCode = 1),
|
||||
SingleLang("موقع لترجمة المانجا", "https://golden-manga.com", "ar", className = "GoldenManga"),
|
||||
|
@ -223,6 +225,7 @@ class MadaraGenerator : ThemeSourceGenerator {
|
|||
SingleLang("Spooky Scanlations", "https://spookyscanlations.xyz", "es"),
|
||||
SingleLang("StageComics", "https://stagecomics.com", "pt-BR", overrideVersionCode = 1),
|
||||
SingleLang("Sugar Babies", "https://sugarbscan.com", "en"),
|
||||
SingleLang("Sweet Time Scan", "https://sweetscan.net", "pt-BR"),
|
||||
SingleLang("TheTopComic", "https://thetopcomic.com", "en"),
|
||||
SingleLang("365Manga", "https://365manga.com", "en", className = "ThreeSixtyFiveManga"),
|
||||
SingleLang("ToonGod", "https://www.toongod.com", "en"),
|
||||
|
|
Loading…
Reference in New Issue