actions.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package main
  2. import (
  3. "bufio"
  4. "bytes"
  5. "errors"
  6. "fmt"
  7. "github.com/Jguer/go-alpm"
  8. "github.com/Jguer/yay/aur"
  9. "os"
  10. "os/exec"
  11. "strconv"
  12. "strings"
  13. )
  14. func searchAndInstall(pkgName string, conf *alpm.PacmanConfig, flags string) (err error) {
  15. var num int
  16. var numberString string
  17. var pacBuffer bytes.Buffer
  18. a, err := aur.Search(pkgName, true)
  19. r, err := SearchPackages(pkgName, conf)
  20. if err != nil {
  21. return
  22. }
  23. if len(r.Results) == 0 && a.Resultcount == 0 {
  24. return errors.New("No Packages match search")
  25. }
  26. r.PrintSearch(0)
  27. a.PrintSearch(len(r.Results))
  28. fmt.Printf("\x1B[32m%s\033[0m\nNumbers:", "Type numbers to install. Separate each number with a space.")
  29. reader := bufio.NewReader(os.Stdin)
  30. numberString, err = reader.ReadString('\n')
  31. if err != nil {
  32. fmt.Println(err)
  33. return
  34. }
  35. var aurInstall []aur.Result
  36. result := strings.Fields(numberString)
  37. for _, numS := range result {
  38. num, err = strconv.Atoi(numS)
  39. if err != nil {
  40. fmt.Println(err)
  41. continue
  42. }
  43. // Install package
  44. if num > len(r.Results)-1 {
  45. aurInstall = append(aurInstall, a.Results[num-len(r.Results)])
  46. } else {
  47. pacBuffer.WriteString(r.Results[num].Name)
  48. pacBuffer.WriteString(" ")
  49. }
  50. }
  51. if pacBuffer.String() != "" {
  52. var cmd *exec.Cmd
  53. if flags == "" {
  54. cmd = exec.Command("sudo", "pacman", "-S", strings.TrimSpace(pacBuffer.String()))
  55. } else {
  56. cmd = exec.Command("sudo", "pacman", "-S", strings.TrimSpace(pacBuffer.String()), flags)
  57. }
  58. cmd.Stdout = os.Stdout
  59. cmd.Stdin = os.Stdin
  60. cmd.Stderr = os.Stderr
  61. err = cmd.Run()
  62. }
  63. for _, aurpkg := range aurInstall {
  64. err = aurpkg.Install(BuildDir, conf, flags)
  65. if err != nil {
  66. // Do not abandon program, we might still be able to install the rest
  67. fmt.Println(err)
  68. }
  69. }
  70. return
  71. }
  72. // updateAndInstall handles updating the cache and installing updates
  73. func updateAndInstall(conf *alpm.PacmanConfig, flags string) error {
  74. errp := UpdatePackages(flags)
  75. erra := aur.UpdatePackages(BuildDir, conf, flags)
  76. if errp != nil {
  77. return errp
  78. }
  79. return erra
  80. }
  81. func searchMode(pkg string, conf *alpm.PacmanConfig) (err error) {
  82. a, err := aur.Search(pkg, true)
  83. if err != nil {
  84. return err
  85. }
  86. r, err := SearchPackages(pkg, conf)
  87. if err != nil {
  88. return err
  89. }
  90. r.PrintSearch(SearchMode)
  91. a.PrintSearch(SearchMode)
  92. return nil
  93. }