option to desub part of a thread. somewhat suspect implementation...

This commit is contained in:
Ted Unangst 2019-10-28 23:09:37 -04:00
parent f7d33094fe
commit 71b204db5e
6 changed files with 58 additions and 12 deletions

View File

@ -680,7 +680,7 @@ var stmtHonksBySearch, stmtHonksByHonker, stmtSaveHonk, stmtUserByName, stmtUser
var stmtEventHonks, stmtOneBonk, stmtFindZonk, stmtFindXonk, stmtSaveDonk *sql.Stmt var stmtEventHonks, stmtOneBonk, stmtFindZonk, stmtFindXonk, stmtSaveDonk *sql.Stmt
var stmtFindFile, stmtGetFileData, stmtSaveFileData, stmtSaveFile *sql.Stmt var stmtFindFile, stmtGetFileData, stmtSaveFileData, stmtSaveFile *sql.Stmt
var stmtAddDoover, stmtGetDoovers, stmtLoadDoover, stmtZapDoover, stmtOneHonker *sql.Stmt var stmtAddDoover, stmtGetDoovers, stmtLoadDoover, stmtZapDoover, stmtOneHonker *sql.Stmt
var stmtThumbBiters, stmtDeleteHonk, stmtDeleteDonks, stmtDeleteOnts, stmtSaveZonker *sql.Stmt var stmtDesubbed, stmtDeleteHonk, stmtDeleteDonks, stmtDeleteOnts, stmtSaveZonker *sql.Stmt
var stmtGetZonkers, stmtRecentHonkers, stmtGetXonker, stmtSaveXonker, stmtDeleteXonker *sql.Stmt var stmtGetZonkers, stmtRecentHonkers, stmtGetXonker, stmtSaveXonker, stmtDeleteXonker *sql.Stmt
var stmtAllOnts, stmtSaveOnt, stmtUpdateFlags, stmtClearFlags *sql.Stmt var stmtAllOnts, stmtSaveOnt, stmtUpdateFlags, stmtClearFlags *sql.Stmt
var stmtHonksForUserFirstClass, stmtSaveMeta, stmtDeleteMeta, stmtUpdateHonk *sql.Stmt var stmtHonksForUserFirstClass, stmtSaveMeta, stmtDeleteMeta, stmtUpdateHonk *sql.Stmt
@ -746,7 +746,7 @@ func prepareStatements(db *sql.DB) {
stmtGetDoovers = preparetodie(db, "select dooverid, dt from doovers") stmtGetDoovers = preparetodie(db, "select dooverid, dt from doovers")
stmtLoadDoover = preparetodie(db, "select tries, userid, rcpt, msg from doovers where dooverid = ?") stmtLoadDoover = preparetodie(db, "select tries, userid, rcpt, msg from doovers where dooverid = ?")
stmtZapDoover = preparetodie(db, "delete from doovers where dooverid = ?") stmtZapDoover = preparetodie(db, "delete from doovers where dooverid = ?")
stmtThumbBiters = preparetodie(db, "select userid, name, wherefore from zonkers") stmtDesubbed = preparetodie(db, "select name from zonkers where userid = ? and wherefore = 'desub'")
stmtFindZonk = preparetodie(db, "select zonkerid from zonkers where userid = ? and name = ? and wherefore = 'zonk'") stmtFindZonk = preparetodie(db, "select zonkerid from zonkers where userid = ? and name = ? and wherefore = 'zonk'")
stmtGetZonkers = preparetodie(db, "select zonkerid, name, wherefore from zonkers where userid = ? and wherefore <> 'zonk'") stmtGetZonkers = preparetodie(db, "select zonkerid, name, wherefore from zonkers where userid = ? and wherefore <> 'zonk'")
stmtSaveZonker = preparetodie(db, "insert into zonkers (userid, name, wherefore) values (?, ?, ?)") stmtSaveZonker = preparetodie(db, "insert into zonkers (userid, name, wherefore) values (?, ?, ?)")

2
go.mod
View File

@ -10,7 +10,7 @@ require (
golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4 golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 golang.org/x/net v0.0.0-20190620200207-3b0461eec859
humungus.tedunangst.com/r/go-sqlite3 v1.1.3 humungus.tedunangst.com/r/go-sqlite3 v1.1.3
humungus.tedunangst.com/r/webs v0.6.19 humungus.tedunangst.com/r/webs v0.6.20
) )
go 1.11 go 1.11

