From b891ee94be9212c14634f62aa573e8ff63c01212 Mon Sep 17 00:00:00 2001 From: Alessandro Jean Date: Mon, 10 Aug 2020 03:29:56 -0300 Subject: [PATCH] Add content type filter to MangaLivre. (#4062) --- src/pt/mangasproject/build.gradle | 2 +- .../pt/mangasproject/MangasProject.kt | 8 +-- .../pt/mangasproject/MangasProjectFactory.kt | 62 ++++++++++++++++++- 3 files changed, 66 insertions(+), 6 deletions(-) diff --git a/src/pt/mangasproject/build.gradle b/src/pt/mangasproject/build.gradle index 931f2eccf..9db9952bd 100644 --- a/src/pt/mangasproject/build.gradle +++ b/src/pt/mangasproject/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'mangásPROJECT' pkgNameSuffix = 'pt.mangasproject' extClass = '.MangasProjectFactory' - extVersionCode = 12 + extVersionCode = 13 libVersion = '1.2' } diff --git a/src/pt/mangasproject/src/eu/kanade/tachiyomi/extension/pt/mangasproject/MangasProject.kt b/src/pt/mangasproject/src/eu/kanade/tachiyomi/extension/pt/mangasproject/MangasProject.kt index db8536efd..b7cdc5ec7 100644 --- a/src/pt/mangasproject/src/eu/kanade/tachiyomi/extension/pt/mangasproject/MangasProject.kt +++ b/src/pt/mangasproject/src/eu/kanade/tachiyomi/extension/pt/mangasproject/MangasProject.kt @@ -54,10 +54,10 @@ abstract class MangasProject( .add("Accept", ACCEPT_JSON) .add("X-Requested-With", "XMLHttpRequest") - private val sourceHeaders: Headers by lazy { sourceHeadersBuilder().build() } + protected val sourceHeaders: Headers by lazy { sourceHeadersBuilder().build() } override fun popularMangaRequest(page: Int): Request { - return GET("$baseUrl/home/most_read?page=$page", sourceHeaders) + return GET("$baseUrl/home/most_read?page=$page&type=", sourceHeaders) } override fun popularMangaParse(response: Response): MangasPage { @@ -78,7 +78,7 @@ abstract class MangasProject( } override fun latestUpdatesRequest(page: Int): Request { - return GET("$baseUrl/home/releases?page=$page", sourceHeaders) + return GET("$baseUrl/home/releases?page=$page&type=", sourceHeaders) } override fun latestUpdatesParse(response: Response): MangasPage { @@ -311,7 +311,7 @@ abstract class MangasProject( companion object { private const val ACCEPT_JSON = "application/json, text/javascript, */*; q=0.01" - private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36" + private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36" private val JSON_PARSER by lazy { JsonParser() } diff --git a/src/pt/mangasproject/src/eu/kanade/tachiyomi/extension/pt/mangasproject/MangasProjectFactory.kt b/src/pt/mangasproject/src/eu/kanade/tachiyomi/extension/pt/mangasproject/MangasProjectFactory.kt index 846b83df3..a0d3f126d 100644 --- a/src/pt/mangasproject/src/eu/kanade/tachiyomi/extension/pt/mangasproject/MangasProjectFactory.kt +++ b/src/pt/mangasproject/src/eu/kanade/tachiyomi/extension/pt/mangasproject/MangasProjectFactory.kt @@ -1,7 +1,13 @@ package eu.kanade.tachiyomi.extension.pt.mangasproject +import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceFactory +import eu.kanade.tachiyomi.source.model.Filter +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.MangasPage +import okhttp3.Request +import okhttp3.Response class MangasProjectFactory : SourceFactory { override fun createSources(): List = listOf( @@ -18,7 +24,61 @@ class LeitorNet : MangasProject("Leitor.net", "https://leitor.net") { override val id: Long = 2225174659569980836 } -class MangaLivre : MangasProject("MangaLivre", "https://mangalivre.net") { +class MangaLivre : MangasProject("Mangá Livre", "https://mangalivre.net") { // Hardcode the id because the language wasn't specific. override val id: Long = 4762777556012432014 + + override fun popularMangaRequest(page: Int): Request { + val originalRequestUrl = super.popularMangaRequest(page).url().toString() + return GET(originalRequestUrl + DEFAULT_TYPE, sourceHeaders) + } + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + if (query.isNotEmpty()) { + return super.searchMangaRequest(page, query, filters) + } + + val popularRequestUrl = super.popularMangaRequest(page).url().toString() + val type = filters.filterIsInstance() + .firstOrNull()?.selected?.value ?: DEFAULT_TYPE + + return GET(popularRequestUrl + type, sourceHeaders) + } + + override fun searchMangaParse(response: Response): MangasPage { + if (response.request().url().pathSegments().contains("search")) { + return super.searchMangaParse(response) + } + + return popularMangaParse(response) + } + + private fun getContentTypes(): List = listOf( + ContentType("Mangás", "manga"), + ContentType("Manhuas", "manhua"), + ContentType("Webtoons", "webtoon"), + ContentType("Novels", "novel"), + ContentType("Todos", "") + ) + + private data class ContentType(val name: String, val value: String) { + override fun toString() = name + } + + private class TypeFilter(contentTypes: List) : + Filter.Select("Tipo de conteúdo", contentTypes.toTypedArray()) { + + val selected: ContentType + get() = values[state] + } + + override fun getFilterList(): FilterList = FilterList( + Filter.Header(FILTER_WARNING), + TypeFilter(getContentTypes()) + ) + + companion object { + private const val FILTER_WARNING = "O filtro abaixo é ignorado durante a busca!" + private const val DEFAULT_TYPE = "manga" + } }