e-hentai: favorite filtering and manual igneous cookie setting ()

* feat: igneous header override

* feat: favorites filter

* chore: simple code clean

* chore: version bump

* feat: force e-hentai setting

* fix: requested changes

* fix: force default to true
This commit is contained in:
rebel onion 2025-01-12 03:29:01 -06:00 committed by Draff
parent d470490087
commit 5ac0b9b5f6
No known key found for this signature in database
GPG Key ID: E8A89F3211677653
2 changed files with 58 additions and 16 deletions
src/all/ehentai
build.gradle
src/eu/kanade/tachiyomi/extension/all/ehentai

@ -1,7 +1,7 @@
ext {
extName = 'E-Hentai'
extClass = '.EHFactory'
extVersionCode = 23
extVersionCode = 24
isNsfw = true
}

@ -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<TextFilter>().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<TextFilter>().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)
}
}