Skip to content

Commit

Permalink
Refactored PromptInput to use bufio.Scanner instead of Reader.ReadStr…
Browse files Browse the repository at this point in the history
…ing for input handling
  • Loading branch information
befabri committed Sep 11, 2024
1 parent 9e8db00 commit 8b2c0b8
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 12 deletions.
8 changes: 5 additions & 3 deletions internal/cli/handler/editHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,11 @@ func (h *EditHandler) Handle(args []string, connections []config.Connection) {
for {
fmt.Println()
utils.Display(connections[indexToEdit])
fieldToEdit, err := utils.PromptInput("Enter the field to edit (ip, user, port, keywords, default): ", false)
fmt.Println("Enter the field to edit (ip, user, port, keywords, default). Type 'quit' to exit anytime.")
fieldToEdit, err := utils.PromptInput("Field to edit: ", false)
if err != nil {
fmt.Println("Error reading input:", err)
fmt.Println("")
fmt.Println(err)
return
}

Expand Down Expand Up @@ -70,7 +72,7 @@ func (h *EditHandler) Handle(args []string, connections []config.Connection) {
}
connections[indexToEdit].Keywords = keywordList
case "default":
newDefault, _ := utils.PromptInput("Set as default? (yes/no): ")
newDefault, _ := utils.PromptInput("Set as default? ([Y]es | [N]o): ")
if strings.ToLower(newDefault) == "y" || strings.ToLower(newDefault) == "yes" {
for i := range connections {
connections[i].Default = false
Expand Down
23 changes: 14 additions & 9 deletions internal/utils/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,24 @@ func PromptInput(question string, opts ...bool) (string, error) {
quit = opts[0]
}

fmt.Println(question)
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
return "", err
fmt.Print(question)

scanner := bufio.NewScanner(os.Stdin)
if scanner.Scan() {
input := strings.TrimSpace(scanner.Text())

if quit && strings.ToLower(input) == "quit" {
return "", fmt.Errorf("operation cancelled")
}

return input, nil
}

input = strings.TrimSpace(input)
if quit && strings.ToLower(input) == "quit" {
return "", fmt.Errorf("operation cancelled")
if err := scanner.Err(); err != nil {
return "", err
}

return input, nil
return "", fmt.Errorf("operation cancelled")
}

func ConfirmAction(question string) (bool, error) {
Expand Down

0 comments on commit 8b2c0b8

Please sign in to comment.