[Ru] Mangaclub. Site rework (#5362)

Co-authored-by: pavkazzz <me@pavkazzz.ru>
This commit is contained in:
Pavka
2021-01-11 00:48:33 +03:00
committed by GitHub
parent cbb51ced14
commit be626fe8eb
2 changed files with 29 additions and 55 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'MangaClub' extName = 'MangaClub'
pkgNameSuffix = 'ru.mangaclub' pkgNameSuffix = 'ru.mangaclub'
extClass = '.Mangaclub' extClass = '.Mangaclub'
extVersionCode = 1 extVersionCode = 2
libVersion = '1.2' libVersion = '1.2'
} }

View File

@ -20,20 +20,16 @@ import java.util.Locale
class Mangaclub : ParsedHttpSource() { class Mangaclub : ParsedHttpSource() {
// Info // Info
override val name: String = "MangaClub" override val name: String = "MangaClub"
override val baseUrl: String = "https://mangaclub.ru" override val baseUrl: String = "https://mangaclub.ru"
override val lang: String = "ru" override val lang: String = "ru"
override val supportsLatest: Boolean = true override val supportsLatest: Boolean = false
override val client: OkHttpClient = network.cloudflareClient override val client: OkHttpClient = network.cloudflareClient
// Popular // Popular
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/page/$page/", headers)
override fun popularMangaRequest(page: Int): Request = override fun popularMangaNextPageSelector(): String = "a i.icon-right-open"
GET("$baseUrl/f/order_by=news_read/order=desc/page/$page/", headers) override fun popularMangaSelector(): String = "div.shortstory"
override fun popularMangaNextPageSelector(): String? = "a i.glyphicon-chevron-right"
override fun popularMangaSelector(): String = "div#dle-content div.short-story"
override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply { override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply {
thumbnail_url = element.select("img").attr("abs:src") thumbnail_url = element.select("img").attr("abs:src")
element.select(".title > a").apply { element.select(".title > a").apply {
@ -43,12 +39,10 @@ class Mangaclub : ParsedHttpSource() {
} }
// Latest // Latest
override fun latestUpdatesRequest(page: Int): Request = popularMangaRequest(page)
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/page/$page/", headers) override fun latestUpdatesNextPageSelector(): String = popularMangaNextPageSelector()
override fun latestUpdatesNextPageSelector(): String? = popularMangaNextPageSelector()
override fun latestUpdatesSelector(): String = popularMangaSelector() override fun latestUpdatesSelector(): String = popularMangaSelector()
override fun latestUpdatesFromElement(element: Element): SManga = override fun latestUpdatesFromElement(element: Element): SManga = popularMangaFromElement(element)
popularMangaFromElement(element)
// Search // Search
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
@ -61,45 +55,28 @@ class Mangaclub : ParsedHttpSource() {
.add("result_from", ((page - 1) * 8 + 1).toString()) .add("result_from", ((page - 1) * 8 + 1).toString())
.add("story", query) .add("story", query)
.build() .build()
val searchHeaders = val searchHeaders = headers.newBuilder().add("Content-Type", "application/x-www-form-urlencoded").build()
headers.newBuilder().add("Content-Type", "application/x-www-form-urlencoded")
.build()
return POST("$baseUrl/index.php?do=search", searchHeaders, formBody) return POST("$baseUrl/index.php?do=search", searchHeaders, formBody)
} else {
val uri = Uri.parse(baseUrl).buildUpon()
.appendPath("f")
for (filter in filters) {
when (filter) {
is Categories -> if (filter.state > 0) uri.appendEncodedPath("cat=${categoriesArray[filter.state].second}")
is Status -> if (filter.values[filter.state].isNotEmpty()) uri.appendEncodedPath(
"status_translation=${filter.values[filter.state]}"
)
is Tag -> if (filter.values[filter.state].isNotEmpty()) uri.appendEncodedPath("m.tags=${filter.values[filter.state]}")
is Sort ->
if (filter.state != null) {
if (filter.state!!.ascending) {
uri.appendEncodedPath("order_by=${sortables[filter.state!!.index].second}")
.appendEncodedPath("order=asc")
} else {
uri.appendEncodedPath("order_by=${sortables[filter.state!!.index].second}")
.appendEncodedPath("order=desc")
}
}
}
}
uri.appendPath("page")
.appendPath(page.toString())
return GET(uri.toString(), headers)
} }
val uri = Uri.parse(baseUrl).buildUpon()
for (filter in filters) {
if (filter is Tag && filter.values[filter.state].isNotEmpty()) {
uri.appendEncodedPath("tags/${filter.values[filter.state]}")
}
}
uri.appendPath("page").appendPath(page.toString())
return GET(uri.toString(), headers)
} }
override fun searchMangaNextPageSelector(): String? = popularMangaNextPageSelector() override fun searchMangaNextPageSelector(): String = popularMangaNextPageSelector()
override fun searchMangaSelector(): String = popularMangaSelector() override fun searchMangaSelector(): String = popularMangaSelector()
override fun searchMangaFromElement(element: Element): SManga = popularMangaFromElement(element) override fun searchMangaFromElement(element: Element): SManga = popularMangaFromElement(element)
// Details // Details
override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply { override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
thumbnail_url = document.select("img[title].img-responsive").attr("abs:src") thumbnail_url = document.select("div.image img").attr("abs:src")
title = document.select(".title").text().substringBefore("/").trim() title = document.select(".title").text().substringBefore("/").trim()
author = document.select("a[href*=author]").text().trim() author = document.select("a[href*=author]").text().trim()
artist = author artist = author
@ -108,18 +85,18 @@ class Mangaclub : ParsedHttpSource() {
"Завершен" -> SManga.COMPLETED "Завершен" -> SManga.COMPLETED
else -> SManga.UNKNOWN else -> SManga.UNKNOWN
} }
description = document.select("div.description_manga").text().trim() description = document.select("div.description").text().trim()
genre = document.select("div.more-info a[href*=tags]").joinToString(", ") { it.text() } genre = document.select("div.info a[href*=tags]").joinToString(", ") { it.text() }
} }
// Chapters // Chapters
override fun chapterListSelector(): String = ".chapter-main" override fun chapterListSelector(): String = ".chapter-item"
override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply { override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
name = element.select(".chapter-main .chapter-namber a").text().trim() val link = element.select("a")
name = link.text().trim()
chapter_number = name.substringAfter("Глава").replace(",", ".").trim().toFloat() chapter_number = name.substringAfter("Глава").replace(",", ".").trim().toFloat()
setUrlWithoutDomain(element.select(".chapter-main .chapter-namber a").attr("abs:href")) setUrlWithoutDomain(link.attr("abs:href"))
date_upload = parseDate(element.select(".chapter-date").text().trim()) date_upload = parseDate(element.select(".date").text().trim())
} }
private fun parseDate(date: String): Long { private fun parseDate(date: String): Long {
@ -154,10 +131,7 @@ class Mangaclub : ParsedHttpSource() {
override fun getFilterList() = FilterList( override fun getFilterList() = FilterList(
Filter.Header("NOTE: Filters are ignored if using text search."), Filter.Header("NOTE: Filters are ignored if using text search."),
Categories(categoriesArray), Tag(tag)
Status(),
Tag(tag),
Sort(sortables)
) )
private val categoriesArray = arrayOf( private val categoriesArray = arrayOf(