From 98492799ea156a3c006d524637e9753ee58aef3f Mon Sep 17 00:00:00 2001 From: mirivlad Date: Wed, 3 Jun 2026 10:36:44 +0800 Subject: [PATCH] =?UTF-8?q?sshkeeper:=20v0.2.0=20=E2=80=94=20Phase=205:=20?= =?UTF-8?q?Search=20improvements=20(notes,=20tags,=20route,=20context)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/search.go | 22 ++++++++++++++++++++-- internal/db/servers.go | 5 +++-- internal/tui/app.go | 15 ++++++++++++++- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/cmd/search.go b/cmd/search.go index 312985e..c139c9b 100644 --- a/cmd/search.go +++ b/cmd/search.go @@ -2,13 +2,14 @@ package cmd import ( "fmt" + "strings" "github.com/spf13/cobra" ) var searchCmd = &cobra.Command{ Use: "search ", - Short: "Search servers", + Short: "Search servers by alias, host, name, group, notes, tags, route", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { query := args[0] @@ -30,7 +31,24 @@ var searchCmd = &cobra.Command{ statusChar = "!" } target := fmt.Sprintf("%s@%s:%d", s.User, s.Host, s.Port) - fmt.Printf("[%s] %-20s %s\n", statusChar, s.Alias, target) + + // Show route summary if available + routeStr := "direct" + if len(s.Route.Hops) > 0 { + routeStr = s.Route.DisplaySummary(target) + } else if s.ProxyJump != "" { + routeStr = "via " + s.ProxyJump + } + + fmt.Printf("[%s] %-20s %-30s route: %s", statusChar, s.Alias, target, routeStr) + + if len(s.Tags) > 0 { + fmt.Printf(" tags: %s", strings.Join(s.Tags, ", ")) + } + if s.Notes != "" { + fmt.Printf(" notes: %s", s.Notes) + } + fmt.Println() } return nil diff --git a/internal/db/servers.go b/internal/db/servers.go index f3e5d62..200b63c 100644 --- a/internal/db/servers.go +++ b/internal/db/servers.go @@ -172,8 +172,9 @@ func (db *DB) SearchServers(query string) ([]*model.Server, error) { created_at, updated_at, last_connected_at, last_test_at, last_test_status, last_test_error FROM servers - WHERE alias LIKE ? OR display_name LIKE ? OR host LIKE ? OR user LIKE ? OR group_name LIKE ? - ORDER BY alias`, pattern, pattern, pattern, pattern, pattern) + WHERE alias LIKE ? OR display_name LIKE ? OR host LIKE ? OR user LIKE ? + OR group_name LIKE ? OR notes LIKE ? OR proxy_jump LIKE ? + ORDER BY alias`, pattern, pattern, pattern, pattern, pattern, pattern, pattern) if err != nil { return nil, err } diff --git a/internal/tui/app.go b/internal/tui/app.go index 11f5db6..4d61beb 100644 --- a/internal/tui/app.go +++ b/internal/tui/app.go @@ -107,7 +107,20 @@ func (i serverItem) Description() string { return fmt.Sprintf("%s %s", routeStr, i.server.AuthMethod) } func (i serverItem) FilterValue() string { - return i.server.Alias + " " + i.server.DisplayName + " " + i.server.Host + " " + i.server.User + parts := []string{ + i.server.Alias, + i.server.DisplayName, + i.server.Host, + i.server.User, + i.server.GroupName, + i.server.Notes, + i.server.ProxyJump, + strings.Join(i.server.Tags, " "), + } + for _, h := range i.server.Route.Hops { + parts = append(parts, h.Alias, h.Raw) + } + return strings.Join(parts, " ") } type templateItem struct {