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 85492ab33392fdce2585991c64afbcf294948317..405e1030f1e94e20a664171a543cfee138324cd3 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 47c69a6a0c3282684b5f4259735a9a48f5653876..fafd4901aeda344ef274453a5667b5ea04b1fc4f 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