diff --git a/internal/adapters/ui/handlers.go b/internal/adapters/ui/handlers.go index 897e053d..22872df2 100644 --- a/internal/adapters/ui/handlers.go +++ b/internal/adapters/ui/handlers.go @@ -408,7 +408,14 @@ func (t *tui) showEditTagsForm(server domain.Server) { newServer := server newServer.Tags = tags - _ = t.serverService.UpdateServer(server, newServer) + if err := t.serverService.UpdateServer(server, newServer); err != nil { + modal := tview.NewModal(). + SetText(fmt.Sprintf("Save failed: %v", err)). + AddButtons([]string{"Close"}). + SetDoneFunc(func(buttonIndex int, buttonLabel string) { t.handleModalClose() }) + t.app.SetRoot(modal, true) + return + } // Refresh UI and go back t.refreshServerList() t.returnToMain() diff --git a/internal/adapters/ui/server_list.go b/internal/adapters/ui/server_list.go index 1a58d394..f51d595b 100644 --- a/internal/adapters/ui/server_list.go +++ b/internal/adapters/ui/server_list.go @@ -68,6 +68,11 @@ func (sl *ServerList) build() { } func (sl *ServerList) UpdateServers(servers []domain.Server) { + currentAlias := "" + if idx := sl.List.GetCurrentItem(); idx >= 0 && idx < len(sl.servers) { + currentAlias = sl.servers[idx].Alias + } + sl.servers = servers sl.List.Clear() @@ -81,10 +86,20 @@ func (sl *ServerList) UpdateServers(servers []domain.Server) { }) } + restoreIdx := 0 + if currentAlias != "" { + for i, s := range servers { + if s.Alias == currentAlias { + restoreIdx = i + break + } + } + } + if sl.List.GetItemCount() > 0 { - sl.List.SetCurrentItem(0) + sl.List.SetCurrentItem(restoreIdx) if sl.onSelectionChange != nil { - sl.onSelectionChange(sl.servers[0]) + sl.onSelectionChange(sl.servers[restoreIdx]) } } }