Migrate file search settings to decentralized json data store

This commit is contained in:
MM20
2023-11-25 18:54:27 +01:00
parent 25cd9b707e
commit 966d43d4d1
11 changed files with 244 additions and 96 deletions
@@ -47,7 +47,6 @@ class SearchablePickerVM: ViewModel(), KoinComponent {
shortcuts = settings.appShortcutSearch,
contacts = settings.contactsSearch,
calendars = settings.calendarSearch,
files = settings.fileSearch,
).collectLatest {
if (searchQuery != query) return@collectLatest
items = withContext(Dispatchers.Default) {
@@ -5,6 +5,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import de.mm20.launcher2.files.settings.FileSearchSettings
import de.mm20.launcher2.searchable.SavableSearchableRepository
import de.mm20.launcher2.permissions.PermissionGroup
import de.mm20.launcher2.permissions.PermissionsManager
@@ -47,6 +48,7 @@ class SearchVM : ViewModel(), KoinComponent {
private val searchableRepository: SavableSearchableRepository by inject()
private val permissionsManager: PermissionsManager by inject()
private val dataStore: LauncherDataStore by inject()
private val fileSearchSettings: FileSearchSettings by inject()
val launchOnEnter = dataStore.data.map { it.searchBar.launchOnEnter }
.stateIn(viewModelScope, SharingStarted.Eagerly, false)
@@ -122,7 +124,6 @@ class SearchVM : ViewModel(), KoinComponent {
unitConverter = settings.unitConverterSearch,
calendars = settings.calendarSearch,
contacts = settings.contactsSearch,
files = settings.fileSearch,
shortcuts = settings.appShortcutSearch,
websites = settings.websiteSearch,
wikipedia = settings.wikipediaSearch,
@@ -293,7 +294,7 @@ class SearchVM : ViewModel(), KoinComponent {
val missingFilesPermission = combine(
permissionsManager.hasPermission(PermissionGroup.ExternalStorage),
dataStore.data.map { it.fileSearch.localFiles }.distinctUntilChanged()
fileSearchSettings.localFiles.distinctUntilChanged()
) { perm, enabled -> !perm && enabled }
fun requestFilesPermission(context: AppCompatActivity) {
@@ -7,6 +7,7 @@ import androidx.lifecycle.viewModelScope
import de.mm20.launcher2.accounts.Account
import de.mm20.launcher2.accounts.AccountType
import de.mm20.launcher2.accounts.AccountsRepository
import de.mm20.launcher2.files.settings.FileSearchSettings
import de.mm20.launcher2.permissions.PermissionGroup
import de.mm20.launcher2.permissions.PermissionsManager
import de.mm20.launcher2.preferences.LauncherDataStore
@@ -18,7 +19,7 @@ import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
class FileSearchSettingsScreenVM : ViewModel(), KoinComponent {
private val dataStore: LauncherDataStore by inject()
private val fileSearchSettings: FileSearchSettings by inject()
private val accountsRepository: AccountsRepository by inject()
private val permissionsManager: PermissionsManager by inject()
@@ -43,84 +44,28 @@ class FileSearchSettingsScreenVM : ViewModel(), KoinComponent {
}
}
val localFiles = dataStore.data.map { it.fileSearch.localFiles }
val localFiles = fileSearchSettings.localFiles
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)
fun setLocalFiles(localFiles: Boolean) {
viewModelScope.launch {
dataStore.updateData {
it.toBuilder()
.setFileSearch(
it.fileSearch
.toBuilder()
.setLocalFiles(localFiles)
)
.build()
}
}
fileSearchSettings.setLocalFiles(localFiles)
}
val nextcloud = dataStore.data.map { it.fileSearch.nextcloud }
val nextcloud = fileSearchSettings.nextcloudFiles
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)
fun setNextcloud(nextcloud: Boolean) {
viewModelScope.launch {
dataStore.updateData {
it.toBuilder()
.setFileSearch(
it.fileSearch
.toBuilder()
.setNextcloud(nextcloud)
)
.build()
}
}
fileSearchSettings.setNextcloudFiles(nextcloud)
}
val gdrive = dataStore.data.map { it.fileSearch.gdrive }
val gdrive = fileSearchSettings.gdriveFiles
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)
fun setGdrive(gdrive: Boolean) {
viewModelScope.launch {
dataStore.updateData {
it.toBuilder()
.setFileSearch(
it.fileSearch
.toBuilder()
.setGdrive(gdrive)
)
.build()
}
}
fileSearchSettings.setGdriveFiles(gdrive)
}
val onedrive = dataStore.data.map { it.fileSearch.onedrive }
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)
fun setOneDrive(onedrive: Boolean) {
viewModelScope.launch {
dataStore.updateData {
it.toBuilder()
.setFileSearch(
it.fileSearch
.toBuilder()
.setOnedrive(onedrive)
)
.build()
}
}
}
val owncloud = dataStore.data.map { it.fileSearch.owncloud }
val owncloud = fileSearchSettings.owncloudFiles
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)
fun setOwncloud(owncloud: Boolean) {
viewModelScope.launch {
dataStore.updateData {
it.toBuilder()
.setFileSearch(
it.fileSearch
.toBuilder()
.setOwncloud(owncloud)
)
.build()
}
}
fileSearchSettings.setOwncloudFiles(owncloud)
}
fun requestFilePermission(context: AppCompatActivity) {