XuqmGroup-iOSSDK/XuqmDemo/Sources/Models/DemoModels.swift
2026-05-07 19:39:48 +08:00

113 行
3.2 KiB
Swift

import Foundation
import XuqmSDK
enum AppRoute: Hashable {
case chat(targetId: String, targetName: String)
case webView
}
struct DemoUser: Identifiable {
let id: String
let userId: String
let nickname: String
let avatar: String?
}
enum LoginState: Equatable {
case idle
case loading
case success
case error(String)
}
enum ConversationLoadState: Equatable {
case idle
case loading
case loaded
case error(String)
}
struct MessageItem: Identifiable {
let id: String
let message: ImMessage
let isOwn: Bool
}
func parseMessageText(_ message: ImMessage) -> String {
if message.msgType == .text {
if let data = message.content.data(using: .utf8),
let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
let text = json["text"] as? String {
return text
}
return message.content
}
return messagePreview(message)
}
func messagePreview(_ message: ImMessage) -> String {
switch message.msgType {
case .image: return "[图片]"
case .video: return "[视频]"
case .audio: return "[语音]"
case .file: return "[文件]"
case .location: return "[位置]"
case .custom: return "[自定义]"
case .richText: return "[富文本]"
case .forward: return "[转发]"
case .quote: return "[引用]"
case .merge: return "[合并转发]"
case .callAudio: return "[语音通话]"
case .callVideo: return "[视频通话]"
case .revoked: return "[消息已撤回]"
case .notify: return message.content
case .text: return message.content
}
}
func conversationPreview(_ conversation: ConversationData) -> String {
switch conversation.lastMsgType?.uppercased() {
case "TEXT": return conversation.lastMsgContent ?? ""
case "IMAGE": return "[图片]"
case "VIDEO": return "[视频]"
case "AUDIO": return "[语音]"
case "FILE": return "[文件]"
case "LOCATION": return "[位置]"
case "CUSTOM": return "[自定义]"
case "RICH_TEXT": return "[富文本]"
case "FORWARD": return "[转发]"
case "QUOTE": return "[引用]"
case "MERGE": return "[合并转发]"
case "CALL_AUDIO": return "[语音通话]"
case "CALL_VIDEO": return "[视频通话]"
case "REVOKED": return "[消息已撤回]"
case "NOTIFY": return conversation.lastMsgContent ?? "[通知]"
default: return conversation.lastMsgContent ?? ""
}
}
func statusLabel(_ status: MsgStatus) -> String {
switch status {
case .sending: return "发送中"
case .sent: return "已发送"
case .delivered: return "已送达"
case .read: return "已读"
case .failed: return "发送失败"
case .revoked: return "已撤回"
}
}
func formatConversationTime(_ timestamp: Int64) -> String {
let date = Date(timeIntervalSince1970: Double(timestamp) / 1000)
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "zh_CN")
if Calendar.current.isDateInToday(date) {
formatter.dateFormat = "HH:mm"
} else if Calendar.current.isDateInYesterday(date) {
return "昨天"
} else {
formatter.dateFormat = "MM-dd"
}
return formatter.string(from: date)
}