126 lines
3.7 KiB
Swift
126 lines
3.7 KiB
Swift
//
|
|
// 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
|
|
}
|
|
}
|