Skip to content

Commit c3fad97

Browse files
committed
すべての辞書から検索する設定をGlobalに保持するように修正
1 parent e7f9c58 commit c3fad97

File tree

8 files changed

+19
-60
lines changed

8 files changed

+19
-60
lines changed

macSKK/Global.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import Combine
2525
/// 1文字目を常に未確定扱いするワークアラウンドを適用するBundle Identifierの集合
2626
static let treatFirstCharacterAsMarkedTextBundleIdentifiers = CurrentValueSubject<[String], Never>([])
2727
/// ユーザー辞書だけでなくすべての辞書から補完候補を検索するか?
28-
static let findCompletionFromAllDicts = CurrentValueSubject<Bool, Never>(false)
28+
static var findCompletionFromAllDicts = false
2929
/// 現在のローマ字かな変換ルール
3030
static var kanaRule: Romaji!
3131
/// デフォルトでもってるローマ字かな変換ルール

macSKK/InputController.swift

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -184,12 +184,12 @@ class InputController: IMKInputController {
184184
}
185185
.receive(on: DispatchQueue.global())
186186
.compactMap { (yomi, cursorPosition) -> (String, Completion, NSRect)? in
187+
let skkservDict = Global.searchCompletionsSkkserv ? Global.skkservDict : nil
187188
if Global.showCandidateForCompletion {
188-
let candidates = Global.dictionary.candidatesForCompletion(prefix: yomi)
189+
let candidates = Global.dictionary.candidatesForCompletion(prefix: yomi, skkservDict: skkservDict, findFromAllDicts: Global.findCompletionFromAllDicts)
189190
return (yomi, .candidates(candidates), cursorPosition)
190191
} else {
191-
let skkservDict = Global.searchCompletionsSkkserv ? Global.skkservDict : nil
192-
let completions = Global.dictionary.findCompletionsDicts(prefix: yomi, skkservDict: skkservDict, findFromAllDicts: Global.findCompletionFromAllDicts.value)
192+
let completions = Global.dictionary.findCompletionsDicts(prefix: yomi, skkservDict: skkservDict, findFromAllDicts: Global.findCompletionFromAllDicts)
193193
return (yomi, .yomi(completions, 0), cursorPosition)
194194
}
195195
}
@@ -268,12 +268,6 @@ class InputController: IMKInputController {
268268
self?.stateMachine.inlineCandidateCount = inlineCandidateCount
269269
}
270270
}.store(in: &cancellables)
271-
NotificationCenter.default.publisher(for: notificationNameFindCompletionFromAllDicts)
272-
.sink { notification in
273-
if let findCompletionFromAllDicts = notification.object as? Bool {
274-
Global.findCompletionFromAllDicts.send(findCompletionFromAllDicts)
275-
}
276-
}.store(in: &cancellables)
277271
}
278272

