Browse Source

【整体】登录免费用户,进行文本编辑后,关闭文档,有时候不会提示是否保存 & 有提示是否保存的时候,用户选择保存,应该在阅读界面就要显示付费权益弹窗(已修复)

tangchao 1 year ago
parent
commit
5962c2cdc8

+ 2 - 0
PDF Office/PDF Master/Class/ChromiumTabs/KMBrowser.swift

@@ -69,6 +69,7 @@ import Cocoa
                 currentDocument.runModalSavePanel(for: .saveAsOperation, delegate: self, didSave: #selector(saveSuccess(_:)), contextInfo: nil)
             } else {
                 if currentDocument.isDocumentEdited && isPrompt {
+                    currentDocument.watermarkSaveDelegate = self
                     currentDocument.canClose(withDelegate: self, shouldClose: #selector(document(_:shouldClose:contextInfo:)), contextInfo: nil)
                 } else if currentDocument.isDocumentEdited {
                     currentDocument.save(nil)
@@ -159,6 +160,7 @@ import Cocoa
                     if currentDocument.isKind(of: KMMainDocument.self) {
                         currentDocument.closedByUserGestureFlag = true
                     }
+                    currentDocument.watermarkSaveDelegate = self
                     currentDocument.canClose(withDelegate: self, shouldClose: #selector(document(_:shouldClose:contextInfo:)), contextInfo: nil)
                 } else if currentDocument.isDocumentEdited {
                     currentDocument.save(nil)

+ 46 - 11
PDF Office/PDF Master/Class/Document/KMMainDocument.swift

@@ -26,6 +26,8 @@ typealias KMMainDocumentCloudUploadHanddler = (@escaping(Bool, String)->()) -> (
         }
     }
     
+    weak var watermarkSaveDelegate: AnyObject?
+    
     override func save(to url: URL, ofType typeName: String, for saveOperation: NSDocument.SaveOperationType, delegate: Any?, didSave didSaveSelector: Selector?, contextInfo: UnsafeMutableRawPointer?) {
         if (self.isNewCreated) {
 //            if let data = self.mainViewController, !data.isPDFDocumentEdited && !data.needSave && !self.isDocumentEdited {
@@ -38,9 +40,42 @@ typealias KMMainDocumentCloudUploadHanddler = (@escaping(Bool, String)->()) -> (
             return
         }
         
-        self._km_saveForWatermark { [unowned self] needSave in
+        var openAccessoryView = self.watermarkSaveDelegate != nil
+        if (openAccessoryView) {
+            if let _browser = self.watermarkSaveDelegate as? KMBrowser, _browser.isCloseAllTabViewItem {
+                openAccessoryView = false
+            }
+        }
+        
+        self._km_saveForWatermark(openAccessoryView: openAccessoryView) { [unowned self] needSave, params in
             if (needSave) {
                 self._km_save(to: url, ofType: typeName, for: saveOperation, delegate: delegate, didSave: didSaveSelector, contextInfo: contextInfo)
+            } else { // 水印保存
+                if (self.watermarkSaveDelegate == nil) {
+                    if let data = params.first as? KMResult, data == .cancel {
+                        if let shouldClose = params.last as? Bool, shouldClose {
+                            DispatchQueue.main.async {
+                                self.mainViewController?.browserWindowController?.browser.windowDidBeginToClose()
+                            }
+                        }
+                    } else {
+                        DispatchQueue.main.async {
+                            self.mainViewController?.browserWindowController?.browser.windowDidBeginToClose()
+                        }
+                    }
+                    return
+                }
+                if let data = params.first as? KMResult, data == .cancel {
+                    if var shouldClose = params.last as? Bool {
+                        if let _browser = self.watermarkSaveDelegate as? KMBrowser, _browser.isCloseAllTabViewItem {
+                            shouldClose = true
+                        }
+                        (self.watermarkSaveDelegate as? KMBrowser)?.document(self, shouldClose: shouldClose, contextInfo: nil)
+                    }
+                } else {
+                    (self.watermarkSaveDelegate as? KMBrowser)?.document(self, shouldClose: true, contextInfo: nil)
+                }
+                self.watermarkSaveDelegate = nil
             }
         }
     }
@@ -183,7 +218,7 @@ typealias KMMainDocumentCloudUploadHanddler = (@escaping(Bool, String)->()) -> (
             self._km_saveAs(sender)
             return
         }
-        self._km_saveForWatermark { [unowned self] needSave in
+        self._km_saveForWatermark { [unowned self] needSave, _ in
             if (needSave) {
                 self._km_saveAs(sender)
             }
@@ -202,7 +237,7 @@ typealias KMMainDocumentCloudUploadHanddler = (@escaping(Bool, String)->()) -> (
             self._km_runModalSavePanel(for: saveOperation, delegate: delegate, didSave: didSaveSelector, contextInfo: contextInfo)
             return
         }
-        self._km_saveForWatermark { [unowned self] needSave in
+        self._km_saveForWatermark { [unowned self] needSave, _ in
             if (needSave) {
                 self._km_runModalSavePanel(for: saveOperation, delegate: delegate, didSave: didSaveSelector, contextInfo: contextInfo)
             }
@@ -214,7 +249,7 @@ typealias KMMainDocumentCloudUploadHanddler = (@escaping(Bool, String)->()) -> (
             self._km_save(sender)
             return
         }
-        self._km_saveForWatermark { [unowned self] needSave in
+        self._km_saveForWatermark { [unowned self] needSave, _ in
             if (needSave) {
                 self._km_save(sender)
             }
@@ -466,12 +501,12 @@ typealias KMMainDocumentCloudUploadHanddler = (@escaping(Bool, String)->()) -> (
         }
     }
     
-    private func _km_saveForWatermark(callback:@escaping (_ needSave: Bool)->Void) {
+    private func _km_saveForWatermark(openAccessoryView: Bool = true, callback:@escaping (_ needSave: Bool, _ param: Any...)->Void) {
         Task { @MainActor in
             if await (KMLightMemberManager.manager.canPayFunction() == false) {
                 let _ = KMSubscribeWaterMarkWindowController.show(window: NSApp.mainWindow!) { isSubscribeSuccess, isWaterMarkExport, isClose in
                     if (isClose) {
-                        callback(false)
+                        callback(false, KMResult.cancel, false)
                         return
                     }
                     
@@ -482,13 +517,13 @@ typealias KMMainDocumentCloudUploadHanddler = (@escaping(Bool, String)->()) -> (
                     
                     if (isWaterMarkExport) {
                         guard let _document = self.mainViewController?.document else {
-                            callback(false)
+                            callback(false, KMResult.failure)
                             return
                         }
                         // 提交文本编辑的内容
                         self.mainViewController?.commitEditingIfNeed()
                         DispatchQueue.main.async {
-                            NSPanel.savePanel(NSApp.mainWindow!, true, panel:{ panel in
+                            NSPanel.savePanel(NSApp.mainWindow!, openAccessoryView, panel:{ panel in
                                 if (!self.isNewCreated) {
                                     panel.directoryURL = _document.documentURL.deletingLastPathComponent()
                                 }
@@ -496,14 +531,14 @@ typealias KMMainDocumentCloudUploadHanddler = (@escaping(Bool, String)->()) -> (
                                 panel.nameFieldStringValue = _document.documentURL.lastPathComponent
                             }) { response, url, isOpen in
                                 if (response == .cancel) {
-                                    callback(false)
+                                    callback(false, KMResult.cancel, true)
                                     return
                                 }
                                 guard let _url = KMTools.saveWatermarkDocument(document: _document, to: url!, secureOptions: self.mainViewController?.secureOptions, removePWD: self.mainViewController!.removeSecureFlag) else {
-                                    callback(false)
+                                    callback(false, KMResult.failure)
                                     return
                                 }
-                                callback(false)
+                                callback(false, KMResult.success)
                                 if (isOpen) {
                                     NSDocumentController.shared.km_safe_openDocument(withContentsOf: _url, display: true) { _, _, _ in
                                         

+ 1 - 1
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController.swift

@@ -1187,7 +1187,7 @@ import Cocoa
             self.removeKeyEventMonitor()
         }
         keyEventMonitor = NSEvent.addLocalMonitorForEvents(matching: .keyDown) { [weak self] event in
-            print(event.keyCode)
+//            print(event.keyCode)
             if event.keyCode == 53 {
                 if self?.listView.toolMode == .editPDFToolMode {
                     if self != nil {