@@ -925,22 +925,62 @@ extension IMConversation {
925925
926926extension IMConversation {
927927 // MARK: Message Updating
928-
928+
929929 /// Update the content of a sent message.
930- ///
931930 /// - Parameters:
932931 /// - oldMessage: The sent message to be updated.
933932 /// - newMessage: The message which has new content.
934- /// - progressQueue: The queue where the progress be called. default is main.
933+ /// - progressQueue: The queue where the * progress* be called, default is main.
935934 /// - progress: The file uploading progress.
936- /// - completion: callback.
935+ /// - completion: Result callback.
937936 public func update(
938937 oldMessage: IMMessage ,
939938 to newMessage: IMMessage ,
940939 progressQueue: DispatchQueue = . main,
941940 progress: ( ( Double ) -> Void ) ? = nil ,
942941 completion: @escaping ( LCBooleanResult ) -> Void )
943942 throws
943+ {
944+ try self . patch (
945+ oldMessage: oldMessage,
946+ newMessage: newMessage,
947+ progressQueue: progressQueue,
948+ progress: progress,
949+ completion: completion)
950+ }
951+
952+ /// Recall a sent message.
953+ /// - Parameters:
954+ /// - message: The message has been sent.
955+ /// - completion: Result callback.
956+ public func recall(
957+ message: IMMessage ,
958+ completion: @escaping ( LCGenericResult < IMRecalledMessage > ) -> Void )
959+ throws
960+ {
961+ let recalledMessage = IMRecalledMessage ( )
962+ try self . patch (
963+ oldMessage: message,
964+ newMessage: recalledMessage,
965+ isRecall: true )
966+ { ( result) in
967+ switch result {
968+ case . success:
969+ completion ( . success( value: recalledMessage) )
970+ case . failure( error: let error) :
971+ completion ( . failure( error: error) )
972+ }
973+ }
974+ }
975+
976+ private func patch(
977+ oldMessage: IMMessage ,
978+ newMessage: IMMessage ,
979+ isRecall: Bool = false ,
980+ progressQueue: DispatchQueue = . main,
981+ progress: ( ( Double ) -> Void ) ? = nil ,
982+ completion: @escaping ( LCBooleanResult ) -> Void )
983+ throws
944984 {
945985 guard let oldMessageID = oldMessage. ID,
946986 let oldMessageTimestamp = oldMessage. sentTimestamp,
@@ -977,6 +1017,9 @@ extension IMConversation {
9771017 patchItem. cid = oldMessageConvID
9781018 patchItem. mid = oldMessageID
9791019 patchItem. timestamp = oldMessageTimestamp
1020+ if isRecall {
1021+ patchItem. recall = true
1022+ }
9801023 if let content: IMMessage . Content = newMessage. content {
9811024 switch content {
9821025 case . data( let data) :
@@ -1036,23 +1079,6 @@ extension IMConversation {
10361079 }
10371080 }
10381081
1039- /// Recall a sent message.
1040- ///
1041- /// - Parameters:
1042- /// - message: The message has been sent.
1043- /// - completion: callback.
1044- public func recall( message: IMMessage , completion: @escaping ( LCGenericResult < IMRecalledMessage > ) -> Void ) throws {
1045- let recalledMessage = IMRecalledMessage ( )
1046- try self . update ( oldMessage: message, to: recalledMessage, completion: { ( result) in
1047- switch result {
1048- case . success:
1049- completion ( . success( value: recalledMessage) )
1050- case . failure( error: let error) :
1051- completion ( . failure( error: error) )
1052- }
1053- } )
1054- }
1055-
10561082 func process( patchItem: IMPatchItem , client: IMClient ) {
10571083 assert ( client. specificAssertion)
10581084 guard let timestamp = ( patchItem. hasTimestamp ? patchItem. timestamp : nil ) ,
@@ -1093,7 +1119,6 @@ extension IMConversation {
10931119 event: . updated( updatedMessage: patchedMessage, reason: reason) ) )
10941120 }
10951121 }
1096-
10971122}
10981123
10991124extension IMConversation {
0 commit comments