// // KMNBetaFeedbackManager.swift // PDF Reader Pro Beta // // Created by kdanmobile on 2025/3/3. // import Cocoa class KMNBetaFeedbackManager: NSObject { static let defalutManager = KMNBetaFeedbackManager() public var isSupportOpenApp = false private var _isHaveFeedback: Bool = false public var isHaveFeedback: Bool { get { if KMMemberInfo.shared.isLogin { return _isHaveFeedback } else { return false } } set { _isHaveFeedback = newValue } } private var isHaveFeedbackRequested = false func betaConfigAction(complete: @escaping KMMemberCenterComplete) { if KMMemberCenterManager.manager.isConnectionAvailable() == false { let alert = NSAlert() alert.alertStyle = .critical alert.messageText = KMLocalizedString("Error Information", comment: "") alert.informativeText = KMLocalizedString("Please make sure your internet connection is available.", comment: "") alert.addButton(withTitle: KMLocalizedString("OK", comment: "")) alert.runModal() complete(false, nil) return } let urlString = KMMemberCenterConfig().activityBaseURL() + kURLAPI_memberSystem_beta_settings KMRequestServer.requestServer.request(urlString: urlString, method: .get, params: nil) { requestSerializer in } completion: { task, responseObject, error in var dic: NSDictionary = [:] if error == nil, let responseObject = responseObject as? NSDictionary { dic = responseObject } else { var info = responseObject if let error = error { if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data { info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary } } dic = (info as? NSDictionary) ?? [:] } let code: Int = dic["code"] as? Int ?? 0 var isValid: Bool = false if let result = dic["result"] as? NSDictionary { isValid = result["isValid"] as? Bool ?? false } let message: String = dic["msg"] as? String ?? "" self.isSupportOpenApp = isValid let result = KMMemberCenterResult(code: code, msg: message, result: isValid) if code == 200 { complete(true, result) } else { complete(false, result) } } } func havingFeekbackAction(complete: @escaping KMMemberCenterComplete) { if KMMemberCenterManager.manager.isConnectionAvailable() == false { let alert = NSAlert() alert.alertStyle = .critical alert.messageText = KMLocalizedString("Error Information", comment: "") alert.informativeText = KMLocalizedString("Please make sure your internet connection is available.", comment: "") alert.addButton(withTitle: KMLocalizedString("OK", comment: "")) alert.runModal() complete(false, nil) return } if(isHaveFeedbackRequested) { complete(true,nil) } KMRequestServer.Member_POST(url: kURLAPI_memberSystem_beta_haveFeedback, params: nil) { success, resultModel, error in if(success) { self._isHaveFeedback = resultModel?.result ?? false self.isHaveFeedbackRequested = true complete(true, nil) } else { complete(false, nil) } } } func feekbackAction(filePaths: [String],content:String,complete: @escaping KMMemberCenterComplete) { if filePaths.count <= 0 || content.isEmpty == true { return } if KMMemberCenterManager.manager.isConnectionAvailable() == false { let alert = NSAlert() alert.alertStyle = .critical alert.messageText = KMLocalizedString("Error Information", comment: "") alert.informativeText = KMLocalizedString("Please make sure your internet connection is available.", comment: "") alert.addButton(withTitle: KMLocalizedString("OK", comment: "")) alert.runModal() return } var fileDatas: [Data] = [] for filePath in filePaths { if let fileData = FileManager.default.contents(atPath: filePath) { fileDatas.append(fileData) } } let (major, minor, bugFix) = KMTools.getSystemVersion() let versionInfoString = "\(KMTools.getRawSystemInfo()) - \(major).\(minor).\(bugFix)" let params: [String : Any] = [ "version" : versionInfoString, "content" : content, "files[]" : fileDatas, "email" : KMMemberInfo.shared.userEmail] KMRequestServer.Member_POST(url: kURLAPI_memberSystem_beta_feedbackSubmit, params: params) { success, resultModel, error in } } }