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:
Claudemirovsky
2023-04-01 10:47:55 -03:00
committed by GitHub
parent d112037742
commit a3c7399863
3 changed files with 53 additions and 66 deletions

View File

@ -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
} }

View File

@ -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")

View File

@ -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,