Switch to prefixed IDs and tell agents which Mac a message came from

This commit is contained in:
Ian Gulliver
2026-10-20 23:15:19 -07:00
parent f1296ba13d
commit 59bf17189d
42 changed files with 770 additions and 145 deletions
+39
View File
@@ -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()