From 245076d017f26e12c162c08933fa3078cf19f63b Mon Sep 17 00:00:00 2001 From: Jordan Date: Sat, 18 Dec 2021 16:45:53 -0700 Subject: web, db: add processed URL index, housekeeping --- web.go | 207 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 web.go (limited to 'web.go') diff --git a/web.go b/web.go new file mode 100644 index 0000000..c3c8d67 --- /dev/null +++ b/web.go @@ -0,0 +1,207 @@ +package main + +import ( + "html/template" + "log" + "net/http" + "net/url" + "strconv" +) + +type Resp struct { + Entries *[]Entry + Err error + Stats *Stats + URL string + Offset int + User string + Guild string + Channel string +} + +var funcMap = template.FuncMap{ + "add": add, + "minus": minus, + "setQuery": setQuery, + "getRoot": getRoot, + "intToStr": intToStr, +} + +const i = ` + + + + + + +
+

Keep

+

{{- .Err -}}

+

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

+ +

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

+ + + + + + + + + + + + + {{- range $e := .Entries -}} + + + + + + {{- end -}} +
IDHTTPURL
{{- $e.ID -}}{{- if eq $e.Status 0 -}}PEND{{- else -}}{{ $e.Status }}{{- end -}}{{ $e.Message.URL }}
+
+ + + + ` + +var t = template.Must(template.New("").Funcs(funcMap).Parse(i)) + +func minus(a int, b int) int { + + return a - b +} + +func add(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 u.String() +} + +func getRoot(urlStr string) string { + + u, _ := url.Parse(urlStr) + u.RawQuery = "" + u.Fragment = "" + return u.String() +} + +func (db *SqliteDB) IndexHandler(w http.ResponseWriter, r *http.Request) { + + resp := Resp{} + resp.Stats, resp.Err = db.Stats() + if resp.Err != nil { + log.Println(resp.Err) + t.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.Entries, resp.Err = db.ListEntries(100, resp.Offset, resp.User, + resp.Guild, resp.Channel) + if resp.Err != nil { + log.Println(resp.Err) + } + t.Execute(w, &resp) +} -- cgit v1.2.3-54-g00ecf