AllAnime: Remove hashes in favour of queries (#1438)
* Remove hashes in favour of queries * Add another trim beacuse why not
This commit is contained in:
@ -6,7 +6,7 @@ ext {
|
|||||||
extName = 'AllAnime'
|
extName = 'AllAnime'
|
||||||
pkgNameSuffix = 'en.allanime'
|
pkgNameSuffix = 'en.allanime'
|
||||||
extClass = '.AllAnime'
|
extClass = '.AllAnime'
|
||||||
extVersionCode = 14
|
extVersionCode = 15
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,10 +51,105 @@ class AllAnime : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
|
|
||||||
private val json: Json by injectLazy()
|
private val json: Json by injectLazy()
|
||||||
|
|
||||||
private val popularHash = "563c9c7c7fb5218aaf5562ad5d7cabb9ece03a36b4bc94f1384ba70709bd61da"
|
private val popularQuery = """
|
||||||
private val searchHash = "c4305f3918591071dfecd081da12243725364f6b7dd92072df09d915e390b1b7"
|
query(
|
||||||
private val _idHash = "259ae45c19ceff2f855215bb82d377fe7b0ab661f9abcd41538bda935e9cb299"
|
${'$'}type: VaildPopularTypeEnumType!
|
||||||
private val episodeHash = "919e327075ac9e249d003aa3f804a48bbdf22d7b1d107ffe659accd54283ce48"
|
${'$'}size: Int!
|
||||||
|
${'$'}page: Int
|
||||||
|
${'$'}dateRange: Int
|
||||||
|
) {
|
||||||
|
queryPopular(
|
||||||
|
type: ${'$'}type
|
||||||
|
size: ${'$'}size
|
||||||
|
dateRange: ${'$'}dateRange
|
||||||
|
page: ${'$'}page
|
||||||
|
) {
|
||||||
|
total
|
||||||
|
recommendations {
|
||||||
|
anyCard {
|
||||||
|
_id
|
||||||
|
name
|
||||||
|
thumbnail
|
||||||
|
englishName
|
||||||
|
nativeName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
""".trimIndent().trim()
|
||||||
|
|
||||||
|
private val searchQuery = """
|
||||||
|
query(
|
||||||
|
${'$'}search: SearchInput
|
||||||
|
${'$'}limit: Int
|
||||||
|
${'$'}page: Int
|
||||||
|
${'$'}translationType: VaildTranslationTypeEnumType
|
||||||
|
${'$'}countryOrigin: VaildCountryOriginEnumType
|
||||||
|
) {
|
||||||
|
shows(
|
||||||
|
search: ${'$'}search
|
||||||
|
limit: ${'$'}limit
|
||||||
|
page: ${'$'}page
|
||||||
|
translationType: ${'$'}translationType
|
||||||
|
countryOrigin: ${'$'}countryOrigin
|
||||||
|
) {
|
||||||
|
pageInfo {
|
||||||
|
total
|
||||||
|
}
|
||||||
|
edges {
|
||||||
|
_id
|
||||||
|
name
|
||||||
|
thumbnail
|
||||||
|
englishName
|
||||||
|
nativeName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
""".trimIndent().trim()
|
||||||
|
|
||||||
|
private val detailsQuery = """
|
||||||
|
query (${'$'}_id: String!) {
|
||||||
|
show(
|
||||||
|
_id: ${'$'}_id
|
||||||
|
) {
|
||||||
|
thumbnail
|
||||||
|
description
|
||||||
|
type
|
||||||
|
season
|
||||||
|
score
|
||||||
|
genres
|
||||||
|
status
|
||||||
|
studios
|
||||||
|
}
|
||||||
|
}
|
||||||
|
""".trimIndent().trim()
|
||||||
|
|
||||||
|
private val episodesQuery = """
|
||||||
|
query (${'$'}_id: String!) {
|
||||||
|
show(
|
||||||
|
_id: ${'$'}_id
|
||||||
|
) {
|
||||||
|
_id
|
||||||
|
availableEpisodesDetail
|
||||||
|
}
|
||||||
|
}
|
||||||
|
""".trimIndent().trim()
|
||||||
|
|
||||||
|
private val streamQuery = """
|
||||||
|
query(
|
||||||
|
${'$'}showId: String!,
|
||||||
|
${'$'}translationType: VaildTranslationTypeEnumType!,
|
||||||
|
${'$'}episodeString: String!
|
||||||
|
) {
|
||||||
|
episode(
|
||||||
|
showId: ${'$'}showId
|
||||||
|
translationType: ${'$'}translationType
|
||||||
|
episodeString: ${'$'}episodeString
|
||||||
|
) {
|
||||||
|
sourceUrls
|
||||||
|
}
|
||||||
|
}
|
||||||
|
""".trimIndent().trim()
|
||||||
|
|
||||||
private val preferences: SharedPreferences by lazy {
|
private val preferences: SharedPreferences by lazy {
|
||||||
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
|
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
|
||||||
@ -63,12 +158,11 @@ class AllAnime : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
// ============================== Popular ===============================
|
// ============================== Popular ===============================
|
||||||
|
|
||||||
override fun popularAnimeRequest(page: Int): Request {
|
override fun popularAnimeRequest(page: Int): Request {
|
||||||
val variables = """{"type":"anime","size":30,"dateRange":7,"page":$page,"allowAdult":false,"allowUnknown":false}"""
|
val variables = """{"type":"anime","size":26,"dateRange":7,"page":$page}"""
|
||||||
val extensions = """{"persistedQuery":{"version":1,"sha256Hash":"$popularHash"}}"""
|
|
||||||
val headers = headers.newBuilder()
|
val headers = headers.newBuilder()
|
||||||
.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0")
|
.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0")
|
||||||
.build()
|
.build()
|
||||||
return GET("$baseUrl/allanimeapi?variables=$variables&extensions=$extensions", headers = headers)
|
return GET("$baseUrl/allanimeapi?variables=$variables&query=$popularQuery", headers = headers)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun popularAnimeParse(response: Response): AnimesPage {
|
override fun popularAnimeParse(response: Response): AnimesPage {
|
||||||
@ -93,18 +187,17 @@ class AllAnime : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return AnimesPage(animeList, animeList.size == 30)
|
return AnimesPage(animeList, animeList.size == 26)
|
||||||
}
|
}
|
||||||
|
|
||||||
// =============================== Latest ===============================
|
// =============================== Latest ===============================
|
||||||
|
|
||||||
override fun latestUpdatesRequest(page: Int): Request {
|
override fun latestUpdatesRequest(page: Int): Request {
|
||||||
val variables = """{"search":{"allowAdult":false,"allowUnknown":false},"limit":26,"page":$page,"translationType":"${preferences.getString("preferred_sub", "sub")!!}","countryOrigin":"ALL"}"""
|
val variables = """{"search":{"allowAdult":false,"allowUnknown":false},"limit":26,"page":$page,"translationType":"${preferences.getString("preferred_sub", "sub")!!}","countryOrigin":"ALL"}"""
|
||||||
val extensions = """{"persistedQuery":{"version":1,"sha256Hash":"$searchHash"}}"""
|
|
||||||
val headers = headers.newBuilder()
|
val headers = headers.newBuilder()
|
||||||
.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0")
|
.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0")
|
||||||
.build()
|
.build()
|
||||||
return GET("$baseUrl/allanimeapi?variables=$variables&extensions=$extensions", headers = headers)
|
return GET("$baseUrl/allanimeapi?variables=$variables&query=$searchQuery", headers = headers)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun latestUpdatesParse(response: Response): AnimesPage {
|
override fun latestUpdatesParse(response: Response): AnimesPage {
|
||||||
@ -127,11 +220,10 @@ class AllAnime : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
private fun searchAnimeRequest(page: Int, query: String, filters: AllAnimeFilters.FilterSearchParams): Request {
|
private fun searchAnimeRequest(page: Int, query: String, filters: AllAnimeFilters.FilterSearchParams): Request {
|
||||||
return if (query.isNotEmpty()) {
|
return if (query.isNotEmpty()) {
|
||||||
val variables = """{"search":{"query":"$query","allowAdult":false,"allowUnknown":false},"limit":26,"page":$page,"translationType":"${preferences.getString("preferred_sub", "sub")!!}","countryOrigin":"ALL"}"""
|
val variables = """{"search":{"query":"$query","allowAdult":false,"allowUnknown":false},"limit":26,"page":$page,"translationType":"${preferences.getString("preferred_sub", "sub")!!}","countryOrigin":"ALL"}"""
|
||||||
val extensions = """{"persistedQuery":{"version":1,"sha256Hash":"$searchHash"}}"""
|
|
||||||
val headers = headers.newBuilder()
|
val headers = headers.newBuilder()
|
||||||
.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0")
|
.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0")
|
||||||
.build()
|
.build()
|
||||||
GET("$baseUrl/allanimeapi?variables=$variables&extensions=$extensions", headers = headers)
|
GET("$baseUrl/allanimeapi?variables=$variables&query=$searchQuery", headers = headers)
|
||||||
} else {
|
} else {
|
||||||
val seasonString = if (filters.season == "all") "" else ""","season":"${filters.season}""""
|
val seasonString = if (filters.season == "all") "" else ""","season":"${filters.season}""""
|
||||||
val yearString = if (filters.releaseYear == "all") "" else ""","year":${filters.releaseYear}"""
|
val yearString = if (filters.releaseYear == "all") "" else ""","year":${filters.releaseYear}"""
|
||||||
@ -142,11 +234,10 @@ class AllAnime : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
var variables = """{"search":{"allowAdult":false,"allowUnknown":false$seasonString$yearString$genresString$typesString$sortByString"""
|
var variables = """{"search":{"allowAdult":false,"allowUnknown":false$seasonString$yearString$genresString$typesString$sortByString"""
|
||||||
variables += """},"limit":26,"page":$page,"translationType":"${preferences.getString("preferred_sub", "sub")!!}","countryOrigin":"${filters.origin}"}"""
|
variables += """},"limit":26,"page":$page,"translationType":"${preferences.getString("preferred_sub", "sub")!!}","countryOrigin":"${filters.origin}"}"""
|
||||||
|
|
||||||
val extensions = """{"persistedQuery":{"version":1,"sha256Hash":"$searchHash"}}"""
|
|
||||||
val headers = headers.newBuilder()
|
val headers = headers.newBuilder()
|
||||||
.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0")
|
.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0")
|
||||||
.build()
|
.build()
|
||||||
GET("$baseUrl/allanimeapi?variables=$variables&extensions=$extensions", headers = headers)
|
GET("$baseUrl/allanimeapi?variables=$variables&query=$searchQuery", headers = headers)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,15 +261,14 @@ class AllAnime : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
|
|
||||||
override fun animeDetailsRequest(anime: SAnime): Request {
|
override fun animeDetailsRequest(anime: SAnime): Request {
|
||||||
val variables = """{"_id":"${anime.url}"}"""
|
val variables = """{"_id":"${anime.url}"}"""
|
||||||
val extensions = """{"persistedQuery":{"version":1,"sha256Hash":"$_idHash"}}"""
|
|
||||||
val headers = headers.newBuilder()
|
val headers = headers.newBuilder()
|
||||||
.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0")
|
.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0")
|
||||||
.build()
|
.build()
|
||||||
return GET("$baseUrl/allanimeapi?variables=$variables&extensions=$extensions", headers = headers)
|
return GET("$baseUrl/allanimeapi?variables=$variables&query=$detailsQuery", headers = headers)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun animeDetailsParse(response: Response, animeOld: SAnime): SAnime {
|
private fun animeDetailsParse(response: Response, animeOld: SAnime): SAnime {
|
||||||
val show = json.decodeFromString<SeriesResult>(response.body.string()).data.show
|
val show = json.decodeFromString<DetailsResult>(response.body.string()).data.show
|
||||||
val anime = SAnime.create()
|
val anime = SAnime.create()
|
||||||
|
|
||||||
anime.title = animeOld.title
|
anime.title = animeOld.title
|
||||||
@ -203,11 +293,10 @@ class AllAnime : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
|
|
||||||
override fun episodeListRequest(anime: SAnime): Request {
|
override fun episodeListRequest(anime: SAnime): Request {
|
||||||
val variables = """{"_id":"${anime.url}"}"""
|
val variables = """{"_id":"${anime.url}"}"""
|
||||||
val extensions = """{"persistedQuery":{"version":1,"sha256Hash":"$_idHash"}}"""
|
|
||||||
val headers = headers.newBuilder()
|
val headers = headers.newBuilder()
|
||||||
.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0")
|
.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0")
|
||||||
.build()
|
.build()
|
||||||
return GET("$baseUrl/allanimeapi?variables=$variables&extensions=$extensions", headers = headers)
|
return GET("$baseUrl/allanimeapi?variables=$variables&query=$episodesQuery", headers = headers)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun episodeListParse(response: Response): List<SEpisode> {
|
override fun episodeListParse(response: Response): List<SEpisode> {
|
||||||
@ -224,8 +313,7 @@ class AllAnime : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
episode.name = "Episode $numName (sub)"
|
episode.name = "Episode $numName (sub)"
|
||||||
|
|
||||||
val variables = """{"showId":"${medias.data.show._id}","translationType":"sub","episodeString":"$ep"}"""
|
val variables = """{"showId":"${medias.data.show._id}","translationType":"sub","episodeString":"$ep"}"""
|
||||||
val extensions = """{"persistedQuery":{"version":1,"sha256Hash":"$episodeHash"}}"""
|
episode.setUrlWithoutDomain("/allanimeapi?variables=$variables&query=$streamQuery")
|
||||||
episode.setUrlWithoutDomain("/allanimeapi?variables=$variables&extensions=$extensions")
|
|
||||||
episodeList.add(episode)
|
episodeList.add(episode)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -236,8 +324,7 @@ class AllAnime : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
episode.name = "Episode $numName (dub)"
|
episode.name = "Episode $numName (dub)"
|
||||||
|
|
||||||
val variables = """{"showId":"${medias.data.show._id}","translationType":"dub","episodeString":"$ep"}"""
|
val variables = """{"showId":"${medias.data.show._id}","translationType":"dub","episodeString":"$ep"}"""
|
||||||
val extensions = """{"persistedQuery":{"version":1,"sha256Hash":"$episodeHash"}}"""
|
episode.setUrlWithoutDomain("/allanimeapi?variables=$variables&query=$streamQuery")
|
||||||
episode.setUrlWithoutDomain("/allanimeapi?variables=$variables&extensions=$extensions")
|
|
||||||
episodeList.add(episode)
|
episodeList.add(episode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,6 +55,34 @@ data class SearchResult(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
data class DetailsResult(
|
||||||
|
val data: DataShow,
|
||||||
|
) {
|
||||||
|
@Serializable
|
||||||
|
data class DataShow(
|
||||||
|
val show: SeriesShows,
|
||||||
|
) {
|
||||||
|
@Serializable
|
||||||
|
data class SeriesShows(
|
||||||
|
val thumbnail: String,
|
||||||
|
val genres: List<String>? = null,
|
||||||
|
val studios: List<String>? = null,
|
||||||
|
val season: AirSeason? = null,
|
||||||
|
val status: String? = null,
|
||||||
|
val score: Float? = null,
|
||||||
|
val type: String? = null,
|
||||||
|
val description: String? = null,
|
||||||
|
) {
|
||||||
|
@Serializable
|
||||||
|
data class AirSeason(
|
||||||
|
val quarter: String,
|
||||||
|
val year: Int,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class SeriesResult(
|
data class SeriesResult(
|
||||||
val data: DataShow,
|
val data: DataShow,
|
||||||
@ -66,15 +94,6 @@ data class SeriesResult(
|
|||||||
@Serializable
|
@Serializable
|
||||||
data class SeriesShows(
|
data class SeriesShows(
|
||||||
val _id: String,
|
val _id: String,
|
||||||
val name: String,
|
|
||||||
val thumbnail: String,
|
|
||||||
val genres: List<String>? = null,
|
|
||||||
val studios: List<String>? = null,
|
|
||||||
val season: AirSeason? = null,
|
|
||||||
val status: String? = null,
|
|
||||||
val score: Float? = null,
|
|
||||||
val type: String? = null,
|
|
||||||
val description: String? = null,
|
|
||||||
val availableEpisodesDetail: AvailableEps,
|
val availableEpisodesDetail: AvailableEps,
|
||||||
) {
|
) {
|
||||||
@Serializable
|
@Serializable
|
||||||
@ -82,12 +101,6 @@ data class SeriesResult(
|
|||||||
val sub: List<String>? = null,
|
val sub: List<String>? = null,
|
||||||
val dub: List<String>? = null,
|
val dub: List<String>? = null,
|
||||||
)
|
)
|
||||||
|
|
||||||
@Serializable
|
|
||||||
data class AirSeason(
|
|
||||||
val quarter: String,
|
|
||||||
val year: Int,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user