From 1c0bc5e04cd092f6dc847f3b9c506e2f3ce35a37 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Mon, 14 Jan 2019 15:03:12 +0100 Subject: [PATCH] Fixes #186 --- .../viewmodel/QuasselViewModel.kt | 20 ++++++++++++++++--- .../viewmodel/data/BufferProps.kt | 9 ++++++++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt index 85492ab33..405e1030f 100644 --- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt +++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt @@ -394,6 +394,16 @@ class QuasselViewModel : ViewModel() { activity to highlights } }.switchMap { (activity, highlights) -> + val name = info.bufferName?.trim() ?: "" + val search = bufferSearch.trim() + val matchMode = when { + name.equals(search, ignoreCase = true) -> + BufferProps.BufferMatchMode.EXACT + name.startsWith(search, ignoreCase = true) -> + BufferProps.BufferMatchMode.START + else -> + BufferProps.BufferMatchMode.CONTAINS + } when (info.type.toInt()) { BufferInfo.Type.QueryBuffer.toInt() -> { network.liveNetworkInfo().switchMap { networkInfo -> @@ -413,7 +423,8 @@ class QuasselViewModel : ViewModel() { activity = activity, highlights = highlights, hiddenState = state, - ircUser = user + ircUser = user, + matchMode = matchMode ) } } @@ -436,7 +447,8 @@ class QuasselViewModel : ViewModel() { description = it?.topic() ?: "", activity = activity, highlights = highlights, - hiddenState = state + hiddenState = state, + matchMode = matchMode ) } } @@ -454,7 +466,8 @@ class QuasselViewModel : ViewModel() { description = "", activity = activity, highlights = highlights, - hiddenState = state + hiddenState = state, + matchMode = matchMode ) } } @@ -536,6 +549,7 @@ class QuasselViewModel : ViewModel() { }.let { if (config.sortAlphabetically()) it.sortedBy { IrcCaseMappers.unicode.toLowerCaseNullable(it.info.bufferName) } + .sortedBy { it.matchMode.priority } .sortedByDescending { it.hiddenState == BufferHiddenState.VISIBLE } else it }.distinctBy { diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/BufferProps.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/BufferProps.kt index 47c69a6a0..fafd4901a 100644 --- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/BufferProps.kt +++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/BufferProps.kt @@ -40,8 +40,15 @@ data class BufferProps( val hiddenState: BufferHiddenState, val ircUser: IrcUser? = null, val avatarUrls: List<Avatar> = emptyList(), - val fallbackDrawable: Drawable? = null + val fallbackDrawable: Drawable? = null, + val matchMode: BufferMatchMode = BufferMatchMode.EXACT ) { + enum class BufferMatchMode(val priority: Int) { + EXACT(0), + START(1), + CONTAINS(2); + } + override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false -- GitLab