Files
2023-03-01 20:43:56 +03:00

97 lines
4.2 KiB
Swift

//
// + MessagesDisplayDelegate.swift
// Wallet
//
// Created by Saveliy Stavitsky on 2/9/21.
// Copyright © 2021 AM. All rights reserved.
//
import MessageKit
import UIKit
extension CryptoChatControllerChat: MessagesDisplayDelegate {
func enabledDetectors(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> [DetectorType] {
return [.url, .address, .phoneNumber, .date, .transitInformation]
}
func messageStyle(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> MessageStyle {
let tail: MessageStyle.TailCorner = isFromCurrentSender(message: message) ? .bottomRight : .bottomLeft
return .bubble
}
func backgroundColor(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> UIColor {
let index = messages.count - loadedMsgsCount + indexPath.section
guard index >= 0, index < messages.count else { return .clear }
let msg = messages[index]
if !msg.isInSyncWithBlockchain {
return (msg.timestamp < self.historyService.lastSyncTimestamp || (msg.isUnsent == true))
? Asset.brick.color
: Asset.deepWater.color.withAlphaComponent(0.05)
} else {
return isFromCurrentSender(message: message)
? Asset.deepWater.color.withAlphaComponent(0.1)
: Asset.marble.color
}
}
func configureAccessoryView(_ accessoryView: UIView,
for message: MessageType,
at indexPath: IndexPath,
in messagesCollectionView: MessagesCollectionView) {
// Cells are reused, so only add a button here once. For real use you would need to
// ensure any subviews are removed if not needed
accessoryView.subviews.forEach { $0.removeFromSuperview() }
let index = messages.count - loadedMsgsCount + indexPath.section
guard index >= 0, index < messages.count else { return }
let msg = messages[index]
if (!msg.isInSyncWithBlockchain && msg.timestamp < self.historyService.lastSyncTimestamp)
|| (msg.isUnsent == true) {
let button = UIImageView()
// button.tintColor = .primaryColor
accessoryView.addSubview(button)
button.frame = accessoryView.bounds
button.isUserInteractionEnabled = true // respond to accessoryView tap through `MessageCellDelegate`
// button.setImage(Asset.chatsRefresh.image, for: .normal)
button.image = Asset.chatsRefresh.image
let tap1 = UITapGestureRecognizer(trailingClosure: {
let data = msg.data
self.historyService.deleteMsg(ephemPublicKey: msg.id)
self.loadedMsgsCount -= 1
self.messagesCollectionView.reloadData()
self.sendMsg(msgText: data)
})
button.addGestureRecognizer(tap1)
// accessoryView.backgroundColor = UIColor.darkGray.withAlphaComponent(0.3)
} else if case let .photo(img) = message.kind,
let image = img.image {
let button = UIImageView()
accessoryView.addSubview(button)
button.frame = accessoryView.bounds
button.isUserInteractionEnabled = true // respond to accessoryView tap through `MessageCellDelegate`
button.image = Asset.chatDownload.image
let tap1 = UITapGestureRecognizer(trailingClosure: {
let convertedImage = image.jpegData(compressionQuality: 1)
.flatMap(UIImage.init)?
.rotate(radians: .pi)
?? image
let imageToShare = [convertedImage]
let activityViewController = UIActivityViewController(activityItems: imageToShare, applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash
self.present(activityViewController, animated: true, completion: nil)
})
button.addGestureRecognizer(tap1)
}
}
}