Add content type filter to MangaLivre. (#4062)
This commit is contained in:
parent
dcd2ca2937
commit
b891ee94be
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'mangásPROJECT'
|
extName = 'mangásPROJECT'
|
||||||
pkgNameSuffix = 'pt.mangasproject'
|
pkgNameSuffix = 'pt.mangasproject'
|
||||||
extClass = '.MangasProjectFactory'
|
extClass = '.MangasProjectFactory'
|
||||||
extVersionCode = 12
|
extVersionCode = 13
|
||||||
libVersion = '1.2'
|
libVersion = '1.2'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,10 +54,10 @@ abstract class MangasProject(
|
|||||||
.add("Accept", ACCEPT_JSON)
|
.add("Accept", ACCEPT_JSON)
|
||||||
.add("X-Requested-With", "XMLHttpRequest")
|
.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 {
|
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 {
|
override fun popularMangaParse(response: Response): MangasPage {
|
||||||
@ -78,7 +78,7 @@ abstract class MangasProject(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun latestUpdatesRequest(page: Int): Request {
|
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 {
|
override fun latestUpdatesParse(response: Response): MangasPage {
|
||||||
@ -311,7 +311,7 @@ abstract class MangasProject(
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val ACCEPT_JSON = "application/json, text/javascript, */*; q=0.01"
|
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() }
|
private val JSON_PARSER by lazy { JsonParser() }
|
||||||
|
|
||||||
|
@ -1,7 +1,13 @@
|
|||||||
package eu.kanade.tachiyomi.extension.pt.mangasproject
|
package eu.kanade.tachiyomi.extension.pt.mangasproject
|
||||||
|
|
||||||
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.source.Source
|
import eu.kanade.tachiyomi.source.Source
|
||||||
import eu.kanade.tachiyomi.source.SourceFactory
|
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 {
|
class MangasProjectFactory : SourceFactory {
|
||||||
override fun createSources(): List<Source> = listOf(
|
override fun createSources(): List<Source> = listOf(
|
||||||
@ -18,7 +24,61 @@ class LeitorNet : MangasProject("Leitor.net", "https://leitor.net") {
|
|||||||
override val id: Long = 2225174659569980836
|
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.
|
// Hardcode the id because the language wasn't specific.
|
||||||
override val id: Long = 4762777556012432014
|
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<TypeFilter>()
|
||||||
|
.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<ContentType> = 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<ContentType>) :
|
||||||
|
Filter.Select<ContentType>("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"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user