Quellcode durchsuchen

【综合】保存带水印,兼容标签关闭和窗口关闭

tangchao vor 1 Jahr
Ursprung
Commit
69b0323b81

+ 16 - 0
PDF Office/PDF Master.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -196,5 +196,21 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "A07651B9-1A35-4F80-9925-3A1CC4B0DF07"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/ChromiumTabs/KMBrowser.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "224"
+            endingLineNumber = "224"
+            landmarkName = "saveSuccess(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 114 - 84
PDF Office/PDF Master/Class/Document/KMMainDocument.swift

@@ -27,8 +27,11 @@ typealias KMMainDocumentCloudUploadHanddler = (@escaping(Bool, String)->()) -> (
     }
     
     override func save(to url: URL, ofType typeName: String, for saveOperation: NSDocument.SaveOperationType, delegate: Any?, didSave didSaveSelector: Selector?, contextInfo: UnsafeMutableRawPointer?) {
-        self._saveToURL = url
-        super.save(to: url, ofType: typeName, for: saveOperation, delegate: delegate, didSave: didSaveSelector, contextInfo: contextInfo)
+        self._km_saveForWatermark { [unowned self] needSave in
+            if (needSave) {
+                self._km_save(to: url, ofType: typeName, for: saveOperation, delegate: delegate, didSave: didSaveSelector, contextInfo: contextInfo)
+            }
+        }
     }
     
     override func makeWindowControllers() {
@@ -141,46 +144,7 @@ typealias KMMainDocumentCloudUploadHanddler = (@escaping(Bool, String)->()) -> (
     }
     
     override func write(to url: URL, ofType typeName: String, for saveOperation: NSDocument.SaveOperationType, originalContentsURL absoluteOriginalContentsURL: URL?) throws {
-        var success = true
-        if !self.isHome {
-            if mainViewController != nil {
-                if mainViewController?.document != nil {
-                    self.mainViewController?.commitEditingIfNeed()
-                    
-//                    if mainViewController!.document!.isEncrypted {
-//                        success = mainViewController!.document!.write(to: url)
-//                    } else {
-                        if (mainViewController!.needSave) {
-                            if let options = self.mainViewController?.secureOptions, !options.isEmpty {
-                                success = self.mainViewController!.document!.write(to: url, withOptions: options)
-                            } else if let flag = self.mainViewController?.removeSecureFlag, flag {
-                                success = self.mainViewController!.document!.writeDecrypt(to: url)
-                            } else {
-                                success = mainViewController!.document!.write(to: url)
-                            }
-                        } else {
-                            success = mainViewController!.document!.write(to: url)
-                        }
-//                    }
-                    self.mainViewController?.needSave = false
-                    self.mainViewController?.clearSecureOptions()
-                    self.mainViewController?.clearRemoveSecureFlag()
-                }
-            }
-        } else {
-            success = false
-        }
-        
-        if (success && self._saveAsing) {
-            if let tabView = self.browser?.windowController?.tabStripController?.activeTabView() as? CTTabView {
-                tabView.controller()?.title = url.lastPathComponent
-            }
-            self._saveAsing = false
-        }
-        
-        if success && isNewCreated && NSDocument.SaveOperationType.saveAsOperation == saveOperation {
-            isNewCreated = false
-        }
+        try self._km_write(to: url, ofType: typeName, for: saveOperation, originalContentsURL: absoluteOriginalContentsURL)
     }
     
     override func canClose(withDelegate delegate: Any, shouldClose shouldCloseSelector: Selector?, contextInfo: UnsafeMutableRawPointer?) {
@@ -210,49 +174,10 @@ typealias KMMainDocumentCloudUploadHanddler = (@escaping(Bool, String)->()) -> (
     }
     
     override func save(_ sender: Any?) {
-        Task { @MainActor in
-            if await (KMLightMemberManager.manager.canPayFunction() == false) {
-                let _ = KMSubscribeWaterMarkWindowController.show(window: NSApp.mainWindow!) { isSubscribeSuccess, isWaterMarkExport, isClose in
-                    if (isClose) {
-                        return
-                    }
-                    
-                    if (isSubscribeSuccess) {
-                        super.save(sender)
-                        return
-                    }
-                    
-                    if (isWaterMarkExport) {
-                        guard let _document = self.mainViewController?.document else {
-                            return
-                        }
-                        // 提交文本编辑的内容
-                        self.mainViewController?.commitEditingIfNeed()
-                        DispatchQueue.main.async {
-                            NSPanel.savePanel(NSApp.mainWindow!, true, panel:{ panel in
-                                panel.nameFieldStringValue = _document.documentURL.lastPathComponent
-                            }) { response, url, isOpen in
-                                if (response == .cancel) {
-                                    return
-                                }
-                                guard let _url = KMTools.saveDocumentForWatermark(document: _document, to: url!, secureOptions: self.mainViewController?.secureOptions, removePWD: self.mainViewController!.removeSecureFlag) else {
-                                    return
-                                }
-                                
-                                if (isOpen) {
-                                    NSDocumentController.shared.km_safe_openDocument(withContentsOf: _url, display: true) { _, _, _ in
-                                        
-                                    }
-                                } else {
-                                    NSWorkspace.shared.activateFileViewerSelecting([_url])
-                                }
-                            }
-                        }
-                    }
-                }
-                return
+        self._km_saveForWatermark { [unowned self] needSave in
+            if (needSave) {
+                self._km_save(sender)
             }
-            super.save(sender)
         }
     }
     
@@ -451,6 +376,111 @@ typealias KMMainDocumentCloudUploadHanddler = (@escaping(Bool, String)->()) -> (
             }
         }
     }
+    
+    private func _km_write(to url: URL, ofType typeName: String, for saveOperation: NSDocument.SaveOperationType, originalContentsURL absoluteOriginalContentsURL: URL?) throws {
+        var success = true
+        if !self.isHome {
+            if mainViewController != nil {
+                if mainViewController?.document != nil {
+                    self.mainViewController?.commitEditingIfNeed()
+                    
+//                    if mainViewController!.document!.isEncrypted {
+//                        success = mainViewController!.document!.write(to: url)
+//                    } else {
+                        if (mainViewController!.needSave) {
+                            if let options = self.mainViewController?.secureOptions, !options.isEmpty {
+                                success = self.mainViewController!.document!.write(to: url, withOptions: options)
+                            } else if let flag = self.mainViewController?.removeSecureFlag, flag {
+                                success = self.mainViewController!.document!.writeDecrypt(to: url)
+                            } else {
+                                success = mainViewController!.document!.write(to: url)
+                            }
+                        } else {
+                            success = mainViewController!.document!.write(to: url)
+                        }
+//                    }
+                    self.mainViewController?.needSave = false
+                    self.mainViewController?.clearSecureOptions()
+                    self.mainViewController?.clearRemoveSecureFlag()
+                }
+            }
+        } else {
+            success = false
+        }
+        
+        if (success && self._saveAsing) {
+            if let tabView = self.browser?.windowController?.tabStripController?.activeTabView() as? CTTabView {
+                tabView.controller()?.title = url.lastPathComponent
+            }
+            self._saveAsing = false
+        }
+        
+        if success && isNewCreated && NSDocument.SaveOperationType.saveAsOperation == saveOperation {
+            isNewCreated = false
+        }
+    }
+    
+    private func _km_saveForWatermark(callback:@escaping (_ needSave: Bool)->Void) {
+        Task { @MainActor in
+            if await (KMLightMemberManager.manager.canPayFunction() == false) {
+                let _ = KMSubscribeWaterMarkWindowController.show(window: NSApp.mainWindow!) { isSubscribeSuccess, isWaterMarkExport, isClose in
+                    if (isClose) {
+                        callback(false)
+                        return
+                    }
+                    
+                    if (isSubscribeSuccess) {
+                        callback(true)
+                        return
+                    }
+                    
+                    if (isWaterMarkExport) {
+                        guard let _document = self.mainViewController?.document else {
+                            callback(false)
+                            return
+                        }
+                        // 提交文本编辑的内容
+                        self.mainViewController?.commitEditingIfNeed()
+                        DispatchQueue.main.async {
+                            NSPanel.savePanel(NSApp.mainWindow!, true, panel:{ panel in
+                                panel.nameFieldStringValue = _document.documentURL.lastPathComponent
+                            }) { response, url, isOpen in
+                                if (response == .cancel) {
+                                    callback(false)
+                                    return
+                                }
+                                guard let _url = KMTools.saveDocumentForWatermark(document: _document, to: url!, secureOptions: self.mainViewController?.secureOptions, removePWD: self.mainViewController!.removeSecureFlag) else {
+                                    callback(false)
+                                    return
+                                }
+                                callback(false)
+                                if (isOpen) {
+                                    NSDocumentController.shared.km_safe_openDocument(withContentsOf: _url, display: true) { _, _, _ in
+                                        
+                                    }
+                                } else {
+                                    NSWorkspace.shared.activateFileViewerSelecting([_url])
+                                }
+                            }
+                        }
+                        return
+                    }
+                    callback(true)
+                }
+                return
+            }
+            callback(true)
+        }
+    }
+    
+    private func _km_save(_ sender: Any?) {
+        super.save(sender)
+    }
+    
+    private func _km_save(to url: URL, ofType typeName: String, for saveOperation: NSDocument.SaveOperationType, delegate: Any?, didSave didSaveSelector: Selector?, contextInfo: UnsafeMutableRawPointer?) {
+        self._saveToURL = url
+        super.save(to: url, ofType: typeName, for: saveOperation, delegate: delegate, didSave: didSaveSelector, contextInfo: contextInfo)
+    }
 }
 
 extension NSDocument {