New Source: SobatManKu (#18463)

* New Source: SobatManKu

* Move to ZeistMangaTheme

* Change source icon

Co-Authored-By: Luqman <16263232+Riztard@users.noreply.github.com>

* Add feature: latest update

---------

Co-authored-by: Luqman <16263232+Riztard@users.noreply.github.com>
This commit is contained in:
Muhammad Brian Abdillah 2023-10-14 00:12:31 +07:00 committed by GitHub
parent aba668c1bf
commit ae142c6066
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 84 additions and 2 deletions

View File

@ -0,0 +1,81 @@
package eu.kanade.tachiyomi.extension.id.sobatmanku
import eu.kanade.tachiyomi.multisrc.zeistmanga.ZeistManga
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.Request
import okhttp3.Response
class SobatManKu : ZeistManga("SobatManKu", "https://www.sobatmanku19.site", "id") {
override val supportsLatest = true
override val hasFilters = true
override fun latestUpdatesRequest(page: Int): Request {
return GET("$baseUrl/search/label/Update", headers)
}
override fun latestUpdatesParse(response: Response): MangasPage {
val doc = response.asJsoup()
val selector = doc.select(".grid.gtc-f141a > div")
val mangas = selector.map { element ->
SManga.create().apply {
element.select("a:nth-child(2)").let {
title = it.text()
setUrlWithoutDomain(it.attr("href"))
}
thumbnail_url = element.select("img").first()!!.attr("abs:src")
}
}
return MangasPage(mangas, false)
}
override fun mangaDetailsParse(response: Response): SManga {
val document = response.asJsoup()
val profileManga = document.selectFirst(".grid.gtc-235fr")!!
return SManga.create().apply {
thumbnail_url = profileManga.selectFirst("img")!!.attr("abs:src")
description = profileManga.select("#synopsis").text()
genre = profileManga.select("div.mt-15 > a[rel=tag]").joinToString { it.text() }
val infoElement = profileManga.select(".y6x11p")
infoElement.forEach {
val descText = it.select("span.dt").text()
when (it.ownText().trim()) {
"Status" -> {
status = parseStatus(descText)
}
"Author" -> {
author = descText
}
"Artist" -> {
artist = descText
}
}
}
}
}
override fun chapterListParse(response: Response): List<SChapter> {
return super.chapterListParse(response).onEach {
// fix some chapter name
it.name = it.name.run {
substring(indexOf("Chapter"))
}
}
}
private fun parseStatus(element: String): Int = when (element.lowercase()) {
"ongoing" -> SManga.ONGOING
"completed" -> SManga.COMPLETED
else -> SManga.UNKNOWN
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

View File

@ -59,8 +59,8 @@ abstract class ZeistManga(
return MangasPage(mangalist, false)
}
override fun latestUpdatesRequest(page: Int) = throw UnsupportedOperationException("Not used.")
override fun latestUpdatesParse(response: Response) = throw UnsupportedOperationException("Not used.")
override fun latestUpdatesRequest(page: Int): Request = throw UnsupportedOperationException("Not used.")
override fun latestUpdatesParse(response: Response): MangasPage = throw UnsupportedOperationException("Not used.")
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
val startIndex = maxMangaResults * (page - 1) + 1

View File

@ -21,6 +21,7 @@ class ZeistMangaGenerator : ThemeSourceGenerator {
SingleLang("Muslos No Sekai", "https://muslosnosekai.blogspot.com", "es"),
SingleLang("ShiyuraSub", "https://shiyurasub.blogspot.com", "id"),
SingleLang("Tooncubus", "https://www.tooncubus.top", "id", isNsfw = true),
SingleLang("SobatManKu", "https://www.sobatmanku19.site", "id"),
)
companion object {