diff --git a/app/src/main/java/eu/kanade/domain/source/service/SourcePreferences.kt b/app/src/main/java/eu/kanade/domain/source/service/SourcePreferences.kt index 22428a5f5..96c3eb0db 100644 --- a/app/src/main/java/eu/kanade/domain/source/service/SourcePreferences.kt +++ b/app/src/main/java/eu/kanade/domain/source/service/SourcePreferences.kt @@ -43,7 +43,7 @@ class SourcePreferences( fun sourcesTabSourcesInCategories() = preferenceStore.getStringSet("sources_tab_source_categories", mutableSetOf()) - fun dataSaver() = preferenceStore.getBoolean("data_saver", false) + fun dataSaver() = preferenceStore.getInt("data_saver", 0) fun dataSaverIgnoreJpeg() = preferenceStore.getBoolean("ignore_jpeg", false) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt index 0c8557254..a57eb464c 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt @@ -599,31 +599,36 @@ object SettingsAdvancedScreen : SearchableSettings { return Preference.PreferenceGroup( title = stringResource(R.string.data_saver), preferenceItems = listOf( - Preference.PreferenceItem.SwitchPreference( + Preference.PreferenceItem.ListPreference( pref = sourcePreferences.dataSaver(), title = stringResource(R.string.data_saver), subtitle = stringResource(R.string.data_saver_summary), + entries = mapOf( + 0 to stringResource(R.string.disabled), + 1 to stringResource(R.string.bandwidth_hero), + 2 to stringResource(R.string.wsrv), + ), ), Preference.PreferenceItem.EditTextPreference( pref = sourcePreferences.dataSaverServer(), - title = stringResource(R.string.data_saver_server), + title = stringResource(R.string.bandwidth_data_saver_server), subtitle = stringResource(R.string.data_saver_server_summary), - enabled = dataSaver, + enabled = (dataSaver == 1), ), Preference.PreferenceItem.SwitchPreference( pref = sourcePreferences.dataSaverDownloader(), title = stringResource(R.string.data_saver_downloader), - enabled = dataSaver, + enabled = (dataSaver != 0), ), Preference.PreferenceItem.SwitchPreference( pref = sourcePreferences.dataSaverIgnoreJpeg(), title = stringResource(R.string.data_saver_ignore_jpeg), - enabled = dataSaver, + enabled = (dataSaver != 0), ), Preference.PreferenceItem.SwitchPreference( pref = sourcePreferences.dataSaverIgnoreGif(), title = stringResource(R.string.data_saver_ignore_gif), - enabled = dataSaver, + enabled = (dataSaver != 0), ), Preference.PreferenceItem.ListPreference( pref = sourcePreferences.dataSaverImageQuality(), @@ -639,7 +644,7 @@ object SettingsAdvancedScreen : SearchableSettings { "90%", "95%", ).associateBy { it.trimEnd('%').toInt() }, - enabled = dataSaver, + enabled = (dataSaver != 0), ), kotlin.run { val dataSaverImageFormatJpeg by sourcePreferences.dataSaverImageFormatJpeg().collectAsState() @@ -651,13 +656,13 @@ object SettingsAdvancedScreen : SearchableSettings { } else { stringResource(R.string.data_saver_image_format_summary_off) }, - enabled = dataSaver, + enabled = (dataSaver != 0), ) }, Preference.PreferenceItem.SwitchPreference( pref = sourcePreferences.dataSaverColorBW(), title = stringResource(R.string.data_saver_color_bw), - enabled = dataSaver, + enabled = (dataSaver == 1), ), ), ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesScreenModel.kt index c86b3507c..e7e223e86 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesScreenModel.kt @@ -72,8 +72,12 @@ class SourcesScreenModel( .launchIn(coroutineScope) sourcePreferences.dataSaver().changes() - .onEach { enabled -> - mutableState.update { it.copy(dataSaverEnabled = enabled) } + .onEach { + mutableState.update { + it.copy( + dataSaverEnabled = (sourcePreferences.dataSaver().get()), + ) + } } .launchIn(coroutineScope) // SY <-- @@ -191,7 +195,7 @@ data class SourcesState( val categories: List = emptyList(), val showPin: Boolean = true, val showLatest: Boolean = false, - val dataSaverEnabled: Boolean = false, + val dataSaverEnabled: Int = 0, // SY <-- ) { val isEmpty = items.isEmpty() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesTab.kt index 2acfc7275..77da942ec 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesTab.kt @@ -97,7 +97,7 @@ fun Screen.sourcesTab( onClickToggleDataSaver = { screenModel.toggleExcludeFromDataSaver(source) screenModel.closeDialog() - }.takeIf { state.dataSaverEnabled }, + }.takeIf { state.dataSaverEnabled != 0 }, onDismiss = screenModel::closeDialog, ) } diff --git a/app/src/main/java/exh/util/DataSaver.kt b/app/src/main/java/exh/util/DataSaver.kt index 33fb41a4e..9321b98a9 100644 --- a/app/src/main/java/exh/util/DataSaver.kt +++ b/app/src/main/java/exh/util/DataSaver.kt @@ -41,7 +41,7 @@ interface DataSaver { } fun DataSaver(source: Source, preferences: SourcePreferences): DataSaver { - return if (preferences.dataSaver().get() && source.id.toString() !in preferences.dataSaverExcludedSources().get()) { + return if (preferences.dataSaver().get() != 0 && source.id.toString() !in preferences.dataSaverExcludedSources().get()) { return DataSaverImpl(preferences) } else { DataSaver.NoOp @@ -49,6 +49,7 @@ fun DataSaver(source: Source, preferences: SourcePreferences): DataSaver { } private class DataSaverImpl(preferences: SourcePreferences) : DataSaver { + private val dataSaver = preferences.dataSaver().get() private val dataSavedServer = preferences.dataSaverServer().get().trimEnd('/') private val ignoreJpg = preferences.dataSaverIgnoreJpeg().get() @@ -59,7 +60,7 @@ private class DataSaverImpl(preferences: SourcePreferences) : DataSaver { private val colorBW = preferences.dataSaverColorBW().toIntRepresentation() override fun compress(imageUrl: String): String { - return if (dataSavedServer.isNotBlank() && !imageUrl.contains(dataSavedServer)) { + return if (dataSaver == 2 || (dataSaver == 1 && dataSavedServer.isNotBlank() && !imageUrl.contains(dataSavedServer))) { when { imageUrl.contains(".jpeg", true) || imageUrl.contains(".jpg", true) -> if (ignoreJpg) imageUrl else getUrl(imageUrl) imageUrl.contains(".gif", true) -> if (ignoreGif) imageUrl else getUrl(imageUrl) @@ -71,7 +72,27 @@ private class DataSaverImpl(preferences: SourcePreferences) : DataSaver { } private fun getUrl(imageUrl: String): String { - return "$dataSavedServer/?jpg=$format&l=$quality&bw=$colorBW&url=$imageUrl" + if (dataSaver == 1) { + // Network Request sent for the Bandwidth Hero Proxy server + return "$dataSavedServer/?jpg=$format&l=$quality&bw=$colorBW&url=$imageUrl" + } else { + // Network Request sent to wsrv + if (imageUrl.contains(".webp", true) || imageUrl.contains(".gif", true)) { + if (format.toInt() == 0) { + // Preserve output image extension for animated images(.webp and .gif) + return "https://wsrv.nl/?url=$imageUrl&q=$quality&n=-1" + } else { + // Do not preserve output Extension if User asked to convert into Jpeg + return "https://wsrv.nl/?url=$imageUrl&output=jpg&q=$quality&n=-1" + } + } else { + if (format.toInt() == 1) { + return "https://wsrv.nl/?url=$imageUrl&output=jpg&q=$quality" + } else { + return "https://wsrv.nl/?url=$imageUrl&output=webp&q=$quality" + } + } + } } private fun Preference.toIntRepresentation() = if (get()) "1" else "0" diff --git a/i18n/src/main/res/values/strings_sy.xml b/i18n/src/main/res/values/strings_sy.xml index 24ab78e61..2acbc3654 100644 --- a/i18n/src/main/res/values/strings_sy.xml +++ b/i18n/src/main/res/values/strings_sy.xml @@ -141,7 +141,7 @@ Cleanup done. Removed %d folders Data Saver - Compress images before downloading or loading in reader, requires a Bandwidth Hero Proxy server + Compress images before downloading or loading in reader Use data saver in the downloader Ignore Jpeg Images Ignore Gif Animations @@ -151,7 +151,9 @@ 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 + Bandwidth Hero (requires a Bandwidth Hero Proxy server) + wsrv.nl + Bandwidth Hero Proxy Server Put Bandwidth Hero Proxy server url here Keep entries with read chapters