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