Pause the voicebroadcast recording if the homeserver is not reachable

This commit is contained in:
Nicolas Mauri 2023-01-20 16:09:18 +01:00
parent fdf1839b12
commit 6f019b8918
2 changed files with 47 additions and 8 deletions

View file

@ -100,14 +100,8 @@ final class AppCoordinator: NSObject, AppCoordinatorType {
if AppDelegate.theDelegate().isOffline {
self.splitViewCoordinator?.showAppStateIndicator(with: VectorL10n.networkOfflineTitle, icon: UIImage(systemName: "wifi.slash"))
// Pause voice broadcast recording without sending pending events.
VoiceBroadcastRecorderProvider.shared.pauseRecordingOnError()
} else {
self.splitViewCoordinator?.hideAppStateIndicator()
// Send pause voice broadcast event.
VoiceBroadcastRecorderProvider.shared.pauseRecording()
}
}

View file

@ -32,6 +32,9 @@ import Foundation
coordinatorsForEventIdentifiers.removeAll()
}
}
didSet {
sessionState = session?.state
}
}
private var coordinatorsForEventIdentifiers = [String: VoiceBroadcastRecorderCoordinator]() {
didSet {
@ -49,9 +52,19 @@ import Foundation
// MARK: Private
private var currentEventIdentifier: String?
private var sessionState: MXSessionState?
private var sessionStateDidChangeObserver: Any?
// MARK: - Setup
private override init() { }
private override init() {
super.init()
self.registerNotificationObservers()
}
deinit {
unregisterNotificationObservers()
}
// MARK: - Public
@ -121,4 +134,36 @@ import Foundation
coordinator = nil
}
}
// MARK: - Notification handling
private func registerNotificationObservers() {
self.sessionStateDidChangeObserver = NotificationCenter.default.addObserver(forName: NSNotification.Name.mxSessionStateDidChange, object: session, queue: nil) { [weak self] notification in
guard let self else { return }
guard let concernedSession = notification.object as? MXSession, self.session === concernedSession else { return }
self.update(sessionState: concernedSession.state)
}
}
private func unregisterNotificationObservers() {
if let observer = self.sessionStateDidChangeObserver {
NotificationCenter.default.removeObserver(observer)
}
}
// MARK: - Session state
private func update(sessionState: MXSessionState) {
let oldState = self.sessionState
self.sessionState = sessionState
switch (oldState, sessionState) {
case (_, .homeserverNotReachable):
pauseRecordingOnError()
case (_, .running):
pauseRecording()
default:
break
}
}
}