add sources and fix

devi 3 years ago
parent fc231ec330
commit f134137a05

@ -0,0 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.ar
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("MANGATIME", "Manga Time", "ar")
internal class MangaTime(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGATIME, "mangatime.co") {
override val datePattern = "d MMMM، yyyy"
}

@ -7,7 +7,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("SCANTRADVF", "Scantrad-Vf", "fr") @MangaSourceParser("SCANTRADVF", "Scantrad-Vf", "fr")
internal class ScantradVf(context: MangaLoaderContext) : internal class ScantradVf(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.SCANTRADVF, "scantrad-vf.co") { MadaraParser(context, MangaSource.SCANTRADVF, "scantrad-vf.me") {
override val datePattern = "d MMMM yyyy" override val datePattern = "d MMMM yyyy"
override val tagPrefix = "genre/" override val tagPrefix = "genre/"
} }

@ -0,0 +1,13 @@
package org.koitharu.kotatsu.parsers.site.madara.tr
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("DOMALFANSB", "Domal Fansub", "tr")
internal class DomalFansb(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.DOMALFANSB, "domalfansb.com") {
override val datePattern = "d MMMM yyyy"
override val tagPrefix = "manga-turleri/"
}

@ -0,0 +1,10 @@
package org.koitharu.kotatsu.parsers.site.madara.tr
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("HOIFANSUB", "Hoi Fansub", "tr")
internal class HoiFansub(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.HOIFANSUB, "hoifansub.com", 20)

@ -0,0 +1,10 @@
package org.koitharu.kotatsu.parsers.site.mangareader.en
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("ASTRASCANS", "Astra Scans", "en")
internal class AstraScans(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.ASTRASCANS, "astrascans.com", pageSize = 30, searchPageSize = 10)

