From ba0674c4a326b8b745d39619fb6150e31931ca59 Mon Sep 17 00:00:00 2001 From: Wisest_wizard <76830230+suhan-paradkar@users.noreply.github.com> Date: Thu, 16 Mar 2023 03:14:57 +0530 Subject: [PATCH] Use wsrv.nl service (#778) * Add wsrv.nl datasaver service * Add code comments (cherry picked from commit ae712527f333577fb2bbc178c5d915e6e6ae3916) --- .../source/service/SourcePreferences.kt | 2 +- .../settings/screen/SettingsAdvancedScreen.kt | 23 +++++++++------- .../ui/browse/source/SourcesScreenModel.kt | 10 ++++--- .../tachiyomi/ui/browse/source/SourcesTab.kt | 2 +- app/src/main/java/exh/util/DataSaver.kt | 27 ++++++++++++++++--- i18n/src/main/res/values/strings_sy.xml | 6 +++-- 6 files changed, 51 insertions(+), 19 deletions(-) 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 9a93079bc..6527b7a1a 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 @@ -41,7 +41,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 01df15908..a827a0f2a 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 9b8cd8dab..46ffbf3f7 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