@@ -7,71 +7,99 @@ import (
77	"github.com/labstack/echo" 
88)
99
10+ type  rssGUID  struct  {
11+ 	IsPermalink  bool    `xml:"isPermaLink,attr"` 
12+ 	GUID         string  `xml:",chardata"` 
13+ }
14+ 
1015type  rssItem  struct  {
11- 	Title        string  `xml:"title"` 
12- 	GUID         string  `xml:"guid"` 
13- 	Description  string  `xml:"description"` 
14- 	Link         string  `xml:"link"` 
15- 	PubDate      string  `xml:"pubDate"` 
16+ 	Title        string   `xml:"title"` 
17+ 	GUID         rssGUID  `xml:"guid"` 
18+ 	Description  string   `xml:"description"` 
19+ 	Link         string   `xml:"link"` 
20+ 	PubDate      string   `xml:"pubDate"` 
21+ }
22+ 
23+ type  rssAtomLink  struct  {
24+ 	HRef  string  `xml:"href,attr"` 
25+ 	Rel   string  `xml:"rel,attr"` 
26+ 	Type  string  `xml:"type,attr"` 
1627}
1728
1829type  rssChannel  struct  {
19- 	Title        string  `xml:"title"` 
20- 	Description  string  `xml:"description"` 
21- 	Link         string  `xml:"link"` 
30+ 	Title        string       `xml:"title"` 
31+ 	Description  string       `xml:"description"` 
32+ 	Link         string       `xml:"link"` 
33+ 	AtomLink     rssAtomLink  `xml:"atom:link"` 
34+ 	Items        []rssItem    `xml:"item"` 
2235}
2336
2437type  rssResponse  struct  {
2538	XMLName  bool        `xml:"rss"` 
26- 	Version  int         `xml:"version,attr"` 
39+ 	Version  string      `xml:"version,attr"` 
40+ 	Atom     string      `xml:"xmlns:atom,attr"` 
2741	Channel  rssChannel  `xml:"channel"` 
28- 	Items    []rssItem   `xml:"item"` 
2942}
3043
3144func  RSSHandler (db  * Database ) echo.HandlerFunc  {
3245	return  func (c  echo.Context ) error  {
3346		activity , _  :=  db .Activity (c .QueryParam ("next" ), 50 )
3447		response  :=  rssResponse {
35- 			Version : 2 ,
48+ 			Version : "2.0" ,
49+ 			Atom :    "http://www.w3.org/2005/Atom" ,
3650			Channel : rssChannel {
3751				Title :       "GGG Tracker" ,
3852				Description : "Latest activity from Grinding Gear Games" ,
3953				Link :        AbsoluteURL (c , "" ),
54+ 				AtomLink : rssAtomLink {
55+ 					HRef : AbsoluteURL (c , "/rss" ),
56+ 					Rel :  "self" ,
57+ 					Type : "application/rss+xml" ,
58+ 				},
4059			},
4160		}
4261		for  _ , a  :=  range  activity  {
4362			switch  a .(type ) {
4463			case  * ForumPost :
4564				post  :=  a .(* ForumPost )
46- 				response .Items  =  append (response .Items , rssItem {
47- 					Title :       post .Poster  +  " - "  +  post .ThreadTitle ,
48- 					Link :        post .PostURL (),
49- 					GUID :        fmt .Sprintf ("poe-forum-post-%v" , post .Id ),
65+ 				response .Channel .Items  =  append (response .Channel .Items , rssItem {
66+ 					Title : post .Poster  +  " - "  +  post .ThreadTitle ,
67+ 					Link :  post .PostURL (),
68+ 					GUID : rssGUID {
69+ 						IsPermalink : false ,
70+ 						GUID :        fmt .Sprintf ("poe-forum-post-%v" , post .Id ),
71+ 					},
5072					Description : post .BodyHTML ,
5173					PubDate :     post .Time .Format (time .RFC1123Z ),
5274				})
5375			case  * RedditComment :
5476				comment  :=  a .(* RedditComment )
55- 				response .Items  =  append (response .Items , rssItem {
56- 					Title :       comment .Author  +  " - "  +  comment .PostTitle ,
57- 					Link :        comment .CommentURL (),
58- 					GUID :        "reddit-comment-"  +  comment .Id ,
77+ 				response .Channel .Items  =  append (response .Channel .Items , rssItem {
78+ 					Title : comment .Author  +  " - "  +  comment .PostTitle ,
79+ 					Link :  comment .CommentURL (),
80+ 					GUID : rssGUID {
81+ 						IsPermalink : false ,
82+ 						GUID :        "reddit-comment-"  +  comment .Id ,
83+ 					},
5984					Description : comment .BodyHTML ,
6085					PubDate :     comment .Time .Format (time .RFC1123Z ),
6186				})
6287			case  * RedditPost :
6388				post  :=  a .(* RedditPost )
6489				item  :=  rssItem {
65- 					Title :       post .Author  +  " - "  +  post .Title ,
66- 					Link :        "https://www.reddit.com"  +  post .Permalink ,
67- 					GUID :        "reddit-post-"  +  post .Id ,
90+ 					Title : post .Author  +  " - "  +  post .Title ,
91+ 					Link :  "https://www.reddit.com"  +  post .Permalink ,
92+ 					GUID : rssGUID {
93+ 						IsPermalink : false ,
94+ 						GUID :        "reddit-post-"  +  post .Id ,
95+ 					},
6896					Description : post .BodyHTML ,
6997					PubDate :     post .Time .Format (time .RFC1123Z ),
7098				}
7199				if  item .Description  ==  ""  {
72100					item .Description  =  "<a href=\" "  +  post .URL  +  "\" >"  +  post .URL  +  "</a>" 
73101				}
74- 				response .Items  =  append (response .Items , item )
102+ 				response .Channel . Items  =  append (response . Channel .Items , item )
75103			}
76104		}
77105		return  c .XML (200 , response )
0 commit comments