@ -18,6 +18,8 @@ internal class Komikcast(context: MangaLoaderContext) :
override val listUrl = "/daftar-komik" override val listUrl = "/daftar-komik"
override val datePattern = "MMM d, yyyy" override val datePattern = "MMM d, yyyy"
override val sourceLocale: Locale = Locale.ENGLISH override val sourceLocale: Locale = Locale.ENGLISH
override val sortOrders: Set<SortOrder>
get() = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.ALPHABETICAL)
override suspend fun getListPage( override suspend fun getListPage(
page: Int, page: Int,
@ -29,7 +31,6 @@ internal class Komikcast(context: MangaLoaderContext) :
if (page > lastSearchPage) { if (page > lastSearchPage) {
return emptyList() return emptyList()
} }
val url = buildString { val url = buildString {
append("https://") append("https://")
append(domain) append(domain)
@ -38,21 +39,12 @@ internal class Komikcast(context: MangaLoaderContext) :
append("/?s=") append("/?s=")
append(query.urlEncoded()) append(query.urlEncoded())
} }
val docs = webClient.httpGet(url).parseHtml() val docs = webClient.httpGet(url).parseHtml()
lastSearchPage = docs.selectFirst(".pagination .next") lastSearchPage = docs.selectFirst(".pagination .next")
?.previousElementSibling() ?.previousElementSibling()
?.text()?.toIntOrNull() ?: 1 ?.text()?.toIntOrNull() ?: 1
return parseMangaList(docs) return parseMangaList(docs)
} }
val sortQuery = when (sortOrder) {
SortOrder.ALPHABETICAL -> "title"
SortOrder.NEWEST -> "latest"
SortOrder.POPULARITY -> "popular"
SortOrder.UPDATED -> "update"
else -> ""
}
val tagKey = "genre[]".urlEncoded() val tagKey = "genre[]".urlEncoded()
val tagQuery = val tagQuery =
if (tags.isNullOrEmpty()) "" else tags.joinToString(separator = "&", prefix = "&") { "$tagKey=${it.key}" } if (tags.isNullOrEmpty()) "" else tags.joinToString(separator = "&", prefix = "&") { "$tagKey=${it.key}" }
@ -62,11 +54,14 @@ internal class Komikcast(context: MangaLoaderContext) :
append(listUrl) append(listUrl)
append("/page/") append("/page/")
append(page) append(page)
append("/?orderby=") when (sortOrder) {
append(sortQuery) SortOrder.ALPHABETICAL -> append("/?orderby=titleasc")
SortOrder.POPULARITY -> append("/?orderby=popular")
SortOrder.UPDATED -> append("/?sortby=update")
else -> append("/?sortby=update")
}
append(tagQuery) append(tagQuery)
} }
return parseMangaList(webClient.httpGet(url).parseHtml()) return parseMangaList(webClient.httpGet(url).parseHtml())
} }
@ -93,24 +88,15 @@ internal class Komikcast(context: MangaLoaderContext) :
} }
override suspend fun parseInfo(docs: Document, manga: Manga, chapters: List<MangaChapter>): Manga { override suspend fun parseInfo(docs: Document, manga: Manga, chapters: List<MangaChapter>): Manga {
// / set if is table
val tagMap = getOrCreateTagMap() val tagMap = getOrCreateTagMap()
val tags = docs.select(".komik_info-content-genre > a").mapNotNullToSet { tagMap[it.text()] } val tags = docs.select(".komik_info-content-genre > a").mapNotNullToSet { tagMap[it.text()] }
val state = docs.selectFirst(".komik_info-content-meta span:contains(Status)")?.html()
val state = docs.selectFirst(".komik_info-content-meta span:contains(Status)")?.lastElementChild() val mangaState = if (state!!.contains("Ongoing")) {
MangaState.ONGOING
val mangaState = state?.let { } else {
when (it.text()) { MangaState.FINISHED
"Ongoing" -> MangaState.ONGOING
"Completed" -> MangaState.FINISHED
else -> null
}
} }
val author = docs.selectFirst(".komik_info-content-meta span:contains(Author)")?.lastElementChild()?.text() val author = docs.selectFirst(".komik_info-content-meta span:contains(Author)")?.lastElementChild()?.text()
val nsfw = val nsfw =
docs.selectFirst(".restrictcontainer") != null || docs.selectFirst(".info-right .alr") != null || docs.selectFirst( docs.selectFirst(".restrictcontainer") != null || docs.selectFirst(".info-right .alr") != null || docs.selectFirst(
".postbody .alr", ".postbody .alr",
@ -131,7 +117,6 @@ internal class Komikcast(context: MangaLoaderContext) :
val a = it.selectFirstOrThrow("a.data-tooltip") val a = it.selectFirstOrThrow("a.data-tooltip")
val relativeUrl = a.attrAsRelativeUrl("href") val relativeUrl = a.attrAsRelativeUrl("href")
val rating = it.selectFirst(".numscore")?.text()?.toFloatOrNull()?.div(10) ?: RATING_UNKNOWN val rating = it.selectFirst(".numscore")?.text()?.toFloatOrNull()?.div(10) ?: RATING_UNKNOWN
val name = it.selectFirst("h3.title")?.text().orEmpty() val name = it.selectFirst("h3.title")?.text().orEmpty()
Manga( Manga(
id = generateUid(relativeUrl), id = generateUid(relativeUrl),
@ -153,7 +138,6 @@ internal class Komikcast(context: MangaLoaderContext) :
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> { override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
val chapterUrl = chapter.url.toAbsoluteUrl(domain) val chapterUrl = chapter.url.toAbsoluteUrl(domain)
val docs = webClient.httpGet(chapterUrl).parseHtml() val docs = webClient.httpGet(chapterUrl).parseHtml()
val test = docs.select("script:containsData(ts_reader)") val test = docs.select("script:containsData(ts_reader)")
if (test.isNullOrEmpty()) { if (test.isNullOrEmpty()) {
return docs.select("div#chapter_body img").map { img -> return docs.select("div#chapter_body img").map { img ->
@ -180,7 +164,6 @@ internal class Komikcast(context: MangaLoaderContext) :
), ),
) )
} }
return pages return pages
} }
} }
@ -199,7 +182,6 @@ internal class Komikcast(context: MangaLoaderContext) :
private fun parseRelativeDate(date: String): Long { private fun parseRelativeDate(date: String): Long {
val number = Regex("""(\d+)""").find(date)?.value?.toIntOrNull() ?: return 0 val number = Regex("""(\d+)""").find(date)?.value?.toIntOrNull() ?: return 0
val cal = Calendar.getInstance() val cal = Calendar.getInstance()
return when { return when {
WordSet( WordSet(
"day", "day",

@ -8,7 +8,7 @@ import java.util.Locale
@MangaSourceParser("MANGAFR", "Manga Fr", "fr") @MangaSourceParser("MANGAFR", "Manga Fr", "fr")
internal class MangaFr(context: MangaLoaderContext) : internal class MangaFr(context: MangaLoaderContext) :
MmrcmsParser(context, MangaSource.MANGAFR, "manga-fr.me") { MmrcmsParser(context, MangaSource.MANGAFR, "manga-fr.cc") {
override val imgUpdated = ".jpg" override val imgUpdated = ".jpg"
override val sourceLocale: Locale = Locale.ENGLISH override val sourceLocale: Locale = Locale.ENGLISH
} }

Loading…
Cancel
Save