commit e411c2352fdb17cf940d72007aef98b2aa4ba5a6
parent 7d5c053f21192cbe8a3a040cc7cb0ef44a25198c
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Wed, 29 May 2024 22:18:24 +0200

feat(common/config): filename filter

Diffstat:
Mapp/src/main/kotlin/me/rhunk/snapenhance/RemoteFileHandleManager.kt | 6++++--
Mapp/src/main/kotlin/me/rhunk/snapenhance/ui/manager/pages/features/FeaturesRoot.kt | 16+++++++++++++---
Mcommon/src/main/kotlin/me/rhunk/snapenhance/common/config/ConfigObjects.kt | 1+
3 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/RemoteFileHandleManager.kt b/app/src/main/kotlin/me/rhunk/snapenhance/RemoteFileHandleManager.kt @@ -95,8 +95,10 @@ class RemoteFileHandleManager( } } - fun getStoredFiles(): List<File> { - return userImportFolder.listFiles()?.toList()?.sortedBy { -it.lastModified() } ?: emptyList() + fun getStoredFiles(filter: ((File) -> Boolean)? = null): List<File> { + return userImportFolder.listFiles()?.toList()?.let { files -> + filter?.let { files.filter(it) } ?: files + }?.sortedBy { -it.lastModified() } ?: emptyList() } fun getFileInfo(name: String): Pair<Long, Long>? { diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/ui/manager/pages/features/FeaturesRoot.kt b/app/src/main/kotlin/me/rhunk/snapenhance/ui/manager/pages/features/FeaturesRoot.kt @@ -154,10 +154,20 @@ class FeaturesRoot : Routes.Route() { if (property.key.params.flags.contains(ConfigFlag.USER_IMPORT)) { registerDialogOnClickCallback() dialogComposable = { + var isEmpty by remember { mutableStateOf(false) } val files = rememberAsyncMutableStateList(defaultValue = listOf()) { - context.fileHandleManager.getStoredFiles() + context.fileHandleManager.getStoredFiles { + property.key.params.filenameFilter?.invoke(it.name) == true + }.also { + isEmpty = it.isEmpty() + if (isEmpty) { + propertyValue.setAny(null) + } + } } - var selectedFile by remember(files.size) { mutableStateOf(files.firstOrNull { it.name == propertyValue.getNullable() }?.name) } + var selectedFile by remember(files.size) { mutableStateOf(files.firstOrNull { it.name == propertyValue.getNullable() }.also { + if (files.isNotEmpty() && it == null) propertyValue.setAny(null) + }?.name) } Card( shape = MaterialTheme.shapes.large, @@ -177,7 +187,7 @@ class FeaturesRoot : Routes.Route() { fontSize = 18.sp, fontWeight = FontWeight.Bold, ) - if (files.isEmpty()) { + if (isEmpty) { Text( text = context.translation["manager.dialogs.file_imports.no_files_settings_hint"], fontSize = 16.sp, diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/config/ConfigObjects.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/config/ConfigObjects.kt @@ -43,6 +43,7 @@ class ConfigParams( var customTranslationPath: String? = null, var customOptionTranslationPath: String? = null, var inputCheck: ((String) -> Boolean)? = { true }, + var filenameFilter: ((String) -> Boolean)? = null, ) { val notices get() = _notices?.let { FeatureNotice.entries.filter { flag -> it and flag.id != 0 } } ?: emptyList() val flags get() = _flags?.let { ConfigFlag.entries.filter { flag -> it and flag.id != 0 } } ?: emptyList()