From 8c3fbbdca39babd65bbe599f78cd93996061fa69 Mon Sep 17 00:00:00 2001 From: Max Radermacher Date: Thu, 11 Dec 2025 13:35:08 -0600 Subject: [PATCH] Hoist some attachment files into SignalUI --- Signal.xcodeproj/project.pbxproj | 22 +++++------ .../Attachments/SignalAttachmentCloner.swift | 1 + .../VoiceMessageSendableDraft.swift | 1 + .../src/ViewControllers/LocationPicker.swift | 4 +- .../ViewControllers/Photos/PhotoLibrary.swift | 1 + .../attachments/SignalAttachmentTest.swift | 1 + .../SignalAttachment+Sending.swift | 30 --------------- .../AttachmentContentValidator.swift | 12 ------ .../Util/ImageMetadata/ImageMetadata.swift | 4 +- .../AttachmentItemCollection.swift | 2 +- .../Attachments/PreviewableAttachment.swift | 1 + .../Attachments/SendableAttachment.swift | 38 +++++++++++++++++++ .../Attachments/SignalAttachment.swift | 1 + 13 files changed, 58 insertions(+), 60 deletions(-) delete mode 100644 SignalServiceKit/Attachments/SignalAttachment+Sending.swift rename {SignalServiceKit => SignalUI}/Attachments/PreviewableAttachment.swift (99%) rename {SignalServiceKit => SignalUI}/Attachments/SendableAttachment.swift (84%) rename {SignalServiceKit => SignalUI}/Attachments/SignalAttachment.swift (99%) diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index 73dd43c2e2..30fc36ca15 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -580,8 +580,6 @@ 501052692BDB232A0097DDC5 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 501052682BDB232A0097DDC5 /* PrivacyInfo.xcprivacy */; }; 5010526B2BDB23F50097DDC5 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 5010526A2BDB23F50097DDC5 /* PrivacyInfo.xcprivacy */; }; 5010B6B42C6BD41E00314CD4 /* PreKeyBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5010B6B32C6BD41E00314CD4 /* PreKeyBundle.swift */; }; - 5011C8D82ED77478005DF488 /* SendableAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5011C8D72ED77478005DF488 /* SendableAttachment.swift */; }; - 5011C8DA2ED77482005DF488 /* PreviewableAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5011C8D92ED77482005DF488 /* PreviewableAttachment.swift */; }; 5011D1CB293FC7E000064098 /* DomainFrontingCountryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5011D1CA293FC7E000064098 /* DomainFrontingCountryViewController.swift */; }; 5011D9702A0429B6000FE8E5 /* ThreadMergerTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5011D96F2A0429B6000FE8E5 /* ThreadMergerTest.swift */; }; 5011D9722A04720E000FE8E5 /* OWSOrphanDataCleaner.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9CC66C02937B71E002172D0 /* OWSOrphanDataCleaner.swift */; }; @@ -641,6 +639,9 @@ 50468F2529EDD46500948E02 /* ParamParserTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EF7FC2107DDEE0007EBF7 /* ParamParserTest.swift */; }; 50468F2929EE130A00948E02 /* InteractionStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50468F2829EE130A00948E02 /* InteractionStore.swift */; }; 50468F2B29EE19C300948E02 /* PhoneNumberChangedMessageInserterTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50468F2A29EE19C300948E02 /* PhoneNumberChangedMessageInserterTest.swift */; }; + 504861A92EEB4D0700B13C49 /* PreviewableAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5011C8D92ED77482005DF488 /* PreviewableAttachment.swift */; }; + 504861AA2EEB4D0D00B13C49 /* SendableAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5011C8D72ED77478005DF488 /* SendableAttachment.swift */; }; + 504861AB2EEB4D1500B13C49 /* SignalAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D913491F62D4A500722898 /* SignalAttachment.swift */; }; 5049FA2F28BEAABE00D6E099 /* ContactDiscoveryV2Operation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5049FA2D28BEAABE00D6E099 /* ContactDiscoveryV2Operation.swift */; }; 504F397C29D23B1700E849A6 /* ValidatedIncomingEnvelope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504F397B29D23B1700E849A6 /* ValidatedIncomingEnvelope.swift */; }; 504F98B12EAFFAC600DF465B /* KyberPreKeyUseRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504F98B02EAFFAC600DF465B /* KyberPreKeyUseRecord.swift */; }; @@ -919,7 +920,6 @@ 6642A8792A8D85F500E591C2 /* OWSPaymentActivationRequestMessage+SDS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6642A8772A8D85F500E591C2 /* OWSPaymentActivationRequestMessage+SDS.swift */; }; 6642A87A2A8D85F500E591C2 /* OWSPaymentActivationRequestFinishedMessage+SDS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6642A8782A8D85F500E591C2 /* OWSPaymentActivationRequestFinishedMessage+SDS.swift */; }; 6642A87C2A8EB0D800E591C2 /* TSPaymentsActivationRequestModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6642A87B2A8EB0D800E591C2 /* TSPaymentsActivationRequestModel.swift */; }; - 664428962C12305D0092D0E2 /* SignalAttachment+Sending.swift in Sources */ = {isa = PBXBuildFile; fileRef = 664428952C12305D0092D0E2 /* SignalAttachment+Sending.swift */; }; 6645F30829BF8D2000B58EBD /* AccountAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6645F30729BF8D2000B58EBD /* AccountAttributes.swift */; }; 6645F30A29BF8DBC00B58EBD /* AccountAttributesRequestFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6645F30929BF8DBC00B58EBD /* AccountAttributesRequestFactory.swift */; }; 6645F30C29BFA28A00B58EBD /* AccountAttributesGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6645F30B29BFA28A00B58EBD /* AccountAttributesGenerator.swift */; }; @@ -1361,7 +1361,6 @@ 725465642BA0369D00EABFD2 /* AppSetup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5033D46A29DB9F17007FEADA /* AppSetup.swift */; }; 72552EF42C9EF9EC008614AF /* OWSIdentity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72552EF32C9EF9E7008614AF /* OWSIdentity.swift */; }; 7255A4C42B98D81000E95368 /* Usernames+BetterIdentifierChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9C2D777299B07D300D79715 /* Usernames+BetterIdentifierChecker.swift */; }; - 7255A4C72B98DEFB00E95368 /* SignalAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D913491F62D4A500722898 /* SignalAttachment.swift */; }; 7255A4C82B98DF3E00E95368 /* FailedStorySendDisplayController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66C336D02A994B97000F4F50 /* FailedStorySendDisplayController.swift */; }; 7255A4C92B98DF5500E95368 /* VoiceMessageConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 503AECC929B2B22E00642F66 /* VoiceMessageConstants.swift */; }; 7255A4CA2B98DF5500E95368 /* VoiceMessageInterruptedDraftStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3402AABE271DA2720084CBAE /* VoiceMessageInterruptedDraftStore.swift */; }; @@ -5094,7 +5093,6 @@ 6642A8772A8D85F500E591C2 /* OWSPaymentActivationRequestMessage+SDS.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "OWSPaymentActivationRequestMessage+SDS.swift"; sourceTree = ""; }; 6642A8782A8D85F500E591C2 /* OWSPaymentActivationRequestFinishedMessage+SDS.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "OWSPaymentActivationRequestFinishedMessage+SDS.swift"; sourceTree = ""; }; 6642A87B2A8EB0D800E591C2 /* TSPaymentsActivationRequestModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSPaymentsActivationRequestModel.swift; sourceTree = ""; }; - 664428952C12305D0092D0E2 /* SignalAttachment+Sending.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SignalAttachment+Sending.swift"; sourceTree = ""; }; 6645F30729BF8D2000B58EBD /* AccountAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountAttributes.swift; sourceTree = ""; }; 6645F30929BF8DBC00B58EBD /* AccountAttributesRequestFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountAttributesRequestFactory.swift; sourceTree = ""; }; 6645F30B29BFA28A00B58EBD /* AccountAttributesGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountAttributesGenerator.swift; sourceTree = ""; }; @@ -10893,10 +10891,6 @@ children = ( 509085BD2C49C29400409B85 /* PaddingBucket.swift */, 509085BF2C49C2A500409B85 /* PaddingBucketTest.swift */, - 5011C8D92ED77482005DF488 /* PreviewableAttachment.swift */, - 5011C8D72ED77478005DF488 /* SendableAttachment.swift */, - 664428952C12305D0092D0E2 /* SignalAttachment+Sending.swift */, - 34D913491F62D4A500722898 /* SignalAttachment.swift */, ); path = Attachments; sourceTree = ""; @@ -11676,6 +11670,9 @@ B99CD9422DA99A1F0035C77B /* Attachments */ = { isa = PBXGroup; children = ( + 5011C8D92ED77482005DF488 /* PreviewableAttachment.swift */, + 5011C8D72ED77478005DF488 /* SendableAttachment.swift */, + 34D913491F62D4A500722898 /* SignalAttachment.swift */, B99CD9432DA9AB530035C77B /* TypedItemProvider.swift */, ); path = Attachments; @@ -17487,6 +17484,7 @@ 3465F4D527287677001663AF /* PaymentsReconciliation.swift in Sources */, 3402AA79271D9E180084CBAE /* PermissiveGestureRecognizer.swift in Sources */, 501E78622CFE3E2700FD56C4 /* PhoneNumberCountry.swift in Sources */, + 504861A92EEB4D0700B13C49 /* PreviewableAttachment.swift in Sources */, 32FAB92A2727A57100FB76A6 /* PrimaryImageView.swift in Sources */, B92E76AB2B6871520095C4DF /* ProfileDetailLabel.swift in Sources */, 764FE0452A2F0C0F004D2804 /* QuotedReplyModel.swift in Sources */, @@ -17509,8 +17507,10 @@ 50597BBF2B97D629004681E1 /* SearchableNameFinder.swift in Sources */, 66FC638E29EDABAC00F00DAC /* SearchDisplayConfigurations.swift in Sources */, 66FBC4E328DA82AA00BD9E8B /* SelectMyStoryRecipientsViewController.swift in Sources */, + 504861AA2EEB4D0D00B13C49 /* SendableAttachment.swift in Sources */, B9A53B932CF7928A0000578B /* SheetPreviewViewController.swift in Sources */, 3402AA3C271D9DCD0084CBAE /* SheetViewController.swift in Sources */, + 504861AB2EEB4D1500B13C49 /* SignalAttachment.swift in Sources */, B9E322E72CD170ED006DAF3B /* SignalList.swift in Sources */, B9F817642BA263A900EAEE23 /* SignalSymbols.swift in Sources */, 342FFE57271DA8C9000AC89F /* Sounds+SignalUI.swift in Sources */, @@ -19286,7 +19286,6 @@ 6681AB652B7AE53B0099D187 /* PreloadedTextAttachment.swift in Sources */, 7254653B2BA01FCC00EABFD2 /* PreparedGiftPayment.swift in Sources */, 664BA8452BB5CE12005638E0 /* PreparedOutgoingMessage.swift in Sources */, - 5011C8DA2ED77482005DF488 /* PreviewableAttachment.swift in Sources */, D9CA614B2C2F675E00F99EA3 /* PrivateStoryThreadDeletionManager.swift in Sources */, 725465452BA01FCC00EABFD2 /* ProfileBadgesSnapshot+Constructors.swift in Sources */, D995546F2AF5668E0001E15C /* ProfileBadgesSnapshot.swift in Sources */, @@ -19387,7 +19386,6 @@ 66138FB6298326C7002E0CFE /* SecureValueRecovery.swift in Sources */, 662C440B2A156DF7001F83E2 /* SecureValueRecovery2Impl.swift in Sources */, 6691E7F72996EAD70032A68A /* SecureValueRecoveryMock.swift in Sources */, - 5011C8D82ED77478005DF488 /* SendableAttachment.swift in Sources */, F9C5CD37289453B300548EEE /* SenderKeyStore.swift in Sources */, 725465392BA01FAA00EABFD2 /* SendGiftBadgeJobQueue.swift in Sources */, D9AE0AD5291877600063488B /* SendGiftBadgeJobRecord.swift in Sources */, @@ -19415,8 +19413,6 @@ F9C5CCDD289453B300548EEE /* SignalAccountFinder.swift in Sources */, 50EF8DD52A1FE55D00A00935 /* SignalAccountMergeObserver.swift in Sources */, 50597BBA2B97C38C004681E1 /* SignalAccountStore.swift in Sources */, - 664428962C12305D0092D0E2 /* SignalAttachment+Sending.swift in Sources */, - 7255A4C72B98DEFB00E95368 /* SignalAttachment.swift in Sources */, F9C5CC8F289453B300548EEE /* SignalIOS.pb.swift in Sources */, F9C5CC9E289453B300548EEE /* SignalIOSProto.swift in Sources */, 725465382BA01FAA00EABFD2 /* SignalMessagingJobQueues.swift in Sources */, diff --git a/Signal/Attachments/SignalAttachmentCloner.swift b/Signal/Attachments/SignalAttachmentCloner.swift index 72a7319e5c..8235bef667 100644 --- a/Signal/Attachments/SignalAttachmentCloner.swift +++ b/Signal/Attachments/SignalAttachmentCloner.swift @@ -5,6 +5,7 @@ import Foundation import SignalServiceKit +import SignalUI enum SignalAttachmentCloner { static func cloneAsSignalAttachment(attachment: ReferencedAttachmentStream) throws -> PreviewableAttachment { diff --git a/Signal/ConversationView/VoiceMessage/VoiceMessageSendableDraft.swift b/Signal/ConversationView/VoiceMessage/VoiceMessageSendableDraft.swift index 85ecedd647..b62e0ff6fd 100644 --- a/Signal/ConversationView/VoiceMessage/VoiceMessageSendableDraft.swift +++ b/Signal/ConversationView/VoiceMessage/VoiceMessageSendableDraft.swift @@ -6,6 +6,7 @@ import CoreServices import Foundation import SignalServiceKit +import SignalUI import UniformTypeIdentifiers protocol VoiceMessageSendableDraft { diff --git a/Signal/src/ViewControllers/LocationPicker.swift b/Signal/src/ViewControllers/LocationPicker.swift index bdd15598ce..c54ef6ba7a 100644 --- a/Signal/src/ViewControllers/LocationPicker.swift +++ b/Signal/src/ViewControllers/LocationPicker.swift @@ -12,7 +12,7 @@ import Contacts import CoreLocation import CoreServices public import MapKit -public import SignalServiceKit +import SignalServiceKit import SignalUI import UniformTypeIdentifiers @@ -475,7 +475,7 @@ public class Location: NSObject { self.placemark = placemark } - public func prepareAttachment() async throws -> SendableAttachment { + func prepareAttachment() async throws -> SendableAttachment { let image = try await generateSnapshot() guard let jpegData = image.jpegData(compressionQuality: 1.0) else { throw LocationError.assertion diff --git a/Signal/src/ViewControllers/Photos/PhotoLibrary.swift b/Signal/src/ViewControllers/Photos/PhotoLibrary.swift index f96dfb7160..eec93245fb 100644 --- a/Signal/src/ViewControllers/Photos/PhotoLibrary.swift +++ b/Signal/src/ViewControllers/Photos/PhotoLibrary.swift @@ -7,6 +7,7 @@ import CoreServices import Foundation import Photos import SignalServiceKit +import SignalUI protocol PhotoLibraryDelegate: AnyObject { func photoLibraryDidChange(_ photoLibrary: PhotoLibrary) diff --git a/Signal/test/attachments/SignalAttachmentTest.swift b/Signal/test/attachments/SignalAttachmentTest.swift index d9f9ca7bfc..a9b19ff498 100644 --- a/Signal/test/attachments/SignalAttachmentTest.swift +++ b/Signal/test/attachments/SignalAttachmentTest.swift @@ -6,6 +6,7 @@ import XCTest import CoreServices import SignalServiceKit +import SignalUI import UniformTypeIdentifiers class SignalAttachmentTest: SignalBaseTest { diff --git a/SignalServiceKit/Attachments/SignalAttachment+Sending.swift b/SignalServiceKit/Attachments/SignalAttachment+Sending.swift deleted file mode 100644 index 716b11604c..0000000000 --- a/SignalServiceKit/Attachments/SignalAttachment+Sending.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// Copyright 2024 Signal Messenger, LLC -// SPDX-License-Identifier: AGPL-3.0-only -// - -import Foundation - -extension SendableAttachment { - - public struct ForSending { - public let dataSource: AttachmentDataSource - public let renderingFlag: AttachmentReference.RenderingFlag - - public init(dataSource: AttachmentDataSource, renderingFlag: AttachmentReference.RenderingFlag) { - self.dataSource = dataSource - self.renderingFlag = renderingFlag - } - } - - public func forSending(attachmentContentValidator: any AttachmentContentValidator) async throws -> ForSending { - let dataSource = try await attachmentContentValidator.validateContents( - sendableAttachment: self, - shouldUseDefaultFilename: true, - ) - return ForSending( - dataSource: dataSource, - renderingFlag: self.renderingFlag, - ) - } -} diff --git a/SignalServiceKit/Messages/Attachments/V2/ContentValidation/AttachmentContentValidator.swift b/SignalServiceKit/Messages/Attachments/V2/ContentValidation/AttachmentContentValidator.swift index c3424d9101..a262d70632 100644 --- a/SignalServiceKit/Messages/Attachments/V2/ContentValidation/AttachmentContentValidator.swift +++ b/SignalServiceKit/Messages/Attachments/V2/ContentValidation/AttachmentContentValidator.swift @@ -183,18 +183,6 @@ public protocol AttachmentContentValidator { extension AttachmentContentValidator { - public func validateContents( - sendableAttachment: SendableAttachment, - shouldUseDefaultFilename: Bool, - ) async throws -> AttachmentDataSource { - return try await validateContents( - dataSource: sendableAttachment.dataSource, - mimeType: sendableAttachment.mimeType, - renderingFlag: sendableAttachment.renderingFlag, - sourceFilename: sendableAttachment.sourceFilename?.rawValue ?? (shouldUseDefaultFilename ? sendableAttachment.defaultFilename : nil), - ) - } - public func validateContents( dataSource: DataSourcePath, mimeType: String, diff --git a/SignalServiceKit/Util/ImageMetadata/ImageMetadata.swift b/SignalServiceKit/Util/ImageMetadata/ImageMetadata.swift index ec04e6b6c7..518bcdf215 100644 --- a/SignalServiceKit/Util/ImageMetadata/ImageMetadata.swift +++ b/SignalServiceKit/Util/ImageMetadata/ImageMetadata.swift @@ -71,7 +71,7 @@ public struct ImageMetadata { public let imageFormat: ImageFormat public let pixelSize: CGSize public let hasAlpha: Bool - let isAnimated: Bool + public let isAnimated: Bool internal init(imageFormat: ImageFormat, pixelSize: CGSize, hasAlpha: Bool, isAnimated: Bool) { self.imageFormat = imageFormat @@ -80,7 +80,7 @@ public struct ImageMetadata { self.isAnimated = isAnimated } - var hasStickerLikeProperties: Bool { + public var hasStickerLikeProperties: Bool { let maxStickerHeight = CGFloat(512) return ( pixelSize.width <= maxStickerHeight diff --git a/SignalUI/AttachmentApproval/AttachmentItemCollection.swift b/SignalUI/AttachmentApproval/AttachmentItemCollection.swift index 18e53aeddf..8394ba53c5 100644 --- a/SignalUI/AttachmentApproval/AttachmentItemCollection.swift +++ b/SignalUI/AttachmentApproval/AttachmentItemCollection.swift @@ -4,7 +4,7 @@ // import Foundation -public import SignalServiceKit +import SignalServiceKit public class AttachmentApprovalItem { diff --git a/SignalServiceKit/Attachments/PreviewableAttachment.swift b/SignalUI/Attachments/PreviewableAttachment.swift similarity index 99% rename from SignalServiceKit/Attachments/PreviewableAttachment.swift rename to SignalUI/Attachments/PreviewableAttachment.swift index e436ceffdb..8832431393 100644 --- a/SignalServiceKit/Attachments/PreviewableAttachment.swift +++ b/SignalUI/Attachments/PreviewableAttachment.swift @@ -4,6 +4,7 @@ // import Foundation +public import SignalServiceKit /// Represents an attachment the user *might* choose to send. /// diff --git a/SignalServiceKit/Attachments/SendableAttachment.swift b/SignalUI/Attachments/SendableAttachment.swift similarity index 84% rename from SignalServiceKit/Attachments/SendableAttachment.swift rename to SignalUI/Attachments/SendableAttachment.swift index c60cc6eb14..4f9f3fe50c 100644 --- a/SignalServiceKit/Attachments/SendableAttachment.swift +++ b/SignalUI/Attachments/SendableAttachment.swift @@ -4,6 +4,7 @@ // import Foundation +public import SignalServiceKit /// Represents an attachment that's fully valid and ready to send. /// @@ -181,4 +182,41 @@ public struct SendableAttachment { throw OWSAssertionError("Video segmentation failed with unknown status: \(exportSession.status)") } } + + // MARK: - ForSending + + public struct ForSending { + public let dataSource: AttachmentDataSource + public let renderingFlag: AttachmentReference.RenderingFlag + + public init(dataSource: AttachmentDataSource, renderingFlag: AttachmentReference.RenderingFlag) { + self.dataSource = dataSource + self.renderingFlag = renderingFlag + } + } + + public func forSending(attachmentContentValidator: any AttachmentContentValidator) async throws -> ForSending { + let dataSource = try await attachmentContentValidator.validateContents( + sendableAttachment: self, + shouldUseDefaultFilename: true, + ) + return ForSending( + dataSource: dataSource, + renderingFlag: self.renderingFlag, + ) + } +} + +extension AttachmentContentValidator { + public func validateContents( + sendableAttachment: SendableAttachment, + shouldUseDefaultFilename: Bool, + ) async throws -> AttachmentDataSource { + return try await validateContents( + dataSource: sendableAttachment.dataSource, + mimeType: sendableAttachment.mimeType, + renderingFlag: sendableAttachment.renderingFlag, + sourceFilename: sendableAttachment.sourceFilename?.rawValue ?? (shouldUseDefaultFilename ? sendableAttachment.defaultFilename : nil), + ) + } } diff --git a/SignalServiceKit/Attachments/SignalAttachment.swift b/SignalUI/Attachments/SignalAttachment.swift similarity index 99% rename from SignalServiceKit/Attachments/SignalAttachment.swift rename to SignalUI/Attachments/SignalAttachment.swift index 9230ba0c82..d4cc241a71 100644 --- a/SignalServiceKit/Attachments/SignalAttachment.swift +++ b/SignalUI/Attachments/SignalAttachment.swift @@ -7,6 +7,7 @@ public import AVFoundation import Foundation import MobileCoreServices import SDWebImage +public import SignalServiceKit public enum SignalAttachmentError: Error { case missingData