vote.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package main
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "github.com/Jguer/aur"
  7. "github.com/Jguer/votar/pkg/vote"
  8. "github.com/leonelquinteros/gotext"
  9. "github.com/Jguer/yay/v11/pkg/query"
  10. )
  11. type ErrAURVote struct {
  12. inner error
  13. pkgName string
  14. }
  15. func (e *ErrAURVote) Error() string {
  16. return gotext.Get("Unable to handle package vote for: %s. err: %s", e.pkgName, e.inner.Error())
  17. }
  18. func handlePackageVote(ctx context.Context,
  19. targets []string, aurClient aur.ClientInterface,
  20. voteClient *vote.Client, splitN int, upvote bool,
  21. ) error {
  22. infos, err := query.AURInfoPrint(ctx, aurClient, targets, splitN)
  23. if err != nil {
  24. return err
  25. }
  26. if len(infos) == 0 {
  27. fmt.Println(gotext.Get(" there is nothing to do"))
  28. return nil
  29. }
  30. for _, info := range infos {
  31. var err error
  32. if upvote {
  33. err = voteClient.Vote(ctx, info.PackageBase)
  34. } else {
  35. err = voteClient.Unvote(ctx, info.PackageBase)
  36. }
  37. if err != nil {
  38. if errors.Is(err, vote.ErrNoCredentials) {
  39. return errors.New(
  40. gotext.Get("%s: please set AUR_USERNAME and AUR_PASSWORD environment variables for voting",
  41. err.Error()))
  42. }
  43. return &ErrAURVote{inner: err, pkgName: info.Name}
  44. }
  45. }
  46. return nil
  47. }