Separate channel voice chat localization

This commit is contained in:
Ali
2021-08-29 18:13:57 +04:00
parent eab8e7cf68
commit 235934ae8a
6 changed files with 82 additions and 23 deletions

View File

@@ -265,20 +265,31 @@ open class TelegramBaseController: ViewController, KeyShortcutResponder {
let availableGroupCall: Signal<GroupCallPanelData?, NoError>
if case let .peer(peerId) = groupCallPanelSource {
availableGroupCall = context.account.viewTracker.peerView(peerId)
|> map { peerView -> CachedChannelData.ActiveCall? in
|> map { peerView -> (CachedChannelData.ActiveCall?, EnginePeer?) in
let peer = peerView.peers[peerId].flatMap(EnginePeer.init)
if let cachedData = peerView.cachedData as? CachedChannelData {
return cachedData.activeCall
return (cachedData.activeCall, peer)
} else if let cachedData = peerView.cachedData as? CachedGroupData {
return cachedData.activeCall
return (cachedData.activeCall, peer)
} else {
return nil
return (nil, peer)
}
}
|> distinctUntilChanged
|> mapToSignal { activeCall -> Signal<GroupCallPanelData?, NoError> in
|> distinctUntilChanged(isEqual: { lhs, rhs in
if lhs.0 != rhs.0 {
return false
}
return true
})
|> mapToSignal { activeCall, peer -> Signal<GroupCallPanelData?, NoError> in
guard let activeCall = activeCall else {
return .single(nil)
}
var isChannel = false
if let peer = peer, case let .channel(channel) = peer, case .broadcast = channel.info {
isChannel = true
}
return Signal { [weak context] subscriber in
guard let context = context, let callContextCache = context.cachedGroupCallContexts as? AccountGroupCallContextCacheImpl else {
@@ -288,7 +299,7 @@ open class TelegramBaseController: ViewController, KeyShortcutResponder {
let disposable = MetaDisposable()
callContextCache.impl.syncWith { impl in
let callContext = impl.get(account: context.account, engine: context.engine, peerId: peerId, call: EngineGroupCallDescription(activeCall))
let callContext = impl.get(account: context.account, engine: context.engine, peerId: peerId, isChannel: isChannel, call: EngineGroupCallDescription(activeCall))
disposable.set((callContext.context.panelData
|> deliverOnMainQueue).start(next: { panelData in
callContext.keep()