47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package handler
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/gorilla/feeds"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
func (h *Handler) showFeedView(w http.ResponseWriter, r *http.Request) {
|
|
now := time.Now()
|
|
feed := &feeds.Feed{
|
|
Title: "status.cafe",
|
|
Link: &feeds.Link{Href: "https://status.cafe/"},
|
|
Author: &feeds.Author{Name: "status.cafe"},
|
|
Created: now,
|
|
}
|
|
|
|
statuses, err := h.storage.StatusFeed()
|
|
if err != nil {
|
|
serverError(w, err)
|
|
return
|
|
}
|
|
|
|
for _, status := range statuses {
|
|
if err != nil {
|
|
serverError(w, err)
|
|
return
|
|
}
|
|
feed.Items = append(feed.Items, &feeds.Item{
|
|
Title: fmt.Sprintf("%s %s %s", status.User, status.Face, truncate(status.Content, 50)),
|
|
Link: &feeds.Link{Href: fmt.Sprintf("https://status.cafe/users/%s/%d", status.User, status.Id)},
|
|
Author: &feeds.Author{Name: status.User},
|
|
Content: status.Content,
|
|
Created: status.CreatedAt,
|
|
})
|
|
}
|
|
atom, err := feed.ToAtom()
|
|
if err != nil {
|
|
serverError(w, err)
|
|
return
|
|
}
|
|
|
|
w.Header().Set("Access-Control-Allow-Origin", "*")
|
|
w.Header().Set("Content-Type", "application/atom+xml")
|
|
w.Write([]byte(atom))
|
|
}
|