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