Update Newtoki Extension v1.2.14 (#4290)
Update Newtoki Extension v1.2.14
This commit is contained in:
parent
07f0073856
commit
8a6d1c694f
|
@ -5,7 +5,7 @@ ext {
|
|||
extName = 'NewToki'
|
||||
pkgNameSuffix = 'ko.newtoki'
|
||||
extClass = '.NewTokiFactory'
|
||||
extVersionCode = 13
|
||||
extVersionCode = 14
|
||||
libVersion = '1.2'
|
||||
}
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ open class NewToki(override val name: String, private val defaultBaseUrl: String
|
|||
val linkElement = element.getElementsByTag("a").first()
|
||||
|
||||
val manga = SManga.create()
|
||||
manga.setUrlWithoutDomain(linkElement.attr("href"))
|
||||
manga.setUrlWithoutDomain(linkElement.attr("href").substringBefore("?"))
|
||||
manga.title = element.select("span.title").first().ownText()
|
||||
manga.thumbnail_url = linkElement.getElementsByTag("img").attr("src")
|
||||
return manga
|
||||
|
@ -166,7 +166,8 @@ open class NewToki(override val name: String, private val defaultBaseUrl: String
|
|||
}
|
||||
|
||||
override fun pageListParse(document: Document): List<Page> {
|
||||
return document.select("article > div div > img")
|
||||
// <article> - <div> - optional <div> - <div> - optional <p> - <img>
|
||||
return document.select("article > div div img")
|
||||
.filterNot { !it.hasAttr("data-original") || it.attr("data-original").contains("blank.gif") }
|
||||
.mapIndexed { i, img -> Page(i, "", img.attr("abs:data-original")) }
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import eu.kanade.tachiyomi.source.SourceFactory
|
|||
import eu.kanade.tachiyomi.source.model.Filter
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import eu.kanade.tachiyomi.source.model.Page
|
||||
import java.security.MessageDigest
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
|
@ -17,8 +18,12 @@ import org.jsoup.nodes.Document
|
|||
/**
|
||||
* Source changes domain names every few days (e.g. newtoki31.net to newtoki32.net)
|
||||
* The domain name was newtoki32 on 2019-11-14, this attempts to match the rate at which the domain changes
|
||||
*
|
||||
* Since 2020-09-20, They changed manga side to Manatoki.
|
||||
* It was merged after shutdown of ManaMoa.
|
||||
* This is by the head of Manamoa, as they decided to move to Newtoki.
|
||||
*/
|
||||
private val domainNumber = 32 + ((Date().time - SimpleDateFormat("yyyy-MM-dd", Locale.US).parse("2019-11-14")!!.time) / 595000000)
|
||||
private val domainNumber = 33 + ((Date().time - SimpleDateFormat("yyyy-MM-dd", Locale.US).parse("2019-11-14")!!.time) / 595000000)
|
||||
|
||||
class NewTokiFactory : SourceFactory {
|
||||
override fun createSources(): List<Source> = listOf(
|
||||
|
@ -27,9 +32,126 @@ class NewTokiFactory : SourceFactory {
|
|||
)
|
||||
}
|
||||
|
||||
class NewTokiManga : NewToki("NewToki", "https://newtoki$domainNumber.net", "comic")
|
||||
class NewTokiManga : NewToki("ManaToki", "https://manatoki$domainNumber.net", "comic") {
|
||||
// / ! DO NOT CHANGE THIS ! Only the site name changed from newtoki.
|
||||
override val id by lazy { generateSourceId("NewToki", lang, versionId) }
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = HttpUrl.parse("$baseUrl/comic" + (if (page > 1) "/p$page" else ""))!!.newBuilder()
|
||||
|
||||
if (!query.isBlank()) {
|
||||
url.addQueryParameter("stx", query)
|
||||
return GET(url.toString())
|
||||
}
|
||||
|
||||
filters.forEach { filter ->
|
||||
when (filter) {
|
||||
is SearchPublishTypeList -> {
|
||||
if (filter.state > 0) {
|
||||
url.addQueryParameter("publish", filter.values[filter.state])
|
||||
}
|
||||
}
|
||||
|
||||
is SearchJaumTypeList -> {
|
||||
if (filter.state > 0) {
|
||||
url.addQueryParameter("jaum", filter.values[filter.state])
|
||||
}
|
||||
}
|
||||
|
||||
is SearchGenreTypeList -> {
|
||||
if (filter.state > 0) {
|
||||
url.addQueryParameter("tag", filter.values[filter.state])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return GET(url.toString())
|
||||
}
|
||||
|
||||
// [...document.querySelectorAll("form.form td")[2].querySelectorAll("a")].map((el, i) => `"${el.innerText.trim()}"`).join(',\n')
|
||||
private class SearchPublishTypeList : Filter.Select<String>("Publish", arrayOf(
|
||||
"전체",
|
||||
"미분류",
|
||||
"주간",
|
||||
"격주",
|
||||
"월간",
|
||||
"격월/비정기",
|
||||
"단편",
|
||||
"단행본",
|
||||
"완결"
|
||||
))
|
||||
|
||||
// [...document.querySelectorAll("form.form td")[3].querySelectorAll("a")].map((el, i) => `"${el.innerText.trim()}"`).join(',\n')
|
||||
private class SearchJaumTypeList : Filter.Select<String>("Jaum", arrayOf(
|
||||
"전체",
|
||||
"ㄱ",
|
||||
"ㄴ",
|
||||
"ㄷ",
|
||||
"ㄹ",
|
||||
"ㅁ",
|
||||
"ㅂ",
|
||||
"ㅅ",
|
||||
"ㅇ",
|
||||
"ㅈ",
|
||||
"ㅊ",
|
||||
"ㅋ",
|
||||
"ㅌ",
|
||||
"ㅍ",
|
||||
"ㅎ",
|
||||
"0-9",
|
||||
"a-z"
|
||||
))
|
||||
|
||||
// [...document.querySelectorAll("form.form td")[4].querySelectorAll("a")].map((el, i) => `"${el.innerText.trim()}"`).join(',\n')
|
||||
private class SearchGenreTypeList : Filter.Select<String>("Genre", arrayOf(
|
||||
"전체",
|
||||
"17",
|
||||
"BL",
|
||||
"SF",
|
||||
"TS",
|
||||
"개그",
|
||||
"게임",
|
||||
"공포",
|
||||
"도박",
|
||||
"드라마",
|
||||
"라노벨",
|
||||
"러브코미디",
|
||||
"로맨스",
|
||||
"먹방",
|
||||
"미스터리",
|
||||
"백합",
|
||||
"붕탁",
|
||||
"성인",
|
||||
"순정",
|
||||
"스릴러",
|
||||
"스포츠",
|
||||
"시대",
|
||||
"애니화",
|
||||
"액션",
|
||||
"역사",
|
||||
"음악",
|
||||
"이세계",
|
||||
"일상",
|
||||
"일상+치유",
|
||||
"전생",
|
||||
"추리",
|
||||
"판타지",
|
||||
"학원",
|
||||
"호러"
|
||||
))
|
||||
|
||||
override fun getFilterList() = FilterList(
|
||||
SearchPublishTypeList(),
|
||||
SearchJaumTypeList(),
|
||||
SearchGenreTypeList()
|
||||
)
|
||||
}
|
||||
|
||||
class NewTokiWebtoon : NewToki("NewToki", "https://newtoki$domainNumber.com", "webtoon") {
|
||||
// / ! DO NOT CHANGE THIS ! Prevent to treating as a new site
|
||||
override val id by lazy { generateSourceId("NewToki (Webtoon)", lang, versionId) }
|
||||
|
||||
class NewTokiWebtoon : NewToki("NewToki (Webtoon)", "https://newtoki$domainNumber.com", "webtoon") {
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = HttpUrl.parse("$baseUrl/webtoon" + (if (page > 1) "/p$page" else ""))!!.newBuilder()
|
||||
filters.forEach { filter ->
|
||||
|
@ -69,3 +191,9 @@ class NewTokiWebtoon : NewToki("NewToki (Webtoon)", "https://newtoki$domainNumbe
|
|||
SearchTypeList()
|
||||
)
|
||||
}
|
||||
|
||||
fun generateSourceId(name: String, lang: String, versionId: Int): Long {
|
||||
val key = "${name.toLowerCase()}/$lang/$versionId"
|
||||
val bytes = MessageDigest.getInstance("MD5").digest(key.toByteArray())
|
||||
return (0..7).map { bytes[it].toLong() and 0xff shl 8 * (7 - it) }.reduce(Long::or) and Long.MAX_VALUE
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue