瀏覽代碼

【综合】AI功能权益弹窗UI调整

tangchao 1 年之前
父節點
當前提交
1e679c0297

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

@@ -276,211 +276,5 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "9FFFD3B2-65F1-4249-8F69-29142E952B6C"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "PDF Master/Class/Home/WindowController/KMAITranslationWindowController.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "399"
-            endingLineNumber = "399"
-            landmarkName = "aiTranslationAction(_:)"
-            landmarkType = "7">
-            <Locations>
-               <Location
-                  uuid = "9FFFD3B2-65F1-4249-8F69-29142E952B6C - 423ce689b0272a1b"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "(1) suspend resume partial function for closure #1 @Sendable () async -&gt; () in PDF_Master.KMAITranslationWindowController.aiTranslationAction(__C.NSButton) -&gt; ()"
-                  moduleName = "PDF Master"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/work/tangchao/git/PDFOffice/PDF%20Office/PDF%20Master/Class/Home/WindowController/KMAITranslationWindowController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "399"
-                  endingLineNumber = "399"
-                  offsetFromSymbolStart = "95">
-               </Location>
-               <Location
-                  uuid = "9FFFD3B2-65F1-4249-8F69-29142E952B6C - 1c1c703c37da5484"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "(2) await resume partial function for closure #1 @Sendable () async -&gt; () in PDF_Master.KMAITranslationWindowController.aiTranslationAction(__C.NSButton) -&gt; ()"
-                  moduleName = "PDF Master"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/work/tangchao/git/PDFOffice/PDF%20Office/PDF%20Master/Class/Home/WindowController/KMAITranslationWindowController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "399"
-                  endingLineNumber = "399"
-                  offsetFromSymbolStart = "35">
-               </Location>
-               <Location
-                  uuid = "9FFFD3B2-65F1-4249-8F69-29142E952B6C - cb1992ff82d37611"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "(3) suspend resume partial function for closure #1 @Sendable () async -&gt; () in PDF_Master.KMAITranslationWindowController.aiTranslationAction(__C.NSButton) -&gt; ()"
-                  moduleName = "PDF Master"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/work/tangchao/git/PDFOffice/PDF%20Office/PDF%20Master/Class/Home/WindowController/KMAITranslationWindowController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "399"
-                  endingLineNumber = "399"
-                  offsetFromSymbolStart = "165">
-               </Location>
-            </Locations>
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "95D7123B-304A-4E3C-A30A-D0E5AC9A8816"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "PDF Master/Class/Home/WindowController/KMAITranslationWindowController.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "457"
-            endingLineNumber = "457"
-            landmarkName = "copyAction(_:)"
-            landmarkType = "7">
-            <Locations>
-               <Location
-                  uuid = "95D7123B-304A-4E3C-A30A-D0E5AC9A8816 - 375a3c23834444df"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Master.KMAITranslationWindowController.copyAction(__C.NSButton) -&gt; ()"
-                  moduleName = "PDF Master"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/work/tangchao/git/PDFOffice/PDF%20Office/PDF%20Master/Class/Home/WindowController/KMAITranslationWindowController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "457"
-                  endingLineNumber = "457"
-                  offsetFromSymbolStart = "344">
-               </Location>
-               <Location
-                  uuid = "95D7123B-304A-4E3C-A30A-D0E5AC9A8816 - 7509e0ef10557f4c"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "closure #1 @Sendable () async -&gt; () in PDF_Master.KMAITranslationWindowController.copyAction(__C.NSButton) -&gt; ()"
-                  moduleName = "PDF Master"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/work/tangchao/git/PDFOffice/PDF%20Office/PDF%20Master/Class/Home/WindowController/KMAITranslationWindowController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "457"
-                  endingLineNumber = "457"
-                  offsetFromSymbolStart = "0">
-               </Location>
-            </Locations>
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "A9AAC808-444E-47E8-B3E8-45D4B788FEA1"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "PDF Master/Class/Home/WindowController/KMAITranslationWindowController.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "393"
-            endingLineNumber = "393"
-            landmarkName = "aiTranslationAction(_:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "090117E4-7CB5-4B68-8189-F802C8572626"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "PDF Master/Class/Home/WindowController/KMAITranslationConfirmWindowController.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "140"
-            endingLineNumber = "140"
-            landmarkName = "translateAction(_:)"
-            landmarkType = "7">
-            <Locations>
-               <Location
-                  uuid = "090117E4-7CB5-4B68-8189-F802C8572626 - 4da2dcba87d1e166"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "(1) suspend resume partial function for closure #1 @Sendable () async -&gt; () in PDF_Master.KMAITranslationConfirmWindowController.translateAction(__C.NSButton) -&gt; ()"
-                  moduleName = "PDF Master"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/work/tangchao/git/PDFOffice/PDF%20Office/PDF%20Master/Class/Home/WindowController/KMAITranslationConfirmWindowController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "140"
-                  endingLineNumber = "140"
-                  offsetFromSymbolStart = "106">
-               </Location>
-               <Location
-                  uuid = "090117E4-7CB5-4B68-8189-F802C8572626 - c893ec5ae97157ed"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "(2) await resume partial function for closure #1 @Sendable () async -&gt; () in PDF_Master.KMAITranslationConfirmWindowController.translateAction(__C.NSButton) -&gt; ()"
-                  moduleName = "PDF Master"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/work/tangchao/git/PDFOffice/PDF%20Office/PDF%20Master/Class/Home/WindowController/KMAITranslationConfirmWindowController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "140"
-                  endingLineNumber = "140"
-                  offsetFromSymbolStart = "35">
-               </Location>
-               <Location
-                  uuid = "090117E4-7CB5-4B68-8189-F802C8572626 - fecb9f51837f6d40"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "(3) suspend resume partial function for closure #1 @Sendable () async -&gt; () in PDF_Master.KMAITranslationConfirmWindowController.translateAction(__C.NSButton) -&gt; ()"
-                  moduleName = "PDF Master"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/work/tangchao/git/PDFOffice/PDF%20Office/PDF%20Master/Class/Home/WindowController/KMAITranslationConfirmWindowController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "140"
-                  endingLineNumber = "140"
-                  offsetFromSymbolStart = "251">
-               </Location>
-            </Locations>
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "FA8A121A-9075-418F-BCB7-3EDF0746F041"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "PDF Master/Class/KMLightMember/Controller/ComparativeTable/KMComparativeTableViewController.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "120"
-            endingLineNumber = "120"
-            landmarkName = "aiFunctionShow(window:_:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 62 - 44
PDF Office/PDF Master/Class/Home/ViewController/KMAIRewritingVC.swift

