diff --git a/main.go b/main.go index 8ed6969..925ba3a 100644 --- a/main.go +++ b/main.go @@ -58,6 +58,37 @@ func handleCommand(cmd string) int { return CMD_COMPLETION } +func getCommand(gpt3 gpt.Gpt3, cmd string) (string, float64) { + gpt3.InitKey() + s := time.Now() + done := make(chan bool) + go func() { + loadingChars := []rune{'-', '\\', '|', '/'} + i := 0 + for { + select { + case <-done: + fmt.Printf("\r") + return + default: + fmt.Printf("\rLoading %c", loadingChars[i]) + i = (i + 1) % len(loadingChars) + time.Sleep(30 * time.Millisecond) + } + } + }() + + r := gpt3.Completions(cmd) + done <- true + elapsed := time.Since(s).Seconds() + elapsed = math.Round(elapsed*100) / 100 + + if r == "" { + return "", elapsed + } + return r, elapsed +} + func main() { currentUser, err := user.Current() if err != nil { @@ -99,42 +130,24 @@ func main() { return } - gpt3.InitKey() - s := time.Now() - done := make(chan bool) - go func() { - loadingChars := []rune{'-', '\\', '|', '/'} - i := 0 - for { - select { - case <-done: - fmt.Printf("\r") - return - default: - fmt.Printf("\rLoading %c", loadingChars[i]) - i = (i + 1) % len(loadingChars) - time.Sleep(30 * time.Millisecond) - } + c := "R" + r := "" + elapsed := 0.0 + for c == "R" || c == "r" { + r, elapsed = getCommand(gpt3, cmd) + c = "N" + fmt.Printf("Completed in %v seconds\n\n", elapsed) + fmt.Println(r) + fmt.Print("\nDo you want to (e)xecute, (r)egenerate, or take (N)o action on the command? (e/r/N): ") + fmt.Scanln(&c) + if c == "N" || c == "n" { + return } - }() + } - r := gpt3.Completions(cmd) - done <- true if r == "" { return } - - c := "N" - elapsed := time.Since(s).Seconds() - elapsed = math.Round(elapsed*100) / 100 - fmt.Printf("Completed in %v seconds\n\n", elapsed) - fmt.Println(r) - fmt.Print("\nAre you sure you want to execute the command? (y/N): ") - fmt.Scanln(&c) - if c == "N" || c == "n" { - return - } - cmsplit := strings.Split(r, " ") cm := exec.Command(cmsplit[0], cmsplit[1:]...) out, err := cm.Output()