Revert decryption banner & try fix context menu crash. (#525)

This commit is contained in:
Doug
2023-02-03 16:24:28 +00:00
committed by GitHub
parent 3015896d46
commit dae8f93b40
9 changed files with 23 additions and 85 deletions
@@ -29,7 +29,6 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
private let timelineController: RoomTimelineControllerProtocol
private let timelineViewFactory: RoomTimelineViewFactoryProtocol
// swiftlint:disable:next cyclomatic_complexity
init(timelineController: RoomTimelineControllerProtocol,
timelineViewFactory: RoomTimelineViewFactoryProtocol,
mediaProvider: MediaProviderProtocol,
@@ -67,10 +66,6 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
if self.state.isBackPaginating != isBackPaginating {
self.state.isBackPaginating = isBackPaginating
}
case .hasEncryptedItems(let hasEncryptedItems):
if self.state.showEncryptionBanner != hasEncryptedItems {
self.state.showEncryptionBanner = hasEncryptedItems
}
}
}
.store(in: &cancellables)
@@ -118,8 +113,6 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
state.bindings.composerText = ""
case .markRoomAsRead:
await markRoomAsRead()
case .retryDecryption:
retryDecryption()
case .contextMenuAction(let itemID, let action):
processContentMenuAction(action, itemID: itemID)
}
@@ -189,19 +182,6 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
}
}
/// Retry decrypting any encrypted items in the timeline.
private func retryDecryption() {
Task {
let firstEncryptedItem = state.items.first { $0.sessionID != nil }
if let sessionID = firstEncryptedItem?.sessionID {
// Request for the first encrypted item to be decrypted as the SDK
// will continue to decrypt any following items automatically.
await timelineController.retryDecryption(for: sessionID)
}
}
}
private func displayError(_ type: RoomScreenErrorType) {
switch type {
case .alert(let message):
@@ -244,7 +224,12 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
actions.append(.redact)
}
let debugActions: [TimelineItemContextMenuAction] = [.viewSource]
var debugActions: [TimelineItemContextMenuAction] = [.viewSource]
if let item = timelineItem as? EncryptedRoomTimelineItem,
case let .megolmV1AesSha2(sessionID) = item.encryptionType {
debugActions.append(.retryDecryption(sessionID: sessionID))
}
return .init(actions: actions, debugActions: debugActions)
}
@@ -286,6 +271,10 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
let debugDescription = timelineController.debugDescription(for: item.id)
MXLog.info(debugDescription)
state.bindings.debugInfo = .init(title: "Timeline item", content: debugDescription)
case .retryDecryption(let sessionID):
Task {
await timelineController.retryDecryption(for: sessionID)
}
}
if action.switchToDefaultComposer {
@@ -302,14 +291,3 @@ extension RoomScreenViewModel {
mediaProvider: MockMediaProvider(),
roomName: "Preview room")
}
private extension RoomTimelineViewProvider {
/// The item's session ID if it was unable to decrypt and uses megolm.
/// This will be nil for items that have already been decrypted.
var sessionID: String? {
guard case let .encrypted(item) = self,
case let .megolmV1AesSha2(sessionID) = item.encryptionType
else { return nil }
return sessionID
}
}