279273
@MainActor override func handle(_ event: NSEvent!, client sender: Any!) -> Bool {

macSKK/Settings/SettingsViewModel.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ final class SettingsViewModel: ObservableObject {
286286
Global.punctuation = Punctuation(comma: comma, period: period)
287287
Global.ignoreUserDictInPrivateMode.send(ignoreUserDictInPrivateMode)
288288
Global.candidateListDirection.send(candidateListDirection)
289-
Global.findCompletionFromAllDicts.send(findCompletionFromAllDicts)
289+
Global.findCompletionFromAllDicts = findCompletionFromAllDicts
290290

291291
// SKK-JISYO.Lのようなファイルの読み込みが遅いのでバックグラウンドで処理
292292
$dictSettings.filter({ !$0.isEmpty }).receive(on: DispatchQueue.global()).sink { dictSettings in
@@ -452,7 +452,7 @@ final class SettingsViewModel: ObservableObject {
452452

453453
$findCompletionFromAllDicts.dropFirst().sink { findCompletionFromAllDicts in
454454
UserDefaults.app.set(findCompletionFromAllDicts, forKey: UserDefaultsKeys.findCompletionFromAllDicts)
455-
NotificationCenter.default.post(name: notificationNameFindCompletionFromAllDicts, object: findCompletionFromAllDicts)
455+
Global.findCompletionFromAllDicts = findCompletionFromAllDicts
456456
logger.log("一般の辞書を使って補完するかを\(findCompletionFromAllDicts)に変更しました")
457457
}.store(in: &cancellables)
458458

macSKK/UserDict.swift

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,17 @@ class UserDict: NSObject, DictProtocol {
2929
private let privateMode: CurrentValueSubject<Bool, Never>
3030
/// プライベートモード時に変換候補にユーザー辞書を無視するかどうか
3131
private let ignoreUserDictInPrivateMode: CurrentValueSubject<Bool, Never>
32-
// ユーザー辞書だけでなくすべての辞書から補完候補を検索するか?
33-
private let findCompletionFromAllDicts: CurrentValueSubject<Bool, Never>
3432
private var cancellables: Set<AnyCancellable> = []
3533
let saveToUserDict = true
3634

3735
// MARK: NSFilePresenter
3836
let presentedItemURL: URL?
3937
let presentedItemOperationQueue: OperationQueue = OperationQueue()
4038

41-
init(dicts: [any DictProtocol], userDictEntries: [String: [Word]]? = nil, privateMode: CurrentValueSubject<Bool, Never>, ignoreUserDictInPrivateMode: CurrentValueSubject<Bool, Never>, findCompletionFromAllDicts: CurrentValueSubject<Bool, Never>, dateYomis: [DateConversion.Yomi], dateConversions: [DateConversion]) throws {
39+
init(dicts: [any DictProtocol], userDictEntries: [String: [Word]]? = nil, privateMode: CurrentValueSubject<Bool, Never>, ignoreUserDictInPrivateMode: CurrentValueSubject<Bool, Never>, dateYomis: [DateConversion.Yomi], dateConversions: [DateConversion]) throws {
4240
self.dicts = dicts
4341
self.privateMode = privateMode
4442
self.ignoreUserDictInPrivateMode = ignoreUserDictInPrivateMode
45-
self.findCompletionFromAllDicts = findCompletionFromAllDicts
4643
self.dateYomis = dateYomis
4744
self.dateConversions = dateConversions
4845
dictionariesDirectoryURL = try FileManager.default.url(
@@ -365,20 +362,20 @@ class UserDict: NSObject, DictProtocol {
365362
* asyncにするかも? (skkservとかで便利そう)
366363
* AsyncStreamにするかも?
367364
*/
368-
func candidatesForCompletion(prefix: String) -> [Candidate] {
365+
func candidatesForCompletion(prefix: String, skkservDict: SKKServDict?, findFromAllDicts: Bool) -> [Candidate] {
369366
// 1文字のときは全探索するとめちゃくちゃ量が多いので完全一致だけ探す
370367
if prefix.count == 1 {
371-
return referDicts(prefix, option: nil, skkservDict: nil, findFromAllDicts: findCompletionFromAllDicts.value)
368+
return referDicts(prefix, option: nil, skkservDict: skkservDict, findFromAllDicts: findFromAllDicts)
372369
.map { candidate in
373370
candidate.withOriginal(Candidate.Original(midashi: prefix, word: candidate.word))
374371
}
375372
}
376373
// あとでいろいろ拡張するけどひとまずfindCompletionsの結果を[Candidate]にするだけ
377374
// 別スレッドから実行したいのでひとまずskkserv以外を検索する
378-
return findCompletions(prefix: prefix).flatMap { midashi in
375+
return findCompletionsDicts(prefix: prefix, skkservDict: skkservDict, findFromAllDicts: findFromAllDicts).flatMap { midashi in
379376
// NOTE: 多すぎても役に立たないだろうと思うのでひとまず先頭100件に制限。設定項目にしてもよさそう
380377
// FIXME: Candidateの配列じゃなくて、(String, Candidate) のように見出し語と変換候補のタプルの配列を返すほうがよさそう
381-
referDicts(midashi, option: nil, skkservDict: nil, findFromAllDicts: findCompletionFromAllDicts.value)
378+
referDicts(midashi, option: nil, skkservDict: nil, findFromAllDicts: findFromAllDicts)
382379
.prefix(100)
383380
.map { candidate in
384381
candidate.withOriginal(Candidate.Original(midashi: midashi, word: candidate.word))

macSKK/macSKKApp.swift

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ let notificationNameToggleTreatFirstCharacterAsMarkedText = Notification.Name("t
1818
let notificationNameOpenSettings = Notification.Name("openSettings")
1919
// インラインで表示する変換候補の数を変更したときに通知される通知の名前
2020
let notificationNameInlineCandidateCount = Notification.Name("inlineCandidateCount")
21-
// 一般辞書を補完で検索するかが変更されたときに通知される通知の名前
22-
let notificationNameFindCompletionFromAllDicts = Notification.Name("findCompletionFromAllDicts")
2321

2422
func isTest() -> Bool {
2523
return ProcessInfo.processInfo.environment["MACSKK_IS_TEST"] == "1"
@@ -61,7 +59,6 @@ struct macSKKApp: App {
6159
Global.dictionary = try UserDict(dicts: [],
6260
privateMode: Global.privateMode,
6361
ignoreUserDictInPrivateMode: Global.ignoreUserDictInPrivateMode,
64-
findCompletionFromAllDicts: Global.findCompletionFromAllDicts,
6562
dateYomis: settingsViewModel.dateYomis,
6663
dateConversions: settingsViewModel.dateConversions)
6764
settingsWindowController = NSWindowController(window: settingsWindow)

macSKKTests/SKKServDictTests.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ final class SKKServDictTests: XCTestCase {
1212
return response
1313
}
1414

15+
func completion(yomi: String, destination: macSKK.SKKServDestination, timeout: TimeInterval) throws -> String {
16+
return response
17+
}
18+
1519
func disconnect() throws {}
1620
}
1721

macSKKTests/StateMachineTests.swift

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2962,7 +2962,6 @@ final class StateMachineTests: XCTestCase {
29622962
Global.dictionary = try UserDict(dicts: [dict],
29632963
privateMode: CurrentValueSubject<Bool, Never>(false),
29642964
ignoreUserDictInPrivateMode: CurrentValueSubject<Bool, Never>(false),
2965-
findCompletionFromAllDicts: CurrentValueSubject<Bool, Never>(false),
29662965
dateYomis: [],
29672966
dateConversions: [])
29682967
Global.dictionary.setEntries([:])
@@ -2988,7 +2987,6 @@ final class StateMachineTests: XCTestCase {
29882987
Global.dictionary = try UserDict(dicts: [dict],
29892988
privateMode: CurrentValueSubject<Bool, Never>(false),
29902989
ignoreUserDictInPrivateMode: CurrentValueSubject<Bool, Never>(false),
2991-
findCompletionFromAllDicts: CurrentValueSubject<Bool, Never>(false),
29922990
dateYomis: [],
29932991
dateConversions: [])
29942992
Global.dictionary.setEntries([:])
@@ -3017,7 +3015,6 @@ final class StateMachineTests: XCTestCase {
30173015
Global.dictionary = try UserDict(dicts: [dict],
30183016
privateMode: CurrentValueSubject<Bool, Never>(false),
30193017
ignoreUserDictInPrivateMode: CurrentValueSubject<Bool, Never>(false),
3020-
findCompletionFromAllDicts: CurrentValueSubject<Bool, Never>(false),
30213018
dateYomis: [],
30223019
dateConversions: [])
30233020
Global.dictionary.setEntries([:])
@@ -3062,7 +3059,6 @@ final class StateMachineTests: XCTestCase {
30623059
Global.dictionary = try UserDict(dicts: [dict],
30633060
privateMode: CurrentValueSubject<Bool, Never>(false),
30643061
ignoreUserDictInPrivateMode: CurrentValueSubject<Bool, Never>(false),
3065-
findCompletionFromAllDicts: CurrentValueSubject<Bool, Never>(false),
30663062
dateYomis: [],
30673063
dateConversions: [])
30683064
Global.dictionary.setEntries([:])
@@ -3094,7 +3090,6 @@ final class StateMachineTests: XCTestCase {
30943090
Global.dictionary = try UserDict(dicts: [dict],
30953091
privateMode: CurrentValueSubject<Bool, Never>(false),
30963092
ignoreUserDictInPrivateMode: CurrentValueSubject<Bool, Never>(false),
3097-
findCompletionFromAllDicts: CurrentValueSubject<Bool, Never>(false),
30983093
dateYomis: [],
30993094
dateConversions: [])
31003095
Global.dictionary.setEntries([:])
@@ -3621,7 +3616,6 @@ final class StateMachineTests: XCTestCase {
36213616
userDictEntries: [:],
36223617
privateMode: privateMode,
36233618
ignoreUserDictInPrivateMode: CurrentValueSubject<Bool, Never>(false),
3624-
findCompletionFromAllDicts: CurrentValueSubject<Bool, Never>(false),
36253619
dateYomis: [],
36263620
dateConversions: [])
36273621

0 commit comments

Comments
 (0)