From 316be226ad4d34ad966e7dae5130a188a5ba6b5a Mon Sep 17 00:00:00 2001 From: Milen Pivchev Date: Mon, 8 Dec 2025 10:14:51 +0100 Subject: [PATCH 1/4] WIP Signed-off-by: Milen Pivchev --- .../en.lproj/Localizable.strings | 3 ++- .../NCViewerQuickLook/NCViewerQuickLook.swift | 24 +++++++++++-------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/iOSClient/Supporting Files/en.lproj/Localizable.strings b/iOSClient/Supporting Files/en.lproj/Localizable.strings index 4ff6731ffe..9cda06c44e 100644 --- a/iOSClient/Supporting Files/en.lproj/Localizable.strings +++ b/iOSClient/Supporting Files/en.lproj/Localizable.strings @@ -526,10 +526,11 @@ "_certificate_view_" = "Certificate Server"; "_certificate_pn_view_" = "Certificate Push Notification"; "_save_as_scan_" = "Save as scan"; +"_save_modified_changes_" = "Save modified changed?"; "_modify_" = "Modify"; "_overwrite_original_" = "Overwrite original"; "_save_as_copy_" = "Save as copy"; -"_discard_changes_" = "Close and discard changes"; +"_discard_changes_" = "Discard changes"; "_message_disable_overwrite_livephoto_" = "This image is a Live Photo, overwrite will not be possible."; "_discard_changes_info_" = "Your changes will be discarded."; "_delete_files_desc_" = "Delete files to free up space"; diff --git a/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift b/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift index 0ce7876fff..7711b0c32a 100644 --- a/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift +++ b/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift @@ -107,12 +107,10 @@ private var hasChangesQuickLook: Bool = false }) } - @objc private func dismissView(_ sender: Any?) { - guard isEditingEnabled, hasChangesQuickLook, let metadata = metadata else { - dismiss(animated: true) - return - } - let alertController = UIAlertController(title: NSLocalizedString("_save_", comment: ""), message: nil, preferredStyle: .alert) + private func showSaveAlert() { + guard let metadata = metadata else { return } + + let alertController = UIAlertController(title: NSLocalizedString("_save_modified_changes_", comment: ""), message: nil, preferredStyle: .alert) var message: String? if metadata.isLivePhoto { @@ -141,12 +139,20 @@ private var hasChangesQuickLook: Bool = false }) if metadata.isImage { - present(alertController, animated: true) + parentVC?.present(alertController, animated: true) } else { parentVC?.present(alertController, animated: true) } } + @objc private func dismissView(_ sender: Any?) { + dismiss(animated: true) { + if hasChangesQuickLook { + self.showSaveAlert() + } + } + } + @objc private func crop(_ sender: Any?) { guard let image = UIImage(contentsOfFile: url.path) else { return } var toolbarConfig = CropToolbarConfig() @@ -242,9 +248,7 @@ extension NCViewerQuickLook: QLPreviewControllerDataSource, QLPreviewControllerD } func previewController(_ controller: QLPreviewController, didSaveEditedCopyOf previewItem: QLPreviewItem, at modifiedContentsURL: URL) { - // easier to handle that way than to use `.updateContents` - // needs to be moved otherwise it will only be called once! - guard utilityFileSystem.moveFile(atPath: modifiedContentsURL.path, toPath: url.path) else { return } + guard utilityFileSystem.copyFile(atPath: modifiedContentsURL.path, toPath: url.path) else { return } hasChangesQuickLook = true } } From ef5a399b47ab22a829c8b956c35b1001c2e6640e Mon Sep 17 00:00:00 2001 From: Milen Pivchev Date: Mon, 8 Dec 2025 10:22:49 +0100 Subject: [PATCH 2/4] Refactor Signed-off-by: Milen Pivchev --- .../NCViewerQuickLook/NCViewerQuickLook.swift | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift b/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift index 7711b0c32a..32ac8c88dd 100644 --- a/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift +++ b/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift @@ -12,12 +12,12 @@ public protocol NCViewerQuickLookDelegate: AnyObject { func dismissQuickLook(fileNameSource: String, hasChangesQuickLook: Bool) } -// optional func +/// Optional implementation public extension NCViewerQuickLookDelegate { func dismissQuickLook(fileNameSource: String, hasChangesQuickLook: Bool) {} } -// if the document has any changes +/// Flag indicating If the document has any changes private var hasChangesQuickLook: Bool = false @objc class NCViewerQuickLook: QLPreviewController { @@ -27,7 +27,7 @@ private var hasChangesQuickLook: Bool = false private var isEditingEnabled: Bool private var metadata: tableMetadata? private var timer: Timer? - // used to display the save alert + /// Used to display the save alert private var parentVC: UIViewController? private let utilityFileSystem = NCUtilityFileSystem() private let database = NCManageDatabase.shared @@ -199,7 +199,7 @@ extension NCViewerQuickLook: QLPreviewControllerDataSource, QLPreviewControllerD } func previewController(_ controller: QLPreviewController, editingModeFor previewItem: QLPreviewItem) -> QLPreviewItemEditingMode { - return isEditingEnabled ? .createCopy : .disabled + return isEditingEnabled ? .createCopy : .disabled // File is in private storage, so .updateContents is not possible and will still act as .createCopy. } fileprivate func saveModifiedFile(override: Bool) { @@ -218,10 +218,7 @@ extension NCViewerQuickLook: QLPreviewControllerDataSource, QLPreviewControllerD } Task { @MainActor in - let fileNamePath = utilityFileSystem.getDirectoryProviderStorageOcId(ocId, - fileName: metadata.fileNameView, - userId: metadata.userId, - urlBase: metadata.urlBase) + let fileNamePath = utilityFileSystem.getDirectoryProviderStorageOcId(ocId, fileName: metadata.fileNameView, userId: metadata.userId, urlBase: metadata.urlBase) guard utilityFileSystem.copyFile(atPath: url.path, toPath: fileNamePath) else { return } let metadataForUpload = await NCManageDatabaseCreateMetadata().createMetadataAsync( From 00f2cd75acf24e0d21f23759a7f5e9b5565158bb Mon Sep 17 00:00:00 2001 From: Milen Pivchev Date: Mon, 8 Dec 2025 10:24:15 +0100 Subject: [PATCH 3/4] Refactor Signed-off-by: Milen Pivchev --- iOSClient/Supporting Files/en.lproj/Localizable.strings | 2 +- iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/iOSClient/Supporting Files/en.lproj/Localizable.strings b/iOSClient/Supporting Files/en.lproj/Localizable.strings index 9cda06c44e..3541c53785 100644 --- a/iOSClient/Supporting Files/en.lproj/Localizable.strings +++ b/iOSClient/Supporting Files/en.lproj/Localizable.strings @@ -526,7 +526,7 @@ "_certificate_view_" = "Certificate Server"; "_certificate_pn_view_" = "Certificate Push Notification"; "_save_as_scan_" = "Save as scan"; -"_save_modified_changes_" = "Save modified changed?"; +"_save_changes_" = "Save changes?"; "_modify_" = "Modify"; "_overwrite_original_" = "Overwrite original"; "_save_as_copy_" = "Save as copy"; diff --git a/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift b/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift index 32ac8c88dd..7882c29c21 100644 --- a/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift +++ b/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift @@ -110,7 +110,7 @@ private var hasChangesQuickLook: Bool = false private func showSaveAlert() { guard let metadata = metadata else { return } - let alertController = UIAlertController(title: NSLocalizedString("_save_modified_changes_", comment: ""), message: nil, preferredStyle: .alert) + let alertController = UIAlertController(title: NSLocalizedString("_save_changes_", comment: ""), message: nil, preferredStyle: .alert) var message: String? if metadata.isLivePhoto { From 668078cf7fab1992b72d930ea6166d22af86b1da Mon Sep 17 00:00:00 2001 From: Milen Pivchev Date: Mon, 8 Dec 2025 10:25:54 +0100 Subject: [PATCH 4/4] Refactor Signed-off-by: Milen Pivchev --- iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift b/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift index 7882c29c21..3f4eaea468 100644 --- a/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift +++ b/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift @@ -138,11 +138,7 @@ private var hasChangesQuickLook: Bool = false self.dismiss(animated: true) }) - if metadata.isImage { - parentVC?.present(alertController, animated: true) - } else { - parentVC?.present(alertController, animated: true) - } + parentVC?.present(alertController, animated: true) } @objc private func dismissView(_ sender: Any?) {