Fix replies appearing multiple times in drafts
This commit is contained in:
parent
bb9cef55ea
commit
b6d8232951
|
@ -62,7 +62,7 @@ class Draft: Codable, ObservableObject {
|
||||||
self.attachments = try container.decode([CompositionAttachment].self, forKey: .attachments)
|
self.attachments = try container.decode([CompositionAttachment].self, forKey: .attachments)
|
||||||
self.inReplyToID = try container.decode(String?.self, forKey: .inReplyToID)
|
self.inReplyToID = try container.decode(String?.self, forKey: .inReplyToID)
|
||||||
self.visibility = try container.decode(Status.Visibility.self, forKey: .visibility)
|
self.visibility = try container.decode(Status.Visibility.self, forKey: .visibility)
|
||||||
self.poll = try container.decode(Poll.self, forKey: .poll)
|
self.poll = try container.decode(Poll?.self, forKey: .poll)
|
||||||
self.localOnly = try container.decodeIfPresent(Bool.self, forKey: .localOnly) ?? false
|
self.localOnly = try container.decodeIfPresent(Bool.self, forKey: .localOnly) ?? false
|
||||||
|
|
||||||
self.initialText = try container.decode(String.self, forKey: .initialText)
|
self.initialText = try container.decode(String.self, forKey: .initialText)
|
||||||
|
|
|
@ -34,21 +34,39 @@ class DraftsManager: Codable {
|
||||||
|
|
||||||
private init() {}
|
private init() {}
|
||||||
|
|
||||||
var drafts: [Draft] = []
|
required init(from decoder: Decoder) throws {
|
||||||
|
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||||
|
|
||||||
|
if let dict = try? container.decode([UUID: Draft].self, forKey: .drafts) {
|
||||||
|
self.drafts = dict
|
||||||
|
} else if let array = try? container.decode([Draft].self, forKey: .drafts) {
|
||||||
|
self.drafts = array.reduce(into: [:], { partialResult, draft in
|
||||||
|
partialResult[draft.id] = draft
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
throw DecodingError.dataCorruptedError(forKey: .drafts, in: container, debugDescription: "expected drafts to be a dict or array of drafts")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var drafts: [UUID: Draft] = [:]
|
||||||
var sorted: [Draft] {
|
var sorted: [Draft] {
|
||||||
return drafts.sorted(by: { $0.lastModified > $1.lastModified })
|
return drafts.values.sorted(by: { $0.lastModified > $1.lastModified })
|
||||||
}
|
}
|
||||||
|
|
||||||
func add(_ draft: Draft) {
|
func add(_ draft: Draft) {
|
||||||
drafts.append(draft)
|
drafts[draft.id] = draft
|
||||||
}
|
}
|
||||||
|
|
||||||
func remove(_ draft: Draft) {
|
func remove(_ draft: Draft) {
|
||||||
drafts.removeAll { $0 == draft }
|
drafts.removeValue(forKey: draft.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getBy(id: UUID) -> Draft? {
|
func getBy(id: UUID) -> Draft? {
|
||||||
return drafts.first { $0.id == id }
|
return drafts[id]
|
||||||
|
}
|
||||||
|
|
||||||
|
enum CodingKeys: String, CodingKey {
|
||||||
|
case drafts
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,7 +104,6 @@ extension TuskerNavigationDelegate {
|
||||||
|
|
||||||
func compose(inReplyToID: String? = nil, mentioningAcct: String? = nil) {
|
func compose(inReplyToID: String? = nil, mentioningAcct: String? = nil) {
|
||||||
let draft = apiController.createDraft(inReplyToID: inReplyToID, mentioningAcct: mentioningAcct)
|
let draft = apiController.createDraft(inReplyToID: inReplyToID, mentioningAcct: mentioningAcct)
|
||||||
DraftsManager.shared.add(draft)
|
|
||||||
compose(editing: draft)
|
compose(editing: draft)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue