Skip to content

Commit d93f1b2

Browse files
free-botsLennoard
authored andcommitted
fixed search
1 parent c1ba651 commit d93f1b2

2 files changed

Lines changed: 31 additions & 15 deletions

File tree

app/src/main/kotlin/com/androidvip/sysctlgui/ui/params/browse/BrowseParamsViewModel.kt

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,15 @@ class BrowseParamsViewModel(
3131
when (event) {
3232
ParamBrowserViewEvent.RefreshRequested -> setPath(currentState.currentPath)
3333
is ParamBrowserViewEvent.DirectoryChanged -> onDirectoryChanged(event.dir)
34-
is ParamBrowserViewEvent.SearchExpressionChanged -> searchExpression = event.data
34+
is ParamBrowserViewEvent.SearchExpressionChanged -> onSearchExpressionChanged(event.data)
3535
is ParamBrowserViewEvent.ParamClicked -> setEffect {
3636
ParamBrowserViewEffect.NavigateToParamDetails(DomainParamMapper.map(event.param))
3737
}
38+
3839
ParamBrowserViewEvent.DocumentationMenuClicked -> setEffect {
3940
ParamBrowserViewEffect.OpenDocumentationUrl(currentState.docUrl)
4041
}
42+
4143
ParamBrowserViewEvent.FavoritesMenuClicked -> setEffect {
4244
ParamBrowserViewEffect.NavigateToFavorite
4345
}
@@ -107,13 +109,18 @@ class BrowseParamsViewModel(
107109

108110
private suspend fun loadBrowsableParamFiles(path: String) {
109111
setState { copy(isLoading = true) }
110-
val files = getCurrentPathFiles(path).maybeDirectorySorted().maybeFiltered()
112+
val files = getCurrentPathFiles(path).maybeDirectorySorted()
111113
val params = getParamsFromFilesUseCase(files).map {
112114
DomainParamMapper.map(it)
113115
}
114116

115117
setState {
116-
copy(currentPath = path, isLoading = false, data = params)
118+
copy(
119+
currentPath = path,
120+
isLoading = false,
121+
data = params.filter { param -> byName(param.name, searchExpression) },
122+
totalData = params
123+
)
117124
}
118125
}
119126

@@ -127,17 +134,25 @@ class BrowseParamsViewModel(
127134
}?.toList().orEmpty()
128135
}
129136

130-
private suspend fun List<File>?.maybeFiltered() = withContext(dispatcher) {
131-
return@withContext this@maybeFiltered?.run {
132-
if (searchExpression.isNotEmpty()) {
133-
filter { param ->
134-
param.name.lowercase()
135-
.replace(".", "")
136-
.contains(searchExpression.lowercase())
137-
}
138-
} else {
139-
this
140-
}
141-
}?.toList().orEmpty()
137+
private fun onSearchExpressionChanged(expression: String) {
138+
searchExpression = expression
139+
140+
setState {
141+
copy(data = this.totalData.filter { kernelParam ->
142+
byName(
143+
kernelParam.name,
144+
searchExpression
145+
)
146+
})
147+
}
148+
}
149+
150+
private fun byName(current: String, expected: String): Boolean {
151+
if (expected.isEmpty()) {
152+
return true
153+
}
154+
return current.lowercase()
155+
.replace(".", "")
156+
.contains(expected.lowercase())
142157
}
143158
}

app/src/main/kotlin/com/androidvip/sysctlgui/ui/params/browse/ParamBrowserViewState.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.androidvip.sysctlgui.utils.Consts
55

66
data class ParamBrowserViewState(
77
var data: List<KernelParam> = listOf(),
8+
var totalData: List<KernelParam> = listOf(),
89
var isLoading: Boolean = true,
910
var showEmptyState: Boolean = false,
1011
var currentPath: String = Consts.PROC_SYS,

0 commit comments

Comments
 (0)