//NewListItem returns ListItem struct from caches. func NewListItem(caches []*thread.Cache, remove bool, target string, search bool, filter, tag string) *ListItem { li := &ListItem{Remove: remove} li.Caches = make([]*CacheInfo, 0, len(caches)) if search { li.StrOpts = "?search_new_file=yes" } for _, ca := range caches { x, ok := checkCache(ca, target, filter, tag) if !ok { continue } ci := &CacheInfo{Cache: ca} li.Caches = append(li.Caches, ci) ci.Title = util.EscapeSpace(x) if target == "recent" { strTags := make([]string, user.Len(ca.Datfile)) for i, v := range user.GetByThread(ca.Datfile) { strTags[i] = strings.ToLower(v.Tagstr) } for _, st := range suggest.Get(ca.Datfile, nil) { if !util.HasString(strTags, strings.ToLower(st.Tagstr)) { ci.Sugtags = append(ci.Sugtags, st) } } } ci.Tags = user.GetByThread(ca.Datfile) } return li }
//printRecentRSS renders rss of caches which are written recently(are updated remotely). //including title,tags,last-modified. func printRecentRSS(w http.ResponseWriter, r *http.Request) { g, err := new(w, r) if err != nil { log.Println(err) return } rsss := cgi.NewRSS("UTF-8", "", fmt.Sprintf("%s - %s", g.M["recent"], g.M["logo"]), "http://"+g.Host(), "", "http://"+g.Host()+cfg.GatewayURL+"/"+"recent_rss", g.M["description"], xslURL) cl := thread.MakeRecentCachelist() for _, ca := range cl { title := util.Escape(util.FileDecode(ca.Datfile)) tags := suggest.Get(ca.Datfile, nil) tags = append(tags, user.GetByThread(ca.Datfile)...) rsss.Append(cfg.ThreadURL[1:]+"/"+util.StrEncode(title), title, "", "", html.EscapeString(title), tags.GetTagstrSlice(), ca.RecentStamp(), false) } g.WR.Header().Set("Content-Type", "text/xml; charset=UTF-8") if rsss.Len() != 0 { g.WR.Header().Set("Last-Modified", g.RFC822Time(rsss.Feeds[0].Date)) } rsss.MakeRSS1(g.WR) }