diff --git a/Signal/src/ViewControllers/SignalAttachment.swift b/Signal/src/ViewControllers/SignalAttachment.swift index 182cb92c2..62ba4a0f2 100644 --- a/Signal/src/ViewControllers/SignalAttachment.swift +++ b/Signal/src/ViewControllers/SignalAttachment.swift @@ -174,11 +174,31 @@ class SignalAttachment: NSObject { if dataUTI == SignalAttachment.kUnknownTestAttachmentUTI { return OWSMimeTypeUnknownForTests } - let mimeType = UTTypeCopyPreferredTagWithClass(dataUTI as CFString, kUTTagClassMIMEType) - guard mimeType != nil else { + guard let mimeType = UTTypeCopyPreferredTagWithClass(dataUTI as CFString, kUTTagClassMIMEType) else { return nil } - return mimeType?.takeRetainedValue() as? String + return mimeType.takeRetainedValue() as String + } + + // Use the filename if known. If not, e.g. if the attachment was copy/pasted, we'll generate a filename + // like: "signal-2017-04-24-095918.zip" + var filenameOrDefault: String { + if let filename = filename { + return filename + } else { + let kDefaultAttachmentName = "signal" + + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "YYYY-MM-dd-HHmmss" + let dateString = dateFormatter.string(from: Date()) + + let withoutExtension = "\(kDefaultAttachmentName)-\(dateString)" + if let fileExtension = self.fileExtension { + return "\(withoutExtension).\(fileExtension)" + } + + return withoutExtension + } } // Returns the file extension for this attachment or nil if no file extension diff --git a/Signal/src/util/ThreadUtil.m b/Signal/src/util/ThreadUtil.m index 2eca11f87..c2a5de5b4 100644 --- a/Signal/src/util/ThreadUtil.m +++ b/Signal/src/util/ThreadUtil.m @@ -64,7 +64,7 @@ NS_ASSUME_NONNULL_BEGIN expiresInSeconds:(configuration.isEnabled ? configuration.durationSeconds : 0)]; [messageSender sendAttachmentData:attachment.data contentType:attachment.mimeType - filename:attachment.filename + filename:attachment.filenameOrDefault inMessage:message success:^{ DDLogDebug(@"%@ Successfully sent message attachment.", self.tag);