From e428333b7b9c50c881e7016943e7671fc83f0876 Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Mon, 21 Feb 2022 16:58:42 +1100 Subject: [PATCH] minor update to reduce database read on ui thread --- Session/Conversations/ConversationVC.swift | 1 + .../Conversations/Message Cells/MessageCell.swift | 12 +++++++++++- .../Message Cells/VisibleMessageCell.swift | 10 +++++----- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Session/Conversations/ConversationVC.swift b/Session/Conversations/ConversationVC.swift index 34486c858..990d2de75 100644 --- a/Session/Conversations/ConversationVC.swift +++ b/Session/Conversations/ConversationVC.swift @@ -291,6 +291,7 @@ final class ConversationVC : BaseVC, ConversationViewModelDelegate, OWSConversat let viewItem = viewItems[indexPath.row] let cell = tableView.dequeueReusableCell(withIdentifier: MessageCell.getCellType(for: viewItem).identifier) as! MessageCell cell.delegate = self + cell.thread = thread cell.viewItem = viewItem return cell } diff --git a/Session/Conversations/Message Cells/MessageCell.swift b/Session/Conversations/Message Cells/MessageCell.swift index a2d846692..889e3c19d 100644 --- a/Session/Conversations/Message Cells/MessageCell.swift +++ b/Session/Conversations/Message Cells/MessageCell.swift @@ -1,4 +1,5 @@ import UIKit +import SessionMessagingKit public enum SwipeState { case began @@ -8,7 +9,16 @@ public enum SwipeState { class MessageCell : UITableViewCell { weak var delegate: MessageCellDelegate? - var viewItem: ConversationViewItem? { didSet { update() } } + var thread: TSThread? { + didSet { + if viewItem != nil { update() } + } + } + var viewItem: ConversationViewItem? { + didSet { + if thread != nil { update() } + } + } // MARK: Settings class var identifier: String { preconditionFailure("Must be overridden by subclasses.") } diff --git a/Session/Conversations/Message Cells/VisibleMessageCell.swift b/Session/Conversations/Message Cells/VisibleMessageCell.swift index 1106b2d10..df8f10244 100644 --- a/Session/Conversations/Message Cells/VisibleMessageCell.swift +++ b/Session/Conversations/Message Cells/VisibleMessageCell.swift @@ -257,7 +257,7 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewDelegate { messageStatusImageView.image = image messageStatusImageView.backgroundColor = backgroundColor if let message = message as? TSOutgoingMessage { - messageStatusImageView.isHidden = (message.messageState == .sent && message.thread.lastInteraction != message) + messageStatusImageView.isHidden = (message.messageState == .sent && thread?.lastInteraction != message) } else { messageStatusImageView.isHidden = true } @@ -349,7 +349,7 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewDelegate { } case .mediaMessage: if viewItem.interaction is TSIncomingMessage, - let thread = viewItem.interaction.thread as? TSContactThread, + let thread = thread as? TSContactThread, Storage.shared.getContact(with: thread.contactSessionID())?.isTrusted != true { showMediaPlaceholder() } else { @@ -382,7 +382,7 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewDelegate { } case .audio: if viewItem.interaction is TSIncomingMessage, - let thread = viewItem.interaction.thread as? TSContactThread, + let thread = thread as? TSContactThread, Storage.shared.getContact(with: thread.contactSessionID())?.isTrusted != true { showMediaPlaceholder() } else { @@ -393,7 +393,7 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewDelegate { } case .genericAttachment: if viewItem.interaction is TSIncomingMessage, - let thread = viewItem.interaction.thread as? TSContactThread, + let thread = thread as? TSContactThread, Storage.shared.getContact(with: thread.contactSessionID())?.isTrusted != true { showMediaPlaceholder() } else { @@ -673,7 +673,7 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewDelegate { private static func shouldShowProfilePicture(for viewItem: ConversationViewItem) -> Bool { guard let message = viewItem.interaction as? TSMessage else { preconditionFailure() } - let isGroupThread = message.thread.isGroupThread() + let isGroupThread = viewItem.isGroupThread let senderSessionID = (message as? TSIncomingMessage)?.authorId return isGroupThread && viewItem.shouldShowSenderProfilePicture && senderSessionID != nil }