package eu.kanade.tachiyomi.extension.en.midnightmessscans import eu.kanade.tachiyomi.multisrc.madara.Madara import eu.kanade.tachiyomi.annotations.Nsfw 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 import eu.kanade.tachiyomi.source.model.SManga 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 import org.jsoup.nodes.Document 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 @Nsfw class MidnightMessScans : Madara("Midnight Mess Scans", "https://midnightmess.org", "en") { override fun mangaDetailsParse(document: Document): SManga { val manga = SManga.create() 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 { if (it.isBlank().not() && it.notUpdating()) { manga.description = when { manga.description.isNullOrBlank() -> altName + it else -> manga.description + "\n\n$altName" + it } } } } return manga } 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"), ) }