diff --git a/multisrc/overrides/animestream/asyaanimeleri/additional.gradle b/multisrc/overrides/animestream/asyaanimeleri/additional.gradle new file mode 100644 index 000000000..22dac6ec9 --- /dev/null +++ b/multisrc/overrides/animestream/asyaanimeleri/additional.gradle @@ -0,0 +1,9 @@ +dependencies { + implementation(project(":lib-vk-extractor")) + implementation(project(":lib-okru-extractor")) + implementation(project(":lib-sibnet-extractor")) + implementation(project(":lib-gdriveplayer-extractor")) + implementation(project(":lib-dood-extractor")) + implementation(project(":lib-mytv-extractor")) + // implementation(project(":lib-dailymotion-extractor")) +} diff --git a/multisrc/overrides/animestream/asyaanimeleri/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/animestream/asyaanimeleri/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..254b424e5 Binary files /dev/null and b/multisrc/overrides/animestream/asyaanimeleri/res/mipmap-hdpi/ic_launcher.png differ diff --git a/multisrc/overrides/animestream/asyaanimeleri/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/animestream/asyaanimeleri/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..079048d6e Binary files /dev/null and b/multisrc/overrides/animestream/asyaanimeleri/res/mipmap-mdpi/ic_launcher.png differ diff --git a/multisrc/overrides/animestream/asyaanimeleri/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/animestream/asyaanimeleri/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..2e4c40900 Binary files /dev/null and b/multisrc/overrides/animestream/asyaanimeleri/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/animestream/asyaanimeleri/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/animestream/asyaanimeleri/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..754d6ed6e Binary files /dev/null and b/multisrc/overrides/animestream/asyaanimeleri/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/animestream/asyaanimeleri/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/animestream/asyaanimeleri/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..7b97cbc41 Binary files /dev/null and b/multisrc/overrides/animestream/asyaanimeleri/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/animestream/asyaanimeleri/src/AsyaAnimeleri.kt b/multisrc/overrides/animestream/asyaanimeleri/src/AsyaAnimeleri.kt new file mode 100644 index 000000000..adb5816ee --- /dev/null +++ b/multisrc/overrides/animestream/asyaanimeleri/src/AsyaAnimeleri.kt @@ -0,0 +1,148 @@ +package eu.kanade.tachiyomi.animeextension.tr.asyaanimeleri + +import eu.kanade.tachiyomi.animeextension.tr.asyaanimeleri.AsyaAnimeleriFilters.CountryFilter +import eu.kanade.tachiyomi.animeextension.tr.asyaanimeleri.AsyaAnimeleriFilters.GenresFilter +import eu.kanade.tachiyomi.animeextension.tr.asyaanimeleri.AsyaAnimeleriFilters.NetworkFilter +import eu.kanade.tachiyomi.animeextension.tr.asyaanimeleri.AsyaAnimeleriFilters.OrderFilter +import eu.kanade.tachiyomi.animeextension.tr.asyaanimeleri.AsyaAnimeleriFilters.StatusFilter +import eu.kanade.tachiyomi.animeextension.tr.asyaanimeleri.AsyaAnimeleriFilters.StudioFilter +import eu.kanade.tachiyomi.animeextension.tr.asyaanimeleri.AsyaAnimeleriFilters.TypeFilter +import eu.kanade.tachiyomi.animesource.model.AnimeFilter +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +import eu.kanade.tachiyomi.animesource.model.SAnime +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor +import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor +import eu.kanade.tachiyomi.lib.mytvextractor.MytvExtractor +import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor +import eu.kanade.tachiyomi.lib.sibnetextractor.SibnetExtractor +import eu.kanade.tachiyomi.lib.vkextractor.VkExtractor +import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream +import eu.kanade.tachiyomi.multisrc.animestream.AnimeStreamFilters +import eu.kanade.tachiyomi.network.GET +import okhttp3.HttpUrl +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import org.jsoup.nodes.Element +import java.text.SimpleDateFormat +import java.util.Locale + +class AsyaAnimeleri : AnimeStream( + "tr", + "AsyaAnimeleri", + "https://asyaanimeleri.com", +) { + override val animeListUrl = "$baseUrl/series" + + override val dateFormatter by lazy { + SimpleDateFormat("MMMM dd, yyyy", Locale("tr")) + } + + override val client by lazy { + network.client.newBuilder() + .addInterceptor(ShittyProtectionInterceptor(network.client)) + .build() + } + + // =============================== Search =============================== + override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { + val params = AsyaAnimeleriFilters.getSearchParameters(filters) + return if (query.isNotEmpty()) { + GET("$baseUrl/page/$page/?s=$query") + } else { + val additional = params.run { listOf(genres, studios, countries, networks) } + .filter(String::isNotBlank) + .joinToString("&") + + val url = "$animeListUrl/?$additional".toHttpUrl().newBuilder() + .addQueryParameter("page", "$page") + .addIfNotBlank("status", params.status) + .addIfNotBlank("type", params.type) + .addIfNotBlank("order", params.order) + .build() + + GET(url.toString(), headers) + } + } + + // ============================== Filters =============================== + override val filtersSelector = "div.filter.dropdown > ul" + + override fun getFilterList(): AnimeFilterList { + return if (AnimeStreamFilters.filterInitialized()) { + AnimeFilterList( + GenresFilter("Tür"), + StudioFilter("Stüdyo"), + CountryFilter("Ülke"), + NetworkFilter("Ağ"), + AnimeFilter.Separator(), + StatusFilter("Durum"), + TypeFilter("Tip"), + OrderFilter("Sirala"), + ) + } else { + AnimeFilterList(AnimeFilter.Header(filtersMissingWarning)) + } + } + + // =========================== Anime Details ============================ + override val animeStatusText = "Durum" + + override fun parseStatus(statusString: String?): Int { + return when (statusString?.trim()?.lowercase()) { + "tamamlandı" -> SAnime.COMPLETED + "devam ediyor" -> SAnime.ONGOING + else -> SAnime.UNKNOWN + } + } + + // ============================== Episodes ============================== + override val episodePrefix = "Bölüm" + + // ============================ Video Links ============================= + override val prefQualityValues = arrayOf("1080p", "720p", "480p", "360p", "240p", "144p") + override val prefQualityEntries = prefQualityValues + + private val vkExtractor by lazy { VkExtractor(client, headers) } + private val okruExtractor by lazy { OkruExtractor(client) } + private val sibnetExtractor by lazy { SibnetExtractor(client) } + private val gdrivePlayerExtractor by lazy { GdrivePlayerExtractor(client) } + private val doodExtractor by lazy { DoodExtractor(client) } + private val mytvExtractor by lazy { MytvExtractor(client) } + // private val dailyExtractor by lazy { DailymotionExtractor(client, headers) } + + override fun getVideoList(url: String, name: String): List