fix: align IM client interaction edge cases
This commit is contained in:
@@ -3432,9 +3432,13 @@ func (a *adapter) TopicsForUser(uid t.Uid, keepDeleted bool, opts *t.QueryOpt) (
|
||||
if len(usrq) > 0 {
|
||||
q = `SELECT u.id,u.updatedat,u.state,u.access,u.lastseen,u.useragent,u.public,u.trusted,
|
||||
p.nickname AS profile_nickname,p.avatar_file_id AS profile_avatar_file_id,p.signature AS profile_signature,
|
||||
p.gender AS profile_gender,p.region AS profile_region,p.public_account AS profile_public_account,p.updated_at AS profile_updated_at
|
||||
FROM im_users AS u LEFT JOIN im_user_profiles AS p ON p.user_id=u.id WHERE u.id IN (?)`
|
||||
q, args, _ = sqlx.In(q, usrq)
|
||||
p.gender AS profile_gender,p.region AS profile_region,p.public_account AS profile_public_account,p.updated_at AS profile_updated_at,
|
||||
fs.remark AS friendship_remark
|
||||
FROM im_users AS u
|
||||
LEFT JOIN im_user_profiles AS p ON p.user_id=u.id
|
||||
LEFT JOIN im_friendships AS fs ON fs.user_id=? AND fs.peer_id=u.id AND fs.status=?
|
||||
WHERE u.id IN (?)`
|
||||
q, args, _ = sqlx.In(q, store.DecodeUid(uid), t.RelationshipFriend, usrq)
|
||||
if !keepDeleted {
|
||||
// Optionally skip deleted users.
|
||||
q += " AND u.state!=?"
|
||||
@@ -3466,6 +3470,7 @@ func (a *adapter) TopicsForUser(uid t.Uid, keepDeleted bool, opts *t.QueryOpt) (
|
||||
sub.SetTrusted(common.FromJSON(usr2.Trusted))
|
||||
sub.SetDefaultAccess(usr2.Access.Auth, usr2.Access.Anon)
|
||||
sub.SetLastSeenAndUA(usr2.lastSeen(), usr2.UserAgent)
|
||||
sub.Private = ensureP2PPrivatePeerRemark(sub.Private, common.EncodeUidString(usr2.ID).UserId(), usr2.FriendshipRemark.String)
|
||||
join[joinOn] = sub
|
||||
p2pResolved[joinOn] = true
|
||||
}
|
||||
|
||||
@@ -68,6 +68,7 @@ type profileUserRow struct {
|
||||
ProfileRegion sql.NullString `db:"profile_region"`
|
||||
ProfilePublicAccount sql.NullString `db:"profile_public_account"`
|
||||
ProfileUpdatedAt sql.NullTime `db:"profile_updated_at"`
|
||||
FriendshipRemark sql.NullString `db:"friendship_remark"`
|
||||
}
|
||||
|
||||
func (row profileUserRow) effectiveUpdatedAt() time.Time {
|
||||
@@ -151,6 +152,10 @@ func profilePublicFromFields(base any, nickname, avatarFileID, signature, gender
|
||||
}
|
||||
|
||||
func ensureP2PPrivatePeer(private any, peerID string) any {
|
||||
return ensureP2PPrivatePeerRemark(private, peerID, "")
|
||||
}
|
||||
|
||||
func ensureP2PPrivatePeerRemark(private any, peerID, remark string) any {
|
||||
if strings.TrimSpace(peerID) == "" {
|
||||
return private
|
||||
}
|
||||
@@ -161,6 +166,9 @@ func ensureP2PPrivatePeer(private any, peerID string) any {
|
||||
if _, ok := data["peer"]; !ok {
|
||||
data["peer"] = peerID
|
||||
}
|
||||
if remark = strings.TrimSpace(remark); remark != "" {
|
||||
data["remark"] = remark
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
@@ -1050,9 +1058,13 @@ func (a *adapter) TenantTopicsForUser(id t.TenantID, uid t.Uid, keepDeleted bool
|
||||
if len(usrq) > 0 {
|
||||
q = `SELECT u.tenant_id,u.id,u.updatedat,u.state,u.access,u.lastseen,u.useragent,u.public,u.trusted,
|
||||
p.nickname AS profile_nickname,p.avatar_file_id AS profile_avatar_file_id,p.signature AS profile_signature,
|
||||
p.gender AS profile_gender,p.region AS profile_region,p.public_account AS profile_public_account,p.updated_at AS profile_updated_at
|
||||
FROM im_users AS u LEFT JOIN im_user_profiles AS p ON p.user_id=u.id WHERE u.tenant_id=? AND u.id IN (?)`
|
||||
q, args, _ = sqlx.In(q, id, usrq)
|
||||
p.gender AS profile_gender,p.region AS profile_region,p.public_account AS profile_public_account,p.updated_at AS profile_updated_at,
|
||||
fs.remark AS friendship_remark
|
||||
FROM im_users AS u
|
||||
LEFT JOIN im_user_profiles AS p ON p.user_id=u.id
|
||||
LEFT JOIN im_friendships AS fs ON fs.user_id=? AND fs.peer_id=u.id AND fs.status=?
|
||||
WHERE u.tenant_id=? AND u.id IN (?)`
|
||||
q, args, _ = sqlx.In(q, decodeUID(uid), t.RelationshipFriend, id, usrq)
|
||||
if !keepDeleted {
|
||||
q += " AND u.state!=?"
|
||||
args = append(args, t.StateDeleted)
|
||||
@@ -1075,6 +1087,7 @@ func (a *adapter) TenantTopicsForUser(id t.TenantID, uid t.Uid, keepDeleted bool
|
||||
sub.SetTrusted(common.FromJSON(user.Trusted))
|
||||
sub.SetDefaultAccess(user.Access.Auth, user.Access.Anon)
|
||||
sub.SetLastSeenAndUA(user.lastSeen(), user.UserAgent)
|
||||
sub.Private = ensureP2PPrivatePeerRemark(sub.Private, common.EncodeUidString(user.ID).UserId(), user.FriendshipRemark.String)
|
||||
join[joinOn] = sub
|
||||
p2pResolved[joinOn] = true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user