From 82948431b60c9172018431aca2e311e044852866 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Wed, 12 Feb 2025 15:24:30 +0100 Subject: [PATCH] preserve filenames on sharing --- deltachat-ios/Helper/FileHelper.swift | 13 +++++++++++++ deltachat-ios/Helper/Utils.swift | 17 +++++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/deltachat-ios/Helper/FileHelper.swift b/deltachat-ios/Helper/FileHelper.swift index 3ac918af0..08659f1f4 100644 --- a/deltachat-ios/Helper/FileHelper.swift +++ b/deltachat-ios/Helper/FileHelper.swift @@ -87,4 +87,17 @@ public class FileHelper { print("err: \(error.localizedDescription)") } } + + static func copyIfPossible(src: URL, dest: URL) -> URL { + do { + if FileManager.default.fileExists(atPath: dest.path) { + try FileManager.default.removeItem(at: dest) + } + try FileManager.default.copyItem(at: src, to: dest) + return dest + } catch { + logger.error("cannot copy \(src) to \(dest)") + return src + } + } } diff --git a/deltachat-ios/Helper/Utils.swift b/deltachat-ios/Helper/Utils.swift index 852468bc7..057d8d8e2 100644 --- a/deltachat-ios/Helper/Utils.swift +++ b/deltachat-ios/Helper/Utils.swift @@ -94,17 +94,26 @@ struct Utils { } public static func share(message: DcMsg, parentViewController: UIViewController, sourceView: UIView? = nil, sourceItem: UIBarButtonItem? = nil) { - guard let fileURL = message.fileURL else { return } + guard let scrambledURL = message.fileURL else { return } + + let shareURL: URL + if let filename = message.filename { + let cleanURL = FileManager.default.temporaryDirectory.appendingPathComponent(filename) + shareURL = FileHelper.copyIfPossible(src: scrambledURL, dest: cleanURL) + } else { + shareURL = scrambledURL + } + let objectsToShare: [Any] if message.type == DC_MSG_WEBXDC { let dict = message.getWebxdcInfoDict() let previewImage = message.getWebxdcPreviewImage() - let previewText = dict["name"] as? String ?? fileURL.lastPathComponent + let previewText = dict["name"] as? String ?? shareURL.lastPathComponent objectsToShare = [WebxdcItemSource(title: previewText, previewImage: previewImage, - url: fileURL)] + url: shareURL)] } else { - objectsToShare = [fileURL] + objectsToShare = [shareURL] } let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)