|
|
|
@ -40,7 +40,8 @@ class FMReaderFactory : SourceFactory {
|
|
|
|
|
Manhwa18Net(),
|
|
|
|
|
Manhwa18NetRaw(),
|
|
|
|
|
MangaBorn(),
|
|
|
|
|
SayTruyen()
|
|
|
|
|
SayTruyen(),
|
|
|
|
|
EpikManga()
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -324,3 +325,43 @@ class SayTruyen : FMReader("Say Truyen", "https://saytruyen.com", "vi") {
|
|
|
|
|
}
|
|
|
|
|
override fun pageListParse(document: Document): List<Page> = super.pageListParse(document).onEach { it.imageUrl!!.trim() }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class EpikManga : FMReader("Epik Manga", "https://www.epikmanga.com", "tr") {
|
|
|
|
|
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/seri-listesi?sorting=views&sorting-type=DESC&Sayfa=$page", headers)
|
|
|
|
|
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/seri-listesi?sorting=lastUpdate&sorting-type=DESC&Sayfa=$page", headers)
|
|
|
|
|
override fun popularMangaNextPageSelector() = "ul.pagination li.active + li:not(.disabled)"
|
|
|
|
|
// search wasn't working on source's website
|
|
|
|
|
override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> {
|
|
|
|
|
return client.newCall(searchMangaRequest(page, query, filters))
|
|
|
|
|
.asObservableSuccess()
|
|
|
|
|
.map { response ->
|
|
|
|
|
searchMangaParse(response, query)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request = GET("$baseUrl/seri-listesi?type=text", headers)
|
|
|
|
|
private fun searchMangaParse(response: Response, query: String): MangasPage {
|
|
|
|
|
val mangas = response.asJsoup().select("div.char.col-lg-4 a")
|
|
|
|
|
.filter { it.text().contains(query, ignoreCase = true) }
|
|
|
|
|
.map {
|
|
|
|
|
SManga.create().apply {
|
|
|
|
|
setUrlWithoutDomain(it.attr("href"))
|
|
|
|
|
title = it.text()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return MangasPage(mangas, false)
|
|
|
|
|
}
|
|
|
|
|
override fun mangaDetailsParse(document: Document): SManga {
|
|
|
|
|
val infoElement = document.select("div.col-md-9 div.row").first()
|
|
|
|
|
|
|
|
|
|
return SManga.create().apply {
|
|
|
|
|
status = parseStatus(infoElement.select("h4:contains(Durum:)").firstOrNull()?.ownText())
|
|
|
|
|
author = infoElement.select("h4:contains(Yazar:)").firstOrNull()?.ownText()
|
|
|
|
|
artist = infoElement.select("h4:contains(Çizer:)").firstOrNull()?.ownText()
|
|
|
|
|
genre = infoElement.select("h4:contains(Türler:) a").joinToString { it.text() }
|
|
|
|
|
thumbnail_url = infoElement.select("img.thumbnail").imgAttr()
|
|
|
|
|
description = document.select("div.col-md-12 p").text()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
override fun chapterListSelector() = "table.table tbody tr"
|
|
|
|
|
override fun getFilterList(): FilterList = FilterList()
|
|
|
|
|
}
|
|
|
|
|