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 96c3eb0db..5cb722544 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.getInt("data_saver", 0) + fun dataSaver() = preferenceStore.getEnum("data_saver", DataSaver.NONE) fun dataSaverIgnoreJpeg() = preferenceStore.getBoolean("ignore_jpeg", false) @@ -60,5 +60,11 @@ class SourcePreferences( fun dataSaverExcludedSources() = preferenceStore.getStringSet("data_saver_excluded", emptySet()) fun dataSaverDownloader() = preferenceStore.getBoolean("data_saver_downloader", true) + + enum class DataSaver { + NONE, + BANDWIDTH_HERO, + WSRV_NL, + } // SY <-- } 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 a57eb464c..176355981 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 @@ -42,6 +42,7 @@ import eu.kanade.domain.UnsortedPreferences import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.manga.interactor.GetAllManga import eu.kanade.domain.source.service.SourcePreferences +import eu.kanade.domain.source.service.SourcePreferences.DataSaver import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.util.collectAsState import eu.kanade.tachiyomi.R @@ -604,31 +605,31 @@ object SettingsAdvancedScreen : SearchableSettings { 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), + DataSaver.NONE to stringResource(R.string.disabled), + DataSaver.BANDWIDTH_HERO to stringResource(R.string.bandwidth_hero), + DataSaver.WSRV_NL to stringResource(R.string.wsrv), ), ), Preference.PreferenceItem.EditTextPreference( pref = sourcePreferences.dataSaverServer(), title = stringResource(R.string.bandwidth_data_saver_server), subtitle = stringResource(R.string.data_saver_server_summary), - enabled = (dataSaver == 1), + enabled = dataSaver == DataSaver.BANDWIDTH_HERO, ), Preference.PreferenceItem.SwitchPreference( pref = sourcePreferences.dataSaverDownloader(), title = stringResource(R.string.data_saver_downloader), - enabled = (dataSaver != 0), + enabled = dataSaver != DataSaver.NONE, ), Preference.PreferenceItem.SwitchPreference( pref = sourcePreferences.dataSaverIgnoreJpeg(), title = stringResource(R.string.data_saver_ignore_jpeg), - enabled = (dataSaver != 0), + enabled = dataSaver != DataSaver.NONE, ), Preference.PreferenceItem.SwitchPreference( pref = sourcePreferences.dataSaverIgnoreGif(), title = stringResource(R.string.data_saver_ignore_gif), - enabled = (dataSaver != 0), + enabled = dataSaver != DataSaver.NONE, ), Preference.PreferenceItem.ListPreference( pref = sourcePreferences.dataSaverImageQuality(), @@ -644,7 +645,7 @@ object SettingsAdvancedScreen : SearchableSettings { "90%", "95%", ).associateBy { it.trimEnd('%').toInt() }, - enabled = (dataSaver != 0), + enabled = dataSaver != DataSaver.NONE, ), kotlin.run { val dataSaverImageFormatJpeg by sourcePreferences.dataSaverImageFormatJpeg().collectAsState() @@ -656,13 +657,13 @@ object SettingsAdvancedScreen : SearchableSettings { } else { stringResource(R.string.data_saver_image_format_summary_off) }, - enabled = (dataSaver != 0), + enabled = dataSaver != DataSaver.NONE, ) }, Preference.PreferenceItem.SwitchPreference( pref = sourcePreferences.dataSaverColorBW(), title = stringResource(R.string.data_saver_color_bw), - enabled = (dataSaver == 1), + enabled = dataSaver == DataSaver.BANDWIDTH_HERO, ), ), ) 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 e7e223e86..6e9498aab 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 @@ -14,6 +14,7 @@ import eu.kanade.domain.source.interactor.ToggleExcludeFromDataSaver import eu.kanade.domain.source.interactor.ToggleSource import eu.kanade.domain.source.interactor.ToggleSourcePin import eu.kanade.domain.source.service.SourcePreferences +import eu.kanade.domain.source.service.SourcePreferences.DataSaver import eu.kanade.domain.ui.UiPreferences import eu.kanade.presentation.browse.SourceUiModel import kotlinx.coroutines.Dispatchers @@ -75,7 +76,7 @@ class SourcesScreenModel( .onEach { mutableState.update { it.copy( - dataSaverEnabled = (sourcePreferences.dataSaver().get()), + dataSaverEnabled = sourcePreferences.dataSaver().get() != DataSaver.NONE, ) } } @@ -195,7 +196,7 @@ data class SourcesState( val categories: List = emptyList(), val showPin: Boolean = true, val showLatest: Boolean = false, - val dataSaverEnabled: Int = 0, + val dataSaverEnabled: Boolean = false, // 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 77da942ec..2acfc7275 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 != 0 }, + }.takeIf { state.dataSaverEnabled }, onDismiss = screenModel::closeDialog, ) } diff --git a/app/src/main/java/exh/util/DataSaver.kt b/app/src/main/java/exh/util/DataSaver.kt index 9321b98a9..e84626337 100644 --- a/app/src/main/java/exh/util/DataSaver.kt +++ b/app/src/main/java/exh/util/DataSaver.kt @@ -1,6 +1,9 @@ package exh.util import eu.kanade.domain.source.service.SourcePreferences +import eu.kanade.domain.source.service.SourcePreferences.DataSaver.BANDWIDTH_HERO +import eu.kanade.domain.source.service.SourcePreferences.DataSaver.NONE +import eu.kanade.domain.source.service.SourcePreferences.DataSaver.WSRV_NL import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.online.HttpSource @@ -41,15 +44,18 @@ interface DataSaver { } fun DataSaver(source: Source, preferences: SourcePreferences): DataSaver { - return if (preferences.dataSaver().get() != 0 && source.id.toString() !in preferences.dataSaverExcludedSources().get()) { - return DataSaverImpl(preferences) - } else { - DataSaver.NoOp + val dataSaver = preferences.dataSaver().get() + if (dataSaver != NONE && source.id.toString() in preferences.dataSaverExcludedSources().get()) { + return DataSaver.NoOp + } + return when (dataSaver) { + NONE -> DataSaver.NoOp + BANDWIDTH_HERO -> BandwidthHeroDataSaver(preferences) + WSRV_NL -> WsrvNlDataSaver(preferences) } } -private class DataSaverImpl(preferences: SourcePreferences) : DataSaver { - private val dataSaver = preferences.dataSaver().get() +private class BandwidthHeroDataSaver(preferences: SourcePreferences) : DataSaver { private val dataSavedServer = preferences.dataSaverServer().get().trimEnd('/') private val ignoreJpg = preferences.dataSaverIgnoreJpeg().get() @@ -60,7 +66,7 @@ private class DataSaverImpl(preferences: SourcePreferences) : DataSaver { private val colorBW = preferences.dataSaverColorBW().toIntRepresentation() override fun compress(imageUrl: String): String { - return if (dataSaver == 2 || (dataSaver == 1 && dataSavedServer.isNotBlank() && !imageUrl.contains(dataSavedServer))) { + return if (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) @@ -72,28 +78,44 @@ private class DataSaverImpl(preferences: SourcePreferences) : DataSaver { } private fun getUrl(imageUrl: String): String { - 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" - } - } - } + // Network Request sent for the Bandwidth Hero Proxy server + return "$dataSavedServer/?jpg=$format&l=$quality&bw=$colorBW&url=$imageUrl" } private fun Preference.toIntRepresentation() = if (get()) "1" else "0" } + +private class WsrvNlDataSaver(preferences: SourcePreferences) : DataSaver { + private val ignoreJpg = preferences.dataSaverIgnoreJpeg().get() + private val ignoreGif = preferences.dataSaverIgnoreGif().get() + + private val format = preferences.dataSaverImageFormatJpeg().get() + private val quality = preferences.dataSaverImageQuality().get() + + override fun compress(imageUrl: String): String { + return 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) + else -> getUrl(imageUrl) + } + } + + private fun getUrl(imageUrl: String): String { + // Network Request sent to wsrv + return "https://wsrv.nl/?url=$imageUrl" + if (imageUrl.contains(".webp", true) || imageUrl.contains(".gif", true)) { + if (!format) { + // Preserve output image extension for animated images(.webp and .gif) + "&q=$quality&n=-1" + } else { + // Do not preserve output Extension if User asked to convert into Jpeg + "&output=jpg&q=$quality&n=-1" + } + } else { + if (format) { + "&output=jpg&q=$quality" + } else { + "&output=webp&q=$quality" + } + } + } +}