Simplify the import logic for dictionary
This commit is contained in:
parent
7d12c50fcb
commit
fb69db2fe9
@ -110,48 +110,45 @@ class DictionaryImportExportService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var existingReplacements = UserDefaults.standard.dictionary(forKey: self.wordReplacementsKey) as? [String: String] ?? [:]
|
var existingReplacements = UserDefaults.standard.dictionary(forKey: self.wordReplacementsKey) as? [String: String] ?? [:]
|
||||||
|
var addedCount = 0
|
||||||
|
var updatedCount = 0
|
||||||
|
|
||||||
var replacementToOriginals: [String: Set<String>] = [:]
|
for (importedKey, importedReplacement) in importedData.wordReplacements {
|
||||||
|
let normalizedImportedKey = self.normalizeReplacementKey(importedKey)
|
||||||
|
let importedWords = self.extractWords(from: normalizedImportedKey)
|
||||||
|
|
||||||
for (originals, replacement) in existingReplacements {
|
var modifiedExisting: [String: String] = [:]
|
||||||
let replacementLower = replacement.lowercased()
|
for (existingKey, existingReplacement) in existingReplacements {
|
||||||
let words = originals.split(separator: ",").map { $0.trimmingCharacters(in: .whitespaces) }
|
var existingWords = self.extractWords(from: existingKey)
|
||||||
replacementToOriginals[replacementLower, default: []].formUnion(words)
|
var modified = false
|
||||||
}
|
|
||||||
|
|
||||||
for (originals, replacement) in importedData.wordReplacements {
|
for importedWord in importedWords {
|
||||||
let replacementLower = replacement.lowercased()
|
if let index = existingWords.firstIndex(where: { $0.lowercased() == importedWord.lowercased() }) {
|
||||||
let words = originals.split(separator: ",").map { $0.trimmingCharacters(in: .whitespaces) }
|
existingWords.remove(at: index)
|
||||||
replacementToOriginals[replacementLower, default: []].formUnion(words)
|
modified = true
|
||||||
}
|
|
||||||
|
|
||||||
var mergedReplacements: [String: String] = [:]
|
|
||||||
for (replacementLower, originals) in replacementToOriginals {
|
|
||||||
var uniqueOriginals: [String] = []
|
|
||||||
var seenLower = Set<String>()
|
|
||||||
|
|
||||||
for original in originals {
|
|
||||||
let originalLower = original.lowercased()
|
|
||||||
if !seenLower.contains(originalLower) {
|
|
||||||
uniqueOriginals.append(original)
|
|
||||||
seenLower.insert(originalLower)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mergedKey = uniqueOriginals.sorted().joined(separator: ", ")
|
if !existingWords.isEmpty {
|
||||||
|
let newKey = existingWords.joined(separator: ", ")
|
||||||
let replacement = existingReplacements.first(where: { $0.value.lowercased() == replacementLower })?.value
|
modifiedExisting[newKey] = existingReplacement
|
||||||
?? importedData.wordReplacements.first(where: { $0.value.lowercased() == replacementLower })?.value
|
|
||||||
?? replacementLower
|
|
||||||
|
|
||||||
mergedReplacements[mergedKey] = replacement
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UserDefaults.standard.set(mergedReplacements, forKey: self.wordReplacementsKey)
|
if modified {
|
||||||
|
updatedCount += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
existingReplacements = modifiedExisting
|
||||||
|
existingReplacements[normalizedImportedKey] = importedReplacement
|
||||||
|
addedCount += 1
|
||||||
|
}
|
||||||
|
|
||||||
|
UserDefaults.standard.set(existingReplacements, forKey: self.wordReplacementsKey)
|
||||||
|
|
||||||
var message = "Dictionary data imported successfully from \(url.lastPathComponent).\n\n"
|
var message = "Dictionary data imported successfully from \(url.lastPathComponent).\n\n"
|
||||||
message += "Dictionary Items: \(newWordsAdded) added, \(originalExistingCount) kept\n"
|
message += "Dictionary Items: \(newWordsAdded) added, \(originalExistingCount) kept\n"
|
||||||
message += "Word Replacements: Merged into \(mergedReplacements.count) total rules"
|
message += "Word Replacements: \(addedCount) added, \(updatedCount) updated"
|
||||||
|
|
||||||
self.showAlert(title: "Import Successful", message: message)
|
self.showAlert(title: "Import Successful", message: message)
|
||||||
|
|
||||||
@ -164,6 +161,18 @@ class DictionaryImportExportService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func normalizeReplacementKey(_ key: String) -> String {
|
||||||
|
let words = extractWords(from: key)
|
||||||
|
return words.joined(separator: ", ")
|
||||||
|
}
|
||||||
|
|
||||||
|
private func extractWords(from key: String) -> [String] {
|
||||||
|
return key
|
||||||
|
.split(separator: ",")
|
||||||
|
.map { $0.trimmingCharacters(in: .whitespacesAndNewlines) }
|
||||||
|
.filter { !$0.isEmpty }
|
||||||
|
}
|
||||||
|
|
||||||
private func showAlert(title: String, message: String) {
|
private func showAlert(title: String, message: String) {
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
let alert = NSAlert()
|
let alert = NSAlert()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user