Browse Source

【AI】修复AI功能点击取消,仍未取消。修复AI功能取消后crash

lizhe 1 year ago
parent
commit
f0cc8c9b66

+ 2 - 1
PDF Office/PDF Master/Class/Home/ViewController/KMAIRewritingVC.swift

@@ -317,7 +317,7 @@ class KMAIRewritingVC: NSViewController {
         progress.progressField.textColor = NSColor.white
         
         progress.closeBlock = { [unowned self] in
-            
+            self.hiddenProgressWindow()
         }
         
         self.progressController = progress
@@ -328,6 +328,7 @@ class KMAIRewritingVC: NSViewController {
         if (self.progressController != nil) {
             self.view.window?.endSheet((self.progressController?.window)!)
             self.progressController = nil
+            KMRequestServer.requestServer.task?.cancel()
         }
     }
     

+ 7 - 6
PDF Office/PDF Master/Class/Home/ViewController/KMAITranslationVC.swift

@@ -254,7 +254,7 @@ class KMAITranslationVC: NSViewController {
 //            self.showProgressWindow()
 //        }
         
-        KMRequestServerManager.manager.aiTranslationFileTranslateHandle(fileKey: fileKey, from: self.fromStr, to: self.toStr, version: majorVersion as! String) { success, result in
+        KMRequestServerManager.manager.aiTranslationFileTranslateHandle(fileKey: fileKey, from: self.fromStr, to: self.toStr, version: majorVersion as! String) { [weak self] success, result in
             if success {
                 let result: NSDictionary = result!.result
 
@@ -266,15 +266,15 @@ class KMAITranslationVC: NSViewController {
                 let from: String = result["from"] as! String
                 let to: String = result["to"] as! String
                 
-                self.downloadFile(filePath: ossDownUrl, downFileName: downFileName)
+                self?.downloadFile(filePath: ossDownUrl, downFileName: downFileName)
             } else {
                 let result: String = result!.message
 
                 DispatchQueue.main.async {
-                    self.hiddenProgressWindow()
+                    self?.hiddenProgressWindow()
                     
-                    self.errorView.isHidden = false
-                    self.errorLabel.stringValue = result
+                    self?.errorView.isHidden = false
+                    self?.errorLabel.stringValue = result
                 }
             }
         }
@@ -409,7 +409,7 @@ class KMAITranslationVC: NSViewController {
         progress.progressField.textColor = NSColor.white
         
         progress.closeBlock = { [unowned self] in
-            
+            self.hiddenProgressWindow()
         }
         
         self.progressController = progress
@@ -425,6 +425,7 @@ class KMAITranslationVC: NSViewController {
         if (self.progressController != nil) {
             self.view.window?.endSheet((self.progressController?.window)!)
             self.progressController = nil
+            KMRequestServer.requestServer.task?.cancel()
         }
     }
     

+ 2 - 1
PDF Office/PDF Master/Class/Home/WindowController/KMAITranslationConfirmWindowController.swift

@@ -285,7 +285,7 @@ class KMAITranslationConfirmWindowController: NSWindowController {
         progress.progressField.textColor = NSColor.white
         
         progress.closeBlock = { [unowned self] in
-            
+            self.hiddenProgressWindow()
         }
         
         self.progressController = progress
@@ -301,6 +301,7 @@ class KMAITranslationConfirmWindowController: NSWindowController {
         if (self.progressController != nil) {
             self.window?.endSheet((self.progressController?.window)!)
             self.progressController = nil
+            KMRequestServer.requestServer.task?.cancel()
         }
     }
     

+ 4 - 1
PDF Office/PDF Master/Class/Home/WindowController/KMAITranslationWindowController.swift

@@ -308,7 +308,9 @@ class KMAITranslationWindowController: NSWindowController {
         progress.window?.contentView?.layer?.backgroundColor = NSColor.km_init(hex: "#36383B").cgColor
         progress.progressField.textColor = NSColor.white
         
-        progress.closeBlock = {}
+        progress.closeBlock = {
+            self.hiddenProgressWindow()
+        }
         
         self.progressController = progress
         self.window?.beginSheet(progress.window!)
@@ -318,6 +320,7 @@ class KMAITranslationWindowController: NSWindowController {
         if (self.progressController != nil) {
             self.window?.endSheet((self.progressController?.window)!)
             self.progressController = nil
+            KMRequestServer.requestServer.task?.cancel()
         }
     }
     

+ 10 - 9
PDF Office/PDF Master/Class/KMLightMember/KMRequestServer/KMRequestServer.swift

@@ -19,6 +19,7 @@ typealias KMHttpRequestServerComplete = (_ task: URLSessionDataTask?, _ response
 class KMRequestServer {
     var sessionManager: AFHTTPSessionManager!
     static let requestServer = KMRequestServer()
+    var task: URLSessionTask?
     
     init() {
         let configuration: URLSessionConfiguration = URLSessionConfiguration.default
@@ -68,7 +69,7 @@ class KMRequestServer {
         
         if (method == .post) {
             if (body != nil) {
-                sessionManager.post(urlString, parameters: params, headers: nil) { formData in
+                self.task = sessionManager.post(urlString, parameters: params, headers: nil) { formData in
                     body!(formData)
                 } progress: { progress in
                     
@@ -83,7 +84,7 @@ class KMRequestServer {
                     }
                 }
             } else {
-                sessionManager.post(urlString, parameters: params, headers: nil) { progress in
+                self.task = sessionManager.post(urlString, parameters: params, headers: nil) { progress in
                 
                 } success: { task, responseObject in
                     if (completion != nil) {
@@ -98,7 +99,7 @@ class KMRequestServer {
 
             }
         } else if (method == .get) {
-            sessionManager.get(urlString, parameters: params, headers: nil) { progress in
+            self.task = sessionManager.get(urlString, parameters: params, headers: nil) { progress in
                 
             } success: { task, responseObject in
                 if (completion != nil) {
@@ -161,7 +162,7 @@ class KMRequestServer {
             requestSerializer!(sessionManager.requestSerializer);
         }
         if (body != nil) {
-            sessionManager.post(urlString, parameters: params, headers: nil) { formData in
+            self.task = sessionManager.post(urlString, parameters: params, headers: nil) { formData in
                 body!(formData)
             } progress: { progress in
                 
@@ -176,7 +177,7 @@ class KMRequestServer {
                 }
             }
         } else {
-            sessionManager.post(urlString, parameters: params, headers: nil) { progress in
+            self.task = sessionManager.post(urlString, parameters: params, headers: nil) { progress in
             
             } success: { task, responseObject in
                 if (completion != nil) {
@@ -207,7 +208,7 @@ class KMRequestServer {
             requestSerializer!(sessionManager.requestSerializer);
         }
         if (body != nil) {
-            sessionManager.post(urlString, parameters: params, headers: nil) { formData in
+            self.task = sessionManager.post(urlString, parameters: params, headers: nil) { formData in
                 body!(formData)
             } progress: { progress in
                 
@@ -222,7 +223,7 @@ class KMRequestServer {
                 }
             }
         } else {
-            sessionManager.post(urlString, parameters: params, headers: nil) { progress in
+            self.task = sessionManager.post(urlString, parameters: params, headers: nil) { progress in
             
             } success: { task, responseObject in
                 if (completion != nil) {
@@ -254,7 +255,7 @@ class KMRequestServer {
             requestSerializer!(sessionManager.requestSerializer);
         }
         if (body != nil) {
-            sessionManager.post(urlString, parameters: params, headers: nil) { formData in
+            self.task = sessionManager.post(urlString, parameters: params, headers: nil) { formData in
                 body!(formData)
             } progress: { progress in
                 
@@ -269,7 +270,7 @@ class KMRequestServer {
                 }
             }
         } else {
-            sessionManager.post(urlString, parameters: params, headers: nil) { progress in
+            self.task = sessionManager.post(urlString, parameters: params, headers: nil) { progress in
             
             } success: { task, responseObject in
                 if (completion != nil) {

+ 84 - 82
PDF Office/PDF Master/Class/KMLightMember/Manager/KMRequestServerManager.swift

@@ -685,48 +685,49 @@ extension KMRequestServerManager {
         let userInfo = KMLightMemberCache.cache.readData(type: .info)
         let majorVersion = infoDictionary["CFBundleShortVersionString"]
         let urlString = KMAIServerConfig().aiTranslationURL + "/v1/translate/fileTranslateHandle"
-        
-        var semaphore = DispatchSemaphore (value: 0)
-
-        let parameters = String(format: "{\r\n    \"fileKey\": \"%@\",\r\n    \"from\": \"%@\",\r\n    \"to\": \"%@\",\r\n    \"version\": \"%@\",\r\n    \"projectId\": \"2\",\r\n    \"userId\": \"%@\"\r\n}", fileKey, from, to, version, userInfo["id"] as! String)
-        let postData = parameters.data(using: .utf8)
-
-        var request = URLRequest(url: URL(string: urlString)!,timeoutInterval: Double.infinity)
-        request.addValue("Apifox/1.0.0 (https://www.apifox.cn)", forHTTPHeaderField: "User-Agent")
-        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
-
-        request.httpMethod = "POST"
-        request.httpBody = postData
-
-        let task = URLSession.shared.dataTask(with: request) { data, response, error in
-           guard let data = data else {
-               KMPrint(String(describing: error))
-              semaphore.signal()
-              return
-           }
-            let jsonObject = try? JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary ?? [:]
-            if jsonObject != nil {
-                let data1: NSDictionary = jsonObject!["data"] as? NSDictionary ?? [:]
-                let code: String = jsonObject!["code"] as? String ?? "06005"
-                let message: String = jsonObject!["msg"] as? String ?? "unknown error"
-                let error = NSError(domain: message, code: Int(code)!)
-                let result = Result(result: data1,message: message,code: Int(code)!, error: error)
-                if result.code == 200 {
-                    complete(true, result)
+        if userInfo.count > 0 {
+            var semaphore = DispatchSemaphore (value: 0)
+
+            let parameters = String(format: "{\r\n    \"fileKey\": \"%@\",\r\n    \"from\": \"%@\",\r\n    \"to\": \"%@\",\r\n    \"version\": \"%@\",\r\n    \"projectId\": \"2\",\r\n    \"userId\": \"%@\"\r\n}", fileKey, from, to, version, userInfo["id"] as! String)
+            let postData = parameters.data(using: .utf8)
+
+            var request = URLRequest(url: URL(string: urlString)!,timeoutInterval: Double.infinity)
+            request.addValue("Apifox/1.0.0 (https://www.apifox.cn)", forHTTPHeaderField: "User-Agent")
+            request.addValue("application/json", forHTTPHeaderField: "Content-Type")
+
+            request.httpMethod = "POST"
+            request.httpBody = postData
+
+            let task = URLSession.shared.dataTask(with: request) { data, response, error in
+               guard let data = data else {
+                   KMPrint(String(describing: error))
+                  semaphore.signal()
+                  return
+               }
+                let jsonObject = try? JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary ?? [:]
+                if jsonObject != nil {
+                    let data1: NSDictionary = jsonObject!["data"] as? NSDictionary ?? [:]
+                    let code: String = jsonObject!["code"] as? String ?? "06005"
+                    let message: String = jsonObject!["msg"] as? String ?? "unknown error"
+                    let error = NSError(domain: message, code: Int(code)!)
+                    let result = Result(result: data1,message: message,code: Int(code)!, error: error)
+                    if result.code == 200 {
+                        complete(true, result)
+                    } else {
+                        complete(false, result)
+                    }
+
                 } else {
+                    let error = NSError(domain: "unknown error", code: 404)
+                    let result = Result(result: [:],message: "unknown error",code: 404, error: error)
                     complete(false, result)
                 }
-
-            } else {
-                let error = NSError(domain: "unknown error", code: 404)
-                let result = Result(result: [:],message: "unknown error",code: 404, error: error)
-                complete(false, result)
+               semaphore.signal()
             }
-           semaphore.signal()
+            
+            task.resume()
+            semaphore.wait()
         }
-        
-        task.resume()
-        semaphore.wait()
     }
 
     /**
@@ -742,57 +743,58 @@ extension KMRequestServerManager {
         let userInfo = KMLightMemberCache.cache.readData(type: .info)
         let majorVersion = infoDictionary["CFBundleShortVersionString"]
         let urlString = KMAIServerConfig().aiTranslationURL + "/v1/translate/textTrans"
-        
-        var semaphore = DispatchSemaphore (value: 0)
-        
-        var escapedString = q
-        if q.contains("\n") || q.contains("\r") {
-            escapedString = q.replacingOccurrences(of: "\n", with: "\\n")
-            escapedString = escapedString.replacingOccurrences(of: "\r", with: "\\r")
-        } else if q.contains("\u{2028}") {
+        if userInfo.count > 0 {
+            var semaphore = DispatchSemaphore (value: 0)
             
-        }
-        escapedString = String(data: escapedString.data(using: .utf8)!, encoding: .utf8)!
-//        let escapedString = String(data: q.data(using: .utf8)!, encoding: .utf8)!
-        let parameters = String(format: "{\r\n    \"q\": \"%@\",\r\n    \"from\": \"%@\",\r\n    \"to\": \"%@\",\r\n    \"version\": \"%@\",\r\n    \"projectId\": \"2\",\r\n    \"userId\": \"%@\"\r\n}", escapedString, from, to, version, userInfo["id"] as! String)
-
-        let postData = parameters.data(using: .utf8)
-
-        var request = URLRequest(url: URL(string: urlString)!,timeoutInterval: Double.infinity)
-        request.addValue("Apifox/1.0.0 (https://www.apifox.cn)", forHTTPHeaderField: "User-Agent")
-        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
-
-        request.httpMethod = "POST"
-        request.httpBody = postData
-
-        let task = URLSession.shared.dataTask(with: request) { data, response, error in
-           guard let data = data else {
-               KMPrint(String(describing: error))
-              semaphore.signal()
-              return
-           }
-            let jsonObject = try? JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary ?? [:]
-            if jsonObject != nil {
-                let data1: NSDictionary = jsonObject!["data"] as? NSDictionary ?? [:]
-                let code: String = jsonObject!["code"] as? String ?? "06005"
-                let message: String = jsonObject!["msg"] as? String ?? "unknown error"
-                let error = NSError(domain: message, code: Int(code)!)
-                let result = Result(result: data1,message: message,code: Int(code)!, error: error)
-                if result.code == 200 {
-                    complete(true, result)
+            var escapedString = q
+            if q.contains("\n") || q.contains("\r") {
+                escapedString = q.replacingOccurrences(of: "\n", with: "\\n")
+                escapedString = escapedString.replacingOccurrences(of: "\r", with: "\\r")
+            } else if q.contains("\u{2028}") {
+                
+            }
+            escapedString = String(data: escapedString.data(using: .utf8)!, encoding: .utf8)!
+    //        let escapedString = String(data: q.data(using: .utf8)!, encoding: .utf8)!
+            let parameters = String(format: "{\r\n    \"q\": \"%@\",\r\n    \"from\": \"%@\",\r\n    \"to\": \"%@\",\r\n    \"version\": \"%@\",\r\n    \"projectId\": \"2\",\r\n    \"userId\": \"%@\"\r\n}", escapedString, from, to, version, userInfo["id"] as! String)
+
+            let postData = parameters.data(using: .utf8)
+
+            var request = URLRequest(url: URL(string: urlString)!,timeoutInterval: Double.infinity)
+            request.addValue("Apifox/1.0.0 (https://www.apifox.cn)", forHTTPHeaderField: "User-Agent")
+            request.addValue("application/json", forHTTPHeaderField: "Content-Type")
+
+            request.httpMethod = "POST"
+            request.httpBody = postData
+
+            let task = URLSession.shared.dataTask(with: request) { data, response, error in
+               guard let data = data else {
+                   KMPrint(String(describing: error))
+                  semaphore.signal()
+                  return
+               }
+                let jsonObject = try? JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary ?? [:]
+                if jsonObject != nil {
+                    let data1: NSDictionary = jsonObject!["data"] as? NSDictionary ?? [:]
+                    let code: String = jsonObject!["code"] as? String ?? "06005"
+                    let message: String = jsonObject!["msg"] as? String ?? "unknown error"
+                    let error = NSError(domain: message, code: Int(code)!)
+                    let result = Result(result: data1,message: message,code: Int(code)!, error: error)
+                    if result.code == 200 {
+                        complete(true, result)
+                    } else {
+                        complete(false, result)
+                    }
                 } else {
+                    let error = NSError(domain: "unknown error", code: 404)
+                    let result = Result(result: [:],message: "unknown error",code: 404, error: error)
                     complete(false, result)
                 }
-            } else {
-                let error = NSError(domain: "unknown error", code: 404)
-                let result = Result(result: [:],message: "unknown error",code: 404, error: error)
-                complete(false, result)
+               semaphore.signal()
             }
-           semaphore.signal()
+            
+            task.resume()
+            semaphore.wait()
         }
-        
-        task.resume()
-        semaphore.wait()
     }
     
     /**