diff --git a/database.go b/database.go index 7dcadb7..9c8f369 100644 --- a/database.go +++ b/database.go @@ -90,35 +90,14 @@ func allusers() []login.UserInfo { return users } -func scanxonk(row *sql.Row) *Honk { - h := new(Honk) - var dt, aud, onts string - - err := row.Scan(&h.ID, &h.UserID, &h.Username, &h.What, &h.Honker, &h.Oonker, &h.XID, &h.RID, - &dt, &h.URL, &aud, &h.Noise, &h.Precis, &h.Convoy, &h.Whofore, &h.Flags, &onts) - if err != nil { - if err != sql.ErrNoRows { - log.Printf("error scanning xonk: %s", err) - } - return nil - } - h.Date, _ = time.Parse(dbtimeformat, dt) - h.Audience = strings.Split(aud, " ") - h.Public = !keepitquiet(h.Audience) - if len(onts) > 0 { - h.Onts = strings.Split(onts, " ") - } - return h -} - func getxonk(userid int64, xid string) *Honk { row := stmtOneXonk.QueryRow(userid, xid) - return scanxonk(row) + return scanhonk(row) } func getbonk(userid int64, xid string) *Honk { row := stmtOneBonk.QueryRow(userid, xid) - return scanxonk(row) + return scanhonk(row) } func getpublichonks() []*Honk { @@ -186,27 +165,40 @@ func getsomehonks(rows *sql.Rows, err error) []*Honk { defer rows.Close() var honks []*Honk for rows.Next() { - var h Honk - var dt, aud, onts string - err = rows.Scan(&h.ID, &h.UserID, &h.Username, &h.What, &h.Honker, &h.Oonker, &h.XID, - &h.RID, &dt, &h.URL, &aud, &h.Noise, &h.Precis, &h.Convoy, &h.Whofore, &h.Flags, &onts) - if err != nil { - log.Printf("error scanning honks: %s", err) - return nil + h := scanhonk(rows) + if h != nil { + honks = append(honks, h) } - h.Date, _ = time.Parse(dbtimeformat, dt) - h.Audience = strings.Split(aud, " ") - h.Public = !keepitquiet(h.Audience) - if len(onts) > 0 { - h.Onts = strings.Split(onts, " ") - } - honks = append(honks, &h) } rows.Close() donksforhonks(honks) return honks } +type RowLike interface { + Scan(dest ...interface{}) error +} + +func scanhonk(row RowLike) *Honk { + h := new(Honk) + var dt, aud, onts string + err := row.Scan(&h.ID, &h.UserID, &h.Username, &h.What, &h.Honker, &h.Oonker, &h.XID, &h.RID, + &dt, &h.URL, &aud, &h.Noise, &h.Precis, &h.Convoy, &h.Whofore, &h.Flags, &onts) + if err != nil { + if err != sql.ErrNoRows { + log.Printf("error scanning honk: %s", err) + } + return nil + } + h.Date, _ = time.Parse(dbtimeformat, dt) + h.Audience = strings.Split(aud, " ") + h.Public = !keepitquiet(h.Audience) + if len(onts) > 0 { + h.Onts = strings.Split(onts, " ") + } + return h +} + func donksforhonks(honks []*Honk) { db := opendatabase() var ids []string