Refactor data saver
This commit is contained in:
parent
ae712527f3
commit
36381aca33
@ -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 <--
|
||||
}
|
||||
|
@ -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,
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -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()
|
||||
|
@ -97,7 +97,7 @@ fun Screen.sourcesTab(
|
||||
onClickToggleDataSaver = {
|
||||
screenModel.toggleExcludeFromDataSaver(source)
|
||||
screenModel.closeDialog()
|
||||
}.takeIf { state.dataSaverEnabled != 0 },
|
||||
}.takeIf { state.dataSaverEnabled },
|
||||
onDismiss = screenModel::closeDialog,
|
||||
)
|
||||
}
|
||||
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user