VyvyManga KT
VyvyManga KT
vyvymanga
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.FilterList
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 java.text.ParseException
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.Request
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
// Popular
override fun popularMangaRequest(page: Int): Request =
GET("$baseUrl/search" + if (page != 1) "?page=$page" else "", headers)
// Search
override fun searchMangaRequest(page: Int, query: String, filters: FilterList):
Request {
val url = "$baseUrl/search".toHttpUrl().newBuilder()
.addQueryParameter("q", query)
.addQueryParameter("page", page.toString())
// Latest
override fun latestUpdatesRequest(page: Int): Request =
GET("$baseUrl/search?sort=updated_at" + if (page != 1) "&page=$page" else
"", headers)
// Details
override fun mangaDetailsParse(document: Document): SManga =
SManga.create().apply {
title = document.selectFirst("h1")!!.text()
artist = document.selectFirst(".pre-title:contains(Artist) ~ a")?.text()
author = document.selectFirst(".pre-title:contains(Author) ~ a")?.text()
description = document.selectFirst(".summary > .content")!!.text()
genre = document.select(".pre-title:contains(Genres) ~ a").joinToString
{ it.text() }
status = when (document.selectFirst(".pre-title:contains(Status) ~
span:not(.space)")?.text()) {
"Ongoing" -> SManga.ONGOING
"Completed" -> SManga.COMPLETED
else -> SManga.UNKNOWN
}
thumbnail_url = document.selectFirst(".img-manga")!!.absUrl("src")
}
// Chapters
override fun chapterListSelector(): String =
".list-group > a"
// Pages
override fun pageListRequest(chapter: SChapter): Request =
GET(chapter.url, headers)
// Other
// Date logic lifted from Madara
private fun parseChapterDate(date: String?): Long {
date ?: return 0
return when {
"ago".endsWith(date) -> {
parseRelativeDate(date)
}
else -> dateFormat.tryParse(date)
}
}
return when {
date.contains("day") -> cal.apply { add(Calendar.DAY_OF_MONTH, -number)
}.timeInMillis
date.contains("hour") -> cal.apply { add(Calendar.HOUR, -
number) }.timeInMillis
date.contains("minute") -> cal.apply { add(Calendar.MINUTE, -
number) }.timeInMillis
date.contains("second") -> cal.apply { add(Calendar.SECOND, -
number) }.timeInMillis
else -> 0
}
}
}