actions.go 2.0 KB

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