Vizer.tv(pt): Fix episode list + refactor (#1457)
* fix: Fix error when serializing episodes list * refactor: General refactoration * chore: Bump version
This commit is contained in:
@ -6,7 +6,7 @@ ext {
|
|||||||
extName = 'Vizer.tv'
|
extName = 'Vizer.tv'
|
||||||
pkgNameSuffix = 'pt.vizer'
|
pkgNameSuffix = 'pt.vizer'
|
||||||
extClass = '.Vizer'
|
extClass = '.Vizer'
|
||||||
extVersionCode = 6
|
extVersionCode = 7
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
containsNsfw = true
|
containsNsfw = true
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import android.app.Application
|
|||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
|
import eu.kanade.tachiyomi.animeextension.pt.vizer.VizerFilters.FilterSearchParams
|
||||||
import eu.kanade.tachiyomi.animeextension.pt.vizer.dto.EpisodeListDto
|
import eu.kanade.tachiyomi.animeextension.pt.vizer.dto.EpisodeListDto
|
||||||
import eu.kanade.tachiyomi.animeextension.pt.vizer.dto.PlayersDto
|
import eu.kanade.tachiyomi.animeextension.pt.vizer.dto.PlayersDto
|
||||||
import eu.kanade.tachiyomi.animeextension.pt.vizer.dto.SearchItemDto
|
import eu.kanade.tachiyomi.animeextension.pt.vizer.dto.SearchItemDto
|
||||||
@ -26,7 +27,7 @@ import eu.kanade.tachiyomi.network.asObservableSuccess
|
|||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import kotlinx.serialization.decodeFromString
|
import kotlinx.serialization.decodeFromString
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||||
import okhttp3.MediaType.Companion.toMediaType
|
import okhttp3.MediaType.Companion.toMediaType
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
@ -61,20 +62,13 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
// ============================== Popular ===============================
|
// ============================== Popular ===============================
|
||||||
|
|
||||||
override fun popularAnimeRequest(page: Int): Request {
|
override fun popularAnimeRequest(page: Int): Request {
|
||||||
val initialUrl = "$API_URL/ajaxPagination.php?categoryFilterOrderBy=vzViews&page=${page - 1}&categoryFilterOrderWay=desc&categoryFilterYearMin=1950&categoryFilterYearMax=2022"
|
val pageType = preferences.getString(PREF_POPULAR_PAGE_KEY, PREF_POPULAR_PAGE_DEFAULT)!!
|
||||||
val pageType = preferences.getString(PREF_POPULAR_PAGE_KEY, "movie")!!
|
val params = FilterSearchParams(
|
||||||
val finalUrl = if ("movie" in pageType) {
|
orderBy = "vzViews",
|
||||||
initialUrl + "&saga=0&categoriesListMovies=all"
|
orderWay = "desc",
|
||||||
} else {
|
type = pageType,
|
||||||
(initialUrl + "&categoriesListSeries=all").let {
|
)
|
||||||
if ("anime" in pageType) {
|
return searchAnimeRequest(page, "", params)
|
||||||
it + "&anime=1"
|
|
||||||
} else {
|
|
||||||
it + "&anime=0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return GET(finalUrl)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun popularAnimeParse(response: Response): AnimesPage {
|
override fun popularAnimeParse(response: Response): AnimesPage {
|
||||||
@ -164,8 +158,8 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
.execute()
|
.execute()
|
||||||
.parseAs<PlayersDto>()
|
.parseAs<PlayersDto>()
|
||||||
val langPrefix = if (videoObj.lang == "1") "LEG" else "DUB"
|
val langPrefix = if (videoObj.lang == "1") "LEG" else "DUB"
|
||||||
val videoList = players.iterator().mapNotNull loop@{ (name, status) ->
|
val videoList = players.iterator().mapNotNull { (name, status) ->
|
||||||
if (status == "0") return@loop null
|
if (status == "0") return@mapNotNull null
|
||||||
val url = getPlayerUrl(videoObj.id, name)
|
val url = getPlayerUrl(videoObj.id, name)
|
||||||
when (name) {
|
when (name) {
|
||||||
"mixdrop" ->
|
"mixdrop" ->
|
||||||
@ -200,12 +194,7 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
searchAnimeByPathParse(response, path)
|
searchAnimeByPathParse(response, path)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val params = VizerFilters.getSearchParameters(filters)
|
super.fetchSearchAnime(page, query, filters)
|
||||||
client.newCall(searchAnimeRequest(page - 1, query, params))
|
|
||||||
.asObservableSuccess()
|
|
||||||
.map { response ->
|
|
||||||
searchAnimeParse(response)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,26 +204,33 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
return AnimesPage(listOf(details), false)
|
return AnimesPage(listOf(details), false)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request = throw Exception("not used")
|
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
|
||||||
|
val params = VizerFilters.getSearchParameters(filters)
|
||||||
|
return searchAnimeRequest(page, query, params)
|
||||||
|
}
|
||||||
|
|
||||||
private fun searchAnimeRequest(page: Int, query: String, filters: VizerFilters.FilterSearchParams): Request {
|
private fun searchAnimeRequest(page: Int, query: String, params: FilterSearchParams): Request {
|
||||||
val urlBuilder = "$API_URL/ajaxPagination.php".toHttpUrlOrNull()!!.newBuilder()
|
val urlBuilder = "$API_URL/ajaxPagination.php".toHttpUrl().newBuilder()
|
||||||
.addQueryParameter("page", page.toString())
|
.addQueryParameter("page", "${page - 1}")
|
||||||
.addQueryParameter("search", query)
|
.addQueryParameter("categoryFilterYearMin", params.minYear)
|
||||||
.addQueryParameter("saga", "0")
|
.addQueryParameter("categoryFilterYearMax", params.maxYear)
|
||||||
.addQueryParameter("categoryFilterYearMin", filters.minYear)
|
.addQueryParameter("categoryFilterOrderBy", params.orderBy)
|
||||||
.addQueryParameter("categoryFilterYearMax", filters.maxYear)
|
.addQueryParameter("categoryFilterOrderWay", params.orderWay)
|
||||||
.addQueryParameter("categoryFilterOrderBy", filters.orderBy)
|
.apply {
|
||||||
.addQueryParameter("categoryFilterOrderWay", filters.orderWay)
|
if (query.isNotBlank()) addQueryParameter("search", query)
|
||||||
|
|
||||||
if (filters.type == "Movies") {
|
when (params.type) {
|
||||||
urlBuilder.addQueryParameter("categoriesListMovies", filters.genre)
|
"Movies" -> {
|
||||||
} else {
|
addQueryParameter("saga", "0")
|
||||||
urlBuilder.addQueryParameter("categoriesListSeries", filters.genre)
|
addQueryParameter("categoriesListMovies", params.genre)
|
||||||
}
|
}
|
||||||
if (filters.type == "anime") {
|
else -> {
|
||||||
urlBuilder.addQueryParameter("anime", "1")
|
addQueryParameter("categoriesListSeries", params.genre)
|
||||||
}
|
val isAnime = params.type == "anime"
|
||||||
|
addQueryParameter("anime", if (isAnime) "1" else "0")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return GET(urlBuilder.build().toString(), headers)
|
return GET(urlBuilder.build().toString(), headers)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -271,7 +267,7 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
title = PREF_POPULAR_PAGE_TITLE
|
title = PREF_POPULAR_PAGE_TITLE
|
||||||
entries = PREF_POPULAR_PAGE_ENTRIES
|
entries = PREF_POPULAR_PAGE_ENTRIES
|
||||||
entryValues = PREF_POPULAR_PAGE_VALUES
|
entryValues = PREF_POPULAR_PAGE_VALUES
|
||||||
setDefaultValue("anime")
|
setDefaultValue(PREF_POPULAR_PAGE_DEFAULT)
|
||||||
summary = "%s"
|
summary = "%s"
|
||||||
setOnPreferenceChangeListener { _, newValue ->
|
setOnPreferenceChangeListener { _, newValue ->
|
||||||
val selected = newValue as String
|
val selected = newValue as String
|
||||||
@ -286,7 +282,7 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
title = PREF_PLAYER_TITLE
|
title = PREF_PLAYER_TITLE
|
||||||
entries = PREF_PLAYER_ARRAY
|
entries = PREF_PLAYER_ARRAY
|
||||||
entryValues = PREF_PLAYER_ARRAY
|
entryValues = PREF_PLAYER_ARRAY
|
||||||
setDefaultValue("MixDrop")
|
setDefaultValue(PREF_PLAYER_DEFAULT)
|
||||||
summary = "%s"
|
summary = "%s"
|
||||||
setOnPreferenceChangeListener { _, newValue ->
|
setOnPreferenceChangeListener { _, newValue ->
|
||||||
val selected = newValue as String
|
val selected = newValue as String
|
||||||
@ -301,7 +297,7 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
title = PREF_LANGUAGE_TITLE
|
title = PREF_LANGUAGE_TITLE
|
||||||
entries = PREF_LANGUAGE_ENTRIES
|
entries = PREF_LANGUAGE_ENTRIES
|
||||||
entryValues = PREF_LANGUAGE_VALUES
|
entryValues = PREF_LANGUAGE_VALUES
|
||||||
setDefaultValue("LEG")
|
setDefaultValue(PREF_LANGUAGE_DEFAULT)
|
||||||
summary = "%s"
|
summary = "%s"
|
||||||
setOnPreferenceChangeListener { _, newValue ->
|
setOnPreferenceChangeListener { _, newValue ->
|
||||||
val selected = newValue as String
|
val selected = newValue as String
|
||||||
@ -326,30 +322,19 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
|
|
||||||
private fun apiRequest(body: String): Request {
|
private fun apiRequest(body: String): Request {
|
||||||
val reqBody = body.toRequestBody("application/x-www-form-urlencoded".toMediaType())
|
val reqBody = body.toRequestBody("application/x-www-form-urlencoded".toMediaType())
|
||||||
val newHeaders = headersBuilder().add("x-requested-with", "XMLHttpRequest")
|
val newHeaders = headersBuilder().add("x-requested-with", "XMLHttpRequest").build()
|
||||||
.build()
|
|
||||||
return POST("$API_URL/publicFunctions.php", newHeaders, body = reqBody)
|
return POST("$API_URL/publicFunctions.php", newHeaders, body = reqBody)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun List<Video>.sortIfContains(item: String): List<Video> {
|
|
||||||
val newList = mutableListOf<Video>()
|
|
||||||
var preferred = 0
|
|
||||||
for (video in this) {
|
|
||||||
if (item in video.quality) {
|
|
||||||
newList.add(preferred, video)
|
|
||||||
preferred++
|
|
||||||
} else {
|
|
||||||
newList.add(video)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return newList
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun List<Video>.sort(): List<Video> {
|
override fun List<Video>.sort(): List<Video> {
|
||||||
val player = preferences.getString(PREF_PLAYER_KEY, "MixDrop")!!
|
val player = preferences.getString(PREF_PLAYER_KEY, PREF_PLAYER_DEFAULT)!!
|
||||||
val language = preferences.getString(PREF_LANGUAGE_KEY, "LEG")!!
|
val language = preferences.getString(PREF_LANGUAGE_KEY, PREF_LANGUAGE_DEFAULT)!!
|
||||||
val newList = this.sortIfContains(language).sortIfContains(player)
|
return sortedWith(
|
||||||
return newList
|
compareBy(
|
||||||
|
{ it.quality.contains(player) },
|
||||||
|
{ it.quality.contains(language) },
|
||||||
|
),
|
||||||
|
).reversed()
|
||||||
}
|
}
|
||||||
|
|
||||||
private inline fun <reified T> Response.parseAs(): T {
|
private inline fun <reified T> Response.parseAs(): T {
|
||||||
@ -359,6 +344,7 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val PREF_POPULAR_PAGE_KEY = "pref_popular_page"
|
private const val PREF_POPULAR_PAGE_KEY = "pref_popular_page"
|
||||||
|
private const val PREF_POPULAR_PAGE_DEFAULT = "movie"
|
||||||
private const val PREF_POPULAR_PAGE_TITLE = "Página de Populares"
|
private const val PREF_POPULAR_PAGE_TITLE = "Página de Populares"
|
||||||
private val PREF_POPULAR_PAGE_ENTRIES = arrayOf(
|
private val PREF_POPULAR_PAGE_ENTRIES = arrayOf(
|
||||||
"Animes",
|
"Animes",
|
||||||
@ -372,6 +358,7 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
private const val PREF_PLAYER_KEY = "pref_player"
|
private const val PREF_PLAYER_KEY = "pref_player"
|
||||||
|
private const val PREF_PLAYER_DEFAULT = "MixDrop"
|
||||||
private const val PREF_PLAYER_TITLE = "Player/Server favorito"
|
private const val PREF_PLAYER_TITLE = "Player/Server favorito"
|
||||||
private val PREF_PLAYER_ARRAY = arrayOf(
|
private val PREF_PLAYER_ARRAY = arrayOf(
|
||||||
"MixDrop",
|
"MixDrop",
|
||||||
@ -380,6 +367,7 @@ class Vizer : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
private const val PREF_LANGUAGE_KEY = "pref_language"
|
private const val PREF_LANGUAGE_KEY = "pref_language"
|
||||||
|
private const val PREF_LANGUAGE_DEFAULT = "LEG"
|
||||||
private const val PREF_LANGUAGE_TITLE = "Língua/tipo preferido"
|
private const val PREF_LANGUAGE_TITLE = "Língua/tipo preferido"
|
||||||
private val PREF_LANGUAGE_ENTRIES = arrayOf("Legendado", "Dublado")
|
private val PREF_LANGUAGE_ENTRIES = arrayOf("Legendado", "Dublado")
|
||||||
private val PREF_LANGUAGE_VALUES = arrayOf("LEG", "DUB")
|
private val PREF_LANGUAGE_VALUES = arrayOf("LEG", "DUB")
|
||||||
|
@ -37,7 +37,6 @@ data class EpisodeListDto(
|
|||||||
@Serializable
|
@Serializable
|
||||||
data class EpisodeItemDto(
|
data class EpisodeItemDto(
|
||||||
val id: String,
|
val id: String,
|
||||||
val img: String,
|
|
||||||
val name: String,
|
val name: String,
|
||||||
val released: Boolean,
|
val released: Boolean,
|
||||||
val title: String,
|
val title: String,
|
||||||
|
Reference in New Issue
Block a user