Add operator functions for handling set preferences

(cherry picked from commit 2dc47352f87acd7017bb1ad385380231f0fff043)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourceFilterController.kt
This commit is contained in:
arkon 2020-07-25 18:07:10 -04:00 committed by Jobobby04
parent 99becd4fd6
commit 94d14af2a4
5 changed files with 32 additions and 29 deletions

View File

@ -27,6 +27,14 @@ fun <T> Preference<T>.asImmediateFlow(block: (value: T) -> Unit): Flow<T> {
.onEach { block(it) } .onEach { block(it) }
} }
operator fun <T> Preference<Set<T>>.plusAssign(item: T) {
set(get() + item)
}
operator fun <T> Preference<Set<T>>.minusAssign(item: T) {
set(get() - item)
}
@OptIn(ExperimentalCoroutinesApi::class) @OptIn(ExperimentalCoroutinesApi::class)
class PreferencesHelper(val context: Context) { class PreferencesHelper(val context: Context) {

View File

@ -6,6 +6,7 @@ import com.elvishew.xlog.XLog
import com.jakewharton.rxrelay.BehaviorRelay import com.jakewharton.rxrelay.BehaviorRelay
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.plusAssign
import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi
import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.Extension
import eu.kanade.tachiyomi.extension.model.InstallStep import eu.kanade.tachiyomi.extension.model.InstallStep
@ -319,8 +320,7 @@ class ExtensionManager(
if (signature !in untrustedSignatures) return if (signature !in untrustedSignatures) return
ExtensionLoader.trustedSignatures += signature ExtensionLoader.trustedSignatures += signature
val preference = preferences.trustedSignatures() preferences.trustedSignatures() += signature
preference.set(preference.get() + signature)
val nowTrustedExtensions = untrustedExtensions.filter { it.signatureHash == signature } val nowTrustedExtensions = untrustedExtensions.filter { it.signatureHash == signature }
untrustedExtensions -= nowTrustedExtensions untrustedExtensions -= nowTrustedExtensions

View File

@ -26,6 +26,8 @@ import androidx.recyclerview.widget.LinearLayoutManager
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.EmptyPreferenceDataStore import eu.kanade.tachiyomi.data.preference.EmptyPreferenceDataStore
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.minusAssign
import eu.kanade.tachiyomi.data.preference.plusAssign
import eu.kanade.tachiyomi.databinding.ExtensionDetailControllerBinding import eu.kanade.tachiyomi.databinding.ExtensionDetailControllerBinding
import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.Extension
import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.CatalogueSource
@ -197,15 +199,11 @@ class ExtensionDetailsController(bundle: Bundle? = null) :
} }
private fun toggleSource(source: Source, enable: Boolean) { private fun toggleSource(source: Source, enable: Boolean) {
val current = preferences.disabledSources().get() if (enable) {
preferences.disabledSources() -= source.id.toString()
preferences.disabledSources().set( } else {
if (enable) { preferences.disabledSources() += source.id.toString()
current - source.id.toString() }
} else {
current + source.id.toString()
}
)
} }
private fun openInSettings() { private fun openInSettings() {

View File

@ -19,6 +19,8 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.items.IFlexible import eu.davidea.flexibleadapter.items.IFlexible
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.minusAssign
import eu.kanade.tachiyomi.data.preference.plusAssign
import eu.kanade.tachiyomi.databinding.SourceMainControllerBinding import eu.kanade.tachiyomi.databinding.SourceMainControllerBinding
import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.CatalogueSource
import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.source.LocalSource
@ -211,8 +213,7 @@ class SourceController(bundle: Bundle? = null) :
} }
private fun disableSource(source: Source) { private fun disableSource(source: Source) {
val current = preferences.disabledSources().get() preferences.disabledSources() += source.id.toString()
preferences.disabledSources().set(current + source.id.toString())
presenter.updateSources() presenter.updateSources()
} }
@ -230,16 +231,14 @@ class SourceController(bundle: Bundle? = null) :
// SY --> // SY -->
private fun watchCatalogue(source: Source, isWatched: Boolean) { private fun watchCatalogue(source: Source, isWatched: Boolean) {
val current = preferences.latestTabSources().get()
if (isWatched) { if (isWatched) {
preferences.latestTabSources().set(current - source.id.toString()) preferences.latestTabSources() -= source.id.toString()
} else { } else {
if (current.size + 1 !in 0..5) { if (preferences.latestTabSources().get().size + 1 !in 0..5) {
applicationContext?.toast(R.string.too_many_watched) applicationContext?.toast(R.string.too_many_watched)
return return
} }
preferences.latestTabSources().set(current + source.id.toString()) preferences.latestTabSources() += source.id.toString()
} }
} }

View File

@ -9,6 +9,8 @@ import androidx.preference.CheckBoxPreference
import androidx.preference.PreferenceGroup import androidx.preference.PreferenceGroup
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.minusAssign
import eu.kanade.tachiyomi.data.preference.plusAssign
import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.source.icon import eu.kanade.tachiyomi.source.icon
import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.source.online.HttpSource
@ -80,12 +82,11 @@ class SourceFilterController : SettingsController() {
onChange { newValue -> onChange { newValue ->
val checked = newValue as Boolean val checked = newValue as Boolean
val current = preferences.enabledLanguages().get()
if (!checked) { if (!checked) {
preferences.enabledLanguages().set(current - lang) preferences.enabledLanguages() -= lang
removeAll() removeAll()
} else { } else {
preferences.enabledLanguages().set(current + lang) preferences.enabledLanguages() += lang
addLanguageSources(this, sortedSources(sourcesByLang[lang])) addLanguageSources(this, sortedSources(sourcesByLang[lang]))
} }
true true
@ -147,15 +148,12 @@ class SourceFilterController : SettingsController() {
onChange { newValue -> onChange { newValue ->
val checked = newValue as Boolean val checked = newValue as Boolean
val current = preferences.disabledSources().get()
preferences.disabledSources().set( if (checked) {
if (checked) { preferences.disabledSources() -= id
current - id } else {
} else { preferences.disabledSources() += id
current + id }
}
)
group.removeAll() group.removeAll()
addLanguageSources(group, sortedSources(sources)) addLanguageSources(group, sortedSources(sources))