sdk/communication/AzureCommunicationChat/Source/PushNotification/PushNotificationBaseEvent.swift (56 lines of code) (raw):
// --------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// The MIT License (MIT)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the ""Software""), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//
// --------------------------------------------------------------------------
import AzureCommunicationCommon
import AzureCore
import Foundation
// swiftlint:disable file_length
/// BaseChatMessageEvent for push notifications.
public class PushNotificationChatMessageEvent {
// MARK: Properties
/// The id of the message. This id is server generated.
public var messageId: String
/// The message type.
public var type: ChatMessageType
/// Chat thread id.
public var threadId: String
/// Sender Id
public var sender: CommunicationIdentifier
/// Recipient Id
public var recipient: CommunicationIdentifier
/// Sender display name.
public var senderDisplayName: String?
/// The timestamp when the message arrived at the server. The timestamp is in RFC3339 format:
/// `yyyy-MM-ddTHH:mm:ssZ`.
public var originalArrivalTime: Iso8601Date?
/// Version of the message.
public var version: String
// MARK: Initializers
/// Initialize a BaseChatMessageEvent.
/// - Parameters:
/// - messageId: Message id.
/// - type: Message type.
/// - threadId: Chat thread id.
/// - senderId: Sender id
/// - recipientId: Recipient id.
/// - senderDisplayName: Sender display name.
/// - originalArrivalTime: Time that the message was created.
/// - version: Message version.
init(
messageId: String,
type: ChatMessageType,
threadId: String,
sender: CommunicationIdentifier,
recipient: CommunicationIdentifier,
senderDisplayName: String? = nil,
originalArrivalTime: Iso8601Date? = nil,
version: String
) {
self.messageId = messageId
self.type = type
self.threadId = threadId
self.sender = sender
self.recipient = recipient
self.senderDisplayName = senderDisplayName
self.originalArrivalTime = originalArrivalTime
self.version = version
}
}
/// ChatMessageReceivedEvent for push notifications.
public class PushNotificationChatMessageReceivedEvent: PushNotificationChatMessageEvent {
// MARK: Properties
/// The content of the message.
public var message: String
/// The message metadata.
public var metadata: [String: String?]?
// MARK: Initializers
/// Initialize a ChatMessageReceivedEvent from Data.
/// - Parameter data: The payload data.
init(from data: Data) throws {
let pushNotificationMessageReceivedPayload: PushNotificationMessageReceivedPayload = try JSONDecoder()
.decode(PushNotificationMessageReceivedPayload.self, from: data)
self.message = pushNotificationMessageReceivedPayload.messageBody
if pushNotificationMessageReceivedPayload.acsChatMessageMetadata != "null" {
if let acsChatMetadata = pushNotificationMessageReceivedPayload.acsChatMessageMetadata.data(using: .utf8) {
self.metadata = try JSONDecoder().decode([String: String?].self, from: acsChatMetadata)
}
}
super.init(
messageId: pushNotificationMessageReceivedPayload.messageId,
type: ChatMessageType(pushNotificationMessageReceivedPayload.messageType),
threadId: pushNotificationMessageReceivedPayload.groupId,
sender: createCommunicationIdentifier(fromRawId: pushNotificationMessageReceivedPayload.senderId),
recipient: createCommunicationIdentifier(fromRawId: pushNotificationMessageReceivedPayload.recipientId),
senderDisplayName: pushNotificationMessageReceivedPayload.senderDisplayName,
originalArrivalTime: Iso8601Date(string: pushNotificationMessageReceivedPayload.originalArrivalTime),
version: pushNotificationMessageReceivedPayload.version
)
}
}