import Foundation import monalxmpp enum MessageStatus { case pending case sent case delivered case error case inbound } struct Message: Identifiable { let accountId: Int let participantJid: String let dbId: Int let stanzaId: String let timestamp: Date let body: String let isInbound: Bool let encrypted: Bool let status: MessageStatus var id: String { "\(accountId)|\(dbId)" } init?(_ obj: MLMessage) { guard let accId = obj.accountID as? Int, let dbId = obj.messageDBId as? Int else { return nil } accountId = accId participantJid = obj.participantJid self.dbId = dbId stanzaId = obj.stanzaId timestamp = obj.timestamp body = obj.messageText isInbound = obj.inbound encrypted = obj.encrypted if !obj.inbound { if obj.hasBeenSent { status = .sent } else if obj.hasBeenReceived { status = .delivered } else if !obj.errorType.isEmpty { status = .error } else { status = .pending } } else { status = .inbound } } }