diff --git a/src/es/heavenmanga/build.gradle b/src/es/heavenmanga/build.gradle index 475dc6e20..037d65cf0 100644 --- a/src/es/heavenmanga/build.gradle +++ b/src/es/heavenmanga/build.gradle @@ -5,7 +5,7 @@ ext { appName = 'Tachiyomi: HeavenManga' pkgNameSuffix = 'es.heavenmanga' extClass = '.HeavenManga' - extVersionCode = 1 + extVersionCode = 2 libVersion = '1.2' } diff --git a/src/es/heavenmanga/src/eu/kanade/tachiyomi/extension/es/heavenmanga/HeavenManga.kt b/src/es/heavenmanga/src/eu/kanade/tachiyomi/extension/es/heavenmanga/HeavenManga.kt index 3a14685ac..0029a6cac 100644 --- a/src/es/heavenmanga/src/eu/kanade/tachiyomi/extension/es/heavenmanga/HeavenManga.kt +++ b/src/es/heavenmanga/src/eu/kanade/tachiyomi/extension/es/heavenmanga/HeavenManga.kt @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.extension.es.heavenmanga import android.util.Log import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.source.model.* import eu.kanade.tachiyomi.source.online.ParsedHttpSource import eu.kanade.tachiyomi.util.asJsoup @@ -10,6 +11,7 @@ import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.select.Elements import org.jsoup.nodes.Element +import rx.Observable import java.text.SimpleDateFormat import java.util.* @@ -36,6 +38,8 @@ class HeavenManga : ParsedHttpSource() { override fun latestUpdatesSelector() = "#container .ultimos_epis .not" override fun searchMangaSelector() = ".top.clearfix .cont_manga" + private fun novelaFilterSelector() = ".lstsradd" + private fun comicFilterSelector() = "section#related" override fun chapterListSelector() = "#mamain ul li" @@ -45,7 +49,7 @@ class HeavenManga : ParsedHttpSource() { override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() - override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() + override fun searchMangaNextPageSelector() = "li:contains(Siguiente):not([id=inactive])" override fun popularMangaRequest(page: Int) = GET("$baseUrl/top/", headers) @@ -53,7 +57,7 @@ class HeavenManga : ParsedHttpSource() { override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/", headers) override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val search_url = "$baseUrl/buscar/$query" + val search_url = "$baseUrl/buscar/$query.html" // Filter if(query.isBlank()) { @@ -116,10 +120,11 @@ class HeavenManga : ParsedHttpSource() { } override fun searchMangaFromElement(element: Element) = SManga.create().apply { + val figure = element.select("figure").attr("style") element.select("a").let { setUrlWithoutDomain(it.attr("href")) - title = it.select("header").text() - thumbnail_url = it.select("img").attr("src") + title = if(element.hasClass("titnom")) element.select(".titnom").text() else it.select("header").text() + thumbnail_url = if(element.select("figure").hasAttr("style")) figure.substring(figure.indexOf("http"), figure.indexOf(")") ) else it.select("img").attr("src") } } @@ -137,7 +142,36 @@ class HeavenManga : ParsedHttpSource() { return chapter } + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { + return client.newCall(searchMangaRequest(page, query, filters)) + .asObservableSuccess() + .map { response -> + searchMangaParse(response) + } + } + override fun searchMangaParse(response: Response): MangasPage { + val document = response.asJsoup() + var el: String + + if(document.select(novelaFilterSelector()).first() != null) { + el = novelaFilterSelector() + } else if (document.select(comicFilterSelector()).first() != null) { + el = comicFilterSelector() + } else { + el = searchMangaSelector() + } + + val mangas = document.select(el).map { element -> + searchMangaFromElement(element) + } + + val hasNextPage = searchMangaNextPageSelector()?.let { selector -> + document.select(selector).first() + } != null + + return MangasPage(mangas, hasNextPage) + } override fun mangaDetailsParse(document: Document) = SManga.create().apply { document.select(".left.home").let { val genres = it.select(".sinopsis a")?.map { @@ -320,7 +354,9 @@ class HeavenManga : ParsedHttpSource() { override fun getFilterList() = FilterList( // Search and filter don't work at the same time - Filter.Header("NOTE: Ignored if using text search!"), + Filter.Header("NOTA: Los filtros se ignoran si se utiliza la búsqueda de texto."), + Filter.Header("Sólo se puede utilizar un filtro a la vez."), + Filter.Separator(), GenreFilter(), AlphabeticoFilter(), ListaCompletasFilter()