Selaa lähdekoodia

Merge pull request #931 from deltachat/MKRdelegage

introduce BaseMessageCellDelegate
cyBerta 4 vuotta sitten
vanhempi
commit
a8dfe61b09

+ 8 - 6
deltachat-ios/Chat/ChatViewControllerNew.swift

@@ -74,7 +74,7 @@ class ChatViewControllerNew: UITableViewController {
         return UIBarButtonItem(customView: badge)
     }()
 
-    /// The `BasicAudioController` controll the AVAudioPlayer state (play, pause, stop) and udpate audio cell UI accordingly.
+    /// The `BasicAudioController` controll the AVAudioPlayer state (play, pause, stop) and update audio cell UI accordingly.
     private lazy var audioController = NewAudioController(dcContext: dcContext, chatId: chatId)
 
     private var disableWriting: Bool
@@ -344,6 +344,7 @@ class ChatViewControllerNew: UITableViewController {
             cell = tableView.dequeueReusableCell(withIdentifier: "text", for: indexPath) as? NewTextMessageCell ?? NewTextMessageCell()
         }
 
+        cell.baseDelegate = self
         cell.update(msg: message,
                     messageStyle: configureMessageStyle(for: message, at: indexPath),
                     isAvatarVisible: configureAvatarVisibility(for: message, at: indexPath))
@@ -998,12 +999,13 @@ class ChatViewControllerNew: UITableViewController {
     }
 }
 
-/*extension ChatViewControllerNew: MediaSendHandler {
- func onSuccess() {
- refreshMessages()
- }
- }*/
+// MARK: - BaseMessageCellDelegate
+extension ChatViewControllerNew: BaseMessageCellDelegate {
+    func linkTapped(link: String) {
+    }
+}
 
+// MARK: - MediaPickerDelegate
 extension ChatViewControllerNew: MediaPickerDelegate {
     func onVideoSelected(url: NSURL) {
         sendVideo(url: url)

+ 11 - 0
deltachat-ios/Chat/Views/Cells/BaseMessageCell.swift

@@ -1,5 +1,6 @@
 import UIKit
 import DcCore
+
 public class BaseMessageCell: UITableViewCell {
 
     static var defaultPadding: CGFloat = 12
@@ -11,6 +12,8 @@ public class BaseMessageCell: UITableViewCell {
     private var leadingConstraintCurrentSender: NSLayoutConstraint?
     private var trailingConstraintCurrentSender: NSLayoutConstraint?
 
+    public weak var baseDelegate: BaseMessageCellDelegate?
+
     private lazy var contentContainer: UIStackView = {
         let view = UIStackView(arrangedSubviews: [topLabel, mainContentView, bottomContentView])
         view.translatesAutoresizingMaskIntoConstraints = false
@@ -231,6 +234,7 @@ public class BaseMessageCell: UITableViewCell {
         messageBackgroundContainer.prepareForReuse()
         bottomLabel.text = nil
         bottomLabel.attributedText = nil
+        baseDelegate = nil
     }
 
     // MARK: - Context menu
@@ -256,3 +260,10 @@ public class BaseMessageCell: UITableViewCell {
         }
     }
 }
+
+// MARK: - BaseMessageCellDelegate
+// this delegate contains possible events from base cells or from derived cells
+public protocol BaseMessageCellDelegate: class {
+
+    func linkTapped(link: String) // link is eg. `https://foo.bar` or `/command`
+}

+ 3 - 0
deltachat-ios/Chat/Views/Cells/NewAudioMessageCell.swift

@@ -1,6 +1,8 @@
 import UIKit
 import DcCore
 
+// NewAudioMessageCellDelegate is for sending events to NewAudioController.
+// do not confuse with BaseMessageCellDelegate that is for sending events to ChatViewControllerNew.
 public protocol NewAudioMessageCellDelegate: AnyObject {
     func playButtonTapped(cell: NewAudioMessageCell, messageId: Int)
 }
@@ -8,6 +10,7 @@ public protocol NewAudioMessageCellDelegate: AnyObject {
 public class NewAudioMessageCell: BaseMessageCell {
 
     public weak var delegate: NewAudioMessageCellDelegate?
+
     lazy var audioPlayerView: NewAudioPlayerView = {
         let view = NewAudioPlayerView()
         view.translatesAutoresizingMaskIntoConstraints = false