repository-overview.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package widget
  2. import (
  3. "context"
  4. "html/template"
  5. "time"
  6. "github.com/glanceapp/glance/internal/assets"
  7. "github.com/glanceapp/glance/internal/feed"
  8. )
  9. type Repository struct {
  10. widgetBase `yaml:",inline"`
  11. RequestedRepository string `yaml:"repository"`
  12. Token OptionalEnvString `yaml:"token"`
  13. PullRequestsLimit int `yaml:"pull-requests-limit"`
  14. IssuesLimit int `yaml:"issues-limit"`
  15. CommitsLimits int `yaml:"commits-limit"`
  16. RepositoryDetails feed.RepositoryDetails
  17. }
  18. func (widget *Repository) Initialize() error {
  19. widget.withTitle("Repository").withCacheDuration(1 * time.Hour)
  20. if widget.PullRequestsLimit == 0 || widget.PullRequestsLimit < -1 {
  21. widget.PullRequestsLimit = 3
  22. }
  23. if widget.IssuesLimit == 0 || widget.IssuesLimit < -1 {
  24. widget.IssuesLimit = 3
  25. }
  26. if widget.CommitsLimits == 0 || widget.CommitsLimits < -1 {
  27. widget.CommitsLimits = 3
  28. }
  29. return nil
  30. }
  31. func (widget *Repository) Update(ctx context.Context) {
  32. details, err := feed.FetchRepositoryDetailsFromGithub(
  33. widget.RequestedRepository,
  34. string(widget.Token),
  35. widget.PullRequestsLimit,
  36. widget.IssuesLimit,
  37. widget.CommitsLimits,
  38. )
  39. if !widget.canContinueUpdateAfterHandlingErr(err) {
  40. return
  41. }
  42. widget.RepositoryDetails = details
  43. }
  44. func (widget *Repository) Render() template.HTML {
  45. return widget.render(widget, assets.RepositoryTemplate)
  46. }