repository-overview.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. RepositoryDetails feed.RepositoryDetails
  16. }
  17. func (widget *Repository) Initialize() error {
  18. widget.withTitle("Repository").withCacheDuration(1 * time.Hour)
  19. if widget.PullRequestsLimit == 0 || widget.PullRequestsLimit < -1 {
  20. widget.PullRequestsLimit = 3
  21. }
  22. if widget.IssuesLimit == 0 || widget.IssuesLimit < -1 {
  23. widget.IssuesLimit = 3
  24. }
  25. return nil
  26. }
  27. func (widget *Repository) Update(ctx context.Context) {
  28. details, err := feed.FetchRepositoryDetailsFromGithub(
  29. widget.RequestedRepository,
  30. string(widget.Token),
  31. widget.PullRequestsLimit,
  32. widget.IssuesLimit,
  33. )
  34. if !widget.canContinueUpdateAfterHandlingErr(err) {
  35. return
  36. }
  37. widget.RepositoryDetails = details
  38. }
  39. func (widget *Repository) Render() template.HTML {
  40. return widget.render(widget, assets.RepositoryTemplate)
  41. }