package feedController import ( "net/http" "strconv" "strings" "time" "github.com/NyaaPantsu/nyaa/config" "github.com/NyaaPantsu/nyaa/utils/feeds" "github.com/gin-gonic/gin" "github.com/gorilla/feeds" ) // RSSEztvHandler : Controller for displaying rss feed, accepting common search arguments func RSSEztvHandler(c *gin.Context) { // We only get the basic variable for rss based on search param torrents, createdAsTime, title, err := getTorrentList(c) if err != nil { c.AbortWithError(http.StatusInternalServerError, err) return } feed := &nyaafeeds.RssFeed{ Title: title, Link: config.WebAddress() + "/", PubDate: createdAsTime.String(), } feed.Items = make([]*nyaafeeds.RssItem, len(torrents)) for i, torrent := range torrents { torrentJSON := torrent.ToJSON() feed.Items[i] = &nyaafeeds.RssItem{ Title: torrentJSON.Name, Link: config.WebAddress() + "/download/" + torrentJSON.Hash, Category: &nyaafeeds.RssCategory{ Domain: config.WebAddress() + "/search?c=" + torrentJSON.Category + "_" + torrentJSON.SubCategory, }, Description: string(torrentJSON.Description), Comments: config.WebAddress() + "/view/" + strconv.FormatUint(uint64(torrentJSON.ID), 10), PubDate: torrent.Date.Format(time.RFC1123Z), GUID: config.WebAddress() + "/view/" + strconv.FormatUint(uint64(torrentJSON.ID), 10), Enclosure: &nyaafeeds.RssEnclosure{ URL: config.WebAddress() + "/download/" + strings.TrimSpace(torrentJSON.Hash), Length: strconv.FormatUint(uint64(torrentJSON.Filesize), 10), Type: "application/x-bittorrent", }, Torrent: &nyaafeeds.RssTorrent{ Xmlns: "http://xmlns.ezrss.it/0.1/", FileName: torrentJSON.Name + ".torrent", ContentLength: strconv.FormatUint(uint64(torrentJSON.Filesize), 10), InfoHash: torrentJSON.Hash, MagnetURI: string(torrentJSON.Magnet), }, } } // allow cross domain AJAX requests c.Header("Access-Control-Allow-Origin", "*") rss, rssErr := feeds.ToXML(feed) if rssErr != nil { c.AbortWithError(http.StatusInternalServerError, rssErr) } _, writeErr := c.Writer.Write([]byte(rss)) if writeErr != nil { c.AbortWithError(http.StatusInternalServerError, writeErr) } }