SendingController.swift 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import UIKit
  2. import DcCore
  3. protocol SendingControllerDelegate: class {
  4. func onSendingAttemptFinished()
  5. }
  6. class SendingController: UIViewController {
  7. private let dcMsgs: [DcMsg]
  8. private let chatId: Int
  9. private let dcContext: DcContext
  10. weak var delegate: SendingControllerDelegate?
  11. private var progressLabel: UILabel = {
  12. let view = UILabel()
  13. view.translatesAutoresizingMaskIntoConstraints = false
  14. view.text = String.localized("one_moment")
  15. return view
  16. }()
  17. private lazy var initialsBadge: InitialsBadge = {
  18. let view = InitialsBadge(size: 95)
  19. let chat = dcContext.getChat(chatId: chatId)
  20. view.setColor(chat.color)
  21. if let image = chat.profileImage {
  22. view.setImage(image)
  23. } else {
  24. view.setName(chat.name)
  25. }
  26. view.isHidden = true
  27. return view
  28. }()
  29. private var activityIndicator: UIActivityIndicatorView = {
  30. let view: UIActivityIndicatorView
  31. if #available(iOS 13, *) {
  32. view = UIActivityIndicatorView(style: .large)
  33. } else {
  34. view = UIActivityIndicatorView(style: .whiteLarge)
  35. view.color = UIColor.gray
  36. }
  37. view.startAnimating()
  38. view.translatesAutoresizingMaskIntoConstraints = false
  39. return view
  40. }()
  41. init(chatId: Int, dcMsgs: [DcMsg], dcContext: DcContext) {
  42. self.chatId = chatId
  43. self.dcMsgs = dcMsgs
  44. self.dcContext = dcContext
  45. super.init(nibName: nil, bundle: nil)
  46. }
  47. required init?(coder: NSCoder) {
  48. fatalError("init(coder:) has not been implemented")
  49. }
  50. override func viewDidLoad() {
  51. view.backgroundColor = DcColors.defaultBackgroundColor
  52. setupViews()
  53. sendMessage()
  54. }
  55. private func setupViews() {
  56. view.addSubview(progressLabel)
  57. view.addSubview(activityIndicator)
  58. view.addSubview(initialsBadge)
  59. view.addConstraints([
  60. progressLabel.constraintCenterXTo(view),
  61. progressLabel.constraintAlignTopTo(view, paddingTop: 25),
  62. activityIndicator.constraintCenterXTo(view),
  63. activityIndicator.constraintCenterYTo(view),
  64. initialsBadge.constraintCenterXTo(view),
  65. initialsBadge.constraintCenterYTo(view)
  66. ])
  67. setupNavigationBar()
  68. }
  69. private func setupNavigationBar() {
  70. self.navigationItem.leftBarButtonItem = UIBarButtonItem()
  71. self.navigationItem.titleView = UIImageView(image: UIImage(named: "ic_chat")?.scaleDownImage(toMax: 26))
  72. }
  73. private func sendMessage() {
  74. DispatchQueue.global(qos: .utility).async { [weak self] in
  75. guard let self = self else { return }
  76. for dcMsg in self.dcMsgs {
  77. self.dcContext.sendMsgSync(chatId: self.chatId, msg: dcMsg)
  78. }
  79. if !self.dcContext.getChat(chatId: self.chatId).isSelfTalk {
  80. self.initialsBadge.isHidden = false
  81. let image = self.initialsBadge.asImage()
  82. self.initialsBadge.isHidden = true
  83. DcUtils.donateSendMessageIntent(context: self.dcContext, chatId: self.chatId, chatAvatar: image)
  84. }
  85. self.delegate?.onSendingAttemptFinished()
  86. }
  87. }
  88. }