From fdc446ad10121dc4cee0a7f4a1f1a874bda4d49c Mon Sep 17 00:00:00 2001 From: Peter Date: Mon, 8 May 2017 15:37:12 +0300 Subject: [PATCH] no message --- TelegramCore/CallSessionManager.swift | 30 +++++++++++++-------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/TelegramCore/CallSessionManager.swift b/TelegramCore/CallSessionManager.swift index ad62de8c63..85bc0f79dd 100644 --- a/TelegramCore/CallSessionManager.swift +++ b/TelegramCore/CallSessionManager.swift @@ -30,7 +30,7 @@ enum CallSessionInternalState { case confirming(id: Int64, accessHash: Int64, key: Data, keyId: Int64, keyVisualHash: Data, disposable: Disposable) case active(id: Int64, accessHash: Int64, beginTimestamp: Int32, key: Data, keyId: Int64, keyVisualHash: Data, connections: CallSessionConnectionSet) case dropping(Disposable) - case terminated(CallSessionTerminationReason) + case terminated(reason: CallSessionTerminationReason, reportRating: Bool) } public typealias CallSessionInternalId = Int64 @@ -47,7 +47,7 @@ public enum CallSessionState { case requesting(ringing: Bool) case active(key: Data, keyVisualHash: Data, connections: CallSessionConnectionSet) case dropping - case terminated(CallSessionTerminationReason) + case terminated(reason: CallSessionTerminationReason, reportRating: Bool) fileprivate init(_ context: CallSessionContext) { switch context.state { @@ -63,8 +63,8 @@ public enum CallSessionState { self = .active(key: key, keyVisualHash: keyVisualHash, connections: connections) case .dropping: self = .dropping - case let .terminated(reason): - self = .terminated(reason) + case let .terminated(reason, reportRating): + self = .terminated(reason: reason, reportRating: reportRating) } } } @@ -262,7 +262,7 @@ private final class CallSessionManagerContext { dropData = (id, accessHash, .abort) case let .requesting(_, disposable): disposable.dispose() - context.state = .terminated(.ended) + context.state = .terminated(reason: .ended, reportRating: false) self.contextUpdated(internalId: internalId) if context.isEmpty { self.contexts.removeValue(forKey: internalId) @@ -274,7 +274,7 @@ private final class CallSessionManagerContext { context.state = .dropping((dropCallSession(network: self.network, addUpdates: self.addUpdates, stableId: id, accessHash: accessHash, reason: reason) |> deliverOn(self.queue)).start(completed: { [weak self] in if let strongSelf = self { if let context = strongSelf.contexts[internalId] { - context.state = .terminated(.ended) + context.state = .terminated(reason: .ended, reportRating: false) strongSelf.contextUpdated(internalId: internalId) if context.isEmpty { strongSelf.contexts.removeValue(forKey: internalId) @@ -377,30 +377,31 @@ private final class CallSessionManagerContext { assertionFailure() } } - case let .phoneCallDiscarded(_, id, reason, duration): + case let .phoneCallDiscarded(flags, id, reason, duration): + let reportRating = (flags & (1 << 2)) != 0 if let internalId = self.contextIdByStableId[id] { if let context = self.contexts[internalId] { switch context.state { case let .accepting(_, _, _, _, disposable): disposable.dispose() - context.state = .terminated(.ended) + context.state = .terminated(reason: .ended, reportRating: reportRating) self.contextUpdated(internalId: internalId) case .active: - context.state = .terminated(.ended) + context.state = .terminated(reason: .ended, reportRating: reportRating) self.contextUpdated(internalId: internalId) case .awaitingConfirmation, .requested: - context.state = .terminated(.ended) + context.state = .terminated(reason: .ended, reportRating: reportRating) self.contextUpdated(internalId: internalId) case let .confirming(_, _, _, _, _, disposable): disposable.dispose() - context.state = .terminated(.ended) + context.state = .terminated(reason: .ended, reportRating: reportRating) self.contextUpdated(internalId: internalId) case let .requesting(_, disposable): disposable.dispose() - context.state = .terminated(.ended) + context.state = .terminated(reason: .ended, reportRating: reportRating) self.contextUpdated(internalId: internalId) case .ringing: - context.state = .terminated(.ended) + context.state = .terminated(reason: .ended, reportRating: reportRating) self.ringingStatesUpdated() self.contextUpdated(internalId: internalId) case .dropping, .terminated: @@ -502,7 +503,7 @@ private final class CallSessionManagerContext { strongSelf.contextIdByStableId[id] = internalId strongSelf.contextUpdated(internalId: internalId) case let .failed(error): - context.state = .terminated(.error(error)) + context.state = .terminated(reason: .error(error), reportRating: false) strongSelf.contextUpdated(internalId: internalId) if context.isEmpty { strongSelf.contexts.removeValue(forKey: internalId) @@ -575,7 +576,6 @@ public final class CallSessionManager { } public func request(peerId: PeerId) -> Signal { - let queue = self.queue return Signal { [weak self] subscriber in let disposable = MetaDisposable()