magneticow: feeds now work!
This commit is contained in:
parent
80881c42c3
commit
1e4b6d55aa
@ -1,12 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
|
||||||
<rss version="2.0">
|
<rss version="2.0">
|
||||||
<channel>
|
<channel>
|
||||||
<title>{{.Title}}</title>
|
<title>{{.Title}}</title>
|
||||||
{{ range .Items }}
|
{{ range .Torrents }}
|
||||||
<item>
|
<item>
|
||||||
<title>{{ .Title }}</title>
|
<title>{{.Name}}</title>
|
||||||
<guid>{{ .InfoHash }}</guid>
|
<guid>{{bytesToHex .InfoHash}}</guid>
|
||||||
<enclosure url="magnet:?xt=urn:btih:{{ .InfoHash }}&dn={{ .Title }}" type="application/x-bittorrent" />
|
<enclosure url="magnet:?xt=urn:btih:{{bytesToHex .InfoHash}}&dn={{.Name}}" type="application/x-bittorrent" />
|
||||||
</item>
|
</item>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</channel>
|
</channel>
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
<input type="search" name="query" placeholder="Search the BitTorrent DHT">
|
<input type="search" name="query" placeholder="Search the BitTorrent DHT">
|
||||||
</form>
|
</form>
|
||||||
<div>
|
<div>
|
||||||
<a href="TODO-NOT-READY-YET"><img src="static/assets/feed.png"
|
<a href="/feed" id="feed-anchor"><img src="static/assets/feed.png"
|
||||||
alt="feed icon" title="subscribe" /> subscribe</a>
|
alt="feed icon" title="subscribe" /> subscribe</a>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
@ -68,8 +68,6 @@ func main() {
|
|||||||
|
|
||||||
router.PathPrefix("/static").HandlerFunc(staticHandler)
|
router.PathPrefix("/static").HandlerFunc(staticHandler)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
templateFunctions := template.FuncMap{
|
templateFunctions := template.FuncMap{
|
||||||
"add": func(augend int, addends int) int {
|
"add": func(augend int, addends int) int {
|
||||||
return augend + addends
|
return augend + addends
|
||||||
@ -112,7 +110,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
templates = make(map[string]*template.Template)
|
templates = make(map[string]*template.Template)
|
||||||
// templates["feed"] = template.Must(template.New("feed").Parse(string(mustAsset("templates/feed.xml"))))
|
templates["feed"] = template.Must(template.New("feed").Funcs(templateFunctions).Parse(string(mustAsset("templates/feed.xml"))))
|
||||||
templates["homepage"] = template.Must(template.New("homepage").Funcs(templateFunctions).Parse(string(mustAsset("templates/homepage.html"))))
|
templates["homepage"] = template.Must(template.New("homepage").Funcs(templateFunctions).Parse(string(mustAsset("templates/homepage.html"))))
|
||||||
// templates["statistics"] = template.Must(template.New("statistics").Parse(string(mustAsset("templates/statistics.html"))))
|
// templates["statistics"] = template.Must(template.New("statistics").Parse(string(mustAsset("templates/statistics.html"))))
|
||||||
templates["torrent"] = template.Must(template.New("torrent").Funcs(templateFunctions).Parse(string(mustAsset("templates/torrent.html"))))
|
templates["torrent"] = template.Must(template.New("torrent").Funcs(templateFunctions).Parse(string(mustAsset("templates/torrent.html"))))
|
||||||
@ -203,11 +201,86 @@ func torrentsInfohashHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func statisticsHandler(w http.ResponseWriter, r *http.Request) {
|
func statisticsHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
torrents, err := database.QueryTorrents(
|
||||||
|
"",
|
||||||
|
time.Now().Unix(),
|
||||||
|
persistence.ByDiscoveredOn,
|
||||||
|
false,
|
||||||
|
20,
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
respondError(w, 400, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = templates["homepage"].Execute(w, struct {
|
||||||
|
Title string
|
||||||
|
Torrents []persistence.TorrentMetadata
|
||||||
|
}{
|
||||||
|
Title: "TODO",
|
||||||
|
Torrents: torrents,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
panic(err.Error())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func feedHandler(w http.ResponseWriter, r *http.Request) {
|
func feedHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var query, title string
|
||||||
|
switch len(r.URL.Query()["query"]) {
|
||||||
|
case 0:
|
||||||
|
query = ""
|
||||||
|
case 1:
|
||||||
|
query = r.URL.Query()["query"][0]
|
||||||
|
default:
|
||||||
|
respondError(w, 400, "query supplied multiple times!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if query == "" {
|
||||||
|
title = "Most recent torrents - magneticow"
|
||||||
|
} else {
|
||||||
|
title = "`" + query + "` - magneticow"
|
||||||
|
}
|
||||||
|
|
||||||
|
torrents, err := database.QueryTorrents(
|
||||||
|
query,
|
||||||
|
time.Now().Unix(),
|
||||||
|
persistence.ByDiscoveredOn,
|
||||||
|
false,
|
||||||
|
N_TORRENTS,
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
respondError(w, 400, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// It is much more convenient to write the XML deceleration manually*, and then process the XML
|
||||||
|
// template using template/html and send, then to use encoding/xml.
|
||||||
|
//
|
||||||
|
// *: https://github.com/golang/go/issues/3133
|
||||||
|
//
|
||||||
|
// TODO: maybe do it properly, even if it's inconvenient?
|
||||||
|
|
||||||
|
_, err = w.Write([]byte(`<?xml version="1.0" encoding="utf-8" standalone="yes"?>`))
|
||||||
|
if err != nil {
|
||||||
|
panic(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
err = templates["feed"].Execute(w, struct {
|
||||||
|
Title string
|
||||||
|
Torrents []persistence.TorrentMetadata
|
||||||
|
}{
|
||||||
|
Title: title,
|
||||||
|
Torrents: torrents,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
panic(err.Error())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func staticHandler(w http.ResponseWriter, r *http.Request) {
|
func staticHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
Loading…
Reference in New Issue
Block a user