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
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|