Skip to content

Commit ef03da3

Browse files
committed
Merge branch 'develop' into ismail/5845_thread_list_edits
2 parents e320966 + f1f7c6a commit ef03da3

File tree

3 files changed

+38
-8
lines changed

3 files changed

+38
-8
lines changed

MatrixSDK/Threads/MXThread.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ public class MXThread: NSObject, MXThreadProtocol {
6262
/// - Returns: true if handled, false otherwise
6363
@discardableResult
6464
internal func addEvent(_ event: MXEvent, direction: MXTimelineDirection) -> Bool {
65+
guard eventsMap[event.eventId] == nil else {
66+
// do not add the event if already exists
67+
return false
68+
}
6569
eventsMap[event.eventId] = event
6670
updateNotificationsCount()
6771
if let sender = event.sender,
@@ -88,6 +92,15 @@ public class MXThread: NSObject, MXThreadProtocol {
8892
liveTimeline?.notifyListeners(newEvent, direction: .forwards)
8993
return true
9094
}
95+
96+
@discardableResult
97+
internal func redactEvent(withId eventId: String) -> Bool {
98+
guard eventsMap[eventId] != nil else {
99+
return false
100+
}
101+
eventsMap.removeValue(forKey: eventId)
102+
return true
103+
}
91104

92105
/// Number of notifications in the thread
93106
public private(set) var notificationCount: UInt = 0

MatrixSDK/Threads/MXThreadingService.swift

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -390,19 +390,35 @@ public class MXThreadingService: NSObject {
390390
completion?(false)
391391
return
392392
}
393-
if let redactedEventId = event.redacts,
394-
let thread = thread(withId: redactedEventId),
395-
let newEvent = session.store?.event(withEventId: redactedEventId,
396-
inRoom: event.roomId) {
397-
session.decryptEvents([newEvent], inTimeline: nil) { _ in
393+
guard let redactedEventId = event.redacts,
394+
let redactedEvent = session.store?.event(withEventId: redactedEventId,
395+
inRoom: event.roomId) else {
396+
completion?(false)
397+
return
398+
}
399+
400+
session.decryptEvents([redactedEvent], inTimeline: nil) { _ in
401+
if let thread = self.thread(withId: redactedEventId) {
398402
// event is a thread root
399-
let handled = thread.replaceEvent(withId: redactedEventId, with: newEvent)
403+
let handled = thread.replaceEvent(withId: redactedEventId, with: redactedEvent)
400404
self.notifyDidUpdateThreads()
401405
completion?(handled)
406+
} else if let roomId = redactedEvent.roomId {
407+
var handled = false
408+
self.threads.filter { $1.roomId == roomId }.values.forEach {
409+
let handledForThread = $0.redactEvent(withId: redactedEventId)
410+
if handled == false {
411+
handled = handledForThread
412+
}
413+
}
414+
if handled {
415+
self.notifyDidUpdateThreads()
416+
}
417+
completion?(handled)
418+
} else {
419+
completion?(false)
402420
}
403-
return
404421
}
405-
completion?(false)
406422
}
407423

408424
private func unsortedThreads(inRoom roomId: String) -> [MXThread] {

changelog.d/5877.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
MXThread: Fix redacted events & fix undecrypted events.

0 commit comments

Comments
 (0)