2021-10-16 16:21:16 +02: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"
2021-11-24 17:49:20 +08:00
user_model "code.gitea.io/gitea/models/user"
2021-10-16 16:21:16 +02:00
"code.gitea.io/gitea/modules/context"
"github.com/gorilla/feeds"
)
// ShowUserFeed show user activity as RSS / Atom feed
2021-11-24 17:49:20 +08:00
func ShowUserFeed ( ctx * context . Context , ctxUser * user_model . User , formatType string ) {
2022-03-13 17:40:47 +01:00
actions , err := models . GetFeeds ( ctx , models . GetFeedsOptions {
2021-10-16 16:21:16 +02:00
RequestedUser : ctxUser ,
2022-03-22 08:03:22 +01:00
Actor : ctx . Doer ,
2021-10-16 16:21:16 +02:00
IncludePrivate : false ,
2022-03-10 15:54:51 +01:00
OnlyPerformedBy : ! ctxUser . IsOrganization ( ) ,
2021-10-16 16:21:16 +02:00
IncludeDeleted : false ,
Date : ctx . FormString ( "date" ) ,
} )
2022-03-13 17:40:47 +01:00
if err != nil {
ctx . ServerError ( "GetFeeds" , err )
2021-10-16 16:21:16 +02:00
return
}
feed := & feeds . Feed {
Title : ctx . Tr ( "home.feed_of" , ctxUser . DisplayName ( ) ) ,
Link : & feeds . Link { Href : ctxUser . HTMLURL ( ) } ,
Description : ctxUser . Description ,
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 )
}
}
}