From b72a6ae839281bfa00441a8810a5e85c288f9426 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Fri, 3 Jan 2020 16:05:25 +0400 Subject: [PATCH] Reflect reconnecting state in calls --- .../Sources/PresentationCallManager.swift | 1 + .../Sources/CallControllerNode.swift | 12 ++++++++++-- .../Sources/PresentationCall.swift | 17 ++++++++++++++--- .../TelegramUI/SharedAccountContext.swift | 2 +- .../Sources/OngoingCallContext.swift | 3 +++ .../libtgvoip/OngoingCallThreadLocalContext.h | 3 ++- .../libtgvoip/OngoingCallThreadLocalContext.mm | 3 +++ 7 files changed, 34 insertions(+), 7 deletions(-) diff --git a/submodules/AccountContext/Sources/PresentationCallManager.swift b/submodules/AccountContext/Sources/PresentationCallManager.swift index 17ee887c73..0e95feda69 100644 --- a/submodules/AccountContext/Sources/PresentationCallManager.swift +++ b/submodules/AccountContext/Sources/PresentationCallManager.swift @@ -16,6 +16,7 @@ public enum PresentationCallState: Equatable { case requesting(Bool) case connecting(Data?) case active(Double, Int32?, Data) + case reconnecting(Double, Int32?, Data) case terminating case terminated(CallId?, CallSessionTerminationReason?, Bool) } diff --git a/submodules/TelegramCallsUI/Sources/CallControllerNode.swift b/submodules/TelegramCallsUI/Sources/CallControllerNode.swift index 76496d7ce5..597b11e526 100644 --- a/submodules/TelegramCallsUI/Sources/CallControllerNode.swift +++ b/submodules/TelegramCallsUI/Sources/CallControllerNode.swift @@ -232,10 +232,18 @@ final class CallControllerNode: ASDisplayNode { text += "\n\(self.statusNode.subtitle)" } statusValue = .text(text) - case let .active(timestamp, reception, keyVisualHash): + case .active(let timestamp, let reception, let keyVisualHash), .reconnecting(let timestamp, let reception, let keyVisualHash): let strings = self.presentationData.strings + var isReconnecting = false + if case .reconnecting = callState { + isReconnecting = true + } statusValue = .timer({ value in - return strings.Call_StatusOngoing(value).0 + if isReconnecting { + return strings.Call_StatusConnecting + } else { + return strings.Call_StatusOngoing(value).0 + } }, timestamp) if self.keyTextData?.0 != keyVisualHash { let text = stringForEmojiHashOfData(keyVisualHash, 4)! diff --git a/submodules/TelegramCallsUI/Sources/PresentationCall.swift b/submodules/TelegramCallsUI/Sources/PresentationCall.swift index 45e2e3294d..5fcfaefa4a 100644 --- a/submodules/TelegramCallsUI/Sources/PresentationCall.swift +++ b/submodules/TelegramCallsUI/Sources/PresentationCall.swift @@ -461,6 +461,15 @@ public final class PresentationCallImpl: PresentationCall { self.activeTimestamp = timestamp } presentationState = .active(timestamp, reception, keyVisualHash) + case .reconnecting: + let timestamp: Double + if let activeTimestamp = self.activeTimestamp { + timestamp = activeTimestamp + } else { + timestamp = CFAbsoluteTimeGetCurrent() + self.activeTimestamp = timestamp + } + presentationState = .reconnecting(timestamp, reception, keyVisualHash) } } else { presentationState = .connecting(keyVisualHash) @@ -520,7 +529,7 @@ public final class PresentationCallImpl: PresentationCall { } if let presentationState = presentationState { self.statePromise.set(presentationState) - self.updateTone(presentationState, previous: previous) + self.updateTone(presentationState, callContextState: callContextState, previous: previous) } if !self.shouldPresentCallRating { @@ -530,9 +539,11 @@ public final class PresentationCallImpl: PresentationCall { } } - private func updateTone(_ state: PresentationCallState, previous: CallSession?) { + private func updateTone(_ state: PresentationCallState, callContextState: OngoingCallContextState?, previous: CallSession?) { var tone: PresentationCallTone? - if let previous = previous { + if let callContextState = callContextState, case .reconnecting = callContextState { + tone = .connecting + } else if let previous = previous { switch previous.state { case .accepting, .active, .dropping, .requesting: switch state { diff --git a/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift b/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift index 6f256e4210..c29c7683dd 100644 --- a/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift +++ b/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift @@ -598,7 +598,7 @@ public final class SharedAccountContextImpl: SharedAccountContext { resolvedText = .inProgress(nil) case .terminated: resolvedText = .none - case let .active(timestamp, _, _): + case .active(let timestamp, _, _), .reconnecting(let timestamp, _, _): resolvedText = .inProgress(timestamp) } } else { diff --git a/submodules/TelegramVoip/Sources/OngoingCallContext.swift b/submodules/TelegramVoip/Sources/OngoingCallContext.swift index 31b1a278e1..210144168a 100644 --- a/submodules/TelegramVoip/Sources/OngoingCallContext.swift +++ b/submodules/TelegramVoip/Sources/OngoingCallContext.swift @@ -74,6 +74,7 @@ private let setupLogs: Bool = { public enum OngoingCallContextState { case initializing case connected + case reconnecting case failed } @@ -151,6 +152,8 @@ public final class OngoingCallContext { return .connected case .failed: return .failed + case .reconnecting: + return .reconnecting default: return .failed } diff --git a/submodules/libtgvoip/OngoingCallThreadLocalContext.h b/submodules/libtgvoip/OngoingCallThreadLocalContext.h index c1216a3935..374c9dc6a2 100644 --- a/submodules/libtgvoip/OngoingCallThreadLocalContext.h +++ b/submodules/libtgvoip/OngoingCallThreadLocalContext.h @@ -18,7 +18,8 @@ typedef NS_ENUM(int32_t, OngoingCallState) { OngoingCallStateInitializing, OngoingCallStateConnected, - OngoingCallStateFailed + OngoingCallStateFailed, + OngoingCallStateReconnecting }; typedef NS_ENUM(int32_t, OngoingCallNetworkType) { diff --git a/submodules/libtgvoip/OngoingCallThreadLocalContext.mm b/submodules/libtgvoip/OngoingCallThreadLocalContext.mm index 995f3d9e91..c98bcf146f 100644 --- a/submodules/libtgvoip/OngoingCallThreadLocalContext.mm +++ b/submodules/libtgvoip/OngoingCallThreadLocalContext.mm @@ -374,6 +374,9 @@ static int callControllerDataSavingForType(OngoingCallDataSaving type) { case tgvoip::STATE_FAILED: callState = OngoingCallStateFailed; break; + case tgvoip::STATE_RECONNECTING: + callState = OngoingCallStateReconnecting; + break; default: break; }