Browse Source

Add operator functions for handling set preferences

arkon 4 years ago
parent
commit
2dc47352f8

+ 8 - 0
app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt

@@ -27,6 +27,14 @@ fun <T> Preference<T>.asImmediateFlow(block: (value: T) -> Unit): Flow<T> {
         .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)
 class PreferencesHelper(val context: Context) {
 

+ 2 - 2
app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt

@@ -4,6 +4,7 @@ import android.content.Context
 import android.graphics.drawable.Drawable
 import com.jakewharton.rxrelay.BehaviorRelay
 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.model.Extension
 import eu.kanade.tachiyomi.extension.model.InstallStep
@@ -257,8 +258,7 @@ class ExtensionManager(
         if (signature !in untrustedSignatures) return
 
         ExtensionLoader.trustedSignatures += signature
-        val preference = preferences.trustedSignatures()
-        preference.set(preference.get() + signature)
+        preferences.trustedSignatures() += signature
 
         val nowTrustedExtensions = untrustedExtensions.filter { it.signatureHash == signature }
         untrustedExtensions -= nowTrustedExtensions

+ 7 - 9
app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsController.kt

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

+ 3 - 2
app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourceController.kt

@@ -17,6 +17,8 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
 import eu.davidea.flexibleadapter.items.IFlexible
 import eu.kanade.tachiyomi.R
 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.source.CatalogueSource
 import eu.kanade.tachiyomi.source.LocalSource
@@ -152,8 +154,7 @@ class SourceController :
     }
 
     private fun disableSource(source: Source) {
-        val current = preferences.disabledSources().get()
-        preferences.disabledSources().set(current + source.id.toString())
+        preferences.disabledSources() += source.id.toString()
 
         presenter.updateSources()
     }

+ 9 - 13
app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourceFilterController.kt

@@ -5,6 +5,8 @@ import androidx.preference.CheckBoxPreference
 import androidx.preference.PreferenceGroup
 import androidx.preference.PreferenceScreen
 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.getPreferenceKey
 import eu.kanade.tachiyomi.source.icon
@@ -54,12 +56,11 @@ class SourceFilterController : SettingsController() {
 
                 onChange { newValue ->
                     val checked = newValue as Boolean
-                    val current = preferences.enabledLanguages().get()
                     if (!checked) {
-                        preferences.enabledLanguages().set(current - lang)
+                        preferences.enabledLanguages() -= lang
                         removeAll()
                     } else {
-                        preferences.enabledLanguages().set(current + lang)
+                        preferences.enabledLanguages() += lang
                         addLanguageSources(this, sources)
                     }
                     true
@@ -97,16 +98,11 @@ class SourceFilterController : SettingsController() {
 
                     onChange { newValue ->
                         val checked = newValue as Boolean
-                        val current = preferences.disabledSources().get()
-
-                        preferences.disabledSources().set(
-                            if (checked) {
-                                current - id
-                            } else {
-                                current + id
-                            }
-                        )
-
+                        if (checked) {
+                            preferences.disabledSources() -= id
+                        } else {
+                            preferences.disabledSources() += id
+                        }
                         true
                     }
                 }