From e411c2352fdb17cf940d72007aef98b2aa4ba5a6 Mon Sep 17 00:00:00 2001 From: rhunk <101876869+rhunk@users.noreply.github.com> Date: Wed, 29 May 2024 22:18:24 +0200 Subject: [PATCH] feat(common/config): filename filter --- .../rhunk/snapenhance/RemoteFileHandleManager.kt | 6 ++++-- .../ui/manager/pages/features/FeaturesRoot.kt | 16 +++++++++++++--- .../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 index 1b3f1a86..16672e54 100644 --- 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 { - return userImportFolder.listFiles()?.toList()?.sortedBy { -it.lastModified() } ?: emptyList() + fun getStoredFiles(filter: ((File) -> Boolean)? = null): List { + return userImportFolder.listFiles()?.toList()?.let { files -> + filter?.let { files.filter(it) } ?: files + }?.sortedBy { -it.lastModified() } ?: emptyList() } fun getFileInfo(name: String): Pair? { 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 index 833ff597..02cdd55c 100644 --- 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 index d5aefbf9..d3d0c87b 100644 --- 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()