Switch to sublime text's fuzzy matching (#1372)
* refactor(search): use sublime text's fuzzy matching algorithm Signed-off-by: SphericalKat <amolele@gmail.com> * chore(changelog): update Signed-off-by: SphericalKat <amolele@gmail.com> * build: fetch sublime-fuzzy from Maven Central Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> * chore(changelog): update Co-authored-by: Harsh Shandilya <me@msfjarvis.dev> Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
parent
474770c5e3
commit
7acbf0eda8
4 changed files with 6 additions and 25 deletions
|
@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file.
|
||||||
- Allow doing a merge instead of a rebase when pulling or syncing
|
- Allow doing a merge instead of a rebase when pulling or syncing
|
||||||
- Add support for manually providing TOTP parameters
|
- Add support for manually providing TOTP parameters
|
||||||
- Parse extra content as individual fields
|
- Parse extra content as individual fields
|
||||||
|
- Improve search result filtering logic
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,7 @@ dependencies {
|
||||||
implementation(Dependencies.Kotlin.Coroutines.android)
|
implementation(Dependencies.Kotlin.Coroutines.android)
|
||||||
implementation(Dependencies.Kotlin.Coroutines.core)
|
implementation(Dependencies.Kotlin.Coroutines.core)
|
||||||
|
|
||||||
|
implementation(Dependencies.FirstParty.sublime_fuzzy)
|
||||||
implementation(Dependencies.FirstParty.zxing_android_embedded)
|
implementation(Dependencies.FirstParty.zxing_android_embedded)
|
||||||
|
|
||||||
implementation(Dependencies.ThirdParty.bouncycastle)
|
implementation(Dependencies.ThirdParty.bouncycastle)
|
||||||
|
|
|
@ -31,6 +31,7 @@ import dev.msfjarvis.aps.util.autofill.DirectoryStructure
|
||||||
import dev.msfjarvis.aps.util.extensions.sharedPrefs
|
import dev.msfjarvis.aps.util.extensions.sharedPrefs
|
||||||
import dev.msfjarvis.aps.util.settings.PasswordSortOrder
|
import dev.msfjarvis.aps.util.settings.PasswordSortOrder
|
||||||
import dev.msfjarvis.aps.util.settings.PreferenceKeys
|
import dev.msfjarvis.aps.util.settings.PreferenceKeys
|
||||||
|
import dev.sphericalkat.sublimefuzzy.Fuzzy
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.text.Collator
|
import java.text.Collator
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
@ -55,31 +56,8 @@ private fun File.toPasswordItem() =
|
||||||
else PasswordItem.newCategory(name, this, PasswordRepository.getRepositoryDirectory())
|
else PasswordItem.newCategory(name, this, PasswordRepository.getRepositoryDirectory())
|
||||||
|
|
||||||
private fun PasswordItem.fuzzyMatch(filter: String): Int {
|
private fun PasswordItem.fuzzyMatch(filter: String): Int {
|
||||||
var i = 0
|
val (_, score) = Fuzzy.fuzzyMatch(filter, longName)
|
||||||
var j = 0
|
return score
|
||||||
var score = 0
|
|
||||||
var bonus = 0
|
|
||||||
var bonusIncrement = 0
|
|
||||||
|
|
||||||
val toMatch = longName
|
|
||||||
|
|
||||||
while (i < filter.length && j < toMatch.length) {
|
|
||||||
when {
|
|
||||||
filter[i].isWhitespace() -> i++
|
|
||||||
filter[i].toLowerCase() == toMatch[j].toLowerCase() -> {
|
|
||||||
i++
|
|
||||||
bonusIncrement += 1
|
|
||||||
bonus += bonusIncrement
|
|
||||||
score += bonus
|
|
||||||
}
|
|
||||||
else -> {
|
|
||||||
bonus = 0
|
|
||||||
bonusIncrement = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
j++
|
|
||||||
}
|
|
||||||
return if (i == filter.length) score else 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private val CaseInsensitiveComparator = Collator.getInstance().apply { strength = Collator.PRIMARY }
|
private val CaseInsensitiveComparator = Collator.getInstance().apply { strength = Collator.PRIMARY }
|
||||||
|
|
|
@ -52,6 +52,7 @@ object Dependencies {
|
||||||
|
|
||||||
object FirstParty {
|
object FirstParty {
|
||||||
|
|
||||||
|
const val sublime_fuzzy = "com.github.android-password-store:sublime-fuzzy:1.0.0-alpha01"
|
||||||
const val zxing_android_embedded = "com.github.android-password-store:zxing-android-embedded:4.1.0-aps"
|
const val zxing_android_embedded = "com.github.android-password-store:zxing-android-embedded:4.1.0-aps"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue