diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt index 4fde7b0b4..eb919e17e 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt @@ -288,4 +288,20 @@ object PreferenceKeys { const val useNewSourceNavigation = "use_new_source_navigation" const val mangaDexLowQualityCovers = "manga_dex_low_quality_covers" + + const val experimentalFeatures = "experimental_features" + + const val dataSaver = "data_saver" + + const val ignoreJpeg = "ignore_jpeg" + + const val ignoreGif = "ignore_gif" + + const val dataSaverImageQuality = "data_saver_image_quality" + + const val dataSaverImageFormatJpeg = "data_saver_image_format_jpeg" + + const val dataSaverServer = "data_saver_server" + + const val dataSaverColorBW = "data_saver_color_bw" } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt index 4fe7653cd..364acfd34 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt @@ -393,4 +393,20 @@ class PreferencesHelper(val context: Context) { fun useNewSourceNavigation() = flowPrefs.getBoolean(Keys.useNewSourceNavigation, false) fun mangaDexLowQualityCovers() = flowPrefs.getBoolean(Keys.mangaDexLowQualityCovers, false) + + fun experimentalFeatures() = flowPrefs.getBoolean(Keys.experimentalFeatures, false) + + fun dataSaver() = flowPrefs.getBoolean(Keys.dataSaver, false) + + fun ignoreJpeg() = flowPrefs.getBoolean(Keys.ignoreJpeg, false) + + fun ignoreGif() = flowPrefs.getBoolean(Keys.ignoreGif, true) + + fun dataSaverImageQuality() = flowPrefs.getInt(Keys.dataSaverImageQuality, 80) + + fun dataSaverImageFormatJpeg() = flowPrefs.getBoolean(Keys.dataSaverImageFormatJpeg, false) + + fun dataSaverServer() = flowPrefs.getString(Keys.dataSaverServer, "") + + fun dataSaverColorBW() = flowPrefs.getBoolean(Keys.dataSaverColorBW, false) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/model/Page.kt b/app/src/main/java/eu/kanade/tachiyomi/source/model/Page.kt index 90e009c3b..5f582da04 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/model/Page.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/model/Page.kt @@ -2,16 +2,23 @@ package eu.kanade.tachiyomi.source.model import android.net.Uri import eu.kanade.tachiyomi.network.ProgressListener +import eu.kanade.tachiyomi.util.DataSaver import rx.subjects.Subject open class Page( val index: Int, /* SY --> */ var /* SY <-- */ url: String = "", - var imageUrl: String? = null, + imageUrl: String? = null, @Transient var uri: Uri? = null // Deprecated but can't be deleted due to extensions ) : ProgressListener { + var imageUrl = imageUrl + get() { + if (field == null) return null + return DataSaver().compress(field!!) + } + val number: Int get() = index + 1 diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt index 4bb3548c1..33989634e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt @@ -195,6 +195,13 @@ class SettingsAdvancedController : SettingsController() { summary = context.getString(R.string.toggle_delegated_sources_summary, context.getString(R.string.app_name), DELEGATED_SOURCES.values.map { it.sourceName }.distinct().joinToString()) } + switchPreference { + titleRes = R.string.toggle_experimental_features + key = Keys.experimentalFeatures + defaultValue = false + summary = context.getString(R.string.toggle_experimental_features_summary) + } + intListPreference { key = Keys.eh_logLevel titleRes = R.string.log_level diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsExperimentalFeatures.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsExperimentalFeatures.kt new file mode 100644 index 000000000..c9cc10775 --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsExperimentalFeatures.kt @@ -0,0 +1,70 @@ +package eu.kanade.tachiyomi.ui.setting + +import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys +import eu.kanade.tachiyomi.util.preference.defaultValue +import eu.kanade.tachiyomi.util.preference.editTextPreference +import eu.kanade.tachiyomi.util.preference.intListPreference +import eu.kanade.tachiyomi.util.preference.preferenceCategory +import eu.kanade.tachiyomi.util.preference.summaryRes +import eu.kanade.tachiyomi.util.preference.switchPreference +import eu.kanade.tachiyomi.util.preference.titleRes + +class SettingsExperimentalFeatures : SettingsController() { + + override fun setupPreferenceScreen(screen: PreferenceScreen) = with(screen) { + titleRes = R.string.expermental_feature_sttings + + preferenceCategory { + titleRes = R.string.data_saver + summaryRes = R.string.data_saver_summary + + switchPreference { + titleRes = R.string.enable_data_saver + key = Keys.dataSaver + defaultValue = false + } + + switchPreference { + titleRes = R.string.ignore_jpeg + key = Keys.ignoreJpeg + defaultValue = false + } + + switchPreference { + titleRes = R.string.ignore_gif + key = Keys.ignoreGif + defaultValue = true + } + + intListPreference { + titleRes = R.string.data_saver_image_quality + key = Keys.dataSaverImageQuality + entries = arrayOf("10", "20", "40", "50", "70", "80", "90", "95") + entryValues = entries + defaultValue = "80" + } + + switchPreference { + titleRes = R.string.data_saver_image_format + key = Keys.dataSaverImageFormatJpeg + defaultValue = false + summaryRes = R.string.data_saver_image_format_summary + } + + switchPreference { + titleRes = R.string.data_saver_color_bw + key = Keys.dataSaverColorBW + defaultValue = false + } + + editTextPreference { + titleRes = R.string.data_saver_server + key = Keys.dataSaverServer + defaultValue = "" + summaryRes = R.string.data_saver_server_summary + } + } + } +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsMainController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsMainController.kt index 6d2de3a52..bf9ef6bb5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsMainController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsMainController.kt @@ -80,6 +80,7 @@ class SettingsMainController : SettingsController() { onClick { navigateTo(SettingsEhController()) } } } + // SY <-- preference { iconRes = R.drawable.ic_code_24dp @@ -87,6 +88,15 @@ class SettingsMainController : SettingsController() { titleRes = R.string.pref_category_advanced onClick { navigateTo(SettingsAdvancedController()) } } + + if (preferences.experimentalFeatures().get()) { + preference { + iconRes = R.drawable.ic_code_24dp + iconTint = tintColor + titleRes = R.string.expermental_feature_sttings + onClick { navigateTo(SettingsExperimentalFeatures()) } + } + } } private fun navigateTo(controller: SettingsController) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/DataSaver.kt b/app/src/main/java/eu/kanade/tachiyomi/util/DataSaver.kt new file mode 100644 index 000000000..70f162e94 --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/util/DataSaver.kt @@ -0,0 +1,34 @@ +package eu.kanade.tachiyomi.util + +import eu.kanade.tachiyomi.data.preference.PreferencesHelper +import uy.kohesive.injekt.injectLazy + +class DataSaver() { + + private val prefs: PreferencesHelper by injectLazy() + + fun compress(imageUrl: String): String { + val server = prefs.dataSaverServer().get() + "/?" + val format = "jpeg=${if (prefs.dataSaverImageFormatJpeg().get()) "1" else "0"}" + val quality = "&l=${prefs.dataSaverImageQuality().get()}" + val colorBW = "&bw=${if (prefs.dataSaverColorBW().get()) "1" else "0"}" + val url = "$server$format$quality$colorBW&url=" + val ignoreJpeg: Boolean = prefs.ignoreJpeg().get() + val ignoreGif: Boolean = prefs.ignoreGif().get() + val dataSaverStatus: Boolean = prefs.dataSaver().get() + var process = false + var processedUrl = imageUrl + + if (dataSaverStatus) process = true + if (imageUrl.contains(server)) process = false + if (ignoreJpeg) { + if (imageUrl.contains(".jpeg", true) || imageUrl.contains(".jpg", true)) process = false + } + if (ignoreGif) { + if (imageUrl.contains(".gif", true)) process = false + } + if (process) processedUrl = url + imageUrl + + return processedUrl + } +} diff --git a/app/src/main/res/values/strings_sy.xml b/app/src/main/res/values/strings_sy.xml index 4923f2525..5cddf2e40 100644 --- a/app/src/main/res/values/strings_sy.xml +++ b/app/src/main/res/values/strings_sy.xml @@ -32,6 +32,8 @@ All Sources E-Hentai Fork Settings + Experimental Features + E-Hentai Website Account Settings @@ -119,6 +121,8 @@ This is a experimental feature that will disable all hentai features if toggled off Enable delegated sources Apply %1$s enhancements to the following sources if they are installed: %2$s + Show Experimental Features + Show features that are experimental and not for normal users Log level Changing this can impact app performance. Force-restart app after changing. Current value: %s Enable source blacklist @@ -465,5 +469,18 @@ %2$s, %1$d pages + + Data Saver + Compress images before downloading or loading in reader + Enable Data Saver + Ignore Jpeg Images + Ignore Gif Animation + Image Quality + Compress to Jpeg + Convert to Black And White + Compresses to webp if this option is turned off + Data Saver Server + It uses Bandwidth Hero Proxy as Server.To use it you need to create a Bandwidth Hero server and give the server URL + \ No newline at end of file