sl-feeds/changelog/feeds.go

56 lines
1.3 KiB
Go

package changelog
import (
"fmt"
"time"
"github.com/gorilla/feeds"
)
// ToFeed produces a github.com/gorilla/feeds.Feed that can be written to Atom or Rss
func ToFeed(link string, entries []Entry) (*feeds.Feed, error) {
var newestEntryTime time.Time
var oldestEntryTime time.Time
for _, e := range entries {
if e.Date.After(newestEntryTime) {
newestEntryTime = e.Date
}
if e.Date.Before(oldestEntryTime) {
oldestEntryTime = e.Date
}
}
feed := &feeds.Feed{
Title: "",
Link: &feeds.Link{Href: link},
Description: "generated by github.com/vbatts/sl-feeds",
Created: oldestEntryTime,
Updated: newestEntryTime,
}
feed.Items = make([]*feeds.Item, len(entries))
for i, e := range entries {
url := fmt.Sprintf("%s/ChangeLog.txt#src=feeds&time=%d", link, e.Date.Unix())
feed.Items[i] = &feeds.Item{
Created: e.Date,
Link: &feeds.Link{Href: url},
Description: e.ToHTML(),
Id: url,
}
updateWord := "updates"
if len(e.Updates) == 1 {
updateWord = "update"
}
if e.SecurityFix() {
feed.Items[i].Title = fmt.Sprintf("%d %s. Including a %s!", len(e.Updates), updateWord, securityFixStr)
} else if len(e.Updates) == 0 {
feed.Items[i].Title = ""
} else {
feed.Items[i].Title = fmt.Sprintf("%d %s", len(e.Updates), updateWord)
}
}
return feed, nil
}