2021-05-31 00:18:22 +00:00
|
|
|
package eu.kanade.tachiyomi.extension.en.midnightmessscans
|
|
|
|
|
|
|
|
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
2021-06-20 12:36:50 +00:00
|
|
|
import eu.kanade.tachiyomi.annotations.Nsfw
|
2021-06-25 16:58:51 +00:00
|
|
|
import eu.kanade.tachiyomi.network.GET
|
|
|
|
import eu.kanade.tachiyomi.network.POST
|
|
|
|
import eu.kanade.tachiyomi.network.asObservable
|
|
|
|
import eu.kanade.tachiyomi.source.model.Filter
|
|
|
|
import eu.kanade.tachiyomi.source.model.FilterList
|
|
|
|
import eu.kanade.tachiyomi.source.model.MangasPage
|
|
|
|
import eu.kanade.tachiyomi.source.model.Page
|
|
|
|
import eu.kanade.tachiyomi.source.model.SChapter
|
2021-06-25 12:44:37 +00:00
|
|
|
import eu.kanade.tachiyomi.source.model.SManga
|
2021-06-25 16:58:51 +00:00
|
|
|
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
|
|
|
import eu.kanade.tachiyomi.util.asJsoup
|
|
|
|
import okhttp3.CacheControl
|
|
|
|
import okhttp3.FormBody
|
|
|
|
import okhttp3.Headers
|
|
|
|
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
|
|
|
import okhttp3.OkHttpClient
|
|
|
|
import okhttp3.Request
|
|
|
|
import okhttp3.RequestBody.Companion.toRequestBody
|
|
|
|
import okhttp3.Response
|
2021-06-25 12:44:37 +00:00
|
|
|
import org.jsoup.nodes.Document
|
2021-06-25 16:58:51 +00:00
|
|
|
import org.jsoup.nodes.Element
|
|
|
|
import rx.Observable
|
|
|
|
import java.text.ParseException
|
|
|
|
import java.text.SimpleDateFormat
|
|
|
|
import java.util.Calendar
|
|
|
|
import java.util.Locale
|
|
|
|
import java.util.concurrent.TimeUnit
|
|
|
|
import kotlin.math.absoluteValue
|
|
|
|
import kotlin.random.Random
|
2021-05-31 00:18:22 +00:00
|
|
|
|
2021-06-20 12:36:50 +00:00
|
|
|
@Nsfw
|
2021-06-25 12:44:37 +00:00
|
|
|
class MidnightMessScans : Madara("Midnight Mess Scans", "https://midnightmess.org", "en") {
|
2021-06-25 16:58:51 +00:00
|
|
|
|
2021-06-25 12:44:37 +00:00
|
|
|
override fun mangaDetailsParse(document: Document): SManga {
|
|
|
|
val manga = SManga.create()
|
2021-06-25 16:58:51 +00:00
|
|
|
with(document) {
|
|
|
|
select("div.post-title h3").first()?.let {
|
|
|
|
manga.title = it.ownText()
|
|
|
|
}
|
|
|
|
select("div.author-content").first()?.let {
|
|
|
|
if (it.text().notUpdating()) manga.author = it.text()
|
|
|
|
}
|
|
|
|
select("div.artist-content").first()?.let {
|
|
|
|
if (it.text().notUpdating()) manga.artist = it.text()
|
|
|
|
}
|
|
|
|
select("div.summary_content div.post-content").let {
|
|
|
|
manga.description = it.select("div.manga-excerpt").text()
|
|
|
|
}
|
|
|
|
select("div.summary_image img").first()?.let {
|
|
|
|
manga.thumbnail_url = imageFromElement(it)
|
|
|
|
}
|
|
|
|
select("div.summary-content").last()?.let {
|
|
|
|
manga.status = when (it.text()) {
|
|
|
|
// I don't know what's the corresponding for COMPLETED and LICENSED
|
|
|
|
// There's no support for "Canceled" or "On Hold"
|
|
|
|
"Completed", "Completo", "Concluído", "Concluido", "Terminé" -> SManga.COMPLETED
|
|
|
|
"OnGoing", "Продолжается", "Updating", "Em Lançamento", "Em andamento", "Em Andamento", "En cours", "Ativo", "Lançando" -> SManga.ONGOING
|
|
|
|
else -> SManga.UNKNOWN
|
|
|
|
}
|
|
|
|
}
|
|
|
|
val genres = select("div.genres-content a")
|
|
|
|
.map { element -> element.text().toLowerCase(Locale.ROOT) }
|
|
|
|
.toMutableSet()
|
|
|
|
|
|
|
|
// add tag(s) to genre
|
|
|
|
select("div.tags-content a").forEach { element ->
|
|
|
|
if (genres.contains(element.text()).not()) {
|
|
|
|
genres.add(element.text().toLowerCase(Locale.ROOT))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// add manga/manhwa/manhua thinggy to genre
|
|
|
|
document.select(seriesTypeSelector).firstOrNull()?.ownText()?.let {
|
|
|
|
if (it.isEmpty().not() && it.notUpdating() && it != "-" && genres.contains(it).not()) {
|
|
|
|
genres.add(it.toLowerCase(Locale.ROOT))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
manga.genre = genres.toList().joinToString(", ") { it.capitalize(Locale.ROOT) }
|
|
|
|
|
|
|
|
// add alternative name to manga description
|
|
|
|
document.select(altNameSelector).firstOrNull()?.ownText()?.let {
|
2021-08-14 09:46:53 +00:00
|
|
|
if (it.isBlank().not() && it.notUpdating()) {
|
|
|
|
manga.description = when {
|
|
|
|
manga.description.isNullOrBlank() -> altName + it
|
|
|
|
else -> manga.description + "\n\n$altName" + it
|
2021-06-25 16:58:51 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-06-25 12:44:37 +00:00
|
|
|
}
|
2021-06-25 16:58:51 +00:00
|
|
|
|
|
|
|
return manga
|
2021-06-25 12:44:37 +00:00
|
|
|
}
|
2021-08-14 09:46:53 +00:00
|
|
|
|
2021-07-02 12:15:36 +00:00
|
|
|
override fun getGenreList() = listOf(
|
|
|
|
Genre("Bilibili", "bilibili"),
|
|
|
|
Genre("Complete", "complete"),
|
|
|
|
Genre("Manga", "manga"),
|
|
|
|
Genre("Manhwa", "manhwa"),
|
|
|
|
Genre("Manhua", "manhua"),
|
|
|
|
Genre("Shounen ai", "shounen-ai"),
|
|
|
|
Genre("Thiccass", "thiccass"),
|
|
|
|
Genre("Usahime", "usahime"),
|
|
|
|
Genre("Yaoi", "yaoi"),
|
|
|
|
)
|
2021-06-25 12:44:37 +00:00
|
|
|
}
|