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 eb919e17e..063f9bcf0 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 @@ -289,8 +289,6 @@ object PreferenceKeys { const val mangaDexLowQualityCovers = "manga_dex_low_quality_covers" - const val experimentalFeatures = "experimental_features" - const val dataSaver = "data_saver" const val ignoreJpeg = "ignore_jpeg" 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 364acfd34..ff06e2ac9 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 @@ -394,8 +394,6 @@ class PreferencesHelper(val context: Context) { 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) 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 5f582da04..b88024c77 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,22 +2,25 @@ package eu.kanade.tachiyomi.source.model import android.net.Uri import eu.kanade.tachiyomi.network.ProgressListener -import eu.kanade.tachiyomi.util.DataSaver +import exh.util.DataSaver import rx.subjects.Subject open class Page( val index: Int, /* SY --> */ var /* SY <-- */ url: String = "", + /* SY --> var <-- SY */ imageUrl: String? = null, @Transient var uri: Uri? = null // Deprecated but can't be deleted due to extensions ) : ProgressListener { + // SY --> var imageUrl = imageUrl get() { if (field == null) return null return DataSaver().compress(field!!) } + // SY <-- 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 33989634e..dec8598b8 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 @@ -19,6 +19,7 @@ import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.library.LibraryUpdateService import eu.kanade.tachiyomi.data.library.LibraryUpdateService.Target import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys +import eu.kanade.tachiyomi.data.preference.asImmediateFlow import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.SourceManager.Companion.DELEGATED_SOURCES @@ -26,6 +27,7 @@ import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction import eu.kanade.tachiyomi.util.lang.launchUI 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.onChange import eu.kanade.tachiyomi.util.preference.onClick @@ -45,6 +47,7 @@ import kotlinx.coroutines.CoroutineStart import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job +import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.launch import rx.Observable import rx.android.schedulers.AndroidSchedulers @@ -158,6 +161,77 @@ class SettingsAdvancedController : SettingsController() { } } + preferenceCategory { + titleRes = R.string.data_saver + + switchPreference { + titleRes = R.string.data_saver + summaryRes = R.string.data_saver_summary + key = Keys.dataSaver + defaultValue = false + } + + editTextPreference { + titleRes = R.string.data_saver_server + key = Keys.dataSaverServer + defaultValue = "" + summaryRes = R.string.data_saver_server_summary + + preferences.dataSaver().asImmediateFlow { isVisible = it } + .launchIn(scope) + } + + switchPreference { + titleRes = R.string.ignore_jpeg + key = Keys.ignoreJpeg + defaultValue = false + + preferences.dataSaver().asImmediateFlow { isVisible = it } + .launchIn(scope) + } + + switchPreference { + titleRes = R.string.ignore_gif + key = Keys.ignoreGif + defaultValue = true + + preferences.dataSaver().asImmediateFlow { isVisible = it } + .launchIn(scope) + } + + 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" + summaryRes = R.string.data_saver_image_quality_summary + + preferences.dataSaver().asImmediateFlow { isVisible = it } + .launchIn(scope) + } + + switchPreference { + titleRes = R.string.data_saver_image_format + key = Keys.dataSaverImageFormatJpeg + defaultValue = false + summaryOn = context.getString(R.string.data_saver_image_format_summary_on) + summaryOff = context.getString(R.string.data_saver_image_format_summary_off) + + preferences.dataSaver().asImmediateFlow { isVisible = it } + .launchIn(scope) + } + + switchPreference { + titleRes = R.string.data_saver_color_bw + key = Keys.dataSaverColorBW + defaultValue = false + + preferences.dataSaver().asImmediateFlow { isVisible = it } + .launchIn(scope) + } + } + preferenceCategory { titleRes = R.string.developer_tools isPersistent = false @@ -195,13 +269,6 @@ 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 deleted file mode 100644 index c9cc10775..000000000 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsExperimentalFeatures.kt +++ /dev/null @@ -1,70 +0,0 @@ -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 bf9ef6bb5..6d2de3a52 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,7 +80,6 @@ class SettingsMainController : SettingsController() { onClick { navigateTo(SettingsEhController()) } } } - // SY <-- preference { iconRes = R.drawable.ic_code_24dp @@ -88,15 +87,6 @@ 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 deleted file mode 100644 index 70f162e94..000000000 --- a/app/src/main/java/eu/kanade/tachiyomi/util/DataSaver.kt +++ /dev/null @@ -1,34 +0,0 @@ -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/java/exh/util/DataSaver.kt b/app/src/main/java/exh/util/DataSaver.kt new file mode 100644 index 000000000..678780ca8 --- /dev/null +++ b/app/src/main/java/exh/util/DataSaver.kt @@ -0,0 +1,29 @@ +package exh.util + +import eu.kanade.tachiyomi.data.preference.PreferencesHelper +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get + +class DataSaver { + private val preferences: PreferencesHelper = Injekt.get() + + fun compress(imageUrl: String): String { + return if (preferences.dataSaver().get() && preferences.dataSaverServer().get().isNotBlank() && !imageUrl.contains(preferences.dataSaverServer().get() + "/?")) { + when { + imageUrl.contains(".jpeg", true) || imageUrl.contains(".jpg", true) -> if (preferences.ignoreJpeg().get()) imageUrl else getUrl(imageUrl) + imageUrl.contains(".gif", true) -> if (preferences.ignoreGif().get()) imageUrl else getUrl(imageUrl) + else -> getUrl(imageUrl) + } + } else imageUrl + } + + private fun getUrl(imageUrl: String): String { + val server = preferences.dataSaverServer().get() + "/?" + val format = "jpeg=${if (preferences.dataSaverImageFormatJpeg().get()) "1" else "0"}" + val quality = "&l=${preferences.dataSaverImageQuality().get()}" + val colorBW = "&bw=${if (preferences.dataSaverColorBW().get()) "1" else "0"}" + val url = "$server$format$quality$colorBW&url=" + + return url + imageUrl + } +} diff --git a/app/src/main/res/values/strings_sy.xml b/app/src/main/res/values/strings_sy.xml index 5cddf2e40..a1cf46c15 100644 --- a/app/src/main/res/values/strings_sy.xml +++ b/app/src/main/res/values/strings_sy.xml @@ -32,7 +32,6 @@ All Sources E-Hentai Fork Settings - Experimental Features @@ -121,8 +120,6 @@ 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 @@ -137,6 +134,18 @@ Cleanup done. Removed %d folder Cleanup done. Removed %d folders + Data Saver + Compress images before downloading or loading in reader, requires a Bandwidth Hero Proxy server + Ignore Jpeg Images + Ignore Gif Animations + Image Quality + Higher values mean that a higher percentage of the image quality is saved, but it also means the file size is larger, 80 percent is a good median between file size and image quality + Compress to Jpeg + The Jpeg file size is considerably smaller then Webp is(meaning more data is saved), but it makes the images lose more quality as well.\nCurrently compresses to Jpeg + The Jpeg file size is considerably smaller then Webp is(meaning more data is saved), but it makes the images lose more quality as well.\nCurrently compresses to Webp + Convert to Black And White + Bandwidth Hero Proxy Server + Put Bandwidth Hero Proxy server url here Minimal @@ -469,18 +478,5 @@ %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