DeviceVerificationVerifyViewController: Wait view loading before observing device transaction change and unregister after matching an expected case.

This commit is contained in:
SBiOSoftWhare
2019-12-10 15:45:36 +01:00
parent 5a350302ae
commit e235268c41
3 changed files with 12 additions and 2 deletions
@@ -41,8 +41,6 @@ final class DeviceVerificationVerifyViewModel: DeviceVerificationVerifyViewModel
self.transaction = transaction
self.emojis = self.transaction.sasEmoji
self.decimal = self.transaction.sasDecimal
self.registerTransactionDidStateChangeNotification(transaction: transaction)
}
deinit {
@@ -52,6 +50,8 @@ final class DeviceVerificationVerifyViewModel: DeviceVerificationVerifyViewModel
func process(viewAction: DeviceVerificationVerifyViewAction) {
switch viewAction {
case .loadData:
self.registerTransactionDidStateChangeNotification(transaction: transaction)
case .confirm:
self.confirmTransaction()
case .complete:
@@ -83,6 +83,10 @@ final class DeviceVerificationVerifyViewModel: DeviceVerificationVerifyViewModel
private func registerTransactionDidStateChangeNotification(transaction: MXSASTransaction) {
NotificationCenter.default.addObserver(self, selector: #selector(transactionDidStateChange(notification:)), name: NSNotification.Name.MXDeviceVerificationTransactionDidChange, object: transaction)
}
private func unregisterTransactionDidStateChangeNotification() {
NotificationCenter.default.removeObserver(self, name: .MXDeviceVerificationTransactionDidChange, object: nil)
}
@objc private func transactionDidStateChange(notification: Notification) {
guard let transaction = notification.object as? MXSASTransaction else {
@@ -91,22 +95,26 @@ final class DeviceVerificationVerifyViewModel: DeviceVerificationVerifyViewModel
switch transaction.state {
case MXSASTransactionStateVerified:
self.unregisterTransactionDidStateChangeNotification()
self.update(viewState: .loaded)
self.coordinatorDelegate?.deviceVerificationVerifyViewModelDidComplete(self)
case MXSASTransactionStateCancelled:
guard let reason = transaction.reasonCancelCode else {
return
}
self.unregisterTransactionDidStateChangeNotification()
self.update(viewState: .cancelled(reason))
case MXSASTransactionStateError:
guard let error = transaction.error else {
return
}
self.unregisterTransactionDidStateChangeNotification()
self.update(viewState: .error(error))
case MXSASTransactionStateCancelledByMe:
guard let reason = transaction.reasonCancelCode else {
return
}
self.unregisterTransactionDidStateChangeNotification()
self.update(viewState: .cancelledByMe(reason))
default:
break