Fix relative rss item thumbnail links #813

pull/842/head
Svilen Markov 2025-09-06 12:42:34 +07:00
parent a511e39bc7
commit c791ff09d9
1 changed files with 27 additions and 8 deletions

@ -129,14 +129,15 @@ type rssFeedItem struct {
}
type rssFeedRequest struct {
URL string `yaml:"url"`
Title string `yaml:"title"`
HideCategories bool `yaml:"hide-categories"`
HideDescription bool `yaml:"hide-description"`
Limit int `yaml:"limit"`
ItemLinkPrefix string `yaml:"item-link-prefix"`
Headers map[string]string `yaml:"headers"`
IsDetailed bool `yaml:"-"`
URL string `yaml:"url"`
Title string `yaml:"title"`
HideCategories bool `yaml:"hide-categories"`
HideDescription bool `yaml:"hide-description"`
Limit int `yaml:"limit"`
ItemLinkPrefix string `yaml:"item-link-prefix"`
ThumbnailLinkPrefix string `yaml:"thumbnail-link-prefix"`
Headers map[string]string `yaml:"headers"`
IsDetailed bool `yaml:"-"`
}
type rssFeedItemList []rssFeedItem
@ -321,6 +322,24 @@ func (widget *rssWidget) fetchItemsFromFeedTask(request rssFeedRequest) ([]rssFe
}
}
// For some reason gofeed sometimes converts absolute URLs to relative ones, so we need to fix
// that here and provide the user with an option to override the prefix in case we get it wrong
if strings.HasPrefix(rssItem.ImageURL, "/") {
prefix := strings.TrimPrefix(feed.Link, "/")
if request.ThumbnailLinkPrefix != "" {
prefix = strings.TrimPrefix(request.ThumbnailLinkPrefix, "/")
} else if prefix == "" {
parsed, err := url.Parse(request.URL)
if err != nil {
prefix = request.URL
} else {
prefix = parsed.Scheme + "://" + parsed.Host
}
}
rssItem.ImageURL = strings.TrimRight(prefix, "/") + rssItem.ImageURL
}
if item.PublishedParsed != nil {
rssItem.PublishedAt = *item.PublishedParsed
} else {