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

Ted Unangst 5 years ago
parent 65401b8d9a
commit 1bd418c85b

@ -680,7 +680,7 @@ var stmtHonksBySearch, stmtHonksByHonker, stmtSaveHonk, stmtUserByName, stmtUser
var stmtEventHonks, stmtOneBonk, stmtFindZonk, stmtFindXonk, stmtSaveDonk *sql.Stmt
var stmtFindFile, stmtGetFileData, stmtSaveFileData, stmtSaveFile *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 stmtAllOnts, stmtSaveOnt, stmtUpdateFlags, stmtClearFlags *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")
stmtLoadDoover = preparetodie(db, "select tries, userid, rcpt, msg 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'")
stmtGetZonkers = preparetodie(db, "select zonkerid, name, wherefore from zonkers where userid = ? and wherefore <> 'zonk'")
stmtSaveZonker = preparetodie(db, "insert into zonkers (userid, name, wherefore) values (?, ?, ?)")

@ -10,7 +10,7 @@ require (
golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4
golang.org/x/net v0.0.0-20190620200207-3b0461eec859
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

@ -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/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.20 h1:fKTjJ+EQUlxj8vWBtFMhX7aYbMwAnUWbDhY7hotkXq0=
humungus.tedunangst.com/r/webs v0.6.20/go.mod h1:S9sXpVSbgAIa24yYhnMN0C94LKHG+2rioS+NsiDimps=

@ -302,9 +302,48 @@ func unsee(userid int64, h *Honk) {
}
}
func osmosis(honks []*Honk, userid int64) []*Honk {
filts := getfilters(userid, filtHide)
var desubbed = cache.New(cache.Options{Filler: func(userid int64) (map[string]bool, bool) {
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
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:
for _, h := range honks {
for _, f := range filts {

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

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

Loading…
Cancel
Save