82 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Swift
		
	
	
	
		
		
			
		
	
	
			82 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Swift
		
	
	
	
|  | // | |||
|  | //  IMRemoteUtil.swift | |||
|  | //  Crush | |||
|  | // | |||
|  | //  Created by Leon on 2025/8/18. | |||
|  | // | |||
|  | 
 | |||
|  | import NIMSDK | |||
|  | import UIKit | |||
|  | class IMRemoteUtil { | |||
|  |     /// V2NIMMessage -> IMBaseRemoteInfo 初步划分确定 消息划分的cellType | |||
|  |     static func dealRemoteInfo(message: V2NIMMessage?) -> IMBaseRemoteInfo { | |||
|  |         guard let msg = message else { | |||
|  |             return IMBaseRemoteInfo() | |||
|  |         } | |||
|  | 
 | |||
|  |         // Parse serverExtension | |||
|  |         let remote = message?.serverExtension ?? "" | |||
|  |         let info = CodableHelper.decode(IMBaseRemoteInfo.self, from: remote) ?? IMBaseRemoteInfo() | |||
|  |         info.displayString = message?.text | |||
|  | 
 | |||
|  |         // Set default cellType according to Message type. | |||
|  |         switch message?.messageType { | |||
|  |         case .MESSAGE_TYPE_TEXT: | |||
|  |             if msg.isSelf { | |||
|  |                 info.cellType = .text | |||
|  |             } else { | |||
|  |                 info.cellType = .aimsg | |||
|  |             } | |||
|  |         case .MESSAGE_TYPE_TIP: | |||
|  |             info.cellType = .tips | |||
|  |         case .MESSAGE_TYPE_CUSTOM: | |||
|  |             // Parse 自定义消息的cellType,和Attachment | |||
|  |             dealCustom(info: info, attachment: message?.attachment) | |||
|  |         default: | |||
|  |             info.cellType = .unknown | |||
|  |         } | |||
|  | 
 | |||
|  |         return info | |||
|  |     } | |||
|  | 
 | |||
|  |     private static func dealCustom(info: IMBaseRemoteInfo, attachment: V2NIMMessageAttachment?) { | |||
|  |         guard let attach = attachment else { | |||
|  |             return | |||
|  |         } | |||
|  |         info.cellType = .text | |||
|  |         let attachmentString = attach.raw | |||
|  | 
 | |||
|  |         // dlog("☁️🔥 V2NIMMessageAttachment's raw:\(attach.raw)") | |||
|  |          | |||
|  |         guard attachmentString.count > 0, let model = CodableHelper.decode(IMCustomAttachment.self, from: attachmentString) else { | |||
|  |             return | |||
|  |         } | |||
|  | 
 | |||
|  |         info.customAttachment = model | |||
|  |         guard let type = model.type else { | |||
|  |             dlog("☁️❌ wrong type, attach.raw is: \(attachmentString)") | |||
|  |             return | |||
|  |         } | |||
|  | 
 | |||
|  |         switch type { | |||
|  |         case .IMAGE: | |||
|  |             info.cellType = .image | |||
|  |             info.displayString = "[Image]" | |||
|  |         case .IM_SEND_GIFT: | |||
|  |             info.cellType = .gift | |||
|  |             info.displayString = "[Gift]" | |||
|  |         case .CALL: | |||
|  |             info.cellType = .phonecall | |||
|  |             info.displayString = model.getDisplayString() | |||
|  |         default: | |||
|  |             break | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  |     // MARK: - Helper | |||
|  | 
 | |||
|  |     // MARK: Call | |||
|  | 
 | |||
|  |      | |||
|  | } |