2017-07-16 17:14:21 +02:00
package feedController
import (
"net/http"
"strconv"
"strings"
"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 ) ,
2017-08-03 04:49:06 +02:00
PubDate : torrent . Date . Format ( "Mon Jan 02 15:04:05 -0700 2006" ) ,
2017-07-16 17:14:21 +02:00
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 )
}
}