/
controller.go
69 lines (61 loc) · 2.21 KB
/
controller.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package main
import (
"net/http"
"strconv"
"math/rand"
"github.com/flosch/pongo2"
"github.com/zenazn/goji/web"
)
type Controller struct {
*DataManager
}
func NewController(dm *DataManager) *Controller {
return &Controller{dm}
}
func (cntr Controller) ApiOutLink(c web.C, w http.ResponseWriter, r *http.Request) {
keyname := REDISKEY_FEED_ITEM_PREFIX + c.URLParams["id"]
if cntr.IsKeyExists(keyname) {
cntr.SetOutLinkIncrement(keyname)
}
}
func (cntr Controller) Root(c web.C, w http.ResponseWriter, r *http.Request) {
tpl, err := pongo2.FromFile("main.j2")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
pagenum, err := strconv.Atoi(r.URL.Query().Get("p"))
if err != nil {
pagenum = 1;
}
reqid := r.URL.Query().Get("id")
if cntr.IsKeyExists(REDISKEY_FEED_ITEM_PREFIX + reqid) {
cntr.SetInLinkIncrement(REDISKEY_FEED_ITEM_PREFIX + reqid)
}
category := c.URLParams["category"]
items := cntr.GetPageFeedItem(pagenum, category, cntr.UserConfig.Site.ItemDays, cntr.UserConfig.Site.PageNewItemCount)
rankitems := cntr.GetPageFeedRankItem(pagenum, category, cntr.UserConfig.Site.ItemDays, cntr.UserConfig.Site.PageRankItemCount)
tpl.ExecuteWriter(pongo2.Context{"items": items, "rankitems": rankitems, "p": pagenum, "reqid": reqid, "category": category}, w)
}
func (cntr Controller) NewFeed(c web.C, w http.ResponseWriter, r *http.Request) {
tpl, err := pongo2.FromFile("rss2.j2")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
items := cntr.GetPageFeedItem(1, c.URLParams["category"], cntr.UserConfig.Site.ItemDays, cntr.UserConfig.Site.PageNewItemCount)
tpl.ExecuteWriter(pongo2.Context{"items": items}, w)
}
func GetRankDaysKeyname(days int, category string) string {
if category != "" {
return REDISKEY_FEED_RANK_DAYS_PREFIX + category + ":" + strconv.Itoa(days)
}
return REDISKEY_FEED_RANK_DAYS_PREFIX + strconv.Itoa(days)
}
func GetRandItem(items []Item) []Item {
for i := range items {
j := rand.Intn(i + 1)
items[i], items[j] = items[j], items[i]
}
return items
}