Browse Source

using cellData for deaddrop

nayooti 5 years ago
parent
commit
d644ae3710

+ 14 - 26
deltachat-ios/Controller/ChatListController.swift

@@ -169,33 +169,23 @@ class ChatListController: UITableViewController {
         let cellData = viewModel.cellDataFor(section: indexPath.section, row: indexPath.row)
 
         switch cellData.type {
-        case .CHAT(let chatData):
+        case .deaddrop(let deaddropData):
+            guard let deaddropCell = tableView.dequeueReusableCell(withIdentifier: deadDropCellReuseIdentifier, for: indexPath) as? ContactCell else {
+                break
+            }
+            deaddropCell.updateCell(cellViewModel: cellData)
+            return deaddropCell
+        case .chat(let chatData):
             let chatId = chatData.chatId
             if chatId == DC_CHAT_ID_ARCHIVED_LINK {
                 updateArchivedCell() // to make sure archived chats count is always right
                 return archiveCell
-            } else if
-                chatId == DC_CHAT_ID_DEADDROP,
-                let deaddropCell = tableView.dequeueReusableCell(withIdentifier: deadDropCellReuseIdentifier, for: indexPath) as? ContactCell {
-                deaddropCell.updateCell(cellViewModel: cellData)
-                deaddropCell.backgroundColor = DcColors.deaddropBackground
-                deaddropCell.contentView.backgroundColor = DcColors.deaddropBackground
-                if let msgId = viewModel.msgIdFor(row: indexPath.row) {
-                    let contact = DcContact(id: DcMsg(id: msgId).fromContactId)
-                    if let img = contact.profileImage {
-                        deaddropCell.resetBackupImage()
-                        deaddropCell.setImage(img)
-                    } else {
-                        deaddropCell.setBackupImage(name: contact.nameNAddr, color: contact.color)
-                    }
-                }
-                return deaddropCell
             } else if let chatCell = tableView.dequeueReusableCell(withIdentifier: chatCellReuseIdentifier, for: indexPath) as? ContactCell {
                 // default chatCell
                 chatCell.updateCell(cellViewModel: cellData)
                 return chatCell
             }
-        case .CONTACT:
+        case .contact:
             safe_assert(viewModel.searchActive)
             if let contactCell = tableView.dequeueReusableCell(withIdentifier: contactCellReuseIdentifier, for: indexPath) as? ContactCell {
                 contactCell.updateCell(cellViewModel: cellData)
@@ -213,19 +203,17 @@ class ChatListController: UITableViewController {
     override func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) {
         let cellData = viewModel.cellDataFor(section: indexPath.section, row: indexPath.row)
         switch cellData.type {
-        case .CHAT(let chatData):
+        case .deaddrop(let deaddropData):
+            safe_assert(deaddropData.chatId == DC_CHAT_ID_DEADDROP)
+            showDeaddropRequestAlert(msgId: deaddropData.msgId)
+        case .chat(let chatData):
             let chatId = chatData.chatId
-            if chatId == DC_CHAT_ID_DEADDROP {
-                guard let msgId = viewModel.msgIdFor(row: indexPath.row) else {
-                    return
-                }
-                showDeaddropRequestAlert(msgId: msgId)
-            } else if chatId == DC_CHAT_ID_ARCHIVED_LINK {
+            if chatId == DC_CHAT_ID_ARCHIVED_LINK {
                 coordinator?.showArchive()
             } else {
                 coordinator?.showChat(chatId: chatId)
             }
-        case .CONTACT(let contactData):
+        case .contact(let contactData):
             let contactId = contactData.contactId
             if let chatId = contactData.chatId {
                 coordinator?.showChat(chatId: chatId)

+ 22 - 15
deltachat-ios/View/ContactCell.swift

@@ -7,10 +7,9 @@ protocol ContactCellDelegate: class {
 class ContactCell: UITableViewCell {
 
     static let reuseIdentifier = "contact_cell_reuse_identifier"
+    static let cellHeight: CGFloat = 74.5
 
-    public static let cellHeight: CGFloat = 74.5
     weak var delegate: ContactCellDelegate?
-    var rowIndex = -1 // TODO: is this still needed?
     private let badgeSize: CGFloat = 54
     private let imgSize: CGFloat = 20
 
@@ -32,8 +31,6 @@ class ContactCell: UITableViewCell {
         let badge = InitialsBadge(size: badgeSize)
         badge.setColor(UIColor.lightGray)
         badge.isAccessibilityElement = false
-        let tap = UITapGestureRecognizer(target: self, action: #selector(onAvatarTapped))
-        badge.addGestureRecognizer(tap)
         return badge
     }()
 
@@ -232,19 +229,27 @@ class ContactCell: UITableViewCell {
         avatar.setColor(color)
     }
 
-    @objc func onAvatarTapped() {
-        if rowIndex == -1 {
-            return
-        }
-        delegate?.onAvatarTapped(at: rowIndex)
-    }
-
+    // use this update-method to update cell in cellForRowAt whenever it is possible - other set-methods will be set private in progress
     func updateCell(cellViewModel: AvatarCellViewModel) {
+
         // subtitle
         subtitleLabel.attributedText = cellViewModel.subtitle.boldAt(indexes: cellViewModel.subtitleHighlightIndexes, fontSize: subtitleLabel.font.pointSize)
 
         switch cellViewModel.type {
-        case .CHAT(let chatData):
+        case .deaddrop(let deaddropData):
+            safe_assert(deaddropData.chatId == DC_CHAT_ID_DEADDROP)
+            backgroundColor = DcColors.deaddropBackground
+            contentView.backgroundColor = DcColors.deaddropBackground
+            let contact = DcContact(id: DcMsg(id: deaddropData.msgId).fromContactId)
+            if let img = contact.profileImage {
+                resetBackupImage()
+                setImage(img)
+            } else {
+                setBackupImage(name: contact.nameNAddr, color: contact.color)
+            }
+            titleLabel.attributedText = cellViewModel.title.boldAt(indexes: cellViewModel.titleHighlightIndexes, fontSize: titleLabel.font.pointSize)
+
+        case .chat(let chatData):
             let chat = DcChat(id: chatData.chatId)
 
             // text bold if chat contains unread messages - otherwise hightlight search results if needed
@@ -253,18 +258,20 @@ class ContactCell: UITableViewCell {
             } else {
                 titleLabel.attributedText = cellViewModel.title.boldAt(indexes: cellViewModel.titleHighlightIndexes, fontSize: titleLabel.font.pointSize)
             }
-
+            setVerified(isVerified: chat.isVerified)
+            setTimeLabel(chatData.summary.timestamp)
+            setStatusIndicators(unreadCount: chatData.unreadMessages, status: chatData.summary.state, visibility: chat.visibility)
             if let img = chat.profileImage {
                 resetBackupImage()
                 setImage(img)
             } else {
-              setBackupImage(name: chat.name, color: chat.color)
+                setBackupImage(name: chat.name, color: chat.color)
             }
             setVerified(isVerified: chat.isVerified)
             setTimeLabel(chatData.summary.timestamp)
             setStatusIndicators(unreadCount: chatData.unreadMessages, status: chatData.summary.state, visibility: chat.visibility, isLocationStreaming: chat.isSendingLocations)
 
-        case .CONTACT(let contactData):
+        case .contact(let contactData):
             let contact = DcContact(id: contactData.contactId)
             titleLabel.attributedText = cellViewModel.title.boldAt(indexes: cellViewModel.titleHighlightIndexes, fontSize: titleLabel.font.pointSize)
             avatar.setName(cellViewModel.title)

+ 11 - 4
deltachat-ios/ViewModel/ChatListViewModel.swift

@@ -145,9 +145,11 @@ class ChatListViewModel: NSObject, ChatListViewModelProtocol {
     func chatIdFor(section: Int, row: Int) -> Int? {
         let cellData = cellDataFor(section: section, row: row)
         switch cellData.type {
-        case .CHAT(let data):
+        case .deaddrop(let data):
             return data.chatId
-        case .CONTACT:
+        case .chat(let data):
+            return data.chatId
+        case .contact:
             return nil
         }
     }
@@ -206,10 +208,15 @@ private extension ChatListViewModel {
     func makeChatCellViewModel(index: Int, searchText: String) -> AvatarCellViewModel {
 
         let list: DcChatlist = searchResultChatList ?? chatList
-
         let chatId = list.getChatId(index: index)
+        let summary = list.getSummary(index: index)
+
+
+        if let msgId = msgIdFor(row: index), chatId == DC_CHAT_ID_DEADDROP {
+            return ChatCellViewModel(dearddropCellData: DeaddropCellData(chatId: chatId, msgId: msgId, summary: summary))
+        }
+
         let chat = dcContext.getChat(chatId: chatId)
-        let summary = chatList.getSummary(index: index)
         let unreadMessages = dcContext.getUnreadMessages(chatId: chatId)
 
         var chatTitleIndexes: [Int] = []