callbacks.go 1.8 KB

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