From 112ee4948173cfc77ba6048e2f7750aef9a570ce Mon Sep 17 00:00:00 2001 From: Sasha Weiss Date: Tue, 2 May 2023 17:11:32 -0700 Subject: [PATCH] Fetch sender name when creating media gallery items --- .../MediaGallery/MediaGallery.swift | 54 ++++++++++++++++++- .../MediaTileViewController.swift | 29 ++-------- 2 files changed, 57 insertions(+), 26 deletions(-) diff --git a/Signal/src/ViewControllers/MediaGallery/MediaGallery.swift b/Signal/src/ViewControllers/MediaGallery/MediaGallery.swift index 7f1d9f8b2e..f19d27200e 100644 --- a/Signal/src/ViewControllers/MediaGallery/MediaGallery.swift +++ b/Signal/src/ViewControllers/MediaGallery/MediaGallery.swift @@ -4,6 +4,7 @@ // import Foundation +import SignalMessaging import SignalServiceKit public enum GalleryDirection { @@ -30,15 +31,27 @@ class MediaGalleryAlbum { } public class MediaGalleryItem: Equatable, Hashable, MediaGallerySectionItem { + struct Sender { + let name: String + let abbreviatedName: String + } + let message: TSMessage + let sender: Sender? let attachmentStream: TSAttachmentStream + let galleryDate: GalleryDate let captionForDisplay: String? let albumIndex: Int let orderingKey: MediaGalleryItemOrderingKey - init(message: TSMessage, attachmentStream: TSAttachmentStream) { + init( + message: TSMessage, + sender: Sender?, + attachmentStream: TSAttachmentStream + ) { self.message = message + self.sender = sender self.attachmentStream = attachmentStream self.galleryDate = GalleryDate(message: message) self.albumIndex = message.attachmentIds.firstIndex(of: attachmentStream.uniqueId) ?? 0 @@ -387,7 +400,44 @@ class MediaGallery: Dependencies { return nil } - return MediaGalleryItem(message: message, attachmentStream: attachmentStream) + let sender: MediaGalleryItem.Sender? = { + let senderAddress: SignalServiceAddress? = { + if let incomingMessage = message as? TSIncomingMessage { + return incomingMessage.authorAddress + } + + return tsAccountManager.localAddress(with: transaction) + }() + + if let senderAddress { + let senderName = contactsManager.nameForAddress( + senderAddress, + localUserDisplayMode: .asLocalUser, + short: false, + transaction: transaction + ) + + let senderAbbreviatedName = contactsManager.nameForAddress( + senderAddress, + localUserDisplayMode: .asLocalUser, + short: true, + transaction: transaction + ) + + return MediaGalleryItem.Sender( + name: senderName.string, + abbreviatedName: senderAbbreviatedName.string + ) + } + + return nil + }() + + return MediaGalleryItem( + message: message, + sender: sender, + attachmentStream: attachmentStream + ) } internal func album(for item: MediaGalleryItem) -> MediaGalleryAlbum { diff --git a/Signal/src/ViewControllers/MediaGallery/MediaTileViewController.swift b/Signal/src/ViewControllers/MediaGallery/MediaTileViewController.swift index b4e77dbe56..93127866bb 100644 --- a/Signal/src/ViewControllers/MediaGallery/MediaTileViewController.swift +++ b/Signal/src/ViewControllers/MediaGallery/MediaTileViewController.swift @@ -1085,37 +1085,18 @@ class GalleryGridCellItem: PhotoGridItem { } lazy var photoMetadata: PhotoMetadata? = { - let authorAddress: SignalServiceAddress - if let incomingMessage = galleryItem.message as? TSIncomingMessage { - authorAddress = incomingMessage.authorAddress - } else if let localAddress = TSAccountManager.shared.localAddress { - authorAddress = localAddress - } else { - owsFailDebug("Local address lookup failed unexpectedly") + guard let sender = galleryItem.sender else { + owsFailDebug("Missing sender!") return nil } + let filename = galleryItem.attachmentStream.originalFilePath.map { ($0 as NSString).lastPathComponent as String } - let (sender, abbreviatedSender) = - SDSDatabaseStorage.shared.read { transaction in - let contactsManager = SSKEnvironment.shared.contactsManager - return ( - contactsManager.nameForAddress( - authorAddress, - localUserDisplayMode: .asLocalUser, - short: false, - transaction: transaction), - contactsManager.nameForAddress( - authorAddress, - localUserDisplayMode: .asLocalUser, - short: true, - transaction: transaction)) - } return PhotoMetadata( - sender: sender.string, - abbreviatedSender: abbreviatedSender.string, + sender: sender.name, + abbreviatedSender: sender.abbreviatedName, filename: filename, byteSize: Int(galleryItem.attachmentStream.byteCount), creationDate: galleryItem.attachmentStream.creationTimestamp)