From a8c1b9185c960ebe80d0158de50d15e04794ceee Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Thu, 1 Jun 2023 11:31:49 +0200 Subject: [PATCH] Add filler markings (#1667) --- src/en/animedao/build.gradle | 2 +- .../animeextension/en/animedao/AnimeDao.kt | 12 ++++++++++++ src/en/nineanime/build.gradle | 2 +- .../animeextension/en/nineanime/NineAnime.kt | 18 +++++++++++++++++- src/en/zoro/build.gradle | 2 +- .../tachiyomi/animeextension/en/zoro/Zoro.kt | 19 +++++++++++++++++++ 6 files changed, 51 insertions(+), 4 deletions(-) diff --git a/src/en/animedao/build.gradle b/src/en/animedao/build.gradle index 56fe2f795..1bb4cb995 100644 --- a/src/en/animedao/build.gradle +++ b/src/en/animedao/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'AnimeDao' pkgNameSuffix = 'en.animedao' extClass = '.AnimeDao' - extVersionCode = 9 + extVersionCode = 10 libVersion = '13' } diff --git a/src/en/animedao/src/eu/kanade/tachiyomi/animeextension/en/animedao/AnimeDao.kt b/src/en/animedao/src/eu/kanade/tachiyomi/animeextension/en/animedao/AnimeDao.kt index 10778f814..0bb5a214d 100644 --- a/src/en/animedao/src/eu/kanade/tachiyomi/animeextension/en/animedao/AnimeDao.kt +++ b/src/en/animedao/src/eu/kanade/tachiyomi/animeextension/en/animedao/AnimeDao.kt @@ -222,6 +222,9 @@ class AnimeDao : ConfigurableAnimeSource, ParsedAnimeHttpSource() { episode_number = if (episodeName.contains("Episode ", true)) { episodeName.substringAfter("Episode ").substringBefore(" ").toFloatOrNull() ?: 0F } else { 0F } + if (element.selectFirst("span.filler") != null && preferences.getBoolean("mark_fillers", true)) { + scanlator = "Filler Episode" + } date_upload = element.selectFirst("span.date")?.let { parseDate(it.text()) } ?: 0L setUrlWithoutDomain(element.selectFirst("a[href]")!!.attr("href")) } @@ -403,10 +406,19 @@ class AnimeDao : ConfigurableAnimeSource, ParsedAnimeHttpSource() { preferences.edit().putBoolean(key, new).commit() } } + val markFillers = SwitchPreferenceCompat(screen.context).apply { + key = "mark_fillers" + title = "Mark filler episodes" + setDefaultValue(true) + setOnPreferenceChangeListener { _, newValue -> + preferences.edit().putBoolean(key, newValue as Boolean).commit() + } + } screen.addPreference(domainPref) screen.addPreference(videoQualityPref) screen.addPreference(videoServerPref) screen.addPreference(episodeSortPref) + screen.addPreference(markFillers) } } diff --git a/src/en/nineanime/build.gradle b/src/en/nineanime/build.gradle index 31ff1f23e..a124a1ac4 100644 --- a/src/en/nineanime/build.gradle +++ b/src/en/nineanime/build.gradle @@ -6,7 +6,7 @@ ext { extName = '9anime' pkgNameSuffix = 'en.nineanime' extClass = '.NineAnime' - extVersionCode = 41 + extVersionCode = 42 libVersion = '13' } diff --git a/src/en/nineanime/src/eu/kanade/tachiyomi/animeextension/en/nineanime/NineAnime.kt b/src/en/nineanime/src/eu/kanade/tachiyomi/animeextension/en/nineanime/NineAnime.kt index eb0196fa7..e27d62499 100644 --- a/src/en/nineanime/src/eu/kanade/tachiyomi/animeextension/en/nineanime/NineAnime.kt +++ b/src/en/nineanime/src/eu/kanade/tachiyomi/animeextension/en/nineanime/NineAnime.kt @@ -4,6 +4,7 @@ import android.app.Application import android.content.SharedPreferences import androidx.preference.ListPreference import androidx.preference.PreferenceScreen +import androidx.preference.SwitchPreferenceCompat import eu.kanade.tachiyomi.animeextension.en.nineanime.extractors.Mp4uploadExtractor import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.model.AnimeFilterList @@ -182,9 +183,14 @@ class NineAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { val ids = element.attr("data-ids") val sub = element.attr("data-sub").toInt().toBoolean() val dub = element.attr("data-dub").toInt().toBoolean() + val extraInfo = if (element.hasClass("filler") && preferences.getBoolean("mark_fillers", true)) { + " • Filler Episode" + } else { + "" + } episode.url = "$ids&epurl=$url/ep-$epNum" episode.episode_number = epNum.toFloat() - episode.scanlator = (if (sub) "Sub" else "") + if (dub) ", Dub" else "" + episode.scanlator = ((if (sub) "Sub" else "") + if (dub) ", Dub" else "") + extraInfo val name = element.parent()?.select("span.d-title")?.text().orEmpty() val namePrefix = "Episode $epNum" episode.name = "Episode $epNum" + @@ -429,9 +435,19 @@ class NineAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { preferences.edit().putString(key, entry).commit() } } + val markFillers = SwitchPreferenceCompat(screen.context).apply { + key = "mark_fillers" + title = "Mark filler episodes" + setDefaultValue(true) + setOnPreferenceChangeListener { _, newValue -> + preferences.edit().putBoolean(key, newValue as Boolean).commit() + } + } + screen.addPreference(domainPref) screen.addPreference(videoQualityPref) screen.addPreference(videoLanguagePref) + screen.addPreference(markFillers) } private fun Iterable.parallelMap(f: suspend (A) -> B): List = runBlocking { diff --git a/src/en/zoro/build.gradle b/src/en/zoro/build.gradle index da3dc1e07..5a053829c 100644 --- a/src/en/zoro/build.gradle +++ b/src/en/zoro/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'zoro.to (experimental)' pkgNameSuffix = 'en.zoro' extClass = '.Zoro' - extVersionCode = 27 + extVersionCode = 28 libVersion = '13' } diff --git a/src/en/zoro/src/eu/kanade/tachiyomi/animeextension/en/zoro/Zoro.kt b/src/en/zoro/src/eu/kanade/tachiyomi/animeextension/en/zoro/Zoro.kt index 2c6d79537..ebc81f53d 100644 --- a/src/en/zoro/src/eu/kanade/tachiyomi/animeextension/en/zoro/Zoro.kt +++ b/src/en/zoro/src/eu/kanade/tachiyomi/animeextension/en/zoro/Zoro.kt @@ -4,6 +4,7 @@ import android.app.Application import android.content.SharedPreferences import androidx.preference.ListPreference import androidx.preference.PreferenceScreen +import androidx.preference.SwitchPreferenceCompat import eu.kanade.tachiyomi.animeextension.en.zoro.extractors.ZoroExtractor import eu.kanade.tachiyomi.animeextension.en.zoro.utils.JSONUtil import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource @@ -94,6 +95,9 @@ class Zoro : ConfigurableAnimeSource, ParsedAnimeHttpSource() { episode_number = it.attr("data-number").toFloat() name = "Episode ${it.attr("data-number")}: ${it.attr("title")}" url = it.attr("href") + if (it.hasClass("ssl-item-filler") && preferences.getBoolean(MARK_FILLERS_KEY, MARK_FILLERS_DEFAULT)) { + scanlator = "Filler Episode" + } } } return episodeList.reversed() @@ -386,10 +390,21 @@ class Zoro : ConfigurableAnimeSource, ParsedAnimeHttpSource() { preferences.edit().putString(key, entry).commit() } } + + val markFillers = SwitchPreferenceCompat(screen.context).apply { + key = MARK_FILLERS_KEY + title = MARK_FILLERS_TITLE + setDefaultValue(MARK_FILLERS_DEFAULT) + setOnPreferenceChangeListener { _, newValue -> + preferences.edit().putBoolean(key, newValue as Boolean).commit() + } + } + screen.addPreference(domainPref) screen.addPreference(videoQualityPref) screen.addPreference(epTypePref) screen.addPreference(subLangPref) + screen.addPreference(markFillers) } // ============================= Utilities ============================== @@ -457,5 +472,9 @@ class Zoro : ConfigurableAnimeSource, ParsedAnimeHttpSource() { "Japanese", "Russian", ) + + private const val MARK_FILLERS_KEY = "mark_fillers" + private const val MARK_FILLERS_TITLE = "Mark filler episodes" + private const val MARK_FILLERS_DEFAULT = true } }