fix p2p topic canonicalization and stale subscriptions
This commit is contained in:
@@ -942,6 +942,7 @@ func (a *adapter) TenantTopicsForUser(id t.TenantID, uid t.Uid, keepDeleted bool
|
||||
return nil, err
|
||||
}
|
||||
join := map[string]t.Subscription{}
|
||||
p2pResolved := map[string]bool{}
|
||||
var topq, usrq []any
|
||||
for rows.Next() {
|
||||
var sub t.Subscription
|
||||
@@ -956,6 +957,7 @@ func (a *adapter) TenantTopicsForUser(id t.TenantID, uid t.Uid, keepDeleted bool
|
||||
continue
|
||||
case t.TopicCatP2P:
|
||||
uid1, uid2, _ := t.ParseP2P(tname)
|
||||
p2pResolved[tname] = false
|
||||
if uid1 == uid {
|
||||
usrq = append(usrq, decodeUID(uid2))
|
||||
sub.SetWith(uid2.UserId())
|
||||
@@ -1047,6 +1049,7 @@ func (a *adapter) TenantTopicsForUser(id t.TenantID, uid t.Uid, keepDeleted bool
|
||||
sub.SetDefaultAccess(user.Access.Auth, user.Access.Anon)
|
||||
sub.SetLastSeenAndUA(user.lastSeen(), user.UserAgent)
|
||||
join[joinOn] = sub
|
||||
p2pResolved[joinOn] = true
|
||||
}
|
||||
}
|
||||
err = rows.Err()
|
||||
@@ -1057,6 +1060,9 @@ func (a *adapter) TenantTopicsForUser(id t.TenantID, uid t.Uid, keepDeleted bool
|
||||
}
|
||||
subs := make([]t.Subscription, 0, len(join))
|
||||
for _, sub := range join {
|
||||
if t.GetTopicCat(sub.Topic) == t.TopicCatP2P && !p2pResolved[sub.Topic] {
|
||||
continue
|
||||
}
|
||||
subs = append(subs, sub)
|
||||
}
|
||||
return common.SelectEarliestUpdatedSubs(subs, opts, a.maxResults), nil
|
||||
@@ -9637,10 +9643,16 @@ func (a *adapter) TenantFriendshipDeletePair(id t.TenantID, uid1, uid2 t.Uid, no
|
||||
if cancel != nil {
|
||||
defer cancel()
|
||||
}
|
||||
_, err := a.db.ExecContext(ctx,
|
||||
res, err := a.db.ExecContext(ctx,
|
||||
"UPDATE im_friendships SET status=?,updated_at=? WHERE (user_id=? AND peer_id=?) OR (user_id=? AND peer_id=?)",
|
||||
t.RelationshipNone, now, decodeUID(uid1), decodeUID(uid2), decodeUID(uid2), decodeUID(uid1))
|
||||
return err
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if affected, err := res.RowsAffected(); err == nil && affected == 0 {
|
||||
return t.ErrNotFound
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *adapter) TenantUserBlockGet(id t.TenantID, blockerID, blockedID t.Uid) (*t.UserBlock, error) {
|
||||
|
||||
Reference in New Issue
Block a user