diff --git a/multisrc/overrides/dooplay/animeshouse/src/extractors/JsUnpacker.kt b/multisrc/overrides/dooplay/animeshouse/src/extractors/JsUnpacker.kt index f893983a6..45cb9696f 100644 --- a/multisrc/overrides/dooplay/animeshouse/src/extractors/JsUnpacker.kt +++ b/multisrc/overrides/dooplay/animeshouse/src/extractors/JsUnpacker.kt @@ -27,7 +27,7 @@ object JsUnpacker { val count = args[3].toInt() val origList = args[4].split("|") - val replaceMap = (0..(count - 1)).map { + val replaceMap = (0..count - 1).map { val key = convert(base, it) key to try { origList[it] } catch (e: Exception) { key } }.toMap() diff --git a/multisrc/overrides/dooplay/multimovies/src/extractors/AutoEmbedExtractor.kt b/multisrc/overrides/dooplay/multimovies/src/extractors/AutoEmbedExtractor.kt index 6ce61541f..9baf13042 100644 --- a/multisrc/overrides/dooplay/multimovies/src/extractors/AutoEmbedExtractor.kt +++ b/multisrc/overrides/dooplay/multimovies/src/extractors/AutoEmbedExtractor.kt @@ -770,9 +770,6 @@ class AutoEmbedExtractor(private val client: OkHttpClient) { videoUrl.contains("rabbitstream") -> { RabbitStreamExtractor(client).videosFromUrl(videoUrl, headers = videoHeaders, prefix = prefix) } - videoUrl.contains("mixdrop") -> { - MixDropExtractor(client).videoFromUrl(videoUrl, prefix = prefix) - } videoUrl.contains("https://dood") -> { DoodExtractor(client).videoFromUrl(videoUrl, server.name, false) ?.let(::listOf) @@ -863,7 +860,7 @@ class AutoEmbedExtractor(private val client: OkHttpClient) { private fun getCaptchaToken(url: String, key: String): String? { return runCatching { val httpUrl = url.toHttpUrl() - val pureDomain = (httpUrl.scheme + "://" + httpUrl.host + ":443") + val pureDomain = httpUrl.scheme + "://" + httpUrl.host + ":443" val domain = Base64.encodeToString(pureDomain.encodeToByteArray(), Base64.DEFAULT) .replace("\n", "") .replace("=", ".") diff --git a/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt b/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt index 3d1391647..e8ef557f3 100644 --- a/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt +++ b/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt @@ -663,60 +663,59 @@ class Jellyfin(private val suffix: String) : ConfigurableAnimeSource, AnimeHttpS } private fun medialibPreference(screen: PreferenceScreen) = - ( - object : MediaLibPreference(screen.context) { - override fun reload() { - this.apply { - key = JFConstants.MEDIALIB_KEY - title = JFConstants.MEDIALIB_TITLE - summary = "%s" + object : MediaLibPreference(screen.context) { + override fun reload() { + this.apply { + key = JFConstants.MEDIALIB_KEY + title = JFConstants.MEDIALIB_TITLE + summary = "%s" - Thread { - try { - val mediaLibsResponse = client.newCall( - GET("$baseUrl/Users/$userId/Items?api_key=$apiKey"), - ).execute() - val mediaJson = mediaLibsResponse.body.let { json.decodeFromString(it.string()) }?.Items + Thread { + try { + val mediaLibsResponse = client.newCall( + GET("$baseUrl/Users/$userId/Items?api_key=$apiKey"), + ).execute() + val mediaJson = mediaLibsResponse.body.let { json.decodeFromString(it.string()) }?.Items - val entriesArray = mutableListOf() - val entriesValueArray = mutableListOf() + val entriesArray = mutableListOf() + val entriesValueArray = mutableListOf() - if (mediaJson != null) { - for (media in mediaJson) { - entriesArray.add(media.Name) - entriesValueArray.add(media.Id) - } + if (mediaJson != null) { + for (media in mediaJson) { + entriesArray.add(media.Name) + entriesValueArray.add(media.Id) } - - entries = entriesArray.toTypedArray() - entryValues = entriesValueArray.toTypedArray() - } catch (ex: Exception) { - entries = emptyArray() - entryValues = emptyArray() } - }.start() - setOnPreferenceChangeListener { _, newValue -> - val selected = newValue as String - val index = findIndexOfValue(selected) - val entry = entryValues[index] as String - parentId = entry - preferences.edit().putString(key, entry).commit() + entries = entriesArray.toTypedArray() + entryValues = entriesValueArray.toTypedArray() + } catch (ex: Exception) { + entries = emptyArray() + entryValues = emptyArray() } + }.start() + + setOnPreferenceChangeListener { _, newValue -> + val selected = newValue as String + val index = findIndexOfValue(selected) + val entry = entryValues[index] as String + parentId = entry + preferences.edit().putString(key, entry).commit() } } } - ).apply { reload() } + }.apply { reload() } + + private fun getSummary(isPassword: Boolean, value: String, placeholder: String) = when { + isPassword && value.isNotEmpty() || !isPassword && value.isEmpty() -> placeholder + else -> value + } private fun PreferenceScreen.editTextPreference(key: String, title: String, default: String, value: String, isPassword: Boolean = false, placeholder: String, mediaLibPref: MediaLibPreference): EditTextPreference { return EditTextPreference(context).apply { this.key = key this.title = title - summary = if ((isPassword && value.isNotEmpty()) || (!isPassword && value.isEmpty())) { - placeholder - } else { - value - } + summary = getSummary(isPassword, value, placeholder) this.setDefaultValue(default) dialogTitle = title @@ -732,11 +731,7 @@ class Jellyfin(private val suffix: String) : ConfigurableAnimeSource, AnimeHttpS try { val newValueString = newValue as String val res = preferences.edit().putString(key, newValueString).commit() - summary = if ((isPassword && newValueString.isNotEmpty()) || (!isPassword && newValueString.isEmpty())) { - placeholder - } else { - newValueString - } + summary = getSummary(isPassword, newValueString, placeholder) val loginRes = login(true, context) if (loginRes == true) { mediaLibPref.reload() diff --git a/src/all/kamyroll/src/eu/kanade/tachiyomi/animeextension/all/kamyroll/Yomiroll.kt b/src/all/kamyroll/src/eu/kanade/tachiyomi/animeextension/all/kamyroll/Yomiroll.kt index 540da2183..96e28d865 100644 --- a/src/all/kamyroll/src/eu/kanade/tachiyomi/animeextension/all/kamyroll/Yomiroll.kt +++ b/src/all/kamyroll/src/eu/kanade/tachiyomi/animeextension/all/kamyroll/Yomiroll.kt @@ -379,7 +379,7 @@ class Yomiroll : ConfigurableAnimeSource, AnimeHttpSource() { } ) + ( - if ((series_metadata?.audio_locales?.size ?: 0) > 1 || + if (series_metadata?.audio_locales?.size ?: 0 > 1 || movie_metadata?.is_dubbed == true ) { " Dub" @@ -501,33 +501,31 @@ class Yomiroll : ConfigurableAnimeSource, AnimeHttpSource() { } private fun localSubsPreference(screen: PreferenceScreen) = - ( - object : LocalSubsPreference(screen.context) { - override fun reload() { - this.apply { - key = PREF_USE_LOCAL_TOKEN_KEY - title = PREF_USE_LOCAL_TOKEN_TITLE - summary = runBlocking { - withContext(Dispatchers.IO) { getTokenDetail() } - } - setDefaultValue(false) - setOnPreferenceChangeListener { _, newValue -> - val new = newValue as Boolean - preferences.edit().putBoolean(key, new).commit().also { - Thread { - summary = runBlocking { - withContext(Dispatchers.IO) { getTokenDetail(true) } - } - }.start() - } + object : LocalSubsPreference(screen.context) { + override fun reload() { + this.apply { + key = PREF_USE_LOCAL_TOKEN_KEY + title = PREF_USE_LOCAL_TOKEN_TITLE + summary = runBlocking { + withContext(Dispatchers.IO) { getTokenDetail() } + } + setDefaultValue(false) + setOnPreferenceChangeListener { _, newValue -> + val new = newValue as Boolean + preferences.edit().putBoolean(key, new).commit().also { + Thread { + summary = runBlocking { + withContext(Dispatchers.IO) { getTokenDetail(true) } + } + }.start() } } } } - ).apply { reload() } + }.apply { reload() } // From Dopebox - private fun Iterable.parallelMap(f: suspend (A) -> B): List = + private inline fun Iterable.parallelMap(crossinline f: suspend (A) -> B): List = runBlocking { map { async(Dispatchers.Default) { f(it) } }.awaitAll() } diff --git a/src/ar/akwam/src/eu/kanade/tachiyomi/animeextension/ar/akwam/Akwam.kt b/src/ar/akwam/src/eu/kanade/tachiyomi/animeextension/ar/akwam/Akwam.kt index 60df6b464..271bb46cf 100644 --- a/src/ar/akwam/src/eu/kanade/tachiyomi/animeextension/ar/akwam/Akwam.kt +++ b/src/ar/akwam/src/eu/kanade/tachiyomi/animeextension/ar/akwam/Akwam.kt @@ -86,7 +86,7 @@ class Akwam : ConfigurableAnimeSource, ParsedAnimeHttpSource() { episode.setUrlWithoutDomain(element.attr("href")) episode.name = element.text() episode.episode_number = when { - (epNum.isNotEmpty()) -> epNum.toFloat() + epNum.isNotEmpty() -> epNum.toFloatOrNull() ?: 1F else -> 1F } return episode diff --git a/src/ar/anime4up/src/eu/kanade/tachiyomi/animeextension/ar/anime4up/Anime4Up.kt b/src/ar/anime4up/src/eu/kanade/tachiyomi/animeextension/ar/anime4up/Anime4Up.kt index 129b5a993..d528ef2a8 100644 --- a/src/ar/anime4up/src/eu/kanade/tachiyomi/animeextension/ar/anime4up/Anime4Up.kt +++ b/src/ar/anime4up/src/eu/kanade/tachiyomi/animeextension/ar/anime4up/Anime4Up.kt @@ -97,7 +97,7 @@ class Anime4Up : ConfigurableAnimeSource, ParsedAnimeHttpSource() { episode.setUrlWithoutDomain(element.select("div.episodes-card-container div.episodes-card div.ehover6 h3 a").attr("href")) // episode.episode_number = element.select("span:nth-child(3)").text().replace(" - ", "").toFloat() episode.episode_number = when { - (epNum.isNotEmpty()) -> epNum.toFloat() + epNum.isNotEmpty() -> epNum.toFloatOrNull() ?: 1F else -> 1F } episode.name = element.select("div.episodes-card-container div.episodes-card div.ehover6 h3 a").text() diff --git a/src/ar/anime4up/src/eu/kanade/tachiyomi/animeextension/ar/anime4up/extractors/MoshahdaExtractor.kt b/src/ar/anime4up/src/eu/kanade/tachiyomi/animeextension/ar/anime4up/extractors/MoshahdaExtractor.kt deleted file mode 100644 index 225122bee..000000000 --- a/src/ar/anime4up/src/eu/kanade/tachiyomi/animeextension/ar/anime4up/extractors/MoshahdaExtractor.kt +++ /dev/null @@ -1,33 +0,0 @@ -package eu.kanade.tachiyomi.animeextension.ar.anime4up.extractors - -import android.util.Log -import eu.kanade.tachiyomi.animesource.model.Video -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.util.asJsoup -import okhttp3.Headers -import okhttp3.OkHttpClient - -class MoshahdaExtractor(private val client: OkHttpClient) { - fun videosFromUrl(url: String, headers: Headers): List