aniflix: fix episodes not showing up & video load issues
This commit is contained in:
@ -6,7 +6,7 @@ ext {
|
|||||||
extName = 'Aniflix'
|
extName = 'Aniflix'
|
||||||
pkgNameSuffix = 'de.aniflix'
|
pkgNameSuffix = 'de.aniflix'
|
||||||
extClass = '.Aniflix'
|
extClass = '.Aniflix'
|
||||||
extVersionCode = 7
|
extVersionCode = 8
|
||||||
libVersion = '12'
|
libVersion = '12'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ import eu.kanade.tachiyomi.animeextension.de.aniflix.dto.AnimeDetailsDto
|
|||||||
import eu.kanade.tachiyomi.animeextension.de.aniflix.dto.AnimeDto
|
import eu.kanade.tachiyomi.animeextension.de.aniflix.dto.AnimeDto
|
||||||
import eu.kanade.tachiyomi.animeextension.de.aniflix.dto.Episode
|
import eu.kanade.tachiyomi.animeextension.de.aniflix.dto.Episode
|
||||||
import eu.kanade.tachiyomi.animeextension.de.aniflix.dto.Release
|
import eu.kanade.tachiyomi.animeextension.de.aniflix.dto.Release
|
||||||
|
import eu.kanade.tachiyomi.animeextension.de.aniflix.dto.Season
|
||||||
import eu.kanade.tachiyomi.animeextension.de.aniflix.extractors.DoodExtractor
|
import eu.kanade.tachiyomi.animeextension.de.aniflix.extractors.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.de.aniflix.extractors.StreamTapeExtractor
|
import eu.kanade.tachiyomi.animeextension.de.aniflix.extractors.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -20,6 +21,7 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
|
import eu.kanade.tachiyomi.network.asObservableSuccess
|
||||||
import kotlinx.serialization.builtins.ListSerializer
|
import kotlinx.serialization.builtins.ListSerializer
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
import okhttp3.Headers
|
import okhttp3.Headers
|
||||||
@ -28,6 +30,7 @@ import okhttp3.OkHttpClient
|
|||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
import okhttp3.RequestBody.Companion.toRequestBody
|
import okhttp3.RequestBody.Companion.toRequestBody
|
||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
|
import rx.Observable
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
|
||||||
@ -54,6 +57,18 @@ class Aniflix : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
|
|
||||||
private val refererHeader = Headers.headersOf("Referer", baseUrl)
|
private val refererHeader = Headers.headersOf("Referer", baseUrl)
|
||||||
|
|
||||||
|
override fun fetchAnimeDetails(anime: SAnime): Observable<SAnime> {
|
||||||
|
return client.newCall(GET(baseUrl + anime.url))
|
||||||
|
.asObservableSuccess()
|
||||||
|
.map { response ->
|
||||||
|
animeDetailsParse(response).apply { initialized = true }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun animeDetailsRequest(anime: SAnime): Request {
|
||||||
|
return GET(baseUrl + anime.url.replace("api/", ""))
|
||||||
|
}
|
||||||
|
|
||||||
override fun animeDetailsParse(response: Response): SAnime {
|
override fun animeDetailsParse(response: Response): SAnime {
|
||||||
val anime = json.decodeFromString(AnimeDetailsDto.serializer(), response.body!!.string())
|
val anime = json.decodeFromString(AnimeDetailsDto.serializer(), response.body!!.string())
|
||||||
val newAnime = SAnime.create().apply {
|
val newAnime = SAnime.create().apply {
|
||||||
@ -147,12 +162,23 @@ class Aniflix : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
val episodeList = mutableListOf<SEpisode>()
|
val episodeList = mutableListOf<SEpisode>()
|
||||||
val animeUrl = anime.url!!
|
val animeUrl = anime.url!!
|
||||||
for (season in anime.seasons) {
|
for (season in anime.seasons) {
|
||||||
val lastSeasonLength = episodeList.size
|
val episodes = season.episodes!!.toMutableList()
|
||||||
for (episodeNumber in 1..season.episodes!!.size) {
|
var page = 1
|
||||||
|
while (episodes.size < season.length!!) {
|
||||||
|
val seasonPart = json.decodeFromString(
|
||||||
|
Season.serializer(),
|
||||||
|
client.newCall(
|
||||||
|
GET("$baseUrl/api/show/$animeUrl/${season.id!!}/$page")
|
||||||
|
).execute().body!!.string()
|
||||||
|
)
|
||||||
|
page++
|
||||||
|
episodes.addAll(seasonPart.episodes!!)
|
||||||
|
}
|
||||||
|
for (episode in episodes) {
|
||||||
val newEpisode = SEpisode.create().apply {
|
val newEpisode = SEpisode.create().apply {
|
||||||
setUrlWithoutDomain("$baseUrl/api/episode/show/$animeUrl/season/${season.number!!}/episode/$episodeNumber")
|
setUrlWithoutDomain("$baseUrl/api/episode/show/$animeUrl/season/${season.number!!}/episode/${episode.number}")
|
||||||
episode_number = lastSeasonLength + episodeNumber.toFloat()
|
episode_number = episode.number!!.toFloat()
|
||||||
name = "Staffel ${season.number}: Folge $episodeNumber"
|
name = "Staffel ${season.number}: Folge ${episode.number}"
|
||||||
date_upload = System.currentTimeMillis()
|
date_upload = System.currentTimeMillis()
|
||||||
}
|
}
|
||||||
episodeList.add(newEpisode)
|
episodeList.add(newEpisode)
|
||||||
@ -168,7 +194,7 @@ class Aniflix : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
for (stream in streams) {
|
for (stream in streams) {
|
||||||
val quality = "${stream.hoster?.name}, ${stream.lang}"
|
val quality = "${stream.hoster?.name}, ${stream.lang}"
|
||||||
val link = stream.link ?: return emptyList()
|
val link = stream.link ?: return emptyList()
|
||||||
val hosterSelection = preferences.getStringSet("hoster_selection", null)
|
val hosterSelection = preferences.getStringSet("hoster_selection", setOf("dood", "stape"))
|
||||||
when {
|
when {
|
||||||
link.contains("https://dood") && hosterSelection?.contains("dood") == true -> {
|
link.contains("https://dood") && hosterSelection?.contains("dood") == true -> {
|
||||||
val video = try { DoodExtractor(client).videoFromUrl(link, quality) } catch (e: Exception) { null }
|
val video = try { DoodExtractor(client).videoFromUrl(link, quality) } catch (e: Exception) { null }
|
||||||
|
Reference in New Issue
Block a user