NineManga: use SourceFactory

This commit is contained in:
Eugene 2019-10-27 18:14:44 -04:00
parent b81d7ad2aa
commit c547da3714
No known key found for this signature in database
GPG Key ID: E1FD745328866B0A
3 changed files with 717 additions and 716 deletions

View File

@ -4,8 +4,8 @@ apply plugin: 'kotlin-android'
ext {
appName = 'Tachiyomi: NineManga'
pkgNameSuffix = "all.ninemanga"
extClass = '.NineMangaEs; .NineMangaBr; .NineMangaEn; .NineMangaRu; .NineMangaDe; .NineMangaIt; .NineMangaFr'
extVersionCode = 6
extClass = '.NineMangaFactory'
extVersionCode = 7
libVersion = '1.2'
}

View File

@ -1,27 +1,32 @@
package eu.kanade.tachiyomi.extension.all.ninemanga
import eu.kanade.tachiyomi.source.model.*
import okhttp3.Request
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.Filter
import eu.kanade.tachiyomi.source.model.FilterList
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 okhttp3.HttpUrl
import okhttp3.Request
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
import java.util.Calendar
import java.util.Locale
open class NineManga(override val name: String, override val baseUrl: String, override val lang: String) : ParsedHttpSource() {
override val supportsLatest: Boolean = true
private fun newHeaders() = super.headersBuilder()
.add("Accept-Language", "es-ES,es;q=0.9,en;q=0.8,gl;q=0.7")
.add("Host", baseUrl.substringAfterLast("/")) // like: es.ninemanga.com
.add("Connection", "keep-alive")
.add("Upgrade-Insecure-Requests", "1")
.add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) Gecko/20100101 Firefox/60")
.build()
.add("Accept-Language", "es-ES,es;q=0.9,en;q=0.8,gl;q=0.7")
.add("Host", baseUrl.substringAfterLast("/")) // like: es.ninemanga.com
.add("Connection", "keep-alive")
.add("Upgrade-Insecure-Requests", "1")
.add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) Gecko/20100101 Firefox/60")
.build()
override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/list/New-Update/", headers) // "$baseUrl/category/updated_$page.html"
@ -45,7 +50,7 @@ open class NineManga(override val name: String, override val baseUrl: String, ov
override fun popularMangaNextPageSelector() = latestUpdatesNextPageSelector()
override fun mangaDetailsParse(document: Document) = SManga.create().apply {
override fun mangaDetailsParse(document: Document) = SManga.create().apply {
document.select("div.bookintro").let {
title = it.select("li > span:not([class])").text()
genre = it.select("li[itemprop=genre] a").joinToString { e -> e.text() }
@ -80,13 +85,13 @@ open class NineManga(override val name: String, override val baseUrl: String, ov
val dateWords = date.split(" ")
if (dateWords.size == 3) {
if(dateWords[1].contains(",")){
try {
return SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH).parse(date).time
if (dateWords[1].contains(",")) {
return try {
SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH).parse(date).time
} catch (e: ParseException) {
return 0L
0L
}
}else {
} else {
val timeAgo = Integer.parseInt(dateWords[0])
return Calendar.getInstance().apply {
when (dateWords[1]) {
@ -128,8 +133,8 @@ open class NineManga(override val name: String, override val baseUrl: String, ov
when (filter) {
is GenreList -> {
filter.state
.filter { genre -> genre.state }
.forEach { genre -> url.addQueryParameter("category_id", genre.id) }
.filter { genre -> genre.state }
.forEach { genre -> url.addQueryParameter("category_id", genre.id) }
}
}
}
@ -147,76 +152,76 @@ open class NineManga(override val name: String, override val baseUrl: String, ov
open class GenreList(genres: List<Genre>) : Filter.Group<Genre>("Genre", genres)
override fun getFilterList() = FilterList(
GenreList(getGenreList())
GenreList(getGenreList())
)
// $(document.querySelectorAll('.optionbox .typelist:nth-child(3) ul li.cate_list')).map((i, el)=>`Genre("${$(el).first().text().trim()}","${$(el).attr("cate_id")}")`).get().sort().join(",\n")
// $(document.querySelectorAll('.optionbox .typelist:nth-child(3) ul li.cate_list')).map((i, el)=>`Genre("${$(el).first().text().trim()}", "${$(el).attr("cate_id")}")`).get().sort().join(",\n")
// http://en.ninemanga.com/search/?type=high
open fun getGenreList() = listOf(
Genre("4-Koma","56"),
Genre("Action","1"),
Genre("Adventure","2"),
Genre("Anime","3"),
Genre("Award Winning","59"),
Genre("Bara","84"),
Genre("Comedy","4"),
Genre("Cooking","5"),
Genre("Crime","132"),
Genre("Demons","49"),
Genre("Doujinshi","45"),
Genre("Drama","6"),
Genre("Fantasy","8"),
Genre("Game","126"),
Genre("Gender Bender","9"),
Genre("Historical","11"),
Genre("Horror","12"),
Genre("Isekai","127"),
Genre("Josei","13"),
Genre("Live Action","14"),
Genre("Magic","47"),
Genre("Magical Girls","130"),
Genre("Manhua","15"),
Genre("Manhwa","16"),
Genre("Martial Arts","17"),
Genre("Matsumoto Tomokicomedy","37"),
Genre("Mecha","18"),
Genre("Medical","19"),
Genre("Military","51"),
Genre("Music","20"),
Genre("Mystery","21"),
Genre("N/A","54"),
Genre("None","64"),
Genre("One Shot","22"),
Genre("Oneshot","57"),
Genre("Philosophical","133"),
Genre("Psychological","23"),
Genre("Reverse Harem","55"),
Genre("Romance Shoujo","38"),
Genre("Romance","24"),
Genre("School Life","25"),
Genre("Sci-Fi","26"),
Genre("Seinen","27"),
Genre("Shoujo Ai","44"),
Genre("Shoujo","28"),
Genre("Shoujo-Ai","29"),
Genre("Shoujoai","48"),
Genre("Shounen Ai","42"),
Genre("Shounen","30"),
Genre("Shounen-Ai","31"),
Genre("Shounenai","46"),
Genre("Slice Of Life","32"),
Genre("Sports","33"),
Genre("Staff Pick","60"),
Genre("Super Power","62"),
Genre("Superhero","131"),
Genre("Supernatural","34"),
Genre("Suspense","53"),
Genre("Thriller","129"),
Genre("Tragedy","35"),
Genre("Vampire","52"),
Genre("Webtoon","58"),
Genre("Webtoons","50"),
Genre("Wuxia","128"),
Genre("[No Chapters]","61")
Genre("4-Koma", "56"),
Genre("Action", "1"),
Genre("Adventure", "2"),
Genre("Anime", "3"),
Genre("Award Winning", "59"),
Genre("Bara", "84"),
Genre("Comedy", "4"),
Genre("Cooking", "5"),
Genre("Crime", "132"),
Genre("Demons", "49"),
Genre("Doujinshi", "45"),
Genre("Drama", "6"),
Genre("Fantasy", "8"),
Genre("Game", "126"),
Genre("Gender Bender", "9"),
Genre("Historical", "11"),
Genre("Horror", "12"),
Genre("Isekai", "127"),
Genre("Josei", "13"),
Genre("Live Action", "14"),
Genre("Magic", "47"),
Genre("Magical Girls", "130"),
Genre("Manhua", "15"),
Genre("Manhwa", "16"),
Genre("Martial Arts", "17"),
Genre("Matsumoto Tomokicomedy", "37"),
Genre("Mecha", "18"),
Genre("Medical", "19"),
Genre("Military", "51"),
Genre("Music", "20"),
Genre("Mystery", "21"),
Genre("N/A", "54"),
Genre("None", "64"),
Genre("One Shot", "22"),
Genre("Oneshot", "57"),
Genre("Philosophical", "133"),
Genre("Psychological", "23"),
Genre("Reverse Harem", "55"),
Genre("Romance Shoujo", "38"),
Genre("Romance", "24"),
Genre("School Life", "25"),
Genre("Sci-Fi", "26"),
Genre("Seinen", "27"),
Genre("Shoujo Ai", "44"),
Genre("Shoujo", "28"),
Genre("Shoujo-Ai", "29"),
Genre("Shoujoai", "48"),
Genre("Shounen Ai", "42"),
Genre("Shounen", "30"),
Genre("Shounen-Ai", "31"),
Genre("Shounenai", "46"),
Genre("Slice Of Life", "32"),
Genre("Sports", "33"),
Genre("Staff Pick", "60"),
Genre("Super Power", "62"),
Genre("Superhero", "131"),
Genre("Supernatural", "34"),
Genre("Suspense", "53"),
Genre("Thriller", "129"),
Genre("Tragedy", "35"),
Genre("Vampire", "52"),
Genre("Webtoon", "58"),
Genre("Webtoons", "50"),
Genre("Wuxia", "128"),
Genre("[No Chapters]", "61")
)
}