summaryrefslogtreecommitdiffstats
path: root/cointop/search.go
diff options
context:
space:
mode:
Diffstat (limited to 'cointop/search.go')
-rw-r--r--cointop/search.go32
1 files changed, 31 insertions, 1 deletions
diff --git a/cointop/search.go b/cointop/search.go
index dd06844..cc3f7c4 100644
--- a/cointop/search.go
+++ b/cointop/search.go
@@ -93,6 +93,22 @@ func (ct *Cointop) Search(q string) error {
ct.State.lastSearchQuery = q
}
+ canSearchSymbol := true
+ canSearchName := true
+ if strings.HasPrefix(q, "s:") {
+ canSearchSymbol = true
+ canSearchName = false
+ q = q[2:]
+ log.Debug("Search, by keyword")
+ }
+
+ if strings.HasPrefix(q, "n:") {
+ canSearchSymbol = false
+ canSearchName = true
+ q = q[2:]
+ log.Debug("Search, by name")
+ }
+
idx := -1
min := -1
var hasprefixidx []int
@@ -107,16 +123,23 @@ func (ct *Cointop) Search(q string) error {
coin := ct.State.allCoins[i]
name := strings.ToLower(coin.Name)
symbol := strings.ToLower(coin.Symbol)
+
// if query matches symbol, return immediately
- if symbol == q {
+ if canSearchSymbol && symbol == q {
ct.GoToGlobalIndex(i)
return nil
}
+
+ if !canSearchName {
+ continue
+ }
+
// if query matches name, return immediately
if name == q {
ct.GoToGlobalIndex(i)
return nil
}
+
// store index with the smallest levenshtein
dist := levenshtein.DamerauLevenshteinDistance(name, q)
if min == -1 || dist <= min {
@@ -131,15 +154,22 @@ func (ct *Cointop) Search(q string) error {
}
}
}
+
+ if !canSearchName {
+ return nil
+ }
+
// go to row if prefix match
if len(hasprefixidx) > 0 && hasprefixidx[0] != -1 && min > 0 {
ct.GoToGlobalIndex(hasprefixidx[0])
return nil
}
+
// go to row if levenshtein distance is small enough
if idx > -1 && min <= 6 {
ct.GoToGlobalIndex(idx)
return nil
}
+
return nil
}