callbacks.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "os"
  6. "strconv"
  7. alpm "github.com/Jguer/go-alpm"
  8. "github.com/leonelquinteros/gotext"
  9. "github.com/Jguer/yay/v10/pkg/text"
  10. )
  11. func questionCallback(question alpm.QuestionAny) {
  12. if qi, err := question.QuestionInstallIgnorepkg(); err == nil {
  13. qi.SetInstall(true)
  14. }
  15. qp, err := question.QuestionSelectProvider()
  16. if err != nil {
  17. return
  18. }
  19. if hideMenus {
  20. return
  21. }
  22. size := 0
  23. _ = qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error {
  24. size++
  25. return nil
  26. })
  27. str := gotext.Get("There are %d providers available for %s:", size, qp.Dep())
  28. size = 1
  29. var db string
  30. _ = qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error {
  31. thisDB := pkg.DB().Name()
  32. if db != thisDB {
  33. db = thisDB
  34. str += bold(cyan("\n:: ")) + bold(gotext.Get("Repository ")+db+"\n ")
  35. }
  36. str += fmt.Sprintf("%d) %s ", size, pkg.Name())
  37. size++
  38. return nil
  39. })
  40. text.OperationInfoln(str)
  41. for {
  42. fmt.Print(gotext.Get("\nEnter a number (default=1): "))
  43. if config.NoConfirm {
  44. fmt.Println()
  45. break
  46. }
  47. reader := bufio.NewReader(os.Stdin)
  48. numberBuf, overflow, err := reader.ReadLine()
  49. if err != nil {
  50. text.Errorln(err)
  51. break
  52. }
  53. if overflow {
  54. text.Errorln(gotext.Get(" Input too long"))
  55. continue
  56. }
  57. if string(numberBuf) == "" {
  58. break
  59. }
  60. num, err := strconv.Atoi(string(numberBuf))
  61. if err != nil {
  62. text.Errorln(gotext.Get("invalid number: %s", string(numberBuf)))
  63. continue
  64. }
  65. if num < 1 || num > size {
  66. text.Errorln(gotext.Get("invalid value: %d is not between %d and %d", num, 1, size))
  67. continue
  68. }
  69. qp.SetUseIndex(num - 1)
  70. break
  71. }
  72. }
  73. func logCallback(level alpm.LogLevel, str string) {
  74. switch level {
  75. case alpm.LogWarning:
  76. text.Warn(str)
  77. case alpm.LogError:
  78. text.Error(str)
  79. }
  80. }