2
go.sum
View File

@ -36,3 +36,5 @@ humungus.tedunangst.com/r/go-sqlite3 v1.1.3 h1:G2N4wzDS0NbuvrZtQJhh4F+3X+s7BF8b9
humungus.tedunangst.com/r/go-sqlite3 v1.1.3/go.mod h1:FtEEmQM7U2Ey1TuEEOyY1BmphTZnmiEjPsNLEAkpf/M= humungus.tedunangst.com/r/go-sqlite3 v1.1.3/go.mod h1:FtEEmQM7U2Ey1TuEEOyY1BmphTZnmiEjPsNLEAkpf/M=
humungus.tedunangst.com/r/webs v0.6.19 h1:0cxR4JmHDMQmMwboRlycRO+67OPtgtCwLX8fuDu9IRo= humungus.tedunangst.com/r/webs v0.6.19 h1:0cxR4JmHDMQmMwboRlycRO+67OPtgtCwLX8fuDu9IRo=
humungus.tedunangst.com/r/webs v0.6.19/go.mod h1:S9sXpVSbgAIa24yYhnMN0C94LKHG+2rioS+NsiDimps= humungus.tedunangst.com/r/webs v0.6.19/go.mod h1:S9sXpVSbgAIa24yYhnMN0C94LKHG+2rioS+NsiDimps=
humungus.tedunangst.com/r/webs v0.6.20 h1:fKTjJ+EQUlxj8vWBtFMhX7aYbMwAnUWbDhY7hotkXq0=
humungus.tedunangst.com/r/webs v0.6.20/go.mod h1:S9sXpVSbgAIa24yYhnMN0C94LKHG+2rioS+NsiDimps=

43
hfcs.go
View File

