mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-29 07:42:40 +00:00
Message editing: Handle encrypted message edits history.
This commit is contained in:
parent
c896d5b919
commit
12896ffc36
3 changed files with 29 additions and 15 deletions
|
@ -37,11 +37,11 @@ final class EditHistoryCoordinator: EditHistoryCoordinatorType {
|
|||
|
||||
// MARK: - Setup
|
||||
|
||||
init(aggregations: MXAggregations,
|
||||
init(session: MXSession,
|
||||
formatter: MXKEventFormatter,
|
||||
event: MXEvent) {
|
||||
|
||||
let editHistoryViewModel = EditHistoryViewModel(aggregations: aggregations, formatter: formatter, event: event)
|
||||
let editHistoryViewModel = EditHistoryViewModel(session: session, formatter: formatter, event: event)
|
||||
let editHistoryViewController = EditHistoryViewController.instantiate(with: editHistoryViewModel)
|
||||
self.editHistoryViewModel = editHistoryViewModel
|
||||
self.editHistoryViewController = editHistoryViewController
|
||||
|
|
|
@ -62,7 +62,7 @@ final class EditHistoryCoordinatorBridgePresenter: NSObject {
|
|||
return
|
||||
}
|
||||
|
||||
let editHistoryCoordinator = EditHistoryCoordinator(aggregations: self.session.aggregations, formatter: formatter, event: self.event)
|
||||
let editHistoryCoordinator = EditHistoryCoordinator(session: self.session, formatter: formatter, event: self.event)
|
||||
editHistoryCoordinator.delegate = self
|
||||
|
||||
let navigationController = RiotNavigationController()
|
||||
|
|
|
@ -30,6 +30,7 @@ final class EditHistoryViewModel: EditHistoryViewModelType {
|
|||
|
||||
// MARK: Private
|
||||
|
||||
private let session: MXSession
|
||||
private let aggregations: MXAggregations
|
||||
private let formatter: MXKEventFormatter
|
||||
private let roomId: String
|
||||
|
@ -48,10 +49,11 @@ final class EditHistoryViewModel: EditHistoryViewModelType {
|
|||
|
||||
// MARK: - Setup
|
||||
|
||||
init(aggregations: MXAggregations,
|
||||
init(session: MXSession,
|
||||
formatter: MXKEventFormatter,
|
||||
event: MXEvent) {
|
||||
self.aggregations = aggregations
|
||||
self.session = session
|
||||
self.aggregations = session.aggregations
|
||||
self.formatter = formatter
|
||||
self.event = event
|
||||
self.roomId = event.roomId
|
||||
|
@ -102,7 +104,8 @@ final class EditHistoryViewModel: EditHistoryViewModelType {
|
|||
}
|
||||
|
||||
self.update(viewState: .loading)
|
||||
self.operation = self.aggregations.replaceEvents(forEvent: self.event.eventId, inRoom: self.roomId, from: self.nextBatch, limit: Pagination.count, success: { [weak self] (response) in
|
||||
|
||||
self.operation = self.aggregations.replaceEvents(forEvent: self.event.eventId, isEncrypted: self.event.isEncrypted, inRoom: self.roomId, from: self.nextBatch, limit: Pagination.count, success: { [weak self] (response) in
|
||||
guard let sself = self else {
|
||||
return
|
||||
}
|
||||
|
@ -129,16 +132,21 @@ final class EditHistoryViewModel: EditHistoryViewModelType {
|
|||
.compactMap { (editEvent) -> EditHistoryMessage? in
|
||||
return self.process(editEvent: editEvent)
|
||||
}
|
||||
|
||||
let allDataLoaded = self.nextBatch == nil
|
||||
let addedCount: Int
|
||||
|
||||
if newMessages.count > 0 {
|
||||
self.messages = newMessages + self.messages
|
||||
let allDataLoaded = self.nextBatch == nil
|
||||
|
||||
let editHistorySections = self.editHistorySections(from: self.messages)
|
||||
|
||||
DispatchQueue.main.async {
|
||||
self.update(viewState: .loaded(sections: editHistorySections, addedCount: newMessages.count, allDataLoaded: allDataLoaded))
|
||||
}
|
||||
self.messages.append(contentsOf: newMessages)
|
||||
addedCount = newMessages.count
|
||||
} else {
|
||||
addedCount = 0
|
||||
}
|
||||
|
||||
let editHistorySections = self.editHistorySections(from: self.messages)
|
||||
|
||||
DispatchQueue.main.async {
|
||||
self.update(viewState: .loaded(sections: editHistorySections, addedCount: addedCount, allDataLoaded: allDataLoaded))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -183,10 +191,16 @@ final class EditHistoryViewModel: EditHistoryViewModelType {
|
|||
print("[EditHistoryViewModel] processEditEvent: Cannot build edited event: \(editEvent.eventId ?? "")")
|
||||
return nil
|
||||
}
|
||||
|
||||
if editedEvent.isEncrypted && editedEvent.clear == nil {
|
||||
if self.session.decryptEvent(editedEvent, inTimeline: nil) == false {
|
||||
print("[EditHistoryViewModel] processEditEvent: Fail to decrypt event: \(editedEvent.eventId ?? "")")
|
||||
}
|
||||
}
|
||||
|
||||
let formatterError = UnsafeMutablePointer<MXKEventFormatterError>.allocate(capacity: 1)
|
||||
guard let message = self.formatter.attributedString(from: editedEvent, with: nil, error: formatterError) else {
|
||||
print("[EditHistoryViewModel] processEditEvent: cannot format(error: \(formatterError)) edited event: \(editEvent.eventId ?? "")")
|
||||
print("[EditHistoryViewModel] processEditEvent: cannot format(error: \(formatterError)) edited event: \(editedEvent.eventId ?? "")")
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue