2022-10-04 18:12:30 +00:00
|
|
|
package eu.kanade.tachiyomi.extension.pt.reaperscans
|
|
|
|
|
|
|
|
import eu.kanade.tachiyomi.multisrc.heancms.Genre
|
2023-08-06 16:32:57 +00:00
|
|
|
import eu.kanade.tachiyomi.multisrc.heancms.GenreFilter
|
2022-10-04 18:12:30 +00:00
|
|
|
import eu.kanade.tachiyomi.multisrc.heancms.HeanCms
|
2023-08-06 16:32:57 +00:00
|
|
|
import eu.kanade.tachiyomi.multisrc.heancms.HeanCmsSeriesDto
|
|
|
|
import eu.kanade.tachiyomi.multisrc.heancms.SortByFilter
|
|
|
|
import eu.kanade.tachiyomi.multisrc.heancms.StatusFilter
|
|
|
|
import eu.kanade.tachiyomi.network.GET
|
2022-10-04 18:12:30 +00:00
|
|
|
import eu.kanade.tachiyomi.network.interceptor.rateLimitHost
|
2023-08-06 16:32:57 +00:00
|
|
|
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.util.asJsoup
|
2022-10-04 18:12:30 +00:00
|
|
|
import okhttp3.HttpUrl.Companion.toHttpUrl
|
|
|
|
import okhttp3.OkHttpClient
|
2023-08-06 16:32:57 +00:00
|
|
|
import okhttp3.Request
|
|
|
|
import okhttp3.Response
|
2023-01-11 17:35:15 +00:00
|
|
|
import java.text.SimpleDateFormat
|
|
|
|
import java.util.TimeZone
|
2022-10-04 18:12:30 +00:00
|
|
|
|
|
|
|
class ReaperScans : HeanCms(
|
|
|
|
"Reaper Scans",
|
2022-10-08 01:50:14 +00:00
|
|
|
"https://reaperscans.net",
|
2023-02-11 19:21:03 +00:00
|
|
|
"pt-BR",
|
2022-10-04 18:12:30 +00:00
|
|
|
) {
|
|
|
|
|
|
|
|
override val client: OkHttpClient = super.client.newBuilder()
|
|
|
|
.rateLimitHost(apiUrl.toHttpUrl(), 1, 2)
|
|
|
|
.build()
|
|
|
|
|
|
|
|
// Site changed from Madara to HeanCms.
|
|
|
|
override val versionId = 2
|
|
|
|
|
2022-10-18 00:43:24 +00:00
|
|
|
override val coverPath: String = ""
|
|
|
|
|
2023-01-11 17:35:15 +00:00
|
|
|
override val dateFormat: SimpleDateFormat = super.dateFormat.apply {
|
|
|
|
timeZone = TimeZone.getTimeZone("GMT+01:00")
|
|
|
|
}
|
|
|
|
|
2023-08-06 16:32:57 +00:00
|
|
|
override fun popularMangaRequest(page: Int): Request {
|
|
|
|
val url = "$apiUrl/query".toHttpUrl().newBuilder()
|
|
|
|
.addQueryParameter("query_string", "")
|
|
|
|
.addQueryParameter("series_status", "All")
|
|
|
|
.addQueryParameter("order", "desc")
|
|
|
|
.addQueryParameter("orderBy", "total_views")
|
|
|
|
.addQueryParameter("series_type", "Comic")
|
|
|
|
.addQueryParameter("page", page.toString())
|
|
|
|
.addQueryParameter("perPage", "12")
|
|
|
|
.addQueryParameter("tags_ids", "[]")
|
|
|
|
|
|
|
|
return GET(url.build(), headers)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun latestUpdatesRequest(page: Int): Request {
|
|
|
|
val url = "$apiUrl/query".toHttpUrl().newBuilder()
|
|
|
|
.addQueryParameter("query_string", "")
|
|
|
|
.addQueryParameter("series_status", "All")
|
|
|
|
.addQueryParameter("order", "desc")
|
|
|
|
.addQueryParameter("orderBy", "latest")
|
|
|
|
.addQueryParameter("series_type", "Comic")
|
|
|
|
.addQueryParameter("page", page.toString())
|
|
|
|
.addQueryParameter("perPage", "12")
|
|
|
|
.addQueryParameter("tags_ids", "[]")
|
|
|
|
|
|
|
|
return GET(url.build(), headers)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
|
|
|
val sortByFilter = filters.firstInstanceOrNull<SortByFilter>()
|
|
|
|
val statusFilter = filters.firstInstanceOrNull<StatusFilter>()
|
|
|
|
|
|
|
|
val tagIds = filters.firstInstanceOrNull<GenreFilter>()?.state.orEmpty()
|
|
|
|
.filter(Genre::state)
|
|
|
|
.map(Genre::id)
|
|
|
|
.joinToString(",", prefix = "[", postfix = "]")
|
|
|
|
|
|
|
|
val url = "$apiUrl/query".toHttpUrl().newBuilder()
|
|
|
|
.addQueryParameter("query_string", query)
|
|
|
|
.addQueryParameter("series_status", statusFilter?.selected?.value ?: "All")
|
|
|
|
.addQueryParameter("order", if (sortByFilter?.state?.ascending == true) "asc" else "desc")
|
|
|
|
.addQueryParameter("orderBy", sortByFilter?.selected ?: "total_views")
|
|
|
|
.addQueryParameter("series_type", "Comic")
|
|
|
|
.addQueryParameter("page", page.toString())
|
|
|
|
.addQueryParameter("perPage", "12")
|
|
|
|
.addQueryParameter("tags_ids", tagIds)
|
|
|
|
|
|
|
|
return GET(url.build(), headers)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun chapterListParse(response: Response): List<SChapter> {
|
|
|
|
val result = response.parseAs<HeanCmsSeriesDto>()
|
|
|
|
|
|
|
|
val currentTimestamp = System.currentTimeMillis()
|
|
|
|
|
|
|
|
return result.seasons.orEmpty()
|
|
|
|
.flatMap { it.chapters.orEmpty() }
|
|
|
|
.filterNot { it.price == 1 }
|
|
|
|
.map { it.toSChapter(result.slug, dateFormat) }
|
|
|
|
.filter { it.date_upload <= currentTimestamp }
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun pageListRequest(chapter: SChapter) = GET(baseUrl + chapter.url, headers)
|
|
|
|
|
|
|
|
override fun pageListParse(response: Response): List<Page> {
|
|
|
|
val document = response.asJsoup()
|
|
|
|
|
|
|
|
val images = document.selectFirst("div.min-h-screen > div.container > p.items-center")
|
|
|
|
|
|
|
|
return images?.select("img").orEmpty().mapIndexed { i, img ->
|
|
|
|
val imageUrl = if (img.hasClass("lazy")) img.absUrl("data-src") else img.absUrl("src")
|
|
|
|
Page(i, "", imageUrl)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-10-04 18:12:30 +00:00
|
|
|
override fun getGenreList(): List<Genre> = listOf(
|
|
|
|
Genre("Artes Marciais", 2),
|
|
|
|
Genre("Aventura", 10),
|
|
|
|
Genre("Ação", 9),
|
|
|
|
Genre("Comédia", 14),
|
|
|
|
Genre("Drama", 15),
|
|
|
|
Genre("Escolar", 7),
|
|
|
|
Genre("Fantasia", 11),
|
|
|
|
Genre("Ficção científica", 16),
|
|
|
|
Genre("Guerra", 17),
|
|
|
|
Genre("Isekai", 18),
|
|
|
|
Genre("Jogo", 12),
|
|
|
|
Genre("Mangá", 24),
|
|
|
|
Genre("Manhua", 23),
|
|
|
|
Genre("Manhwa", 22),
|
|
|
|
Genre("Mecha", 19),
|
|
|
|
Genre("Mistério", 20),
|
|
|
|
Genre("Nacional", 8),
|
|
|
|
Genre("Realidade Virtual", 21),
|
|
|
|
Genre("Retorno", 3),
|
|
|
|
Genre("Romance", 5),
|
|
|
|
Genre("Segunda vida", 4),
|
|
|
|
Genre("Seinen", 1),
|
|
|
|
Genre("Shounen", 13),
|
2023-02-11 19:21:03 +00:00
|
|
|
Genre("Terror", 6),
|
2022-10-04 18:12:30 +00:00
|
|
|
)
|
|
|
|
}
|