From c3c271bb7358553ad1d3097dd1a19da2208e5aa2 Mon Sep 17 00:00:00 2001 From: tisfeng Date: Sat, 14 Sep 2024 20:24:26 +0800 Subject: [PATCH] refactor: replace AppleScriptError with QueryError --- Easydict.xcodeproj/project.pbxproj | 12 +++++ Easydict/Swift/Model/Error/QueryError.swift | 54 +++++++++++++++++++ .../AppleScript/AppleScriptTask+System.swift | 2 +- .../Utility/AppleScript/AppleScriptTask.swift | 12 ++--- Easydict/objc/EventMonitor/EZEventMonitor.m | 2 + 5 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 Easydict/Swift/Model/Error/QueryError.swift diff --git a/Easydict.xcodeproj/project.pbxproj b/Easydict.xcodeproj/project.pbxproj index 14eefeae4..6137f2efb 100644 --- a/Easydict.xcodeproj/project.pbxproj +++ b/Easydict.xcodeproj/project.pbxproj @@ -50,6 +50,7 @@ 0340D3962C9184D3004C9910 /* AppleScriptTask+Browser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0340D3952C9184D3004C9910 /* AppleScriptTask+Browser.swift */; }; 0340D3992C91D4B6004C9910 /* AppleScriptTask+System.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0340D3982C91D4B6004C9910 /* AppleScriptTask+System.swift */; }; 0340D39B2C93DC1B004C9910 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0340D39A2C93DC1B004C9910 /* Constants.swift */; }; + 0340D39E2C951850004C9910 /* QueryError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0340D39D2C951850004C9910 /* QueryError.swift */; }; 0342A9812AD64924002A9F5F /* NSString+EZSplit.m in Sources */ = {isa = PBXBuildFile; fileRef = 0342A9802AD64924002A9F5F /* NSString+EZSplit.m */; }; 03542A30293645DF00C34C33 /* EZAppleService.m in Sources */ = {isa = PBXBuildFile; fileRef = 03542A2F293645DF00C34C33 /* EZAppleService.m */; }; 03542A342936F70F00C34C33 /* EZLanguageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 03542A332936F70F00C34C33 /* EZLanguageManager.m */; }; @@ -427,6 +428,7 @@ 0340D3952C9184D3004C9910 /* AppleScriptTask+Browser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppleScriptTask+Browser.swift"; sourceTree = ""; }; 0340D3982C91D4B6004C9910 /* AppleScriptTask+System.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppleScriptTask+System.swift"; sourceTree = ""; }; 0340D39A2C93DC1B004C9910 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; + 0340D39D2C951850004C9910 /* QueryError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueryError.swift; sourceTree = ""; }; 0342A97F2AD64924002A9F5F /* NSString+EZSplit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSString+EZSplit.h"; sourceTree = ""; }; 0342A9802AD64924002A9F5F /* NSString+EZSplit.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSString+EZSplit.m"; sourceTree = ""; }; 03542A2E293645DF00C34C33 /* EZAppleService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EZAppleService.h; sourceTree = ""; }; @@ -1138,6 +1140,14 @@ path = AppleScript; sourceTree = ""; }; + 0340D39C2C951839004C9910 /* Error */ = { + isa = PBXGroup; + children = ( + 0340D39D2C951850004C9910 /* QueryError.swift */, + ); + path = Error; + sourceTree = ""; + }; 03542A2D293645B800C34C33 /* Apple */ = { isa = PBXGroup; children = ( @@ -2479,6 +2489,7 @@ EA9943E12B534C2900EE7B97 /* Model */ = { isa = PBXGroup; children = ( + 0340D39C2C951839004C9910 /* Error */, EA9943E22B534C3300EE7B97 /* TTSServiceType.swift */, 0337D0082C109D0C002ACE72 /* ServiceUsageStatus.swift */, ); @@ -2917,6 +2928,7 @@ 03542A492937B5CF00C34C33 /* EZGoogleTranslate.m in Sources */, 03D0435A2928C4C800E7559E /* EZWindowManager.m in Sources */, 6295DE342A84EF76006145F4 /* EZBingLookupModel.m in Sources */, + 0340D39E2C951850004C9910 /* QueryError.swift in Sources */, 03FD68BE2B1E151A00FD388E /* String+EncryptAES.swift in Sources */, C4A512BE2C414A2400F00F33 /* AIToolService.swift in Sources */, 03B0230729231FA6001C7E63 /* EZCommonView.m in Sources */, diff --git a/Easydict/Swift/Model/Error/QueryError.swift b/Easydict/Swift/Model/Error/QueryError.swift new file mode 100644 index 000000000..9d0dd15ce --- /dev/null +++ b/Easydict/Swift/Model/Error/QueryError.swift @@ -0,0 +1,54 @@ +// +// QueryError.swift +// Easydict +// +// Created by tisfeng on 2024/9/14. +// Copyright © 2024 izual. All rights reserved. +// + +import Foundation + +// MARK: - QueryError + +@objcMembers +public class QueryError: NSError, LocalizedError { + // MARK: Lifecycle + + public init(type: ErrorType, code: Int = -1, message: String) { + self.type = type + self.message = message + let userInfo = [NSLocalizedDescriptionKey: message] + super.init(domain: Bundle.main.bundleIdentifier!, code: code, userInfo: userInfo) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: Public + + public enum ErrorType: String { + case unknown = "Unknown Error" + case api = "API Error" + case parameter = "Parameter Error" + case timeout = "Timeout Error" + case appleScript = "AppleScript Execution Error" + case unsupported = "Unsupported Language" + case missingSecretKey = "Missing Secret Key" + } + + public let type: ErrorType + public var message: String + + public override var localizedDescription: String { + description + } + + public override var description: String { + "\(type.rawValue): \(message)" + } + + public static func error(type: ErrorType, code: Int = -1, message: String) -> QueryError { + QueryError(type: type, code: code, message: message) + } +} diff --git a/Easydict/Swift/Utility/AppleScript/AppleScriptTask+System.swift b/Easydict/Swift/Utility/AppleScript/AppleScriptTask+System.swift index 71895fcba..cd68c58b6 100644 --- a/Easydict/Swift/Utility/AppleScript/AppleScriptTask+System.swift +++ b/Easydict/Swift/Utility/AppleScript/AppleScriptTask+System.swift @@ -16,7 +16,7 @@ extension AppleScriptTask { logInfo("AppleScript get alert volume: \(volume)") return volume } - throw AppleScriptError.executionError(message: "Failed to get alert volume") + throw QueryError(type: .appleScript, message: "Failed to get alert volume") } static func setAlertVolume(_ volume: Int) async throws { diff --git a/Easydict/Swift/Utility/AppleScript/AppleScriptTask.swift b/Easydict/Swift/Utility/AppleScript/AppleScriptTask.swift index 014b1e95a..f49623917 100644 --- a/Easydict/Swift/Utility/AppleScript/AppleScriptTask.swift +++ b/Easydict/Swift/Utility/AppleScript/AppleScriptTask.swift @@ -62,7 +62,7 @@ class AppleScriptTask: NSObject { let script = NSAppleScript(source: appleScript) guard let output = script?.executeAndReturnError(&errorInfo) else { let errorMessage = errorInfo?[NSAppleScript.errorMessage] as? String ?? "Run AppleScript error" - throw AppleScriptError.executionError(message: errorMessage) + throw QueryError(type: .appleScript, message: errorMessage) } return output.stringValue }.value @@ -80,7 +80,7 @@ class AppleScriptTask: NSObject { guard let output, errorInfo == nil else { let errorMessage = errorInfo?[NSAppleScript.errorMessage] as? String ?? "Run AppleScript error" - continuation.resume(throwing: AppleScriptError.executionError(message: errorMessage)) + continuation.resume(throwing: QueryError(type: .appleScript, message: errorMessage)) return } continuation.resume(returning: output) @@ -99,7 +99,7 @@ class AppleScriptTask: NSObject { let errorData = try self.errorPipe.fileHandleForReading.readToEnd() if let error = errorData?.stringValue { - continuation.resume(throwing: AppleScriptError.executionError(message: error)) + continuation.resume(throwing: QueryError(type: .appleScript, message: error)) } else { continuation.resume(returning: outputData?.stringValue) @@ -123,9 +123,9 @@ class AppleScriptTask: NSObject { // MARK: - AppleScriptError -enum AppleScriptError: Error { - case executionError(message: String, code: Int = 1) -} +// enum AppleScriptError: Error { +// case executionError(message: String, code: Int = 1) +// } func appleScript(of shortcutName: String, inputText: String) -> String { // inputText may contain ", we need to escape it diff --git a/Easydict/objc/EventMonitor/EZEventMonitor.m b/Easydict/objc/EventMonitor/EZEventMonitor.m index 7ad92c594..b008b7ea4 100644 --- a/Easydict/objc/EventMonitor/EZEventMonitor.m +++ b/Easydict/objc/EventMonitor/EZEventMonitor.m @@ -398,6 +398,8 @@ - (void)handleSelectedText:(NSString *)text { /// Get selected text by simulated key: Cmd + C - (void)getSelectedTextBySimulatedKey:(void (^)(NSString *_Nullable))completion { + MMLogInfo(@"get selected text by simulated key"); + NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; NSInteger changeCount = [pasteboard changeCount]; NSString *lastText = [EZSystemUtility getLastPasteboardText];