2021-10-16 17:21:16 +03:00
// Copyright 2021 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package feed
import (
"net/http"
"time"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"
"github.com/gorilla/feeds"
)
2022-03-26 12:04:22 +03:00
// ShowUserFeedRSS show user activity as RSS feed
func ShowUserFeedRSS ( ctx * context . Context ) {
showUserFeed ( ctx , "rss" )
}
// ShowUserFeedAtom show user activity as Atom feed
func ShowUserFeedAtom ( ctx * context . Context ) {
showUserFeed ( ctx , "atom" )
}
// showUserFeed show user activity as RSS / Atom feed
func showUserFeed ( ctx * context . Context , formatType string ) {
2022-03-13 19:40:47 +03:00
actions , err := models . GetFeeds ( ctx , models . GetFeedsOptions {
2022-03-26 12:04:22 +03:00
RequestedUser : ctx . ContextUser ,
2022-03-22 10:03:22 +03:00
Actor : ctx . Doer ,
2021-10-16 17:21:16 +03:00
IncludePrivate : false ,
2022-03-26 12:04:22 +03:00
OnlyPerformedBy : ! ctx . ContextUser . IsOrganization ( ) ,
2021-10-16 17:21:16 +03:00
IncludeDeleted : false ,
Date : ctx . FormString ( "date" ) ,
} )
2022-03-13 19:40:47 +03:00
if err != nil {
ctx . ServerError ( "GetFeeds" , err )
2021-10-16 17:21:16 +03:00
return
}
feed := & feeds . Feed {
2022-03-26 12:04:22 +03:00
Title : ctx . Tr ( "home.feed_of" , ctx . ContextUser . DisplayName ( ) ) ,
Link : & feeds . Link { Href : ctx . ContextUser . HTMLURL ( ) } ,
Description : ctx . ContextUser . Description ,
2021-10-16 17:21:16 +03:00
Created : time . Now ( ) ,
}
feed . Items , err = feedActionsToFeedItems ( ctx , actions )
if err != nil {
ctx . ServerError ( "convert feed" , err )
return
}
writeFeed ( ctx , feed , formatType )
}
// writeFeed write a feeds.Feed as atom or rss to ctx.Resp
func writeFeed ( ctx * context . Context , feed * feeds . Feed , formatType string ) {
ctx . Resp . WriteHeader ( http . StatusOK )
if formatType == "atom" {
ctx . Resp . Header ( ) . Set ( "Content-Type" , "application/atom+xml;charset=utf-8" )
if err := feed . WriteAtom ( ctx . Resp ) ; err != nil {
ctx . ServerError ( "Render Atom failed" , err )
}
} else {
ctx . Resp . Header ( ) . Set ( "Content-Type" , "application/rss+xml;charset=utf-8" )
if err := feed . WriteRss ( ctx . Resp ) ; err != nil {
ctx . ServerError ( "Render RSS failed" , err )
}
}
}