diff --git a/src/de/aniflix/build.gradle b/src/de/aniflix/build.gradle deleted file mode 100644 index efee0a018..000000000 --- a/src/de/aniflix/build.gradle +++ /dev/null @@ -1,14 +0,0 @@ -ext { - extName = 'Aniflix' - extClass = '.Aniflix' - extVersionCode = 28 -} - -apply from: "$rootDir/common.gradle" - -dependencies { - implementation(project(':lib:streamlare-extractor')) - implementation(project(':lib:voe-extractor')) - implementation(project(':lib:streamtape-extractor')) - implementation(project(':lib:dood-extractor')) -} \ No newline at end of file diff --git a/src/de/aniflix/res/mipmap-hdpi/ic_launcher.png b/src/de/aniflix/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 6c8eaea7d..000000000 Binary files a/src/de/aniflix/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/de/aniflix/res/mipmap-mdpi/ic_launcher.png b/src/de/aniflix/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 62d621680..000000000 Binary files a/src/de/aniflix/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/de/aniflix/res/mipmap-xhdpi/ic_launcher.png b/src/de/aniflix/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 8ae6c55f2..000000000 Binary files a/src/de/aniflix/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/de/aniflix/res/mipmap-xxhdpi/ic_launcher.png b/src/de/aniflix/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index a10ff464f..000000000 Binary files a/src/de/aniflix/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/de/aniflix/res/mipmap-xxxhdpi/ic_launcher.png b/src/de/aniflix/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 6bdef3081..000000000 Binary files a/src/de/aniflix/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/de/aniflix/src/eu/kanade/tachiyomi/animeextension/de/aniflix/Aniflix.kt b/src/de/aniflix/src/eu/kanade/tachiyomi/animeextension/de/aniflix/Aniflix.kt deleted file mode 100644 index 8c4ee605c..000000000 --- a/src/de/aniflix/src/eu/kanade/tachiyomi/animeextension/de/aniflix/Aniflix.kt +++ /dev/null @@ -1,296 +0,0 @@ -package eu.kanade.tachiyomi.animeextension.de.aniflix - -import android.app.Application -import android.content.SharedPreferences -import androidx.preference.ListPreference -import androidx.preference.MultiSelectListPreference -import androidx.preference.PreferenceScreen -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.Episode -import eu.kanade.tachiyomi.animeextension.de.aniflix.dto.Release -import eu.kanade.tachiyomi.animeextension.de.aniflix.dto.Season -import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource -import eu.kanade.tachiyomi.animesource.model.AnimeFilterList -import eu.kanade.tachiyomi.animesource.model.AnimesPage -import eu.kanade.tachiyomi.animesource.model.SAnime -import eu.kanade.tachiyomi.animesource.model.SEpisode -import eu.kanade.tachiyomi.animesource.model.Video -import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource -import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor -import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor -import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor -import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.POST -import kotlinx.serialization.builtins.ListSerializer -import kotlinx.serialization.json.Json -import okhttp3.Headers -import okhttp3.MediaType.Companion.toMediaType -import okhttp3.Request -import okhttp3.RequestBody.Companion.toRequestBody -import okhttp3.Response -import uy.kohesive.injekt.Injekt -import uy.kohesive.injekt.api.get - -class Aniflix : ConfigurableAnimeSource, AnimeHttpSource() { - - override val name = "Aniflix" - - override val baseUrl = "https://aniflix.cc" - - override val lang = "de" - - override val supportsLatest = true - - private val preferences: SharedPreferences by lazy { - Injekt.get().getSharedPreferences("source_$id", 0x0000) - } - - private val json = Json { - isLenient = true - ignoreUnknownKeys = true - } - - private val refererHeader = Headers.headersOf("Referer", baseUrl) - - override fun getAnimeUrl(anime: SAnime): String { - return baseUrl + anime.url.replace("api/", "") - } - - override fun animeDetailsParse(response: Response): SAnime { - val anime = json.decodeFromString(AnimeDetailsDto.serializer(), response.body.string()) - val newAnime = SAnime.create().apply { - title = anime.name!! - setUrlWithoutDomain("$baseUrl/api/show/" + anime.url!!) - if (anime.coverPortrait != null) { - thumbnail_url = "$baseUrl/storage/" + anime.coverPortrait - } - description = anime.description - if (anime.airing == 0) { - status = SAnime.COMPLETED - } else if (anime.airing == 1) { - status = SAnime.ONGOING - } - genre = anime.genres?.joinToString { it.name!! } - } - return newAnime - } - - override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/api/show/new/${page - 1}", refererHeader) - - override fun popularAnimeParse(response: Response) = parseAnimePage(response) - - private fun parseAnimePage(response: Response, singlePage: Boolean = false): AnimesPage { - val animes = json.decodeFromString(ListSerializer(AnimeDto.serializer()), response.body.string()) - if (animes.isEmpty()) return AnimesPage(emptyList(), false) - val animeList = mutableListOf() - for (anime in animes) { - val newAnime = createAnime(anime) - animeList.add(newAnime) - } - return AnimesPage(animeList, !singlePage) - } - - private fun createAnime(anime: AnimeDto): SAnime { - return SAnime.create().apply { - title = anime.name!! - setUrlWithoutDomain("$baseUrl/api/show/" + anime.url!!) - if (anime.coverPortrait != null) { - thumbnail_url = "$baseUrl/storage/" + anime.coverPortrait - } - description = anime.description - if (anime.airing == 0) { - status = SAnime.COMPLETED - } else if (anime.airing == 1) { - status = SAnime.ONGOING - } - } - } - - override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/api/show/airing/${page - 1}", refererHeader) - - override fun latestUpdatesParse(response: Response): AnimesPage { - val releases = json.decodeFromString(ListSerializer(Release.serializer()), response.body.string()).toMutableList() - if (releases.isEmpty()) return AnimesPage(emptyList(), false) - val animeList = mutableListOf() - val releaseList = mutableListOf() - for (release in releases) { - if (release.season!!.anime!!.id in releaseList) continue - releaseList.add(release.season.anime!!.id!!) - val anime = release.season.anime - val newAnime = SAnime.create().apply { - title = anime.name!! - setUrlWithoutDomain("$baseUrl/api/show/" + anime.url!!) - if (anime.coverPortrait != null) { - thumbnail_url = "$baseUrl/storage/" + anime.coverPortrait - } - description = anime.description - if (anime.airing == 0) { - status = SAnime.COMPLETED - } else if (anime.airing == 1) { - status = SAnime.ONGOING - } - } - animeList.add(newAnime) - } - return AnimesPage(animeList, true) - } - - override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList) = POST( - url = "$baseUrl/api/show/search", - headers = refererHeader, - body = "{\"search\":\"$query\"}".toRequestBody("application/json".toMediaType()), - ) - - override fun searchAnimeParse(response: Response) = parseAnimePage(response, singlePage = true) - - override fun episodeListParse(response: Response): List { - val anime = json.decodeFromString(AnimeDetailsDto.serializer(), response.body.string()) - if (anime.seasons.isNullOrEmpty()) return emptyList() - val episodeList = mutableListOf() - val animeUrl = anime.url!! - for (season in anime.seasons) { - val episodes = season.episodes!!.toMutableList() - 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 { - setUrlWithoutDomain("$baseUrl/api/episode/show/$animeUrl/season/${season.number!!}/episode/${episode.number}") - episode_number = episode.number!!.toFloat() - name = "Staffel ${season.number}: Folge ${episode.number}" - } - episodeList.add(newEpisode) - } - } - return episodeList.reversed() - } - - override fun videoListParse(response: Response): List