From f26025ffe75a5e41b3fa4b2f580a4b3a585c2fc4 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Wed, 1 Nov 2023 20:57:49 +0800 Subject: [PATCH] PrefUI // Add a button for importing KeyKey user data. --- .../VwrSettingsPaneDictionary.swift | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/Packages/vChewing_MainAssembly/Sources/MainAssembly/SettingsUI/VwrSettingsPaneDictionary.swift b/Packages/vChewing_MainAssembly/Sources/MainAssembly/SettingsUI/VwrSettingsPaneDictionary.swift index 0f1942ac..5e8bb7fa 100644 --- a/Packages/vChewing_MainAssembly/Sources/MainAssembly/SettingsUI/VwrSettingsPaneDictionary.swift +++ b/Packages/vChewing_MainAssembly/Sources/MainAssembly/SettingsUI/VwrSettingsPaneDictionary.swift @@ -11,6 +11,7 @@ import CocoaExtension import Shared import SwiftExtension import SwiftUI +import UniformTypeIdentifiers @available(macOS 13, *) public struct VwrSettingsPaneDictionary: View { @@ -45,6 +46,8 @@ public struct VwrSettingsPaneDictionary: View { // MARK: - Main View + @State var keykeyImportButtonDisabled = false + private var fdrUserDataDefault: String { LMMgr.dataFolderPath(isDefaultFolder: true) } private static let dlgOpenPath = NSOpenPanel() @@ -229,6 +232,36 @@ public struct VwrSettingsPaneDictionary: View { ) .settingsDescription() } + } footer: { + HStack { + Spacer() + Button { + Self.dlgOpenFile.title = NSLocalizedString( + "i18n:settings.importFromKimoTxt.buttonText", comment: "" + ) + ":" + Self.dlgOpenFile.showsResizeIndicator = true + Self.dlgOpenFile.showsHiddenFiles = true + Self.dlgOpenFile.canChooseFiles = true + Self.dlgOpenFile.allowsMultipleSelection = false + Self.dlgOpenFile.canChooseDirectories = false + Self.dlgOpenFile.allowedContentTypes = [.init(filenameExtension: "txt")].compactMap { $0 } + + if let window = CtlSettingsUI.shared?.window { + Self.dlgOpenFile.beginSheetModal(for: window) { result in + if result == NSApplication.ModalResponse.OK { + keykeyImportButtonDisabled = true + defer { keykeyImportButtonDisabled = false } + guard let url = Self.dlgOpenFile.url else { return } + guard var rawString = try? String(contentsOf: url) else { return } + let count = LMMgr.importYahooKeyKeyUserDictionary(text: &rawString) + window.callAlert(title: String(format: "i18n:settings.importFromKimoTxt.finishedCount:%@".localized, count.description)) + } + } + } + } label: { + Text(verbatim: "i18n:settings.importFromKimoTxt.buttonText".localized + " (TXT)…") + }.disabled(keykeyImportButtonDisabled) + } } }.formStyled().frame(minWidth: CtlSettingsUI.formWidth, maxWidth: ceil(CtlSettingsUI.formWidth * 1.2)) }