Refactor data saver

This commit is contained in:
Jobobby04 2023-03-15 18:00:59 -04:00
parent ae712527f3
commit 36381aca33
5 changed files with 72 additions and 42 deletions

View File

@ -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 <--
}

View File

@ -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,
),
),
)

View File

@ -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<String> = emptyList(),
val showPin: Boolean = true,
val showLatest: Boolean = false,
val dataSaverEnabled: Int = 0,
val dataSaverEnabled: Boolean = false,
// SY <--
) {
val isEmpty = items.isEmpty()

View File

@ -97,7 +97,7 @@ fun Screen.sourcesTab(
onClickToggleDataSaver = {
screenModel.toggleExcludeFromDataSaver(source)
screenModel.closeDialog()
}.takeIf { state.dataSaverEnabled != 0 },
}.takeIf { state.dataSaverEnabled },
onDismiss = screenModel::closeDialog,
)
}

View File

@ -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<Boolean>.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"
}
}
}
}