vote.go 1.2 KB

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