// // PigeonModel.swift // QuickLocation // import ObjectMapper import UIKit struct PigeonSentResponse: BaseModelProtocol { var code: String? var message: String? var list: [PigeonSentMessage] = [] init?(map: Map) {} mutating func mapping(map: Map) { code <- (map["code"], kIntTransformStr) message <- map["message"] list <- map["data"] } } struct PigeonSentMessage: Mappable { var message_uuid: String = "" var group_key: String = "" var from_user: PigeonSentUser? var to_user: [PigeonSentUser] = [] var msg_type: Int = 0 var msg: String = "" var text_msg: String = "" var expire_time: Int64 = 0 var send_time: Int64 = 0 init?(map: Map) {} mutating func mapping(map: Map) { message_uuid <- map["message_uuid"] group_key <- map["group_key"] from_user <- map["from_user"] to_user <- map["to_user"] msg_type <- map["msg_type"] msg <- map["msg"] text_msg <- map["text_msg"] expire_time <- map["expire_time"] send_time <- map["send_time"] } var mediaURL: URL? { let value = msg.trimmingCharacters(in: .whitespacesAndNewlines) guard value.lowercased().hasPrefix("http"), let url = URL(string: value) else { return nil } return url } func toHistoryItem() -> PigeonHistoryItem { PigeonHistoryItem( id: message_uuid.isEmpty ? UUID().uuidString : message_uuid, dateText: Self.dateText(from: send_time), timeText: Self.timeText(from: send_time), kind: msg_type == 2 ? .voice : .image, caption: text_msg, image: nil, mediaURL: mediaURL, senderAvatar: from_user?.avatarImage, receiverAvatars: to_user.map(\.avatarImage), duration: 0 ) } private static func date(from timestamp: Int64) -> Date { Date(timeIntervalSince1970: TimeInterval(timestamp)) } private static func dateText(from timestamp: Int64) -> String { let date = date(from: timestamp) let calendar = Calendar.current let month = calendar.component(.month, from: date) let day = calendar.component(.day, from: date) let weekdays = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"] let weekday = weekdays[calendar.component(.weekday, from: date) - 1] return "\(month).\(day) \(weekday)" } private static func timeText(from timestamp: Int64) -> String { let date = date(from: timestamp) let calendar = Calendar.current let hour = calendar.component(.hour, from: date) let minute = calendar.component(.minute, from: date) let period = hour < 12 ? "上午" : "下午" let hour12 = hour % 12 == 0 ? 12 : hour % 12 return String(format: "%@ %d:%02d", period, hour12, minute) } } struct PigeonSentUser: Mappable { var user_id: String = "" var nick_name: String = "" var remark: String = "" var head_pic: String = "" init?(map: Map) {} mutating func mapping(map: Map) { user_id <- map["user_id"] nick_name <- map["nick_name"] remark <- map["remark"] head_pic <- map["head_pic"] } var displayName: String { let remarkName = remark.trimmingCharacters(in: .whitespacesAndNewlines) if !remarkName.isEmpty { return remarkName } return nick_name } var avatarImage: UIImage { let iconName = head_pic.trimmingCharacters(in: .whitespacesAndNewlines) guard !iconName.isEmpty, let image = UIImage(named: "UserIcon/\(iconName)") else { return UIImage(named: "UserIcon/1") ?? UIImage() } return image } }