@ -302,9 +302,48 @@ func unsee(userid int64, h *Honk) {
} }
} }
func osmosis(honks []*Honk, userid int64) []*Honk { var desubbed = cache.New(cache.Options{Filler: func(userid int64) (map[string]bool, bool) {
filts := getfilters(userid, filtHide) rows, err := stmtDesubbed.Query(userid)
if err != nil {
log.Printf("error query desubbed: %s", err)
return nil, false
}
defer rows.Close()
m := make(map[string]bool)
for rows.Next() {
var xid string
err = rows.Scan(&xid)
if err != nil {
log.Printf("error scanning desub: %s", err)
continue
}
log.Printf("bad parent: %s", xid)
m[xid] = true
}
return m, true
}})
func osmosis(honks []*Honk, userid int64, withfilt bool) []*Honk {
var badparents map[string]bool
desubbed.GetAndLock(userid, &badparents)
j := 0 j := 0
reversehonks(honks)
for _, h := range honks {
if badparents[h.RID] {
badparents[h.XID] = true
continue
}
honks[j] = h
j++
}
desubbed.Unlock()
honks = honks[0:j]
reversehonks(honks)
if !withfilt {
return honks
}
filts := getfilters(userid, filtHide)
j = 0
outer: outer:
for _, h := range honks { for _, h := range honks {
for _, f := range filts { for _, f := range filts {

View File

@ -112,6 +112,7 @@ in reply to: <a href="{{ .RID }}" rel=noreferrer>{{ .RID }}</a>
{{ else }} {{ else }}
<button onclick="return flogit(this, 'save', '{{ .Honk.XID }}');">save</button> <button onclick="return flogit(this, 'save', '{{ .Honk.XID }}');">save</button>
{{ end }} {{ end }}
<button onclick="return flogit(this, 'desub', '{{ .Honk.XID }}');">desub</button>
<button><a href="/edit?xid={{ .Honk.XID }}">edit</a></button> <button><a href="/edit?xid={{ .Honk.XID }}">edit</a></button>
</div> </div>
</details> </details>

18
web.go
View File

@ -101,15 +101,16 @@ func homepage(w http.ResponseWriter, r *http.Request) {
templinfo["ServerMessage"] = "at me!" templinfo["ServerMessage"] = "at me!"
templinfo["PageName"] = "atme" templinfo["PageName"] = "atme"
honks = gethonksforme(userid, 0) honks = gethonksforme(userid, 0)
honks = osmosis(honks, userid, false)
case "/events": case "/events":
templinfo["ServerMessage"] = "some recent and upcoming events" templinfo["ServerMessage"] = "some recent and upcoming events"
templinfo["PageName"] = "events" templinfo["PageName"] = "events"
honks = geteventhonks(userid) honks = geteventhonks(userid)
honks = osmosis(honks, userid) honks = osmosis(honks, userid, true)
case "/first": case "/first":
templinfo["PageName"] = "first" templinfo["PageName"] = "first"
honks = gethonksforuser(userid, 0) honks = gethonksforuser(userid, 0)
honks = osmosis(honks, userid) honks = osmosis(honks, userid, true)
case "/saved": case "/saved":
templinfo["ServerMessage"] = "saved honks" templinfo["ServerMessage"] = "saved honks"
templinfo["PageName"] = "saved" templinfo["PageName"] = "saved"
@ -117,7 +118,7 @@ func homepage(w http.ResponseWriter, r *http.Request) {
default: default:
templinfo["PageName"] = "home" templinfo["PageName"] = "home"
honks = gethonksforuser(userid, 0) honks = gethonksforuser(userid, 0)
honks = osmosis(honks, userid) honks = osmosis(honks, userid, true)
} }
templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r) templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r)
} }
@ -723,7 +724,7 @@ func showcombo(w http.ResponseWriter, r *http.Request) {
name := mux.Vars(r)["name"] name := mux.Vars(r)["name"]
u := login.GetUserInfo(r) u := login.GetUserInfo(r)
honks := gethonksbycombo(u.UserID, name, 0) honks := gethonksbycombo(u.UserID, name, 0)
honks = osmosis(honks, u.UserID) honks = osmosis(honks, u.UserID, true)
templinfo := getInfo(r) templinfo := getInfo(r)
templinfo["PageName"] = "combo" templinfo["PageName"] = "combo"
templinfo["PageArg"] = name templinfo["PageArg"] = name
@ -739,6 +740,7 @@ func showconvoy(w http.ResponseWriter, r *http.Request) {
if len(honks) > 0 { if len(honks) > 0 {
templinfo["TopHID"] = honks[0].ID templinfo["TopHID"] = honks[0].ID
} }
honks = osmosis(honks, u.UserID, false)
reversehonks(honks) reversehonks(honks)
templinfo["PageName"] = "convoy" templinfo["PageName"] = "convoy"
templinfo["PageArg"] = c templinfo["PageArg"] = c
@ -1822,14 +1824,15 @@ func webhydra(w http.ResponseWriter, r *http.Request) {
switch page { switch page {
case "atme": case "atme":
honks = gethonksforme(userid, wanted) honks = gethonksforme(userid, wanted)
honks = osmosis(honks, userid, false)
templinfo["ServerMessage"] = "at me!" templinfo["ServerMessage"] = "at me!"
case "home": case "home":
honks = gethonksforuser(userid, wanted) honks = gethonksforuser(userid, wanted)
honks = osmosis(honks, userid) honks = osmosis(honks, userid, true)
templinfo["ServerMessage"] = serverMsg templinfo["ServerMessage"] = serverMsg
case "first": case "first":
honks = gethonksforuserfirstclass(userid, wanted) honks = gethonksforuserfirstclass(userid, wanted)
honks = osmosis(honks, userid) honks = osmosis(honks, userid, true)
templinfo["ServerMessage"] = "first class only" templinfo["ServerMessage"] = "first class only"
case "saved": case "saved":
honks = getsavedhonks(userid, wanted) honks = getsavedhonks(userid, wanted)
@ -1838,11 +1841,12 @@ func webhydra(w http.ResponseWriter, r *http.Request) {
case "combo": case "combo":
c := r.FormValue("c") c := r.FormValue("c")
honks = gethonksbycombo(userid, c, wanted) honks = gethonksbycombo(userid, c, wanted)
honks = osmosis(honks, userid) honks = osmosis(honks, userid, false)
templinfo["ServerMessage"] = "honks by combo: " + c templinfo["ServerMessage"] = "honks by combo: " + c
case "convoy": case "convoy":
c := r.FormValue("c") c := r.FormValue("c")
honks = gethonksbyconvoy(userid, c, wanted) honks = gethonksbyconvoy(userid, c, wanted)
honks = osmosis(honks, userid, false)
templinfo["ServerMessage"] = "honks in convoy: " + c templinfo["ServerMessage"] = "honks in convoy: " + c
case "honker": case "honker":
xid := r.FormValue("xid") xid := r.FormValue("xid")