diff --git a/src/all/ehentai/build.gradle b/src/all/ehentai/build.gradle index 920cb21ad..8e88bbcb2 100644 --- a/src/all/ehentai/build.gradle +++ b/src/all/ehentai/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'E-Hentai' extClass = '.EHFactory' - extVersionCode = 23 + extVersionCode = 24 isNsfw = true } diff --git a/src/all/ehentai/src/eu/kanade/tachiyomi/extension/all/ehentai/EHentai.kt b/src/all/ehentai/src/eu/kanade/tachiyomi/extension/all/ehentai/EHentai.kt index 87cca7a9e..c6fda90b8 100644 --- a/src/all/ehentai/src/eu/kanade/tachiyomi/extension/all/ehentai/EHentai.kt +++ b/src/all/ehentai/src/eu/kanade/tachiyomi/extension/all/ehentai/EHentai.kt @@ -48,11 +48,13 @@ abstract class EHentai( private val webViewCookieManager: CookieManager by lazy { CookieManager.getInstance() } private val memberId: String by lazy { getMemberIdPref() } private val passHash: String by lazy { getPassHashPref() } + private val igneous: String by lazy { getIgneousPref() } + private val forceEh: Boolean by lazy { getForceEhPref() } override val baseUrl: String get() = when { System.getenv("CI") == "true" -> "https://e-hentai.org" - memberId.isNotEmpty() && passHash.isNotEmpty() -> "https://exhentai.org" + !forceEh && memberId.isNotEmpty() && passHash.isNotEmpty() -> "https://exhentai.org" else -> "https://e-hentai.org" } @@ -170,18 +172,18 @@ abstract class EHentai( query.isBlank() -> languageTag(enforceLanguageFilter) else -> languageTag(enforceLanguageFilter).let { if (it.isNotEmpty()) "$query,$it" else query } } - filters.filterIsInstance().forEach { it -> - if (it.state.isNotEmpty()) { - val splitted = it.state.split(",").filter(String::isNotBlank) - if (splitted.size < 2 && it.type != "tags") { - modifiedQuery += " ${it.type}:\"${it.state.replace(" ", "+")}\"" + filters.filterIsInstance().forEach { filter -> + if (filter.state.isNotEmpty()) { + val splitted = filter.state.split(",").filter(String::isNotBlank) + if (splitted.size < 2 && filter.type != "tags") { + modifiedQuery += " ${filter.type}:\"${filter.state.replace(" ", "+")}\"" } else { splitted.forEach { tag -> val trimmed = tag.trim().lowercase() - if (trimmed.startsWith('-')) { - modifiedQuery += " -${it.type}:\"${trimmed.removePrefix("-").replace(" ", "+")}\"" + modifiedQuery += if (trimmed.startsWith('-')) { + " -${filter.type}:\"${trimmed.removePrefix("-").replace(" ", "+")}\"" } else { - modifiedQuery += " ${it.type}:\"${trimmed.replace(" ", "+")}\"" + " ${filter.type}:\"${trimmed.replace(" ", "+")}\"" } } } @@ -378,7 +380,7 @@ abstract class EHentai( cookies["ipb_pass_hash"] = passHash - cookies["igneous"] = "" + cookies["igneous"] = igneous buildCookies(cookies) } @@ -414,6 +416,7 @@ abstract class EHentai( // Filters override fun getFilterList() = FilterList( EnforceLanguageFilter(getEnforceLanguagePref()), + Favorites(), Watched(), GenreGroup(), Filter.Header("Separate tags with commas (,)"), @@ -435,6 +438,14 @@ abstract class EHentai( } } + class Favorites : CheckBox("Favorites"), UriFilter { + override fun addToUri(builder: Uri.Builder) { + if (state) { + builder.appendPath("favorites.php") + } + } + } + class GenreOption(name: String, private val genreId: String) : CheckBox(name, false), UriFilter { override fun addToUri(builder: Uri.Builder) { builder.appendQueryParameter("f_$genreId", if (state) "1" else "0") @@ -561,21 +572,33 @@ abstract class EHentai( private const val PASS_HASH_PREF_TITLE = "ipb_pass_hash" private const val PASS_HASH_PREF_SUMMARY = "ipb_pass_hash value" private const val PASS_HASH_PREF_DEFAULT_VALUE = "" + + private const val IGNEOUS_PREF_KEY = "IGNEOUS" + private const val IGNEOUS_PREF_TITLE = "igneous" + private const val IGNEOUS_PREF_SUMMARY = "igneous value override" + private const val IGNEOUS_PREF_DEFAULT_VALUE = "" + + private const val FORCE_EH = "FORCE_EH" + private const val FORCE_EH_TITLE = "Force e-hentai" + private const val FORCE_EH_SUMMARY = "Force e-hentai to avoid content on exhentai" + private const val FORCE_EH_DEFAULT_VALUE = true } // Preferences override fun setupPreferenceScreen(screen: PreferenceScreen) { + val forceEhPref = CheckBoxPreference(screen.context).apply { + key = FORCE_EH + title = FORCE_EH_TITLE + summary = FORCE_EH_SUMMARY + setDefaultValue(FORCE_EH_DEFAULT_VALUE) + } + val enforceLanguagePref = CheckBoxPreference(screen.context).apply { key = "${ENFORCE_LANGUAGE_PREF_KEY}_$lang" title = ENFORCE_LANGUAGE_PREF_TITLE summary = ENFORCE_LANGUAGE_PREF_SUMMARY setDefaultValue(ENFORCE_LANGUAGE_PREF_DEFAULT_VALUE) - - setOnPreferenceChangeListener { _, newValue -> - val checkValue = newValue as Boolean - preferences.edit().putBoolean("${ENFORCE_LANGUAGE_PREF_KEY}_$lang", checkValue).commit() - } } val memberIdPref = EditTextPreference(screen.context).apply { @@ -593,8 +616,19 @@ abstract class EHentai( setDefaultValue(PASS_HASH_PREF_DEFAULT_VALUE) } + + val igneousPref = EditTextPreference(screen.context).apply { + key = IGNEOUS_PREF_KEY + title = IGNEOUS_PREF_TITLE + summary = IGNEOUS_PREF_SUMMARY + + setDefaultValue(IGNEOUS_PREF_DEFAULT_VALUE) + } + + screen.addPreference(forceEhPref) screen.addPreference(memberIdPref) screen.addPreference(passHashPref) + screen.addPreference(igneousPref) screen.addPreference(enforceLanguagePref) } @@ -629,4 +663,12 @@ abstract class EHentai( private fun getMemberIdPref(): String { return getCookieValue(MEMBER_ID_PREF_TITLE, MEMBER_ID_PREF_DEFAULT_VALUE, MEMBER_ID_PREF_KEY) } + + private fun getIgneousPref(): String { + return getCookieValue(IGNEOUS_PREF_TITLE, IGNEOUS_PREF_DEFAULT_VALUE, IGNEOUS_PREF_KEY) + } + + private fun getForceEhPref(): Boolean { + return preferences.getBoolean(FORCE_EH, FORCE_EH_DEFAULT_VALUE) + } }