mastodon-ios/MastodonSDK/Sources/MastodonCore/Persistence/Persistence+StatusEdit.swift

49 lines
1.7 KiB
Swift

// Copyright © 2023 Mastodon gGmbH. All rights reserved.
import CoreData
import CoreDataStack
import MastodonSDK
extension Persistence.StatusEdit {
public static func createOrMerge(
in managedObjectContext: NSManagedObjectContext,
statusEdits: [Mastodon.Entity.StatusEdit],
forStatus status: Status
) {
guard statusEdits.isEmpty == false else { return }
// remove all edits for status
if let editHistory = status.editHistory {
for statusEdit in Array(editHistory) {
managedObjectContext.delete(statusEdit)
}
}
status.update(editHistory: Set())
let persistedEdits = create(in: managedObjectContext, statusEdits: statusEdits, forStatus: status)
status.update(editHistory: Set(persistedEdits))
}
public static func create(
in managedObjectContext: NSManagedObjectContext,
statusEdits: [Mastodon.Entity.StatusEdit],
forStatus status: Status
) -> [StatusEdit] {
var entries: [StatusEdit] = []
for statusEdit in statusEdits {
let property = StatusEdit.Property(createdAt: statusEdit.createdAt, content: statusEdit.content, sensitive: statusEdit.sensitive, spoilerText: statusEdit.spoilerText, emojis: statusEdit.mastodonEmojis, attachments: statusEdit.mastodonAttachments, poll: statusEdit.poll.map { StatusEdit.Poll(options: $0.options.map { StatusEdit.Poll.Option(title: $0.title) } ) })
let statusEditEntry = StatusEdit.insert(into: managedObjectContext, property: property)
entries.append(statusEditEntry)
}
status.update(editHistory: Set(entries))
return entries
}
}