mirror of
https://github.com/Gu1llaum-3/sshm.git
synced 2025-09-06 21:00:45 +02:00
72 lines
1.5 KiB
Go
72 lines
1.5 KiB
Go
package ui
|
|
|
|
import (
|
|
"sort"
|
|
"strings"
|
|
|
|
"sshm/internal/config"
|
|
)
|
|
|
|
// sortHosts sorts hosts according to the current sort mode
|
|
func (m Model) sortHosts(hosts []config.SSHHost) []config.SSHHost {
|
|
if m.historyManager == nil {
|
|
return sortHostsByName(hosts)
|
|
}
|
|
|
|
switch m.sortMode {
|
|
case SortByLastUsed:
|
|
return m.historyManager.SortHostsByLastUsed(hosts)
|
|
case SortByName:
|
|
fallthrough
|
|
default:
|
|
return sortHostsByName(hosts)
|
|
}
|
|
}
|
|
|
|
// sortHostsByName sorts a slice of SSH hosts alphabetically by name
|
|
func sortHostsByName(hosts []config.SSHHost) []config.SSHHost {
|
|
sorted := make([]config.SSHHost, len(hosts))
|
|
copy(sorted, hosts)
|
|
|
|
sort.Slice(sorted, func(i, j int) bool {
|
|
return strings.ToLower(sorted[i].Name) < strings.ToLower(sorted[j].Name)
|
|
})
|
|
|
|
return sorted
|
|
}
|
|
|
|
// filterHosts filters hosts according to the search query (name or tags)
|
|
func (m Model) filterHosts(query string) []config.SSHHost {
|
|
var filtered []config.SSHHost
|
|
|
|
if query == "" {
|
|
filtered = m.hosts
|
|
} else {
|
|
query = strings.ToLower(query)
|
|
|
|
for _, host := range m.hosts {
|
|
// Check the hostname
|
|
if strings.Contains(strings.ToLower(host.Name), query) {
|
|
filtered = append(filtered, host)
|
|
continue
|
|
}
|
|
|
|
// Check the hostname
|
|
if strings.Contains(strings.ToLower(host.Hostname), query) {
|
|
filtered = append(filtered, host)
|
|
continue
|
|
}
|
|
|
|
// Check the tags
|
|
for _, tag := range host.Tags {
|
|
if strings.Contains(strings.ToLower(tag), query) {
|
|
filtered = append(filtered, host)
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return m.sortHosts(filtered)
|
|
}
|