AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Service/Chat/Extension/TrouterEventExtension.swift (97 lines of code) (raw):
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
//
import AzureCommunicationChat
import AzureCommunicationCommon
import AzureCore
import Foundation
extension ChatMessageReceivedEvent {
func toChatMessageInfoModel(localUserId: String) -> ChatMessageInfoModel {
return ChatMessageInfoModel(
id: self.id,
version: self.version,
type: self.type.toMessageType(),
senderId: self.sender?.stringValue,
senderDisplayName: self.senderDisplayName,
content: self.message,
createdOn: self.createdOn,
isLocalUser: self.sender != nil && self.sender?.rawId == localUserId)
}
}
extension ChatMessageEditedEvent {
func toChatMessageInfoModel(localUserId: String) -> ChatMessageInfoModel {
return ChatMessageInfoModel(
id: self.id,
version: self.version,
type: self.type.toMessageType(),
senderId: self.sender?.stringValue,
senderDisplayName: self.senderDisplayName,
content: self.message,
createdOn: self.createdOn,
editedOn: self.editedOn,
isLocalUser: self.sender != nil && self.sender?.rawId == localUserId)
}
}
extension ChatMessageDeletedEvent {
func toChatMessageInfoModel(localUserId: String) -> ChatMessageInfoModel {
return ChatMessageInfoModel(
id: self.id,
version: self.version,
type: self.type.toMessageType(),
senderId: self.sender?.stringValue,
senderDisplayName: self.senderDisplayName,
createdOn: self.createdOn,
deletedOn: self.deletedOn,
isLocalUser: self.sender != nil && self.sender?.rawId == localUserId)
}
}
extension ChatThreadDeletedEvent {
func toChatThreadInfoModel() -> ChatThreadInfoModel {
return ChatThreadInfoModel(
receivedOn: self.deletedOn ?? Iso8601Date())
}
}
extension ChatThreadPropertiesUpdatedEvent {
func toChatThreadInfoModel() -> ChatThreadInfoModel {
return ChatThreadInfoModel(
topic: self.properties?.topic,
receivedOn: self.updatedOn ?? Iso8601Date())
}
}
extension ParticipantsAddedEvent {
func toParticipantsInfo(participantsAdded: [SignalingChatParticipant],
localParticipantId: String) -> ParticipantsInfoModel {
let participants = participantsAdded.map {
$0.toParticipantInfoModel(localParticipantId)
}
return ParticipantsInfoModel(
participants: participants,
createdOn: self.addedOn ?? Iso8601Date())
}
}
extension ParticipantsRemovedEvent {
func toParticipantsInfo(participantsRemoved: [SignalingChatParticipant],
localParticipantId: String) -> ParticipantsInfoModel {
let participants = participantsRemoved.map {
$0.toParticipantInfoModel(localParticipantId)
}
return ParticipantsInfoModel(
participants: participants,
createdOn: self.removedOn ?? Iso8601Date())
}
}
extension TypingIndicatorReceivedEvent {
func toUserEventTimestampModel() -> UserEventTimestampModel? {
// device time is used to have consistent timer calculation
return UserEventTimestampModel(
userIdentifier: self.sender,
timestamp: Iso8601Date())
}
}
extension ReadReceiptReceivedEvent {
func toReadReceiptInfoModel() -> ReadReceiptInfoModel? {
guard let sender = self.sender, let readOn = self.readOn else {
return nil
}
return ReadReceiptInfoModel(
senderIdentifier: sender,
chatMessageId: self.chatMessageId,
readOn: readOn)
}
}