@@ -342,52 +342,61 @@ class KMAIRewritingVC: NSViewController {
 //            }
             Task { @MainActor in
                 if await (KMLightMemberManager.manager.canPayFunction() == false) {
-//                    let _ = KMComparativeTableViewController.aiFunctionShow(window: self.view.window!)
-                    let _ = KMSubscribeWaterMarkWindowController.show(window: self.view.window!) { isSub, _, isClose in
-                        
+                    let _ = KMSubscribeWaterMarkWindowController.show(window: self.view.window!, isAI: true) { isSub, _, isClose in
+                        if (isClose) {
+                            return
+                        }
+                        if (isSub) {
+                            self._aiRewritingAction(sender)
+                            return
+                        }
                     }
                     return
                 }
                 
-                self.errorView.isHidden = true
-                DispatchQueue.main.async {
-                    self.showProgressWindow()
-                }
+                self._aiRewritingAction(sender)
+            }
+        }
+    }
+    
+    private func _aiRewritingAction(_ sender: NSButton) {
+        self.errorView.isHidden = true
+        DispatchQueue.main.async {
+            self.showProgressWindow()
+        }
 
-                var majorVersion = "1.0.1"
+        var majorVersion = "1.0.1"
 //                if let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
 //                    majorVersion = appVersion
 //                }
-                KMRequestServerManager.manager.aiRewriting(content: self.rewritingTextField.stringValue, version: majorVersion as! String, state: self.state) { [unowned self] success, result in
-                    self.hiddenProgressWindow()
+        KMRequestServerManager.manager.aiRewriting(content: self.rewritingTextField.stringValue, version: majorVersion as! String, state: self.state) { [unowned self] success, result in
+            self.hiddenProgressWindow()
 
-                    if success {
-                        let result: NSDictionary = result!.result
-                        self.uiState = .CanCopy
-                        
-                        self.resultTextView.string = ""
-                        self.resultTextView.string =  result["content"] as? String ?? ""
-                        if self.state == .AIRewriting {
-                            self.aiRewritingResultStr = result["content"] as? String ?? ""
-                            self.aiRewritingErrorStr = ""
-                        } else if self.state == .AIErrorCorrection {
-                            self.aiErrorCorrectionResultStr = result["content"] as? String ?? ""
-                            self.aiErrorCorrectionErrorStr = ""
-                        }
-                    } else {
-                        let result: String = result!.message
-                        
-                        DispatchQueue.main.async {
-                            self.resultTextView.string = ""
-                            self.errorLabel.stringValue = result
-                            if self.state == .AIRewriting {
-                                self.aiRewritingErrorStr = result
-                            } else if self.state == .AIErrorCorrection {
-                                self.aiErrorCorrectionErrorStr = result
-                            }
-                            self.uiState = .Error
-                        }
+            if success {
+                let result: NSDictionary = result!.result
+                self.uiState = .CanCopy
+                
+                self.resultTextView.string = ""
+                self.resultTextView.string =  result["content"] as? String ?? ""
+                if self.state == .AIRewriting {
+                    self.aiRewritingResultStr = result["content"] as? String ?? ""
+                    self.aiRewritingErrorStr = ""
+                } else if self.state == .AIErrorCorrection {
+                    self.aiErrorCorrectionResultStr = result["content"] as? String ?? ""
+                    self.aiErrorCorrectionErrorStr = ""
+                }
+            } else {
+                let result: String = result!.message
+                
+                DispatchQueue.main.async {
+                    self.resultTextView.string = ""
+                    self.errorLabel.stringValue = result
+                    if self.state == .AIRewriting {
+                        self.aiRewritingErrorStr = result
+                    } else if self.state == .AIErrorCorrection {
+                        self.aiErrorCorrectionErrorStr = result
                     }
+                    self.uiState = .Error
                 }
             }
         }
@@ -402,20 +411,29 @@ class KMAIRewritingVC: NSViewController {
 //            }
             Task { @MainActor in
                 if await (KMLightMemberManager.manager.canPayFunction() == false) {
-//                    let _ = KMComparativeTableViewController.aiFunctionShow(window: self.view.window!)
-                    let _ = KMSubscribeWaterMarkWindowController.show(window: self.view.window!) { isSub, _, isClose in
-                        
+                    let _ = KMSubscribeWaterMarkWindowController.show(window: self.view.window!, isAI: true) { isSub, _, isClose in
+                        if (isClose) {
+                            return
+                        }
+                        if (isSub) {
+                            self._copyAction(sender)
+                            return
+                        }
                     }
                     return
                 }
-                let pasteboard = NSPasteboard.general
-                pasteboard.clearContents()
-                pasteboard.setString(self.resultTextView.string, forType: .string)
-                
-                self.uiState = .Copyed
+                self._copyAction(sender)
             }
         }
     }
+    
+    private func _copyAction(_ sender: NSButton) {
+        let pasteboard = NSPasteboard.general
+        pasteboard.clearContents()
+        pasteboard.setString(self.resultTextView.string, forType: .string)
+        
+        self.uiState = .Copyed
+    }
 }
 
 extension KMAIRewritingVC: NSTextFieldDelegate {

+ 76 - 67
PDF Office/PDF Master/Class/Home/ViewController/KMAITranslationVC.swift

@@ -115,75 +115,90 @@ class KMAITranslationVC: NSViewController {
 //                }
                 Task { @MainActor in
                     if await (KMLightMemberManager.manager.canPayFunction() == false) {
-//                        let _ = KMComparativeTableViewController.aiFunctionShow(window: self.view.window!)
                         let _ = KMSubscribeWaterMarkWindowController.show(window: self.view.window!, isAI: true) { isSub, _, isClose in
-                            
+                            if (isClose) {
+                                return
+                            }
+                            if (isSub) {
+                                self._selectFiles()
+                                return
+                            }
                         }
                         return
                     }
-                    
-                    self.errorView.isHidden = true
+                    self._selectFiles()
+                }
+            }
+        }
+        
+        self.errorView.isHidden = true
+        self.errorView.wantsLayer = true
+        self.errorView.layer?.backgroundColor = NSColor(hex: "##36383B").cgColor
+        self.errorView.layer?.cornerRadius = 4.0
+        self.errorLabel.textColor = NSColor(hex: "#FFFFFF")
+        self.errorLabel.font = NSFont.SFProTextRegular(14.0)
+    }
+    
+    private func _selectFiles() {
+        self.errorView.isHidden = true
 
-                    let openPanel = NSOpenPanel()
-                    openPanel.allowedFileTypes = ["pdf", "PDF", "docx", "doc"]
-                    openPanel.allowsMultipleSelection = false
-                    openPanel.beginSheetModal(for: self.view.window!) { result in
-                        if result == .OK {
-                            for url in openPanel.urls {
-                                let isExceedsLimit = self.isPDFPageCountExceedsLimit(filePath: url.path)
-                                if (url.pathExtension == "pdf") || url.pathExtension == "PDF" {
-                                    if !url.path.isPDFValid() {
-                                        let alert = NSAlert()
-                                        alert.alertStyle = .critical
-                                        alert.messageText = NSLocalizedString("An error occurred while opening this document. The file is damaged and could not be repaired.", comment: "")
-                                        alert.runModal()
-                                        return
-                                    }
-                                }
-                                if self.isFileGreaterThan10MB(atPath: url.path) {
-                                    self.errorView.isHidden = false
-                                    self.errorLabel.stringValue = NSLocalizedString("The uploaded file size cannot exceed 10MB", comment: "")
-                                } else if isExceedsLimit  {
-                                    self.errorView.isHidden = false
-                                    self.errorLabel.stringValue = NSLocalizedString("Documents cannot exceed 30 pages", comment: "")
-                                } else {
-                                    DispatchQueue.main.async {
-                                        self.showProgressWindow()
-                                        self.progressController?.maxValue = Double(100)
-                                    }
-                                    
-                                    timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timerTick), userInfo: nil, repeats: true)
-                                    
-                                    let infoDictionary = Bundle .main.infoDictionary!
-                                    let majorVersion = infoDictionary["CFBundleShortVersionString"]
+        let openPanel = NSOpenPanel()
+        openPanel.allowedFileTypes = ["pdf", "PDF", "docx", "doc"]
+        openPanel.allowsMultipleSelection = false
+        openPanel.beginSheetModal(for: self.view.window!) { result in
+            if result == .OK {
+                for url in openPanel.urls {
+                    let isExceedsLimit = self.isPDFPageCountExceedsLimit(filePath: url.path)
+                    if (url.pathExtension == "pdf") || url.pathExtension == "PDF" {
+                        if !url.path.isPDFValid() {
+                            let alert = NSAlert()
+                            alert.alertStyle = .critical
+                            alert.messageText = NSLocalizedString("An error occurred while opening this document. The file is damaged and could not be repaired.", comment: "")
+                            alert.runModal()
+                            return
+                        }
+                    }
+                    if self.isFileGreaterThan10MB(atPath: url.path) {
+                        self.errorView.isHidden = false
+                        self.errorLabel.stringValue = NSLocalizedString("The uploaded file size cannot exceed 10MB", comment: "")
+                    } else if isExceedsLimit  {
+                        self.errorView.isHidden = false
+                        self.errorLabel.stringValue = NSLocalizedString("Documents cannot exceed 30 pages", comment: "")
+                    } else {
+                        DispatchQueue.main.async {
+                            self.showProgressWindow()
+                            self.progressController?.maxValue = Double(100)
+                        }
+                        
+                        self.timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.timerTick), userInfo: nil, repeats: true)
+                        
+                        let infoDictionary = Bundle .main.infoDictionary!
+                        let majorVersion = infoDictionary["CFBundleShortVersionString"]
 
-                                    let languages = [self.automaticLabel.stringValue, self.languageLabel.stringValue]
-                                    UserDefaults.standard.set(languages, forKey: "KMAITranslationLanguageArrayKey")
-                                    UserDefaults.standard.synchronize()
-                                    self.fromStr = self.languageAbbreviation(self.automaticLabel.stringValue)
-                                    self.toStr = self.languageAbbreviation(self.languageLabel.stringValue)
+                        let languages = [self.automaticLabel.stringValue, self.languageLabel.stringValue]
+                        UserDefaults.standard.set(languages, forKey: "KMAITranslationLanguageArrayKey")
+                        UserDefaults.standard.synchronize()
+                        self.fromStr = self.languageAbbreviation(self.automaticLabel.stringValue)
+                        self.toStr = self.languageAbbreviation(self.languageLabel.stringValue)
 
-                                    KMRequestServerManager.manager.aiTranslationFileUpload(file: url.path, version: majorVersion as! String) { [unowned self] success, result in
-    //                                    self.hiddenProgressWindow()
-                                        if success {
-                                            let result: NSDictionary = result!.result
+                        KMRequestServerManager.manager.aiTranslationFileUpload(file: url.path, version: majorVersion as! String) { [unowned self] success, result in
+//                                    self.hiddenProgressWindow()
+                            if success {
+                                let result: NSDictionary = result!.result
 
-                                            let fileKey = result["fileKey"]
-                                            let fileName = result["fileName"]
-                                            let pageCount = result["pageCount"]
-                                            if fileKey != nil {
-                                                self.fileTranslateHandle(fileKey as! String)
-                                            }
-                                        } else {
-                                            let result: String = result!.message
+                                let fileKey = result["fileKey"]
+                                let fileName = result["fileName"]
+                                let pageCount = result["pageCount"]
+                                if fileKey != nil {
+                                    self.fileTranslateHandle(fileKey as! String)
+                                }
+                            } else {
+                                let result: String = result!.message
 
-                                            DispatchQueue.main.async {
-                                                self.hiddenProgressWindow()
-                                                self.errorView.isHidden = false
-                                                self.errorLabel.stringValue = result
-                                            }
-                                        }
-                                    }
+                                DispatchQueue.main.async {
+                                    self.hiddenProgressWindow()
+                                    self.errorView.isHidden = false
+                                    self.errorLabel.stringValue = result
                                 }
                             }
                         }
@@ -191,13 +206,7 @@ class KMAITranslationVC: NSViewController {
                 }
             }
         }
-        
-        self.errorView.isHidden = true
-        self.errorView.wantsLayer = true
-        self.errorView.layer?.backgroundColor = NSColor(hex: "##36383B").cgColor
-        self.errorView.layer?.cornerRadius = 4.0
-        self.errorLabel.textColor = NSColor(hex: "#FFFFFF")
-        self.errorLabel.font = NSFont.SFProTextRegular(14.0)
+
     }
     
     func initLocalization() -> Void {

+ 64 - 52
PDF Office/PDF Master/Class/Home/WindowController/KMAITranslationConfirmWindowController.swift

@@ -138,64 +138,76 @@ class KMAITranslationConfirmWindowController: NSWindowController {
 //        }
         Task { @MainActor in
             if await (KMLightMemberManager.manager.canPayFunction() == false) {
-                let _ = KMComparativeTableViewController.aiFunctionShow(window: self.window!)
+                let _ = KMSubscribeWaterMarkWindowController.show(window: self.window!, isAI: true) { isSubscribeSuccess, _, isClose in
+                    if (isClose) {
+                        return
+                    }
+                    if (isSubscribeSuccess) {
+                        self._translateAction(sender)
+                        return
+                    }
+                }
                 return
             }
-            let filePathUrl = URL(fileURLWithPath: self.filePath)
-            let fileNameWithoutExtension = filePathUrl.deletingPathExtension().lastPathComponent
-            let newFileName = fileNameWithoutExtension + "_aiTranslation"
-            
-            let outputSavePanel = NSSavePanel()
-            outputSavePanel.title = NSLocalizedString("Translate", comment: "")
-            outputSavePanel.allowedFileTypes = ["pdf"]
-            outputSavePanel.nameFieldStringValue = newFileName
-            outputSavePanel.directoryURL = filePathUrl.deletingLastPathComponent()
+            self._translateAction(sender)
+        }
+    }
+    
+    private func _translateAction(_ sender: NSButton) {
+        let filePathUrl = URL(fileURLWithPath: self.filePath)
+        let fileNameWithoutExtension = filePathUrl.deletingPathExtension().lastPathComponent
+        let newFileName = fileNameWithoutExtension + "_aiTranslation"
+        
+        let outputSavePanel = NSSavePanel()
+        outputSavePanel.title = NSLocalizedString("Translate", comment: "")
+        outputSavePanel.allowedFileTypes = ["pdf"]
+        outputSavePanel.nameFieldStringValue = newFileName
+        outputSavePanel.directoryURL = filePathUrl.deletingLastPathComponent()
+        
+        let result = outputSavePanel.runModal()
+        if result == .OK {
+            self.saveFileUrl = outputSavePanel.url!
             
-            let result = outputSavePanel.runModal()
-            if result == .OK {
-                self.saveFileUrl = outputSavePanel.url!
-                
-                DispatchQueue.main.async {
-                    self.showProgressWindow()
-                    self.progressController?.maxValue = Double(100)
-                }
-                timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timerTick), userInfo: nil, repeats: true)
-
-                let languages = [self.fromLabel.stringValue, self.toLabel.stringValue]
-                UserDefaults.standard.set(languages, forKey: "KMAITranslationLanguageArrayKey")
-                UserDefaults.standard.synchronize()
-                self.fromStr = self.languageAbbreviation(self.fromLabel.stringValue)
-                self.toStr = self.languageAbbreviation(self.toLabel.stringValue)
-
-                let infoDictionary = Bundle .main.infoDictionary!
-                let majorVersion = infoDictionary["CFBundleShortVersionString"]
-
-                KMRequestServerManager.manager.aiTranslationFileUpload(file: self.filePath, version: majorVersion as! String) { [unowned self] success, result in
-                    if success {
-                        let result: NSDictionary = result!.result
-
-                        let fileKey = result["fileKey"]
-                        let fileName = result["fileName"]
-                        let pageCount = result["pageCount"]
-                        if fileKey != nil {
-                            self.fileTranslateHandle(fileKey as! String)
-                        }
-                    } else {
-                        let result: String = result!.message
-
-                        DispatchQueue.main.async {
-                            self.hiddenProgressWindow()
-         
-                            let alert = NSAlert()
-                            alert.alertStyle = .critical
-                            alert.messageText = result
-                            alert.runModal()
-                        }
+            DispatchQueue.main.async {
+                self.showProgressWindow()
+                self.progressController?.maxValue = Double(100)
+            }
+            timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timerTick), userInfo: nil, repeats: true)
+
+            let languages = [self.fromLabel.stringValue, self.toLabel.stringValue]
+            UserDefaults.standard.set(languages, forKey: "KMAITranslationLanguageArrayKey")
+            UserDefaults.standard.synchronize()
+            self.fromStr = self.languageAbbreviation(self.fromLabel.stringValue)
+            self.toStr = self.languageAbbreviation(self.toLabel.stringValue)
+
+            let infoDictionary = Bundle .main.infoDictionary!
+            let majorVersion = infoDictionary["CFBundleShortVersionString"]
+
+            KMRequestServerManager.manager.aiTranslationFileUpload(file: self.filePath, version: majorVersion as! String) { [unowned self] success, result in
+                if success {
+                    let result: NSDictionary = result!.result
+
+                    let fileKey = result["fileKey"]
+                    let fileName = result["fileName"]
+                    let pageCount = result["pageCount"]
+                    if fileKey != nil {
+                        self.fileTranslateHandle(fileKey as! String)
+                    }
+                } else {
+                    let result: String = result!.message
+
+                    DispatchQueue.main.async {
+                        self.hiddenProgressWindow()
+     
+                        let alert = NSAlert()
+                        alert.alertStyle = .critical
+                        alert.messageText = result
+                        alert.runModal()
                     }
                 }
-            } else {
-                outputSavePanel.close()
             }
+        } else {
+            outputSavePanel.close()
         }
     }
     

+ 69 - 45
PDF Office/PDF Master/Class/Home/WindowController/KMAITranslationWindowController.swift

@@ -397,51 +397,63 @@ class KMAITranslationWindowController: NSWindowController {
 //            }
             Task { @MainActor in
                 if await (KMLightMemberManager.manager.canPayFunction() == false) {
-                    let _ = KMComparativeTableViewController.aiFunctionShow(window: self.window!)
+                    let _ = KMSubscribeWaterMarkWindowController.show(window: self.window!, isAI: true) { isSubscribeSuccess, _, isClose in
+                        if (isClose) {
+                            return
+                        }
+                        if (isSubscribeSuccess) {
+                            self._aiTranslationAction(sender)
+                            return
+                        }
+                    }
                     return
                 }
-                DispatchQueue.main.async {
-                    self.showProgressWindow()
-                }
+                self._aiTranslationAction(sender)
+            }
+        }
+    }
+    
+    private func _aiTranslationAction(_ sender: NSButton) {
+        DispatchQueue.main.async {
+            self.showProgressWindow()
+        }
 
-                self.errorView.isHidden = true
-                self.toContentTextView.string = ""
-                
-                let languages = [self.fromLabel.stringValue, self.toLabel.stringValue]
-                UserDefaults.standard.set(languages, forKey: "KMAITranslationLanguageArrayKey")
-                UserDefaults.standard.synchronize()
-                self.fromStr = self.languageAbbreviation(self.fromLabel.stringValue)
-                self.toStr = self.languageAbbreviation(self.toLabel.stringValue)
+        self.errorView.isHidden = true
+        self.toContentTextView.string = ""
+        
+        let languages = [self.fromLabel.stringValue, self.toLabel.stringValue]
+        UserDefaults.standard.set(languages, forKey: "KMAITranslationLanguageArrayKey")
+        UserDefaults.standard.synchronize()
+        self.fromStr = self.languageAbbreviation(self.fromLabel.stringValue)
+        self.toStr = self.languageAbbreviation(self.toLabel.stringValue)
 
-                let infoDictionary = Bundle .main.infoDictionary!
-                let majorVersion = infoDictionary["CFBundleShortVersionString"]
-                KMRequestServerManager.manager.aiTranslationTextTrans(q: self.fromContentTextField.stringValue, from: self.fromStr, to: self.toStr, version: majorVersion as! String) { [unowned self] success, result in
-                    DispatchQueue.main.async {
-                        self.hiddenProgressWindow()
-                    }
+        let infoDictionary = Bundle .main.infoDictionary!
+        let majorVersion = infoDictionary["CFBundleShortVersionString"]
+        KMRequestServerManager.manager.aiTranslationTextTrans(q: self.fromContentTextField.stringValue, from: self.fromStr, to: self.toStr, version: majorVersion as! String) { [unowned self] success, result in
+            DispatchQueue.main.async {
+                self.hiddenProgressWindow()
+            }
 
-                    if success {
-                        let result: NSDictionary = result!.result
+            if success {
+                let result: NSDictionary = result!.result
 
-                        let form: String = result["form"] as! String
-                        let to: String = result["to"] as! String
-                        let src: String = result["src"] as! String
-                        let dst: String = result["dst"] as! String
-                        
-                        DispatchQueue.main.async {
-                            self.state = .CanCopy
-                            
-                            self.toContentTextView.string = dst
-                        }
-                    } else {
-                        let result: String = result!.message
-                        
-                        DispatchQueue.main.async {
-                            self.errorLabel.stringValue = result
-                            self.state = .Error
-                            self.toContentTextView.string = ""
-                        }
-                    }
+                let form: String = result["form"] as! String
+                let to: String = result["to"] as! String
+                let src: String = result["src"] as! String
+                let dst: String = result["dst"] as! String
+                
+                DispatchQueue.main.async {
+                    self.state = .CanCopy
+                    
+                    self.toContentTextView.string = dst
+                }
+            } else {
+                let result: String = result!.message
+                
+                DispatchQueue.main.async {
+                    self.errorLabel.stringValue = result
+                    self.state = .Error
+                    self.toContentTextView.string = ""
                 }
             }
         }
@@ -456,19 +468,31 @@ class KMAITranslationWindowController: NSWindowController {
 //            }
             Task { @MainActor in
                 if await (KMLightMemberManager.manager.canPayFunction() == false) {
-                    let _ = KMComparativeTableViewController.aiFunctionShow(window: self.window!)
+                    let _ = KMSubscribeWaterMarkWindowController.show(window: self.window!, isAI: true) { isSubscribeSuccess, _, isClose in
+                        if (isClose) {
+                            return
+                        }
+                        if (isSubscribeSuccess) {
+                            self._copyAction(sender)
+                            return
+                        }
+                    }
                     return
                 }
-                let pasteboard = NSPasteboard.general
-                pasteboard.clearContents()
-                pasteboard.setString(self.toContentTextView.string, forType: .string)
-                
-                self.state = .Copyed
 
+                self._copyAction(sender)
             }
         }
     }
     
+    private func _copyAction(_ sender: NSButton) {
+        let pasteboard = NSPasteboard.general
+        pasteboard.clearContents()
+        pasteboard.setString(self.toContentTextView.string, forType: .string)
+        
+        self.state = .Copyed
+    }
+    
     @IBAction func closeButtonAction(_ sender: NSButton) {
         if self.popover != nil {
             self.popover?.close()

+ 31 - 21
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift

@@ -2148,33 +2148,43 @@ extension KMMainViewController : KMMainToolbarControllerDelegate {
 //        }
         Task { @MainActor in
             if await (KMLightMemberManager.manager.canPayFunction() == false) {
-//                let _ = KMComparativeTableViewController.aiFunctionShow(window: self.view.window!)
-                let _ = KMSubscribeWaterMarkWindowController.show(window: self.view.window!) { isSub, _, isClose in
-                    
+                let _ = KMSubscribeWaterMarkWindowController.show(window: self.view.window!, isAI: true) { isSub, _, isClose in
+                    if (isClose) {
+                        return
+                    }
+                    if (isSub) {
+                        self._aiTranslationPDFFileAction()
+                        return
+                    }
                 }
                 return
             }
-            let isExceedsLimit = self.isPDFPageCountExceedsLimit(filePath: (self.document?.documentURL.path)!)
-            if self.isFileGreaterThan10MB(atPath: (self.document?.documentURL.path)!) {
-                let alert = NSAlert()
-                alert.alertStyle = .critical
-                alert.messageText = NSLocalizedString("The uploaded file size cannot exceed 10MB", comment: "")
-                alert.runModal()
 
-                return
-            } else if isExceedsLimit  {
-                let alert = NSAlert()
-                alert.alertStyle = .critical
-                alert.messageText = NSLocalizedString("Documents cannot exceed 30 pages", comment: "")
-                alert.runModal()
+            self._aiTranslationPDFFileAction()
+        }
+    }
+    
+    private func _aiTranslationPDFFileAction() {
+        let isExceedsLimit = self.isPDFPageCountExceedsLimit(filePath: (self.document?.documentURL.path)!)
+        if self.isFileGreaterThan10MB(atPath: (self.document?.documentURL.path)!) {
+            let alert = NSAlert()
+            alert.alertStyle = .critical
+            alert.messageText = NSLocalizedString("The uploaded file size cannot exceed 10MB", comment: "")
+            alert.runModal()
 
-                return
-            }
-            
-            self.aiTranslationConfirWC = KMAITranslationConfirmWindowController.init(windowNibName: NSNib.Name("KMAITranslationConfirmWindowController"))
-            self.aiTranslationConfirWC!.filePath = (self.document?.documentURL.path)!
-            await self.view.window?.beginSheet(self.aiTranslationConfirWC!.window!)
+            return
+        } else if isExceedsLimit  {
+            let alert = NSAlert()
+            alert.alertStyle = .critical
+            alert.messageText = NSLocalizedString("Documents cannot exceed 30 pages", comment: "")
+            alert.runModal()
+
+            return
         }
+        
+        self.aiTranslationConfirWC = KMAITranslationConfirmWindowController.init(windowNibName: NSNib.Name("KMAITranslationConfirmWindowController"))
+        self.aiTranslationConfirWC!.filePath = (self.document?.documentURL.path)!
+        self.view.window?.beginSheet(self.aiTranslationConfirWC!.window!)
     }
     
     func toolbarViewController(_ viewController: KMToolbarViewController, shareDocument item: NSMenuItem) {