yay.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package main
  2. import (
  3. "bufio"
  4. "errors"
  5. "flag"
  6. "fmt"
  7. "os"
  8. "strconv"
  9. "strings"
  10. )
  11. // PacmanBin describes the default installation point of pacman
  12. const PacmanBin string = "/usr/bin/pacman"
  13. // MakepkgBin describes the default installation point of makepkg command
  14. const MakepkgBin string = "/usr/bin/makepkg"
  15. // TarBin describes the default installation point of tar command
  16. // Probably will replace untar with code solution
  17. const TarBin string = "/usr/bin/tar"
  18. // SearchMode is search without numbers
  19. const SearchMode int = -1
  20. // BuildDir is the root for package building
  21. const BuildDir string = "/tmp/yaytmp/"
  22. // BaseURL givers the AUR default address
  23. const BaseURL string = "https://aur.archlinux.org"
  24. // Editor gives the default system editor, uses vi in last case
  25. var Editor = "vi"
  26. func getNums() (numbers []int, err error) {
  27. var numberString string
  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. result := strings.Fields(numberString)
  36. var num int
  37. for _, numS := range result {
  38. num, err = strconv.Atoi(numS)
  39. if err != nil {
  40. fmt.Println(err)
  41. return
  42. }
  43. numbers = append(numbers, num)
  44. }
  45. return
  46. }
  47. func defaultMode(pkg string) (err error) {
  48. aurRes, err := searchAurPackages(pkg, 0)
  49. repoRes, err := SearchPackages(pkg)
  50. if err != nil {
  51. return
  52. }
  53. if repoRes.Resultcount == 0 && aurRes.Resultcount == 0 {
  54. return errors.New("No Packages match search")
  55. }
  56. repoRes.printSearch(0)
  57. err = aurRes.printSearch(repoRes.Resultcount)
  58. nums, err := getNums()
  59. if err != nil {
  60. return
  61. }
  62. err = installnumArray(nums, aurRes, repoRes)
  63. if err != nil {
  64. return
  65. }
  66. return
  67. }
  68. func searchMode(pkg string) (err error) {
  69. aur, err := searchAurPackages(pkg, SearchMode)
  70. repo, err := SearchPackages(pkg)
  71. if err != nil {
  72. return err
  73. }
  74. aur.printSearch(SearchMode)
  75. repo.printSearch(SearchMode)
  76. return nil
  77. }
  78. func main() {
  79. flag.Parse()
  80. var err error
  81. if os.Getenv("EDITOR") != "" {
  82. Editor = os.Getenv("EDITOR")
  83. }
  84. args := flag.Args()
  85. if args[0] == "-Ss" {
  86. err = searchMode(strings.Join(args[2:], " "))
  87. } else if args[0] == "-S" {
  88. if isInRepo(args[1]) {
  89. err = InstallPackage(args[1], args[2:]...)
  90. } else {
  91. err = installAURPackage(args[1], args[2:]...)
  92. }
  93. } else {
  94. err = defaultMode(args[0])
  95. }
  96. if err != nil {
  97. fmt.Println(err)
  98. os.Exit(1)
  99. }
  100. }