diff --git a/src/de/cineclix/build.gradle b/src/de/cineclix/build.gradle deleted file mode 100644 index dbc4a7b2..00000000 --- a/src/de/cineclix/build.gradle +++ /dev/null @@ -1,16 +0,0 @@ -ext { - extName = 'CineClix' - extClass = '.CineClix' - extVersionCode = 18 -} - -apply from: "$rootDir/common.gradle" - -dependencies { - implementation(project(':lib:streamtape-extractor')) - implementation(project(':lib:mixdrop-extractor')) - implementation(project(':lib:dood-extractor')) - implementation(project(':lib:voe-extractor')) - implementation(project(':lib:playlist-utils')) - implementation(libs.jsunpacker) -} diff --git a/src/de/cineclix/res/mipmap-hdpi/ic_launcher.png b/src/de/cineclix/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 743437f5..00000000 Binary files a/src/de/cineclix/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/de/cineclix/res/mipmap-mdpi/ic_launcher.png b/src/de/cineclix/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 1d018d45..00000000 Binary files a/src/de/cineclix/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/de/cineclix/res/mipmap-xhdpi/ic_launcher.png b/src/de/cineclix/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index a31b0ebd..00000000 Binary files a/src/de/cineclix/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/de/cineclix/res/mipmap-xxhdpi/ic_launcher.png b/src/de/cineclix/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 4da97b90..00000000 Binary files a/src/de/cineclix/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/de/cineclix/res/mipmap-xxxhdpi/ic_launcher.png b/src/de/cineclix/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index edde347b..00000000 Binary files a/src/de/cineclix/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/de/cineclix/src/eu/kanade/tachiyomi/animeextension/de/cineclix/CineClix.kt b/src/de/cineclix/src/eu/kanade/tachiyomi/animeextension/de/cineclix/CineClix.kt deleted file mode 100644 index 1cfc96dc..00000000 --- a/src/de/cineclix/src/eu/kanade/tachiyomi/animeextension/de/cineclix/CineClix.kt +++ /dev/null @@ -1,364 +0,0 @@ -package eu.kanade.tachiyomi.animeextension.de.cineclix - -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.cineclix.extractors.StreamVidExtractor -import eu.kanade.tachiyomi.animeextension.de.cineclix.extractors.SuperVideoExtractor -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.mixdropextractor.MixDropExtractor -import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor -import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor -import eu.kanade.tachiyomi.network.GET -import kotlinx.serialization.json.Json -import kotlinx.serialization.json.JsonObject -import kotlinx.serialization.json.int -import kotlinx.serialization.json.jsonArray -import kotlinx.serialization.json.jsonObject -import kotlinx.serialization.json.jsonPrimitive -import okhttp3.Headers -import okhttp3.Request -import okhttp3.Response -import uy.kohesive.injekt.Injekt -import uy.kohesive.injekt.api.get - -class CineClix : ConfigurableAnimeSource, AnimeHttpSource() { - - override val name = "CineClix" - - override val baseUrl = "https://cineclix.de" - - override val lang = "de" - - override val supportsLatest = false - - private val preferences: SharedPreferences by lazy { - Injekt.get().getSharedPreferences("source_$id", 0x0000) - } - - private val json = Json { - isLenient = true - ignoreUnknownKeys = true - } - - override fun popularAnimeRequest(page: Int): Request = GET( - "$baseUrl/api/v1/channel/64?returnContentOnly=true&restriction=&order=rating:desc&paginate=simple&perPage=50&query=&page=$page", - headers = Headers.headersOf("referer", "$baseUrl/movies?order=rating%3Adesc"), - ) - - override fun popularAnimeParse(response: Response): AnimesPage { - val responseString = response.body.string() - return parsePopularAnimeJson(responseString) - } - - private fun parsePopularAnimeJson(jsonLine: String?): AnimesPage { - val jsonData = jsonLine ?: return AnimesPage(emptyList(), false) - val jObject = json.decodeFromString(jsonData) - val jO = jObject.jsonObject["pagination"]!!.jsonObject - val nextPage = jO.jsonObject["next_page"]!!.jsonPrimitive.int - // .substringAfter("page=").toInt() - val page = jO.jsonObject["current_page"]!!.jsonPrimitive.int - val hasNextPage = page < nextPage - val array = jO["data"]!!.jsonArray - val animeList = mutableListOf() - for (item in array) { - val anime = SAnime.create() - anime.title = item.jsonObject["name"]!!.jsonPrimitive.content - val animeId = item.jsonObject["id"]!!.jsonPrimitive.content - anime.setUrlWithoutDomain("$baseUrl/api/v1/titles/$animeId?load=images,genres,productionCountries,keywords,videos,primaryVideo,seasons,compactCredits") - anime.thumbnail_url = item.jsonObject["poster"]?.jsonPrimitive?.content ?: item.jsonObject["backdrop"]?.jsonPrimitive?.content - animeList.add(anime) - } - return AnimesPage(animeList, hasNextPage) - } - - // episodes - - override fun episodeListRequest(anime: SAnime): Request = GET(baseUrl + anime.url, headers = Headers.headersOf("referer", baseUrl)) - - override fun episodeListParse(response: Response): List { - val responseString = response.body.string() - val url = response.request.url.toString() - return parseEpisodeAnimeJson(responseString, url) - } - - private fun parseEpisodeAnimeJson(jsonLine: String?, url: String): List { - val jsonData = jsonLine ?: return emptyList() - val jObject = json.decodeFromString(jsonData) - val episodeList = mutableListOf() - val mId = jObject.jsonObject["title"]!!.jsonObject["id"]!!.jsonPrimitive.content - val season = jObject.jsonObject["seasons"]?.jsonObject - if (season != null) { - val dataArray = season.jsonObject["data"]!!.jsonArray - val next = season.jsonObject["next_page"]?.jsonPrimitive?.content - if (next != null) { - val seNextJsonData = client.newCall(GET("$baseUrl/api/v1/titles/$mId/seasons?perPage=8&query=&page=$next", headers = Headers.headersOf("referer", baseUrl))).execute().body.string() - val seNextJObject = json.decodeFromString(seNextJsonData) - val seasonNext = seNextJObject.jsonObject["pagination"]!!.jsonObject - val dataNextArray = seasonNext.jsonObject["data"]!!.jsonArray - val dataAllArray = dataArray.plus(dataNextArray) - for (item in dataAllArray) { - val id = item.jsonObject["title_id"]!!.jsonPrimitive.content - val num = item.jsonObject["number"]!!.jsonPrimitive.content - val seUrl = "$baseUrl/api/v1/titles/$id/seasons/$num?load=episodes,primaryVideo" - val seJsonData = client.newCall(GET(seUrl, headers = Headers.headersOf("referer", baseUrl))).execute().body.string() - val seJObject = json.decodeFromString(seJsonData) - val epObject = seJObject.jsonObject["episodes"]!!.jsonObject - val epDataArray = epObject.jsonObject["data"]!!.jsonArray.reversed() - for (epItem in epDataArray) { - val episode = SEpisode.create() - val seNum = epItem.jsonObject["season_number"]!!.jsonPrimitive.content - val epNum = epItem.jsonObject["episode_number"]!!.jsonPrimitive.content - episode.name = "Staffel $seNum Folge $epNum : " + epItem.jsonObject["name"]!!.jsonPrimitive.content - episode.episode_number = epNum.toFloat() - val epId = epItem.jsonObject["title_id"]!!.jsonPrimitive.content - episode.setUrlWithoutDomain("$baseUrl/api/v1/titles/$epId/seasons/$seNum/episodes/$epNum?load=videos,compactCredits,primaryVideo") - episodeList.add(episode) - } - } - } else { - for (item in dataArray) { - val id = item.jsonObject["title_id"]!!.jsonPrimitive.content - val num = item.jsonObject["number"]!!.jsonPrimitive.content - val seUrl = "$baseUrl/api/v1/titles/$id/seasons/$num?load=episodes,primaryVideo" - val seJsonData = client.newCall(GET(seUrl, headers = Headers.headersOf("referer", baseUrl))).execute().body.string() - val seJObject = json.decodeFromString(seJsonData) - val epObject = seJObject.jsonObject["episodes"]!!.jsonObject - val epDataArray = epObject.jsonObject["data"]!!.jsonArray.reversed() - for (epItem in epDataArray) { - val episode = SEpisode.create() - val seNum = epItem.jsonObject["season_number"]!!.jsonPrimitive.content - val epNum = epItem.jsonObject["episode_number"]!!.jsonPrimitive.content - episode.name = "Staffel $seNum Folge $epNum : " + epItem.jsonObject["name"]!!.jsonPrimitive.content - episode.episode_number = epNum.toFloat() - val epId = epItem.jsonObject["title_id"]!!.jsonPrimitive.content - episode.setUrlWithoutDomain("$baseUrl/api/v1/titles/$epId/seasons/$seNum/episodes/$epNum?load=videos,compactCredits,primaryVideo") - episodeList.add(episode) - } - } - } - } else { - val episode = SEpisode.create() - episode.episode_number = 1F - episode.name = "Film" - episode.setUrlWithoutDomain(url) - episodeList.add(episode) - } - return episodeList - } - - // Video Extractor - - override fun videoListRequest(episode: SEpisode): Request { - return GET(baseUrl + episode.url, headers = Headers.headersOf("referer", baseUrl)) - } - - override fun videoListParse(response: Response): List