|
|
|
@ -4,23 +4,41 @@ import org.json.JSONObject
|
|
|
|
import org.jsoup.nodes.Document
|
|
|
|
import org.jsoup.nodes.Document
|
|
|
|
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
|
|
|
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
|
|
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
|
|
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
|
|
|
import org.koitharu.kotatsu.parsers.config.ConfigKey
|
|
|
|
import org.koitharu.kotatsu.parsers.model.Manga
|
|
|
|
import org.koitharu.kotatsu.parsers.model.*
|
|
|
|
import org.koitharu.kotatsu.parsers.model.MangaChapter
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.parsers.model.MangaPage
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.parsers.model.MangaSource
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.parsers.model.MangaState
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.parsers.model.RATING_UNKNOWN
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.parsers.model.WordSet
|
|
|
|
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
|
|
|
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
|
|
|
import org.koitharu.kotatsu.parsers.util.*
|
|
|
|
import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.parsers.util.domain
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.parsers.util.generateUid
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.parsers.util.mapChapters
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.parsers.util.mapNotNullToSet
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.parsers.util.parseHtml
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.parsers.util.tryParse
|
|
|
|
import java.text.DateFormat
|
|
|
|
import java.text.DateFormat
|
|
|
|
|
|
|
|
import java.text.SimpleDateFormat
|
|
|
|
import java.util.Calendar
|
|
|
|
import java.util.Calendar
|
|
|
|
|
|
|
|
import java.util.Locale
|
|
|
|
|
|
|
|
|
|
|
|
@MangaSourceParser("KOMIKCAST", "Komikcast", "id")
|
|
|
|
@MangaSourceParser("KOMIKCAST", "Komikcast", "id")
|
|
|
|
internal class Komikcast(context: MangaLoaderContext) :
|
|
|
|
internal class Komikcast(context: MangaLoaderContext) :
|
|
|
|
MangaReaderParser(context, MangaSource.KOMIKCAST, pageSize = 60, searchPageSize = 28) {
|
|
|
|
MangaReaderParser(context, MangaSource.KOMIKCAST, "komikcast.io", pageSize = 60, searchPageSize = 28) {
|
|
|
|
override val configKeyDomain: ConfigKey.Domain
|
|
|
|
|
|
|
|
get() = ConfigKey.Domain("komikcast.io")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override val listUrl = "/daftar-komik"
|
|
|
|
override val listUrl = "/daftar-komik"
|
|
|
|
|
|
|
|
override val datePattern = "MMM d, yyyy"
|
|
|
|
|
|
|
|
override val sourceLocale: Locale = Locale.ENGLISH
|
|
|
|
|
|
|
|
|
|
|
|
override suspend fun getDetails(manga: Manga): Manga {
|
|
|
|
override suspend fun getDetails(manga: Manga): Manga {
|
|
|
|
val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml()
|
|
|
|
val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml()
|
|
|
|
|
|
|
|
val dateFormat = SimpleDateFormat(datePattern, sourceLocale)
|
|
|
|
val chapters = docs.select("#chapter-wrapper > li").mapChapters(reversed = true) { index, element ->
|
|
|
|
val chapters = docs.select("#chapter-wrapper > li").mapChapters(reversed = true) { index, element ->
|
|
|
|
val url = element.selectFirst("a")?.attrAsRelativeUrl("href") ?: return@mapChapters null
|
|
|
|
val url = element.selectFirst("a")?.attrAsRelativeUrl("href") ?: return@mapChapters null
|
|
|
|
MangaChapter(
|
|
|
|
MangaChapter(
|
|
|
|
@ -30,7 +48,7 @@ internal class Komikcast(context: MangaLoaderContext) :
|
|
|
|
number = index + 1,
|
|
|
|
number = index + 1,
|
|
|
|
scanlator = null,
|
|
|
|
scanlator = null,
|
|
|
|
uploadDate = parseChapterDate(
|
|
|
|
uploadDate = parseChapterDate(
|
|
|
|
chapterDateFormat,
|
|
|
|
dateFormat,
|
|
|
|
element.selectFirst("div.chapter-link-time")?.text(),
|
|
|
|
element.selectFirst("div.chapter-link-time")?.text(),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
branch = null,
|
|
|
|
branch = null,
|
|
|
|
|