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:
parent
99becd4fd6
commit
94d14af2a4
@ -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) {
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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() {
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user