mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
Separate channel voice chat localization
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user