Switch to prefixed IDs and tell agents which Mac a message came from
This commit is contained in:
@@ -38,6 +38,45 @@ final class DraftSend {
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func migrateRecordIDs() {
|
||||
var changed = false
|
||||
for v in fetchRecords(FetchDescriptor<VisitRecord>()) where migratedID("tsk", v.taskId) != v.taskId {
|
||||
v.taskId = migratedID("tsk", v.taskId)
|
||||
changed = true
|
||||
}
|
||||
let composerKey = { (key: String) in
|
||||
key.hasPrefix("message:") ? "message:" + migratedID("tsk", String(key.dropFirst("message:".count))) : migratedID("tsk", key)
|
||||
}
|
||||
let task = { (key: String) in migratedID("tsk", key) }
|
||||
let item = { (key: String) in migratedID("inb", key) }
|
||||
func rekey<V>(_ d: [String: V], _ f: (String) -> String) -> [String: V] {
|
||||
Dictionary(d.map { (f($0.key), $0.value) }) { a, _ in a }
|
||||
}
|
||||
for record in fetchRecords(FetchDescriptor<DraftRecord>()) {
|
||||
guard var saved = try? JSONDecoder().decode(Saved.self, from: record.json) else {
|
||||
continue
|
||||
}
|
||||
let comments = saved.comments ?? [:]
|
||||
let moved = saved.composer.keys.contains { composerKey($0) != $0 } || saved.checked.keys.contains { item($0) != $0 } || saved.texts.keys.contains { item($0) != $0 } || comments.keys.contains { task($0) != $0 }
|
||||
guard moved else {
|
||||
continue
|
||||
}
|
||||
saved.composer = rekey(saved.composer, composerKey)
|
||||
saved.checked = rekey(saved.checked, item)
|
||||
saved.texts = rekey(saved.texts, item)
|
||||
saved.comments = saved.comments.map { rekey($0, task) }
|
||||
guard let json = try? JSONEncoder().encode(saved) else {
|
||||
continue
|
||||
}
|
||||
record.json = json
|
||||
changed = true
|
||||
}
|
||||
if changed {
|
||||
saveRecords()
|
||||
}
|
||||
}
|
||||
|
||||
func draftOrigin(_ origin: URL) -> String {
|
||||
let c = URLComponents(url: origin, resolvingAgainstBaseURL: false)!
|
||||
let scheme = (c.scheme ?? "https").lowercased()
|
||||
|
||||
Reference in New Issue
Block a user