package main import ( "html/template" "log" "net/http" "net/url" "strconv" "strings" ) type Resp struct { Entries *[]Entry Err error Stats *Stats URL string Offset int User string Guild string Channel string Search string } var funcMap = template.FuncMap{ "add": add, "subtract": subtract, "setQuery": setQuery, "intToStr": intToStr, } const index = `

Keep

{{- .Err -}}

{{- .Stats.URLs -}} URLs, {{- .Stats.Users -}} users, {{- .Stats.Guilds -}} guilds, {{- .Stats.Channels -}} channels

{{- if or (ne .User "") (ne .Guild "") (ne .Channel "") (ne .Search "" ) -}} Entries filtered by: {{- end -}} {{- if ne .User "" }} User ({{ .User -}}){{- end -}} {{- if ne .Guild "" }} Guild ({{ .Guild -}}){{- end -}} {{- if ne .Channel "" }} Channel ({{ .Channel -}}){{- end -}} {{- if ne .Search "" }} URL ({{ .Search -}}){{- end -}}

{{- if gt (len .Entries) 0 -}} {{- range $e := .Entries -}} {{- end -}}
ID HTTP URL
{{- $e.ID -}} {{- if eq $e.Status 0 -}}PEND{{- else -}}{{ $e.Status }}{{- end -}} {{ $e.Message.URL }}
{{- else -}}

No results to display

Home

{{- end -}} {{- if gt (len .Entries) 0 -}} {{- end -}} ` var indexTmp = template.Must(template.New("").Funcs(funcMap).Parse(index)) func add(a int, b int) int { return a + b } func subtract(a int, b int) int { return a - b } func intToStr(a int) string { return strconv.Itoa(a) } func setQuery(urlStr string, query string, value string) string { u, _ := url.Parse(urlStr) q := u.Query() q.Set(query, value) u.RawQuery = q.Encode() return strings.TrimLeft(u.String(), "/") } func (db *SqliteDB) IndexHandler(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound) return } resp := Resp{} resp.Stats, resp.Err = db.Stats() if resp.Err != nil { log.Println(resp.Err) indexTmp.Execute(w, &resp) return } resp.URL = r.URL.String() query := r.URL.Query() var err error resp.Offset, err = strconv.Atoi(query.Get("offset")) if err != nil { resp.Offset = 0 } resp.User = query.Get("user") resp.Guild = query.Get("guild") resp.Channel = query.Get("channel") resp.Search = query.Get("search") resp.Entries, resp.Err = db.ListEntries(100, resp.Offset, resp.User, resp.Guild, resp.Channel, resp.Search) if resp.Err != nil { log.Println(resp.Err) } indexTmp.Execute(w, &resp) }