Nathan Mattes 0c224f47df
Implement post editing / edit history (#875)
Co-authored-by: Marcus Kida <marcus.kida@bearologics.com>
Co-authored-by: Jed Fox <git@jedfox.com>
2023-03-02 11:06:13 +01:00

227 lines
6.7 KiB
Swift

// Copyright © 2023 Mastodon gGmbH. All rights reserved.
import Foundation
import CoreData
public final class StatusEdit: NSManagedObject {
public final class Poll: NSObject, Codable {
public final class Option: NSObject, Codable {
public let title: String
public init(title: String) {
self.title = title
}
}
public let options: [Option]
public init(options: [Option]) {
self.options = options
}
}
// sourcery: autoUpdatableObject, autoGenerateProperty
@NSManaged public var createdAt: Date
// sourcery: autoUpdatableObject, autoGenerateProperty
@NSManaged public var content: String
// sourcery: autoUpdatableObject, autoGenerateProperty
@NSManaged public var sensitive: Bool
// sourcery: autoUpdatableObject, autoGenerateProperty
@NSManaged public var spoilerText: String?
// MARK: - AutoGenerateProperty
// sourcery:inline:StatusEdit.AutoGenerateProperty
// Generated using Sourcery
// DO NOT EDIT
public struct Property {
public let createdAt: Date
public let content: String
public let sensitive: Bool
public let spoilerText: String?
public let emojis: [MastodonEmoji]
public let attachments: [MastodonAttachment]
public let poll: Poll?
public init(
createdAt: Date,
content: String,
sensitive: Bool,
spoilerText: String?,
emojis: [MastodonEmoji],
attachments: [MastodonAttachment],
poll: Poll?
) {
self.createdAt = createdAt
self.content = content
self.sensitive = sensitive
self.spoilerText = spoilerText
self.emojis = emojis
self.attachments = attachments
self.poll = poll
}
}
public func configure(property: Property) {
self.createdAt = property.createdAt
self.content = property.content
self.sensitive = property.sensitive
self.spoilerText = property.spoilerText
self.emojis = property.emojis
self.attachments = property.attachments
self.poll = property.poll
}
public func update(property: Property) {
update(createdAt: property.createdAt)
update(content: property.content)
update(sensitive: property.sensitive)
update(spoilerText: property.spoilerText)
update(emojis: property.emojis)
update(attachments: property.attachments)
update(poll: property.poll)
}
// sourcery:end
// sourcery: autoUpdatableObject, autoGenerateProperty
@objc public var emojis: [MastodonEmoji] {
get {
let keyPath = #keyPath(StatusEdit.emojis)
willAccessValue(forKey: keyPath)
let _data = primitiveValue(forKey: keyPath) as? Data
didAccessValue(forKey: keyPath)
do {
guard let data = _data else { return [] }
let emojis = try JSONDecoder().decode([MastodonEmoji].self, from: data)
return emojis
} catch {
assertionFailure(error.localizedDescription)
return []
}
}
set {
let keyPath = #keyPath(StatusEdit.emojis)
let data = try? JSONEncoder().encode(newValue)
willChangeValue(forKey: keyPath)
setPrimitiveValue(data, forKey: keyPath)
didChangeValue(forKey: keyPath)
}
}
}
extension StatusEdit {
// sourcery: autoUpdatableObject, autoGenerateProperty
@objc public var attachments: [MastodonAttachment] {
get {
let keyPath = #keyPath(StatusEdit.attachments)
willAccessValue(forKey: keyPath)
let _data = primitiveValue(forKey: keyPath) as? Data
didAccessValue(forKey: keyPath)
do {
guard let data = _data else { return [] }
let attachments = try JSONDecoder().decode([MastodonAttachment].self, from: data)
return attachments
} catch {
assertionFailure(error.localizedDescription)
return []
}
}
set {
let keyPath = #keyPath(StatusEdit.attachments)
let data = try? JSONEncoder().encode(newValue)
willChangeValue(forKey: keyPath)
setPrimitiveValue(data, forKey: keyPath)
didChangeValue(forKey: keyPath)
}
}
}
extension StatusEdit {
// sourcery: autoUpdatableObject, autoGenerateProperty
@objc public var poll: Poll? {
get {
let keyPath = #keyPath(StatusEdit.poll)
willAccessValue(forKey: keyPath)
let _data = primitiveValue(forKey: keyPath) as? Data
didAccessValue(forKey: keyPath)
do {
guard let data = _data else { return nil }
let poll = try JSONDecoder().decode(Poll.self, from: data)
return poll
} catch {
return nil
}
}
set {
let keyPath = #keyPath(StatusEdit.poll)
let data = try? JSONEncoder().encode(newValue)
willChangeValue(forKey: keyPath)
setPrimitiveValue(data, forKey: keyPath)
didChangeValue(forKey: keyPath)
}
}
}
extension StatusEdit: Managed {
@discardableResult
public static func insert(
into context: NSManagedObjectContext,
property: Property
) -> StatusEdit {
let object: StatusEdit = context.insertObject()
object.configure(property: property)
return object
}
}
extension StatusEdit: AutoUpdatableObject {
// sourcery:inline:StatusEdit.AutoUpdatableObject
// Generated using Sourcery
// DO NOT EDIT
public func update(createdAt: Date) {
if self.createdAt != createdAt {
self.createdAt = createdAt
}
}
public func update(content: String) {
if self.content != content {
self.content = content
}
}
public func update(sensitive: Bool) {
if self.sensitive != sensitive {
self.sensitive = sensitive
}
}
public func update(spoilerText: String?) {
if self.spoilerText != spoilerText {
self.spoilerText = spoilerText
}
}
public func update(emojis: [MastodonEmoji]) {
if self.emojis != emojis {
self.emojis = emojis
}
}
public func update(attachments: [MastodonAttachment]) {
if self.attachments != attachments {
self.attachments = attachments
}
}
public func update(poll: Poll?) {
if self.poll != poll {
self.poll = poll
}
}
// sourcery:end
}