97 lines
4.2 KiB
Swift
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)
|
|
}
|
|
}
|
|
}
|