1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- package widget
- import (
- "context"
- "html/template"
- "time"
- "github.com/glanceapp/glance/internal/assets"
- "github.com/glanceapp/glance/internal/feed"
- )
- type Videos struct {
- widgetBase `yaml:",inline"`
- Videos feed.Videos `yaml:"-"`
- VideoUrlTemplate string `yaml:"video-url-template"`
- Style string `yaml:"style"`
- CollapseAfterRows int `yaml:"collapse-after-rows"`
- Channels []string `yaml:"channels"`
- Limit int `yaml:"limit"`
- }
- func (widget *Videos) Initialize() error {
- widget.withTitle("Videos").withCacheDuration(time.Hour)
- if widget.Limit <= 0 {
- widget.Limit = 25
- }
- if widget.CollapseAfterRows == 0 || widget.CollapseAfterRows < -1 {
- widget.CollapseAfterRows = 4
- }
- return nil
- }
- func (widget *Videos) Update(ctx context.Context) {
- videos, err := feed.FetchYoutubeChannelUploads(widget.Channels, widget.VideoUrlTemplate)
- if !widget.canContinueUpdateAfterHandlingErr(err) {
- return
- }
- if len(videos) > widget.Limit {
- videos = videos[:widget.Limit]
- }
- widget.Videos = videos
- }
- func (widget *Videos) Render() template.HTML {
- if widget.Style == "grid-cards" {
- return widget.render(widget, assets.VideosGridTemplate)
- }
- return widget.render(widget, assets.VideosTemplate)
- }
|