[Ru] Mangaclub. Site rework (#5362)
Co-authored-by: pavkazzz <me@pavkazzz.ru>
This commit is contained in:
@ -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'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun searchMangaNextPageSelector(): String? = popularMangaNextPageSelector()
|
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 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(
|
||||||
|
Reference in New Issue
Block a user