bug fixes in Scan() results and conference list template
This commit is contained in:
+15
-3
@@ -17,6 +17,7 @@ import (
|
||||
"sync"
|
||||
|
||||
"git.erbosoft.com/amy/amsterdam/util"
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// Category is the structure defining a category.
|
||||
@@ -71,7 +72,10 @@ func loadCategories(ctx context.Context) error {
|
||||
return errors.New("internal error loading categories")
|
||||
}
|
||||
var ncats int32
|
||||
rs.Scan(&ncats)
|
||||
err = rs.Scan(&ncats)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
allCategories = make([]Category, 0, ncats)
|
||||
err = amdb.SelectContext(ctx, &allCategories, "SELECT * FROM refcategory ORDER BY parent, name")
|
||||
if err != nil {
|
||||
@@ -243,7 +247,10 @@ func AmSearchCategories(ctx context.Context, oper int, term string, offset int,
|
||||
return nil, -1, errors.New("internal error getting category total")
|
||||
}
|
||||
var total int
|
||||
rs.Scan(&total)
|
||||
err = rs.Scan(&total)
|
||||
if err != nil {
|
||||
return nil, total, err
|
||||
}
|
||||
if total == 0 {
|
||||
return make([]*Category, 0), 0, nil
|
||||
}
|
||||
@@ -258,11 +265,16 @@ func AmSearchCategories(ctx context.Context, oper int, term string, offset int,
|
||||
rc := make([]*Category, 0, min(max, 1000))
|
||||
for rs.Next() {
|
||||
var catid int32
|
||||
rs.Scan(&catid)
|
||||
err = rs.Scan(&catid)
|
||||
if err == nil {
|
||||
c, err := AmGetCategory(ctx, catid)
|
||||
if err == nil {
|
||||
rc = append(rc, c)
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
log.Errorf("AmSearchCategoris scan error: %v", err)
|
||||
}
|
||||
}
|
||||
return rc, total, nil
|
||||
}
|
||||
|
||||
+19
-5
@@ -23,6 +23,7 @@ import (
|
||||
"git.erbosoft.com/amy/amsterdam/util"
|
||||
lru "github.com/hashicorp/golang-lru"
|
||||
"github.com/jmoiron/sqlx"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"golang.org/x/text/language"
|
||||
)
|
||||
|
||||
@@ -219,12 +220,16 @@ func (c *Community) Membership(ctx context.Context, u *User) (bool, bool, uint16
|
||||
if rs.Next() {
|
||||
var locked bool
|
||||
var level uint16
|
||||
rs.Scan(&locked, &level)
|
||||
err = rs.Scan(&locked, &level)
|
||||
if err == nil {
|
||||
memberCache.Add(key, &memberCacheData{isMember: true, locked: locked, level: level})
|
||||
return true, locked, level, nil
|
||||
}
|
||||
}
|
||||
if err == nil {
|
||||
memberCache.Add(key, &memberCacheData{isMember: false, locked: false, level: uint16(0)})
|
||||
}
|
||||
}
|
||||
return false, false, uint16(0), err
|
||||
}
|
||||
|
||||
@@ -379,7 +384,10 @@ func (c *Community) SetMembership(ctx context.Context, u *User, level uint16, lo
|
||||
if rs.Next() {
|
||||
var oldLevel uint16
|
||||
var lockStatus bool
|
||||
rs.Scan(&oldLevel, &lockStatus)
|
||||
err = rs.Scan(&oldLevel, &lockStatus)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if level != oldLevel || lockStatus != locked {
|
||||
_, err := tx.ExecContext(ctx, "UPDATE commmember SET granted_lvl = ?, locked = ? WHERE commid = ? AND uid = ?",
|
||||
level, locked, c.Id, u.Uid)
|
||||
@@ -510,9 +518,12 @@ func (c *Community) SetProfileData(ctx context.Context, name string, alias strin
|
||||
c.DeleteLevel = delete_lvl
|
||||
c.JoinLevel = join_lvl
|
||||
rs, err2 := amdb.QueryContext(ctx, "SELECT lastupdate FROM communities WHERE commid = ?", c.Id)
|
||||
if err2 != nil {
|
||||
if err2 == nil {
|
||||
rs.Next()
|
||||
rs.Scan(&c.LastUpdate)
|
||||
err2 = rs.Scan(&c.LastUpdate)
|
||||
}
|
||||
if err2 != nil {
|
||||
log.Errorf("SetProfileData scan error: %v", err2)
|
||||
}
|
||||
}
|
||||
return err
|
||||
@@ -782,7 +793,10 @@ func AmAutoJoinCommunities(ctx context.Context, tx *sqlx.Tx, user *User) error {
|
||||
for rows.Next() {
|
||||
var cid int32
|
||||
var lock bool
|
||||
rows.Scan(&cid, &lock)
|
||||
err = rows.Scan(&cid, &lock)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
if !slices.Contains(current, cid) {
|
||||
_, err = tx.ExecContext(ctx, "INSERT INTO commmember (commid, uid, granted_lvl, locked) VALUES (?, ?, ?, ?)",
|
||||
cid, user.Uid, grantLevel, lock)
|
||||
|
||||
+4
-1
@@ -122,7 +122,10 @@ func AmGetGlobalProperty(ctx context.Context, index int32) (string, error) {
|
||||
return "", err
|
||||
}
|
||||
if rs.Next() {
|
||||
rs.Scan(&rc)
|
||||
err = rs.Scan(&rc)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
globalProps[index] = rc
|
||||
return rc, nil
|
||||
}
|
||||
|
||||
@@ -93,7 +93,10 @@ func AmStoreImage(ctx context.Context, typecode int16, owner int32, mimetype str
|
||||
var img *ImageStore
|
||||
if rs.Next() {
|
||||
var id int32
|
||||
rs.Scan(&id)
|
||||
err = rs.Scan(&id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
img, err = AmLoadImage(ctx, id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
+4
-1
@@ -73,7 +73,10 @@ func AmTestIPBan(ctx context.Context, ip_address string) (string, error) {
|
||||
}
|
||||
defer rows.Close()
|
||||
if rows.Next() {
|
||||
rows.Scan(&rc)
|
||||
err = rows.Scan(&rc)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
knownBans[ip_address] = rc
|
||||
return rc, nil
|
||||
}
|
||||
|
||||
+11
-4
@@ -17,6 +17,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// Topic is the top-level structure detailing topics.
|
||||
@@ -61,9 +62,9 @@ func (t *Topic) GetLastRead(ctx context.Context, u *User) (int32, error) {
|
||||
}
|
||||
var rc int32 = -1
|
||||
if rs.Next() {
|
||||
rs.Scan(&rc)
|
||||
err = rs.Scan(&rc)
|
||||
}
|
||||
return rc, nil
|
||||
return rc, err
|
||||
}
|
||||
|
||||
// SetLastRead sets the "last read" message for a user on a topic.
|
||||
@@ -103,6 +104,8 @@ type TopicSummary struct {
|
||||
Archived bool // is topic archived?
|
||||
Subscribed bool // is topic subscribed?
|
||||
Hidden bool // is topic hidden?
|
||||
Sticky bool // is topic sticky?
|
||||
NewFlag bool // does topic have new messages?
|
||||
}
|
||||
|
||||
/* AmGetTopic retrieves a topic by ID.
|
||||
@@ -310,10 +313,14 @@ func AmListTopics(ctx context.Context, confid int32, uid int32, viewOption int,
|
||||
rc := make([]*TopicSummary, 0)
|
||||
for rs.Next() {
|
||||
var rec TopicSummary
|
||||
rs.Scan(&rec.TopicID, &rec.Number, &rec.Name, &rec.Unread, &rec.Total, &rec.LastUpdate, &rec.Frozen, &rec.Archived,
|
||||
&rec.Subscribed, &rec.Hidden)
|
||||
err = rs.Scan(&rec.TopicID, &rec.Number, &rec.Name, &rec.Unread, &rec.Total, &rec.LastUpdate, &rec.Frozen,
|
||||
&rec.Archived, &rec.Subscribed, &rec.Hidden, &rec.Sticky, &rec.NewFlag)
|
||||
if err != nil {
|
||||
log.Errorf("AmListTopics scan error: %v", err)
|
||||
} else {
|
||||
rc = append(rc, &rec)
|
||||
}
|
||||
}
|
||||
return rc, nil
|
||||
}
|
||||
|
||||
|
||||
+12
-3
@@ -925,7 +925,10 @@ func AmSearchUsers(ctx context.Context, field int, oper int, term string, offset
|
||||
return nil, -1, errors.New("internal error getting count")
|
||||
}
|
||||
var total int
|
||||
rs.Scan(&total)
|
||||
err = rs.Scan(&total)
|
||||
if err != nil {
|
||||
return nil, -1, err
|
||||
}
|
||||
if total == 0 {
|
||||
return make([]*User, 0), 0, nil
|
||||
}
|
||||
@@ -942,11 +945,17 @@ func AmSearchUsers(ctx context.Context, field int, oper int, term string, offset
|
||||
rc := make([]*User, 0, min(max, 10000))
|
||||
for rs.Next() {
|
||||
var uid int32
|
||||
rs.Scan(&uid)
|
||||
u, err := AmGetUser(ctx, uid)
|
||||
err = rs.Scan(&uid)
|
||||
if err == nil {
|
||||
var u *User
|
||||
u, err = AmGetUser(ctx, uid)
|
||||
if err == nil {
|
||||
rc = append(rc, u)
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
log.Errorf("AmSearchUsers scan error: %v", err)
|
||||
}
|
||||
}
|
||||
return rc, total, nil
|
||||
}
|
||||
|
||||
@@ -23,12 +23,12 @@
|
||||
<span class="text-lg pt-0.5 flex-shrink-0">🟣</span>
|
||||
<div class="flex-1">
|
||||
<div class="mb-2">
|
||||
<a href="/comm/{{ commAlias }}/conf/{{ c.AliasesQ()[0] }}"
|
||||
<a href="/comm/{{ commAlias }}/conf/{{ c.AliasesQ(.Ctx())[0] }}"
|
||||
class="text-blue-700 hover:text-blue-900 font-bold text-lg">{{ c.Name }}</a>
|
||||
<span class="text-gray-600 text-sm ml-2">- Latest activity: {{ DisplayActivity(c.LastUpdate, .) }}</span>
|
||||
</div>
|
||||
<div class="text-sm text-gray-700 mb-1">
|
||||
{{ hl := c.HostsQ() }}
|
||||
{{ hl := c.HostsQ(.Ctx()) }}
|
||||
{{ if len(hl) == 1 }}
|
||||
<span class="font-medium">Host:</span>
|
||||
{{ else }}
|
||||
|
||||
Reference in New Issue
Block a user