diff --git a/internal/history/history.go b/internal/history/history.go index 899e1fa..e14fc19 100644 --- a/internal/history/history.go +++ b/internal/history/history.go @@ -36,7 +36,7 @@ func NewHistoryManager() (*HistoryManager, error) { } historyPath := filepath.Join(homeDir, ".ssh", "sshm_history.json") - + hm := &HistoryManager{ historyPath: historyPath, history: &ConnectionHistory{Connections: make(map[string]ConnectionInfo)}, @@ -83,7 +83,7 @@ func (hm *HistoryManager) saveHistory() error { // RecordConnection records a new connection for the specified host func (hm *HistoryManager) RecordConnection(hostName string) error { now := time.Now() - + if conn, exists := hm.history.Connections[hostName]; exists { // Update existing connection conn.LastConnect = now @@ -130,7 +130,7 @@ func (hm *HistoryManager) SortHostsByLastUsed(hosts []config.SSHHost) []config.S if existsI && existsJ { return timeI.After(timeJ) } - + // Hosts with history come before hosts without history if existsI && !existsJ { return true @@ -138,7 +138,7 @@ func (hm *HistoryManager) SortHostsByLastUsed(hosts []config.SSHHost) []config.S if !existsI && existsJ { return false } - + // If neither has history, sort alphabetically return sorted[i].Name < sorted[j].Name }) @@ -159,7 +159,7 @@ func (hm *HistoryManager) SortHostsByMostUsed(hosts []config.SSHHost) []config.S if countI != countJ { return countI > countJ } - + // If counts are equal, sort by most recent timeI, existsI := hm.GetLastConnectionTime(sorted[i].Name) timeJ, existsJ := hm.GetLastConnectionTime(sorted[j].Name) @@ -167,7 +167,7 @@ func (hm *HistoryManager) SortHostsByMostUsed(hosts []config.SSHHost) []config.S if existsI && existsJ { return timeI.After(timeJ) } - + // If neither has history, sort alphabetically return sorted[i].Name < sorted[j].Name }) diff --git a/internal/ui/tui.go b/internal/ui/tui.go index 87c1b22..0b46585 100644 --- a/internal/ui/tui.go +++ b/internal/ui/tui.go @@ -57,17 +57,17 @@ func (s SortMode) String() string { } type Model struct { - table table.Model - searchInput textinput.Model - hosts []config.SSHHost - filteredHosts []config.SSHHost - searchMode bool - deleteMode bool - deleteHost string - exitAction string - exitHostName string - historyManager *history.HistoryManager - sortMode SortMode + table table.Model + searchInput textinput.Model + hosts []config.SSHHost + filteredHosts []config.SSHHost + searchMode bool + deleteMode bool + deleteHost string + exitAction string + exitHostName string + historyManager *history.HistoryManager + sortMode SortMode } func (m Model) Init() tea.Cmd { @@ -157,7 +157,7 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { selected := m.table.SelectedRow() if len(selected) > 0 { hostName := selected[0] // Host name is in the first column - + // Record the connection in history if m.historyManager != nil { err := m.historyManager.RecordConnection(hostName) @@ -166,7 +166,7 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { fmt.Printf("Warning: Could not record connection history: %v\n", err) } } - + return m, tea.ExecProcess(exec.Command("ssh", hostName), func(err error) tea.Msg { return tea.Quit() }) @@ -510,7 +510,7 @@ func NewModel(hosts []config.SSHHost) Model { // Calculate optimal width for the Tags column tagsWidth := calculateTagsColumnWidth(sortedHosts) - + // Calculate optimal width for the Last Login column lastLoginWidth := calculateLastLoginColumnWidth(sortedHosts, historyManager)