@@ -66,6 +66,31 @@ extension MessageAction {
66
66
)
67
67
68
68
messageActions. append ( flagAction)
69
+
70
+ let author = message. author
71
+ let currentUser = chatClient. currentUserController ( ) . currentUser
72
+ let isMuted = currentUser? . mutedUsers. contains ( message. author) ?? false
73
+ if isMuted {
74
+ let unmuteAction = unmuteAction (
75
+ for: message,
76
+ channel: channel,
77
+ chatClient: chatClient,
78
+ userToUnmute: author,
79
+ onFinish: onFinish,
80
+ onError: onError
81
+ )
82
+ messageActions. append ( unmuteAction)
83
+ } else {
84
+ let muteAction = muteAction (
85
+ for: message,
86
+ channel: channel,
87
+ chatClient: chatClient,
88
+ userToMute: author,
89
+ onFinish: onFinish,
90
+ onError: onError
91
+ )
92
+ messageActions. append ( muteAction)
93
+ }
69
94
}
70
95
71
96
return messageActions
@@ -224,4 +249,74 @@ extension MessageAction {
224
249
225
250
return flagMessage
226
251
}
252
+
253
+ private static func muteAction(
254
+ for message: ChatMessage ,
255
+ channel: ChatChannel ,
256
+ chatClient: ChatClient ,
257
+ userToMute: ChatUser ,
258
+ onFinish: @escaping ( MessageActionInfo ) -> Void ,
259
+ onError: @escaping ( Error ) -> Void
260
+ ) -> MessageAction {
261
+ let muteController = chatClient. userController ( userId: userToMute. id)
262
+ let muteAction = {
263
+ muteController. mute { error in
264
+ if let error = error {
265
+ onError ( error)
266
+ } else {
267
+ onFinish (
268
+ MessageActionInfo (
269
+ message: message,
270
+ identifier: " mute "
271
+ )
272
+ )
273
+ }
274
+ }
275
+ }
276
+
277
+ let muteUser = MessageAction (
278
+ title: L10n . Message. Actions. userMute,
279
+ iconName: " speaker.slash " ,
280
+ action: muteAction,
281
+ confirmationPopup: nil ,
282
+ isDestructive: false
283
+ )
284
+
285
+ return muteUser
286
+ }
287
+
288
+ private static func unmuteAction(
289
+ for message: ChatMessage ,
290
+ channel: ChatChannel ,
291
+ chatClient: ChatClient ,
292
+ userToUnmute: ChatUser ,
293
+ onFinish: @escaping ( MessageActionInfo ) -> Void ,
294
+ onError: @escaping ( Error ) -> Void
295
+ ) -> MessageAction {
296
+ let unmuteController = chatClient. userController ( userId: userToUnmute. id)
297
+ let unmuteAction = {
298
+ unmuteController. unmute { error in
299
+ if let error = error {
300
+ onError ( error)
301
+ } else {
302
+ onFinish (
303
+ MessageActionInfo (
304
+ message: message,
305
+ identifier: " unmute "
306
+ )
307
+ )
308
+ }
309
+ }
310
+ }
311
+
312
+ let unmuteUser = MessageAction (
313
+ title: L10n . Message. Actions. userUnmute,
314
+ iconName: " speaker.wave.1 " ,
315
+ action: unmuteAction,
316
+ confirmationPopup: nil ,
317
+ isDestructive: false
318
+ )
319
+
320
+ return unmuteUser
321
+ }
227
322
}
0 commit comments