mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-03-31 18:25:56 +00:00
core: create "accepted by you" item for moderator (#5901)
This commit is contained in:
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user