diff --git a/activity.go b/activity.go index cbe07dc..ea15da6 100644 --- a/activity.go +++ b/activity.go @@ -1153,7 +1153,7 @@ var oldjonks = cache.New(cache.Options{Filler: func(xid string) ([]byte, bool) { return nil, true } user, _ := butwhatabout(honk.Username) - rawhonks := gethonksbyconvoy(honk.UserID, honk.Convoy) + rawhonks := gethonksbyconvoy(honk.UserID, honk.Convoy, 0) reversehonks(rawhonks) for _, h := range rawhonks { if h.RID == honk.XID && h.Public && (h.Whofore == 2 || h.IsAcked()) { diff --git a/database.go b/database.go index f2978e2..a114e91 100644 --- a/database.go +++ b/database.go @@ -150,53 +150,53 @@ func geteventhonks(userid int64) []*Honk { reversehonks(honks) return honks } -func gethonksbyuser(name string, includeprivate bool) []*Honk { +func gethonksbyuser(name string, includeprivate bool, wanted int64) []*Honk { dt := time.Now().UTC().Add(-7 * 24 * time.Hour).Format(dbtimeformat) whofore := 2 if includeprivate { whofore = 3 } - rows, err := stmtUserHonks.Query(whofore, name, dt) + rows, err := stmtUserHonks.Query(wanted, whofore, name, dt) return getsomehonks(rows, err) } -func gethonksforuser(userid int64) []*Honk { +func gethonksforuser(userid int64, wanted int64) []*Honk { dt := time.Now().UTC().Add(-7 * 24 * time.Hour).Format(dbtimeformat) - rows, err := stmtHonksForUser.Query(userid, dt, userid, userid) + rows, err := stmtHonksForUser.Query(wanted, userid, dt, userid, userid) return getsomehonks(rows, err) } -func gethonksforuserfirstclass(userid int64) []*Honk { +func gethonksforuserfirstclass(userid int64, wanted int64) []*Honk { dt := time.Now().UTC().Add(-7 * 24 * time.Hour).Format(dbtimeformat) - rows, err := stmtHonksForUserFirstClass.Query(userid, dt, userid, userid) + rows, err := stmtHonksForUserFirstClass.Query(wanted, userid, dt, userid, userid) return getsomehonks(rows, err) } -func gethonksforme(userid int64) []*Honk { +func gethonksforme(userid int64, wanted int64) []*Honk { dt := time.Now().UTC().Add(-7 * 24 * time.Hour).Format(dbtimeformat) - rows, err := stmtHonksForMe.Query(userid, dt, userid) + rows, err := stmtHonksForMe.Query(wanted, userid, dt, userid) return getsomehonks(rows, err) } -func getsavedhonks(userid int64) []*Honk { - rows, err := stmtHonksISaved.Query(userid) +func getsavedhonks(userid int64, wanted int64) []*Honk { + rows, err := stmtHonksISaved.Query(wanted, userid) return getsomehonks(rows, err) } -func gethonksbyhonker(userid int64, honker string) []*Honk { - rows, err := stmtHonksByHonker.Query(userid, honker, userid) +func gethonksbyhonker(userid int64, honker string, wanted int64) []*Honk { + rows, err := stmtHonksByHonker.Query(wanted, userid, honker, userid) return getsomehonks(rows, err) } -func gethonksbyxonker(userid int64, xonker string) []*Honk { - rows, err := stmtHonksByXonker.Query(userid, xonker, xonker, userid) +func gethonksbyxonker(userid int64, xonker string, wanted int64) []*Honk { + rows, err := stmtHonksByXonker.Query(wanted, userid, xonker, xonker, userid) return getsomehonks(rows, err) } -func gethonksbycombo(userid int64, combo string) []*Honk { +func gethonksbycombo(userid int64, combo string, wanted int64) []*Honk { combo = "% " + combo + " %" - rows, err := stmtHonksByCombo.Query(userid, combo, userid) + rows, err := stmtHonksByCombo.Query(wanted, userid, combo, userid) return getsomehonks(rows, err) } -func gethonksbyconvoy(userid int64, convoy string) []*Honk { - rows, err := stmtHonksByConvoy.Query(userid, userid, convoy) +func gethonksbyconvoy(userid int64, convoy string, wanted int64) []*Honk { + rows, err := stmtHonksByConvoy.Query(wanted, userid, userid, convoy) honks := getsomehonks(rows, err) return honks } -func gethonksbysearch(userid int64, q string) []*Honk { +func gethonksbysearch(userid int64, q string, wanted int64) []*Honk { honker := "" withhonker := 0 site := "" @@ -225,12 +225,12 @@ func gethonksbysearch(userid int64, q string) []*Honk { q += t } q += "%" - rows, err := stmtHonksBySearch.Query(userid, withsite, site, withhonker, honker, honker, q, userid) + rows, err := stmtHonksBySearch.Query(wanted, userid, withsite, site, withhonker, honker, honker, q, userid) honks := getsomehonks(rows, err) return honks } -func gethonksbyontology(userid int64, name string) []*Honk { - rows, err := stmtHonksByOntology.Query(name, userid, userid) +func gethonksbyontology(userid int64, name string, wanted int64) []*Honk { + rows, err := stmtHonksByOntology.Query(wanted, name, userid, userid) honks := getsomehonks(rows, err) return honks } @@ -667,18 +667,18 @@ func prepareStatements(db *sql.DB) { stmtOneBonk = preparetodie(db, selecthonks+"where honks.userid = ? and xid = ? and what = 'bonk' and whofore = 2") stmtPublicHonks = preparetodie(db, selecthonks+"where whofore = 2 and dt > ?"+limit) stmtEventHonks = preparetodie(db, selecthonks+"where (whofore = 2 or honks.userid = ?) and what = 'event'"+limit) - stmtUserHonks = preparetodie(db, selecthonks+"where (whofore = 2 or whofore = ?) and username = ? and dt > ?"+limit) + stmtUserHonks = preparetodie(db, selecthonks+"where honks.honkid > ? and (whofore = 2 or whofore = ?) and username = ? and dt > ?"+limit) myhonkers := " and honker in (select xid from honkers where userid = ? and (flavor = 'sub' or flavor = 'peep' or flavor = 'presub') and combos not like '% - %')" - stmtHonksForUser = preparetodie(db, selecthonks+"where honks.userid = ? and dt > ?"+myhonkers+butnotthose+limit) - stmtHonksForUserFirstClass = preparetodie(db, selecthonks+"where honks.userid = ? and dt > ? and (what <> 'tonk')"+myhonkers+butnotthose+limit) - stmtHonksForMe = preparetodie(db, selecthonks+"where honks.userid = ? and dt > ? and whofore = 1"+butnotthose+limit) - stmtHonksISaved = preparetodie(db, selecthonks+"where honks.userid = ? and flags & 4 order by honks.honkid desc") - stmtHonksByHonker = preparetodie(db, selecthonks+"join honkers on (honkers.xid = honks.honker or honkers.xid = honks.oonker) where honks.userid = ? and honkers.name = ?"+butnotthose+limit) - stmtHonksByXonker = preparetodie(db, selecthonks+" where honks.userid = ? and (honker = ? or oonker = ?)"+butnotthose+limit) - stmtHonksByCombo = preparetodie(db, selecthonks+"join honkers on honkers.xid = honks.honker where honks.userid = ? and honkers.combos like ?"+butnotthose+limit) - stmtHonksBySearch = preparetodie(db, selecthonks+"where honks.userid = ? and (? = 0 or xid like ?) and (? = 0 or honks.honker = ? or honks.oonker = ?) and noise like ?"+butnotthose+limit) - stmtHonksByConvoy = preparetodie(db, selecthonks+"where (honks.userid = ? or (? = -1 and whofore = 2)) and convoy = ?"+limit) - stmtHonksByOntology = preparetodie(db, selecthonks+"join onts on honks.honkid = onts.honkid where onts.ontology = ? and (honks.userid = ? or (? = -1 and honks.whofore = 2))"+limit) + stmtHonksForUser = preparetodie(db, selecthonks+"where honks.honkid > ? and honks.userid = ? and dt > ?"+myhonkers+butnotthose+limit) + stmtHonksForUserFirstClass = preparetodie(db, selecthonks+"where honks.honkid > ? and honks.userid = ? and dt > ? and (what <> 'tonk')"+myhonkers+butnotthose+limit) + stmtHonksForMe = preparetodie(db, selecthonks+"where honks.honkid > ? and honks.userid = ? and dt > ? and whofore = 1"+butnotthose+limit) + stmtHonksISaved = preparetodie(db, selecthonks+"where honks.honkid > ? and honks.userid = ? and flags & 4 order by honks.honkid desc") + stmtHonksByHonker = preparetodie(db, selecthonks+"join honkers on (honkers.xid = honks.honker or honkers.xid = honks.oonker) where honks.honkid > ? and honks.userid = ? and honkers.name = ?"+butnotthose+limit) + stmtHonksByXonker = preparetodie(db, selecthonks+" where honks.honkid > ? and honks.userid = ? and (honker = ? or oonker = ?)"+butnotthose+limit) + stmtHonksByCombo = preparetodie(db, selecthonks+"join honkers on honkers.xid = honks.honker where honks.honkid > ? and honks.userid = ? and honkers.combos like ?"+butnotthose+limit) + stmtHonksBySearch = preparetodie(db, selecthonks+"where honks.honkid > ? and honks.userid = ? and (? = 0 or xid like ?) and (? = 0 or honks.honker = ? or honks.oonker = ?) and noise like ?"+butnotthose+limit) + stmtHonksByConvoy = preparetodie(db, selecthonks+"where honks.honkid > ? and (honks.userid = ? or (? = -1 and whofore = 2)) and convoy = ?"+limit) + stmtHonksByOntology = preparetodie(db, selecthonks+"join onts on honks.honkid = onts.honkid where honks.honkid > ? and onts.ontology = ? and (honks.userid = ? or (? = -1 and honks.whofore = 2))"+limit) stmtSaveMeta = preparetodie(db, "insert into honkmeta (honkid, genus, json) values (?, ?, ?)") stmtDeleteMeta = preparetodie(db, "delete from honkmeta where honkid = ? and genus <> ?") diff --git a/views/honkfrags.html b/views/honkfrags.html index 8d72f62..30f6a30 100644 --- a/views/honkfrags.html +++ b/views/honkfrags.html @@ -1,4 +1,4 @@ -
{{ .TopXID }}
+
{{ .TopHID }}
{{ $BonkCSRF := .HonkCSRF }}

{{ .ServerMessage }}

diff --git a/views/honkpage.html b/views/honkpage.html index 87ad9b2..e421c30 100644 --- a/views/honkpage.html +++ b/views/honkpage.html @@ -30,8 +30,8 @@ var csrftoken = {{ .HonkCSRF }} var honksforpage = { } var curpagestate = { name: "{{ .PageName }}", arg : "{{ .PageArg }}" } -var topxid = { } -topxid[curpagestate.name + ":" + curpagestate.arg] = "{{ .TopXID }}" +var tophid = { } +tophid[curpagestate.name + ":" + curpagestate.arg] = "{{ .TopHID }}" var servermsgs = { } servermsgs[curpagestate.name + ":" + curpagestate.arg] = "{{ .ServerMessage }}" diff --git a/views/honkpage.js b/views/honkpage.js index 3888a65..5435ec4 100644 --- a/views/honkpage.js +++ b/views/honkpage.js @@ -65,7 +65,7 @@ function flogit(el, how, xid) { function fillinhonks(xhr) { var doc = xhr.responseXML var stash = curpagestate.name + ":" + curpagestate.arg - topxid[stash] = doc.children[0].children[1].children[0].innerText + tophid[stash] = doc.children[0].children[1].children[0].innerText var srvmsg = doc.children[0].children[1].children[1] var honks = doc.children[0].children[1].children[2].children @@ -118,7 +118,7 @@ function refreshhonks(btn) { btn.disabled = true var args = hydrargs() var stash = curpagestate.name + ":" + curpagestate.arg - args["topxid"] = topxid[stash] + args["tophid"] = tophid[stash] get("/hydra?" + encode(args), function(xhr) { var lenhonks = fillinhonks(xhr) btn.innerHTML = "refresh" diff --git a/web.go b/web.go index ef4786f..61760f0 100644 --- a/web.go +++ b/web.go @@ -100,7 +100,7 @@ func homepage(w http.ResponseWriter, r *http.Request) { case "/atme": templinfo["PageName"] = "at me!" templinfo["PageName"] = "atme" - honks = gethonksforme(userid) + honks = gethonksforme(userid, 0) case "/events": templinfo["ServerMessage"] = "some recent and upcoming events" templinfo["PageName"] = "events" @@ -108,15 +108,15 @@ func homepage(w http.ResponseWriter, r *http.Request) { honks = osmosis(honks, userid) case "/first": templinfo["PageName"] = "first" - honks = gethonksforuser(userid) + honks = gethonksforuser(userid, 0) honks = osmosis(honks, userid) case "/saved": templinfo["ServerMessage"] = "saved honks" templinfo["PageName"] = "saved" - honks = getsavedhonks(userid) + honks = getsavedhonks(userid, 0) default: templinfo["PageName"] = "home" - honks = gethonksforuser(userid) + honks = gethonksforuser(userid, 0) honks = osmosis(honks, userid) } templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r) @@ -156,7 +156,7 @@ func showrss(w http.ResponseWriter, r *http.Request) { var honks []*Honk if name != "" { - honks = gethonksbyuser(name, false) + honks = gethonksbyuser(name, false, 0) } else { honks = getpublichonks() } @@ -477,7 +477,7 @@ var oldoutbox = cache.New(cache.Options{Filler: func(name string) ([]byte, bool) if err != nil { return nil, false } - honks := gethonksbyuser(name, false) + honks := gethonksbyuser(name, false, 0) if len(honks) > 20 { honks = honks[0:20] } @@ -570,7 +570,7 @@ func showuser(w http.ResponseWriter, r *http.Request) { return } u := login.GetUserInfo(r) - honks := gethonksbyuser(name, u != nil && u.Username == name) + honks := gethonksbyuser(name, u != nil && u.Username == name, 0) templinfo := getInfo(r) filt := htfilter.New() templinfo["Name"] = user.Name @@ -588,9 +588,9 @@ func showhonker(w http.ResponseWriter, r *http.Request) { var honks []*Honk if name == "" { name = r.FormValue("xid") - honks = gethonksbyxonker(u.UserID, name) + honks = gethonksbyxonker(u.UserID, name, 0) } else { - honks = gethonksbyhonker(u.UserID, name) + honks = gethonksbyhonker(u.UserID, name, 0) } msg := templates.Sprintf(`honks by honker: %s`, name, name) templinfo := getInfo(r) @@ -604,7 +604,7 @@ func showhonker(w http.ResponseWriter, r *http.Request) { func showcombo(w http.ResponseWriter, r *http.Request) { name := mux.Vars(r)["name"] u := login.GetUserInfo(r) - honks := gethonksbycombo(u.UserID, name) + honks := gethonksbycombo(u.UserID, name, 0) honks = osmosis(honks, u.UserID) templinfo := getInfo(r) templinfo["PageName"] = "combo" @@ -616,10 +616,10 @@ func showcombo(w http.ResponseWriter, r *http.Request) { func showconvoy(w http.ResponseWriter, r *http.Request) { c := r.FormValue("c") u := login.GetUserInfo(r) - honks := gethonksbyconvoy(u.UserID, c) + honks := gethonksbyconvoy(u.UserID, c, 0) templinfo := getInfo(r) if len(honks) > 0 { - templinfo["TopXID"] = honks[0].XID + templinfo["TopHID"] = honks[0].ID } reversehonks(honks) templinfo["PageName"] = "convoy" @@ -631,7 +631,7 @@ func showconvoy(w http.ResponseWriter, r *http.Request) { func showsearch(w http.ResponseWriter, r *http.Request) { q := r.FormValue("q") u := login.GetUserInfo(r) - honks := gethonksbysearch(u.UserID, q) + honks := gethonksbysearch(u.UserID, q, 0) templinfo := getInfo(r) templinfo["PageName"] = "search" templinfo["PageArg"] = q @@ -646,7 +646,7 @@ func showontology(w http.ResponseWriter, r *http.Request) { if u != nil { userid = u.UserID } - honks := gethonksbyontology(userid, "#"+name) + honks := gethonksbyontology(userid, "#"+name, 0) templinfo := getInfo(r) templinfo["ServerMessage"] = "honks by ontology: " + name templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r) @@ -742,7 +742,7 @@ func showhonk(w http.ResponseWriter, r *http.Request) { honkpage(w, u, []*Honk{honk}, templinfo) return } - rawhonks := gethonksbyconvoy(honk.UserID, honk.Convoy) + rawhonks := gethonksbyconvoy(honk.UserID, honk.Convoy, 0) reversehonks(rawhonks) var honks []*Honk for _, h := range rawhonks { @@ -767,8 +767,8 @@ func honkpage(w http.ResponseWriter, u *login.UserInfo, honks []*Honk, templinfo } reverbolate(userid, honks) templinfo["Honks"] = honks - if templinfo["TopXID"] == nil && len(honks) > 0 { - templinfo["TopXID"] = honks[0].XID + if templinfo["TopHID"] == nil && len(honks) > 0 { + templinfo["TopHID"] = honks[0].ID } err := readviews.Execute(w, "honkpage.html", templinfo) if err != nil { @@ -1632,54 +1632,48 @@ func webhydra(w http.ResponseWriter, r *http.Request) { templinfo := getInfo(r) templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r) page := r.FormValue("page") + + wanted, _ := strconv.ParseInt(r.FormValue("tophid"), 10, 0) + var honks []*Honk switch page { case "atme": - honks = gethonksforme(userid) + honks = gethonksforme(userid, wanted) templinfo["ServerMessage"] = "at me!" case "home": - honks = gethonksforuser(userid) + honks = gethonksforuser(userid, wanted) honks = osmosis(honks, userid) templinfo["ServerMessage"] = serverMsg case "first": - honks = gethonksforuserfirstclass(userid) + honks = gethonksforuserfirstclass(userid, wanted) honks = osmosis(honks, userid) templinfo["ServerMessage"] = "first class only" case "saved": - honks = getsavedhonks(userid) + honks = getsavedhonks(userid, wanted) templinfo["PageName"] = "saved" templinfo["ServerMessage"] = "saved honks" case "combo": c := r.FormValue("c") - honks = gethonksbycombo(userid, c) + honks = gethonksbycombo(userid, c, wanted) honks = osmosis(honks, userid) templinfo["ServerMessage"] = "honks by combo: " + c case "convoy": c := r.FormValue("c") - honks = gethonksbyconvoy(userid, c) + honks = gethonksbyconvoy(userid, c, wanted) templinfo["ServerMessage"] = "honks in convoy: " + c case "honker": xid := r.FormValue("xid") if strings.IndexByte(xid, '@') != -1 { xid = gofish(xid) } - honks = gethonksbyxonker(userid, xid) + honks = gethonksbyxonker(userid, xid, wanted) msg := templates.Sprintf(`honks by honker: %s`, xid, xid) templinfo["ServerMessage"] = msg default: http.NotFound(w, r) } if len(honks) > 0 { - templinfo["TopXID"] = honks[0].XID - } - if topxid := r.FormValue("topxid"); topxid != "" { - for i, h := range honks { - if h.XID == topxid { - honks = honks[0:i] - break - } - } - log.Printf("topxid %d frags", len(honks)) + templinfo["TopHID"] = honks[0].ID } reverbolate(userid, honks) templinfo["Honks"] = honks