From 19ae202db7fc69caf39b2a7afb64648d37afabd8 Mon Sep 17 00:00:00 2001 From: Mauro <34335419+Velin92@users.noreply.github.com> Date: Tue, 2 Jul 2024 11:14:15 +0200 Subject: [PATCH] Edit by timeline item only if the event id is missing (#2989) --- .../Services/Timeline/TimelineProxy.swift | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/ElementX/Sources/Services/Timeline/TimelineProxy.swift b/ElementX/Sources/Services/Timeline/TimelineProxy.swift index 45ece851c..a554b1e7e 100644 --- a/ElementX/Sources/Services/Timeline/TimelineProxy.swift +++ b/ElementX/Sources/Services/Timeline/TimelineProxy.swift @@ -158,7 +158,12 @@ final class TimelineProxy: TimelineProxyProtocol { intentionalMentions: IntentionalMentions) async -> Result { MXLog.info("Editing timeline item: \(timelineItemID)") - guard let eventTimelineItem = await timelineProvider.itemProxies.firstEventTimelineItemUsingID(timelineItemID) else { + let editMode: EditMode + if let eventID = timelineItemID.eventID { + editMode = .remote(eventID: eventID) + } else if let eventTimelineItem = await timelineProvider.itemProxies.firstEventTimelineItemUsingID(timelineItemID) { + editMode = .local(item: eventTimelineItem) + } else { MXLog.error("Unknown timeline item: \(timelineItemID)") return .failure(.failedEditing) } @@ -168,8 +173,13 @@ final class TimelineProxy: TimelineProxyProtocol { intentionalMentions: intentionalMentions.toRustMentions()) do { - guard try await timeline.edit(item: eventTimelineItem, newContent: messageContent) == true else { - return .failure(.failedEditing) + switch editMode { + case let .local(item): + guard try await timeline.edit(item: item, newContent: messageContent) == true else { + return .failure(.failedEditing) + } + case let .remote(eventID): + try await timeline.editByEventId(eventId: eventID, newContent: messageContent) } MXLog.info("Finished editing timeline item: \(timelineItemID)") @@ -615,3 +625,11 @@ extension Array where Element == TimelineItemProxy { return eventTimelineItemProxy?.item } } + +private enum EditMode { + /// edit for a message that is also found locally as a timeline item + case local(item: EventTimelineItem) + + /// edit for a message that was not found locally + case remote(eventID: String) +}