callbacks.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. size := 0
  18. qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error {
  19. size++
  20. return nil
  21. })
  22. fmt.Print(bold(cyan(":: ")))
  23. str := bold(fmt.Sprintf(bold("There are %d providers available for %s:"), size, qp.Dep()))
  24. size = 1
  25. var db string
  26. qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error {
  27. thisDb := pkg.DB().Name()
  28. if db != thisDb {
  29. db = thisDb
  30. str += bold(cyan("\n:: ")) + bold("Repository "+db+"\n ")
  31. }
  32. str += fmt.Sprintf("%d) %s ", size, pkg.Name())
  33. size++
  34. return nil
  35. })
  36. fmt.Println(str)
  37. for {
  38. fmt.Print("\nEnter a number (default=1): ")
  39. if config.NoConfirm {
  40. fmt.Println()
  41. break
  42. }
  43. reader := bufio.NewReader(os.Stdin)
  44. numberBuf, overflow, err := reader.ReadLine()
  45. if err != nil {
  46. fmt.Println(err)
  47. break
  48. }
  49. if overflow {
  50. fmt.Println("Input too long")
  51. continue
  52. }
  53. if string(numberBuf) == "" {
  54. break
  55. }
  56. num, err := strconv.Atoi(string(numberBuf))
  57. if err != nil {
  58. fmt.Printf("%s invalid number: %s\n", red("error:"), string(numberBuf))
  59. continue
  60. }
  61. if num < 1 || num > size {
  62. fmt.Printf("%s invalid value: %d is not between %d and %d\n", red("error:"), num, 1, size)
  63. continue
  64. }
  65. qp.SetUseIndex(num - 1)
  66. break
  67. }
  68. }
  69. func logCallback(level alpm.LogLevel, str string) {
  70. switch level {
  71. case alpm.LogWarning:
  72. fmt.Print(bold(yellow(smallArrow)), " ", str)
  73. case alpm.LogError:
  74. fmt.Print(bold(red(smallArrow)), " ", str)
  75. }
  76. }