core: create "accepted by you" item for moderator (#5901)

This commit is contained in:
spaced4ndy
2025-05-13 12:35:54 +00:00
committed by GitHub
parent e9414d713e
commit db1ffb2cf2
7 changed files with 21 additions and 1 deletions

View File

@@ -2732,6 +2732,7 @@ public struct ChatItem: Identifiable, Decodable, Hashable {
switch event {
case .userRole: nil
case .userLeft: nil
case .memberAccepted: nil
case .userPendingReview: nil
default: .sndGroupEvent
}
@@ -4626,6 +4627,7 @@ public enum SndGroupEvent: Decodable, Hashable {
case memberDeleted(groupMemberId: Int64, profile: Profile)
case userLeft
case groupUpdated(groupProfile: GroupProfile)
case memberAccepted(groupMemberId: Int64, profile: Profile)
case userPendingReview
var text: String {
@@ -4644,6 +4646,7 @@ public enum SndGroupEvent: Decodable, Hashable {
return String.localizedStringWithFormat(NSLocalizedString("you removed %@", comment: "snd group event chat item"), profile.profileViewName)
case .userLeft: return NSLocalizedString("you left", comment: "snd group event chat item")
case .groupUpdated: return NSLocalizedString("group profile updated", comment: "snd group event chat item")
case .memberAccepted: return NSLocalizedString("you accepted this member", comment: "snd group event chat item")
case .userPendingReview:
return NSLocalizedString("Please wait for group moderators to review your request to join the group.", comment: "snd group event chat item")
}

View File

@@ -2572,7 +2572,7 @@ data class ChatItem (
else -> CIMergeCategory.RcvGroupEvent
}
is CIContent.SndGroupEventContent -> when (content.sndGroupEvent) {
is SndGroupEvent.UserRole, is SndGroupEvent.UserLeft, is SndGroupEvent.UserPendingReview -> null
is SndGroupEvent.UserRole, is SndGroupEvent.UserLeft, is SndGroupEvent.MemberAccepted, is SndGroupEvent.UserPendingReview -> null
else -> CIMergeCategory.SndGroupEvent
}
else -> {
@@ -4358,6 +4358,7 @@ sealed class SndGroupEvent() {
@Serializable @SerialName("memberDeleted") class MemberDeleted(val groupMemberId: Long, val profile: Profile): SndGroupEvent()
@Serializable @SerialName("userLeft") class UserLeft(): SndGroupEvent()
@Serializable @SerialName("groupUpdated") class GroupUpdated(val groupProfile: GroupProfile): SndGroupEvent()
@Serializable @SerialName("memberAccepted") class MemberAccepted(val groupMemberId: Long, val profile: Profile): SndGroupEvent()
@Serializable @SerialName("userPendingReview") class UserPendingReview(): SndGroupEvent()
val text: String get() = when (this) {
@@ -4371,6 +4372,7 @@ sealed class SndGroupEvent() {
is MemberDeleted -> String.format(generalGetString(MR.strings.snd_group_event_member_deleted), profile.profileViewName)
is UserLeft -> generalGetString(MR.strings.snd_group_event_user_left)
is GroupUpdated -> generalGetString(MR.strings.snd_group_event_group_profile_updated)
is MemberAccepted -> generalGetString(MR.strings.snd_group_event_member_accepted)
is UserPendingReview -> generalGetString(MR.strings.snd_group_event_user_pending_review)
}
}

View File

@@ -1600,6 +1600,7 @@
<string name="snd_group_event_member_deleted">you removed %1$s</string>
<string name="snd_group_event_user_left">you left</string>
<string name="snd_group_event_group_profile_updated">group profile updated</string>
<string name="snd_group_event_member_accepted">you accepted this member</string>
<string name="snd_group_event_user_pending_review">Please wait for group moderators to review your request to join the group.</string>
<string name="rcv_group_event_1_member_connected">%s connected</string>

View File

@@ -2062,6 +2062,11 @@ processChatCommand' vr = \case
m' <- updateGroupMemberAccepted db user m GSMemConnected role
gInfo' <- updateGroupMembersRequireAttention db user gInfo m m'
pure (m', gInfo')
-- create item in both scopes
createInternalChatItem user (CDGroupRcv gInfo' Nothing m') (CIRcvGroupEvent RGEMemberConnected) Nothing
let scopeInfo = Just GCSIMemberSupport {groupMember_ = Just m'}
gEvent = SGEMemberAccepted gmId (fromLocalProfile $ memberProfile m')
createInternalChatItem user (CDGroupSnd gInfo' scopeInfo) (CISndGroupEvent gEvent) Nothing
pure $ CRMemberAccepted user gInfo' m'
Nothing -> throwChatError CEGroupMemberNotActive
GSMemPendingReview -> do
@@ -2078,6 +2083,11 @@ processChatCommand' vr = \case
m' <- updateGroupMemberAccepted db user m newMemberStatus role
gInfo' <- updateGroupMembersRequireAttention db user gInfo m m'
pure (m', gInfo')
-- create item in both scopes
createInternalChatItem user (CDGroupRcv gInfo' Nothing m') (CIRcvGroupEvent RGEMemberConnected) Nothing
let scopeInfo = Just GCSIMemberSupport {groupMember_ = Just m'}
gEvent = SGEMemberAccepted gmId (fromLocalProfile $ memberProfile m')
createInternalChatItem user (CDGroupSnd gInfo' scopeInfo) (CISndGroupEvent gEvent) Nothing
pure $ CRMemberAccepted user gInfo' m'
where
newMemberStatus = case memberConn m of

View File

@@ -2104,6 +2104,8 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage =
gInfo' <- updateGroupMembersRequireAttention db user gInfo referencedMember referencedMember'
pure (referencedMember', gInfo')
when (memberCategory referencedMember == GCInviteeMember) $ introduceToRemainingMembers referencedMember'
-- create item in both scopes
memberConnectedChatItem gInfo' Nothing referencedMember'
let scopeInfo = Just $ GCSIMemberSupport {groupMember_ = Just referencedMember'}
gEvent = RGEMemberAccepted (groupMemberId' referencedMember') (fromLocalProfile $ memberProfile referencedMember')
(ci, cInfo) <- saveRcvChatItemNoParse user (CDGroupRcv gInfo' scopeInfo m) msg brokerTs (CIRcvGroupEvent gEvent)

View File

@@ -343,6 +343,7 @@ sndGroupEventToText = \case
SGEMemberDeleted _ p -> "removed " <> profileToText p
SGEUserLeft -> "left"
SGEGroupUpdated _ -> "group profile updated"
SGEMemberAccepted _ _p -> "you accepted this member"
SGEUserPendingReview -> "please wait for group moderators to review your request to join the group"
-- used to send to members with old version

View File

@@ -41,6 +41,7 @@ data SndGroupEvent
| SGEMemberDeleted {groupMemberId :: GroupMemberId, profile :: Profile} -- CRUserDeletedMembers
| SGEUserLeft -- CRLeftMemberUser
| SGEGroupUpdated {groupProfile :: GroupProfile} -- CRGroupUpdated
| SGEMemberAccepted {groupMemberId :: GroupMemberId, profile :: Profile}
| SGEUserPendingReview
deriving (Show)