mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Voice chat fixes
This commit is contained in:
parent
8f96ea06b6
commit
0c2085d628
@ -185,7 +185,6 @@
|
|||||||
"PUSH_CHAT_MESSAGES_1" = "%2$@|%1$@ sent a message";
|
"PUSH_CHAT_MESSAGES_1" = "%2$@|%1$@ sent a message";
|
||||||
"PUSH_CHAT_MESSAGES_any" = "%2$@|%1$@ sent %3$d messages";
|
"PUSH_CHAT_MESSAGES_any" = "%2$@|%1$@ sent %3$d messages";
|
||||||
"PUSH_CHAT_ALBUM" = "%2$@|%1$@ sent an album";
|
"PUSH_CHAT_ALBUM" = "%2$@|%1$@ sent an album";
|
||||||
"PUSH_CHAT_MESSAGE_DOCS" = "%2$@|%1$@ sent %3$d files";
|
|
||||||
"PUSH_CHAT_MESSAGE_DOCS_1" = "%2$@|%1$@ sent a file";
|
"PUSH_CHAT_MESSAGE_DOCS_1" = "%2$@|%1$@ sent a file";
|
||||||
"PUSH_CHAT_MESSAGE_DOCS_any" = "%2$@|%1$@ sent %3$d files";
|
"PUSH_CHAT_MESSAGE_DOCS_any" = "%2$@|%1$@ sent %3$d files";
|
||||||
|
|
||||||
@ -2491,10 +2490,12 @@ Unused sets are archived when you add more.";
|
|||||||
|
|
||||||
"Call.CallInProgressTitle" = "Call in Progress";
|
"Call.CallInProgressTitle" = "Call in Progress";
|
||||||
"Call.CallInProgressMessage" = "Finish call with %1$@ and start a new one with %2$@?";
|
"Call.CallInProgressMessage" = "Finish call with %1$@ and start a new one with %2$@?";
|
||||||
|
"Call.CallInProgressVoiceChatMessage" = "Finish call with %1$@ and start a voice chat with %2$@?";
|
||||||
"Call.ExternalCallInProgressMessage" = "Please finish the current call first.";
|
"Call.ExternalCallInProgressMessage" = "Please finish the current call first.";
|
||||||
|
|
||||||
"Call.VoiceChatInProgressTitle" = "Voice Chat in Progress";
|
"Call.VoiceChatInProgressTitle" = "Voice Chat in Progress";
|
||||||
"Call.VoiceChatInProgressMessage" = "Leave voice chat in %1$@ and start a new one with %2$@?";
|
"Call.VoiceChatInProgressMessage" = "Leave voice chat in %1$@ and start a new one with %2$@?";
|
||||||
|
"Call.VoiceChatInProgressCallMessage" = "Leave voice chat in %1$@ and start a call with %2$@?";
|
||||||
|
|
||||||
"Call.Message" = "Message";
|
"Call.Message" = "Message";
|
||||||
|
|
||||||
@ -5986,6 +5987,9 @@ Sorry for the inconvenience.";
|
|||||||
"VoiceChat.EndConfirmationText" = "Are you sure you want to end this voice chat?";
|
"VoiceChat.EndConfirmationText" = "Are you sure you want to end this voice chat?";
|
||||||
"VoiceChat.EndConfirmationEnd" = "End";
|
"VoiceChat.EndConfirmationEnd" = "End";
|
||||||
|
|
||||||
|
"VoiceChat.InviteMemberToGroupFirstText" = "%1$@ isn't a member of \"%2$@\" yet. Add them to the group?";
|
||||||
|
"VoiceChat.InviteMemberToGroupFirstAdd" = "Add";
|
||||||
|
|
||||||
"CHAT_VOICECHAT_START" = "%1$@ has started voice chat in the group %2$@";
|
"CHAT_VOICECHAT_START" = "%1$@ has started voice chat in the group %2$@";
|
||||||
"CHAT_VOICECHAT_INVITE" = "%1$@ has invited %3$@ in the group %2$@";
|
"CHAT_VOICECHAT_INVITE" = "%1$@ has invited %3$@ in the group %2$@";
|
||||||
"CHAT_VOICECHAT_INVITE_YOU" = "%1$@ has invited you to voice chat in the group %2$@";
|
"CHAT_VOICECHAT_INVITE_YOU" = "%1$@ has invited you to voice chat in the group %2$@";
|
||||||
|
@ -673,4 +673,7 @@ public protocol AccountContext: class {
|
|||||||
func chatLocationInput(for location: ChatLocation, contextHolder: Atomic<ChatLocationContextHolder?>) -> ChatLocationInput
|
func chatLocationInput(for location: ChatLocation, contextHolder: Atomic<ChatLocationContextHolder?>) -> ChatLocationInput
|
||||||
func chatLocationOutgoingReadState(for location: ChatLocation, contextHolder: Atomic<ChatLocationContextHolder?>) -> Signal<MessageId?, NoError>
|
func chatLocationOutgoingReadState(for location: ChatLocation, contextHolder: Atomic<ChatLocationContextHolder?>) -> Signal<MessageId?, NoError>
|
||||||
func applyMaxReadIndex(for location: ChatLocation, contextHolder: Atomic<ChatLocationContextHolder?>, messageIndex: MessageIndex)
|
func applyMaxReadIndex(for location: ChatLocation, contextHolder: Atomic<ChatLocationContextHolder?>, messageIndex: MessageIndex)
|
||||||
|
|
||||||
|
func joinGroupCall(peerId: PeerId, activeCall: CachedChannelData.ActiveCall, sourcePanel: ASDisplayNode?)
|
||||||
|
func requestCall(peerId: PeerId, isVideo: Bool, completion: @escaping () -> Void)
|
||||||
}
|
}
|
||||||
|
@ -250,6 +250,7 @@ public final class AnimatedAvatarSetNode: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public func updateAudioLevels(color: UIColor, backgroundColor: UIColor, levels: [PeerId: Float]) {
|
public func updateAudioLevels(color: UIColor, backgroundColor: UIColor, levels: [PeerId: Float]) {
|
||||||
|
//print("updateAudioLevels visible: \(self.contentNodes.keys.map(\.peerId.id)) data: \(levels)")
|
||||||
for (key, itemNode) in self.contentNodes {
|
for (key, itemNode) in self.contentNodes {
|
||||||
if let value = levels[key.peerId] {
|
if let value = levels[key.peerId] {
|
||||||
itemNode.updateAudioLevel(color: color, backgroundColor: backgroundColor, value: value)
|
itemNode.updateAudioLevel(color: color, backgroundColor: backgroundColor, value: value)
|
||||||
|
@ -276,37 +276,10 @@ public final class CallListController: ViewController {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let callResult = strongSelf.context.sharedContext.callManager?.requestCall(context: strongSelf.context, peerId: peerId, isVideo: isVideo, endCurrentIfAny: false)
|
strongSelf.context.requestCall(peerId: peerId, isVideo: isVideo, completion: {
|
||||||
if let callResult = callResult {
|
|
||||||
if case let .alreadyInProgress(currentPeerId) = callResult {
|
|
||||||
if currentPeerId == peerId {
|
|
||||||
began?()
|
began?()
|
||||||
strongSelf.context.sharedContext.navigateToCurrentCall(sourcePanel: nil)
|
|
||||||
} else {
|
|
||||||
let presentationData = strongSelf.presentationData
|
|
||||||
let _ = (strongSelf.context.account.postbox.transaction { transaction -> (Peer?, Peer?) in
|
|
||||||
return (transaction.getPeer(peerId), currentPeerId.flatMap(transaction.getPeer))
|
|
||||||
} |> deliverOnMainQueue).start(next: { [weak self] peer, current in
|
|
||||||
if let strongSelf = self, let peer = peer {
|
|
||||||
if let current = current {
|
|
||||||
strongSelf.present(textAlertController(context: strongSelf.context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_CallInProgressMessage(current.compactDisplayTitle, peer.compactDisplayTitle).0, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
if let strongSelf = self {
|
|
||||||
let _ = strongSelf.context.sharedContext.callManager?.requestCall(context: strongSelf.context, peerId: peerId, isVideo: isVideo, endCurrentIfAny: true)
|
|
||||||
began?()
|
|
||||||
}
|
|
||||||
})]), in: .window(.root))
|
|
||||||
} else {
|
|
||||||
strongSelf.present(textAlertController(context: strongSelf.context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_ExternalCallInProgressMessage, actions: [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
})]), in: .window(.root))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
began?()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -123,39 +123,7 @@ func contactContextMenuItems(context: AccountContext, peerId: PeerId, contactsCo
|
|||||||
if canCall {
|
if canCall {
|
||||||
items.append(.action(ContextMenuActionItem(text: strings.ContactList_Context_Call, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Call"), color: theme.contextMenu.primaryColor) }, action: { _, f in
|
items.append(.action(ContextMenuActionItem(text: strings.ContactList_Context_Call, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Call"), color: theme.contextMenu.primaryColor) }, action: { _, f in
|
||||||
if let contactsController = contactsController {
|
if let contactsController = contactsController {
|
||||||
let callResult = context.sharedContext.callManager?.requestCall(context: context, peerId: peerId, isVideo: false, endCurrentIfAny: false)
|
context.requestCall(peerId: peerId, isVideo: false, completion: {})
|
||||||
if let callResult = callResult, case let .alreadyInProgress(currentPeerId) = callResult {
|
|
||||||
if currentPeerId == peerId {
|
|
||||||
context.sharedContext.navigateToCurrentCall(sourcePanel: nil)
|
|
||||||
} else {
|
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
|
||||||
let _ = (context.account.postbox.transaction { transaction -> (Peer?, Peer?) in
|
|
||||||
return (transaction.getPeer(peerId), currentPeerId.flatMap(transaction.getPeer))
|
|
||||||
} |> deliverOnMainQueue).start(next: { [weak contactsController] peer, current in
|
|
||||||
if let contactsController = contactsController, let peer = peer {
|
|
||||||
if let current = current {
|
|
||||||
contactsController.present(textAlertController(context: context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_CallInProgressMessage(current.compactDisplayTitle, peer.compactDisplayTitle).0, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
let _ = context.sharedContext.callManager?.requestCall(context: context, peerId: peerId, isVideo: false, endCurrentIfAny: true)
|
|
||||||
})]), in: .window(.root))
|
|
||||||
} else {
|
|
||||||
contactsController.present(textAlertController(context: context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_ExternalCallInProgressMessage, actions: [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
})]), in: .window(.root))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
/*let _ = (context.account.postbox.transaction { transaction -> (Peer?, Peer?) in
|
|
||||||
return (transaction.getPeer(peerId), transaction.getPeer(currentPeerId))
|
|
||||||
}
|
|
||||||
|> deliverOnMainQueue).start(next: { [weak contactsController] peer, current in
|
|
||||||
if let contactsController = contactsController, let peer = peer, let current = current {
|
|
||||||
contactsController.present(textAlertController(context: context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_CallInProgressMessage(current.compactDisplayTitle, peer.compactDisplayTitle).0, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
let _ = context.sharedContext.callManager?.requestCall(context: context, peerId: peerId, isVideo: false, endCurrentIfAny: true)
|
|
||||||
})]), in: .window(.root))
|
|
||||||
}
|
|
||||||
})*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
f(.default)
|
f(.default)
|
||||||
})))
|
})))
|
||||||
|
@ -651,12 +651,15 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon
|
|||||||
var entries: [ChannelMembersSearchEntry] = []
|
var entries: [ChannelMembersSearchEntry] = []
|
||||||
|
|
||||||
var existingPeerIds = Set<PeerId>()
|
var existingPeerIds = Set<PeerId>()
|
||||||
|
var excludeBots = false
|
||||||
for filter in filters {
|
for filter in filters {
|
||||||
switch filter {
|
switch filter {
|
||||||
case let .exclude(ids):
|
case let .exclude(ids):
|
||||||
existingPeerIds = existingPeerIds.union(ids)
|
existingPeerIds = existingPeerIds.union(ids)
|
||||||
case .disable, .excludeNonMembers:
|
case .disable, .excludeNonMembers:
|
||||||
break
|
break
|
||||||
|
case .excludeBots:
|
||||||
|
excludeBots = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch mode {
|
switch mode {
|
||||||
@ -673,6 +676,10 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if excludeBots, let user = participant.peer as? TelegramUser, user.botInfo != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if !existingPeerIds.contains(participant.peer.id) {
|
if !existingPeerIds.contains(participant.peer.id) {
|
||||||
existingPeerIds.insert(participant.peer.id)
|
existingPeerIds.insert(participant.peer.id)
|
||||||
let section: ChannelMembersSearchSection
|
let section: ChannelMembersSearchSection
|
||||||
@ -807,6 +814,10 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon
|
|||||||
}
|
}
|
||||||
|
|
||||||
for participant in foundMembers {
|
for participant in foundMembers {
|
||||||
|
if excludeBots, let user = participant.peer as? TelegramUser, user.botInfo != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if !existingPeerIds.contains(participant.peer.id) {
|
if !existingPeerIds.contains(participant.peer.id) {
|
||||||
existingPeerIds.insert(participant.peer.id)
|
existingPeerIds.insert(participant.peer.id)
|
||||||
let section: ChannelMembersSearchSection
|
let section: ChannelMembersSearchSection
|
||||||
@ -836,6 +847,10 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon
|
|||||||
}
|
}
|
||||||
|
|
||||||
for peer in foundContacts.0 {
|
for peer in foundContacts.0 {
|
||||||
|
if excludeBots, let user = peer as? TelegramUser, user.botInfo != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if !existingPeerIds.contains(peer.id) {
|
if !existingPeerIds.contains(peer.id) {
|
||||||
existingPeerIds.insert(peer.id)
|
existingPeerIds.insert(peer.id)
|
||||||
entries.append(ChannelMembersSearchEntry(index: index, content: .peer(peer), section: .contacts, dateTimeFormat: presentationData.dateTimeFormat))
|
entries.append(ChannelMembersSearchEntry(index: index, content: .peer(peer), section: .contacts, dateTimeFormat: presentationData.dateTimeFormat))
|
||||||
@ -845,6 +860,11 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon
|
|||||||
|
|
||||||
for foundPeer in foundRemotePeers.0 {
|
for foundPeer in foundRemotePeers.0 {
|
||||||
let peer = foundPeer.peer
|
let peer = foundPeer.peer
|
||||||
|
|
||||||
|
if excludeBots, let user = peer as? TelegramUser, user.botInfo != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if !existingPeerIds.contains(peer.id) && peer is TelegramUser {
|
if !existingPeerIds.contains(peer.id) && peer is TelegramUser {
|
||||||
existingPeerIds.insert(peer.id)
|
existingPeerIds.insert(peer.id)
|
||||||
entries.append(ChannelMembersSearchEntry(index: index, content: .peer(peer), section: .global, dateTimeFormat: presentationData.dateTimeFormat))
|
entries.append(ChannelMembersSearchEntry(index: index, content: .peer(peer), section: .global, dateTimeFormat: presentationData.dateTimeFormat))
|
||||||
@ -854,6 +874,10 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon
|
|||||||
|
|
||||||
for foundPeer in foundRemotePeers.1 {
|
for foundPeer in foundRemotePeers.1 {
|
||||||
let peer = foundPeer.peer
|
let peer = foundPeer.peer
|
||||||
|
if excludeBots, let user = peer as? TelegramUser, user.botInfo != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if !existingPeerIds.contains(peer.id) && peer is TelegramUser {
|
if !existingPeerIds.contains(peer.id) && peer is TelegramUser {
|
||||||
existingPeerIds.insert(peer.id)
|
existingPeerIds.insert(peer.id)
|
||||||
entries.append(ChannelMembersSearchEntry(index: index, content: .peer(peer), section: .global, dateTimeFormat: presentationData.dateTimeFormat))
|
entries.append(ChannelMembersSearchEntry(index: index, content: .peer(peer), section: .global, dateTimeFormat: presentationData.dateTimeFormat))
|
||||||
@ -939,12 +963,15 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon
|
|||||||
var entries: [ChannelMembersSearchEntry] = []
|
var entries: [ChannelMembersSearchEntry] = []
|
||||||
|
|
||||||
var existingPeerIds = Set<PeerId>()
|
var existingPeerIds = Set<PeerId>()
|
||||||
|
var excludeBots = false
|
||||||
for filter in filters {
|
for filter in filters {
|
||||||
switch filter {
|
switch filter {
|
||||||
case let .exclude(ids):
|
case let .exclude(ids):
|
||||||
existingPeerIds = existingPeerIds.union(ids)
|
existingPeerIds = existingPeerIds.union(ids)
|
||||||
case .disable, .excludeNonMembers:
|
case .disable, .excludeNonMembers:
|
||||||
break
|
break
|
||||||
|
case .excludeBots:
|
||||||
|
excludeBots = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch mode {
|
switch mode {
|
||||||
@ -957,6 +984,10 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon
|
|||||||
var index = 0
|
var index = 0
|
||||||
|
|
||||||
for participant in foundGroupMembers {
|
for participant in foundGroupMembers {
|
||||||
|
if excludeBots, let user = participant.peer as? TelegramUser, user.botInfo != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if !existingPeerIds.contains(participant.peer.id) {
|
if !existingPeerIds.contains(participant.peer.id) {
|
||||||
existingPeerIds.insert(participant.peer.id)
|
existingPeerIds.insert(participant.peer.id)
|
||||||
let section: ChannelMembersSearchSection
|
let section: ChannelMembersSearchSection
|
||||||
@ -1087,6 +1118,10 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon
|
|||||||
}
|
}
|
||||||
|
|
||||||
for participant in foundMembers {
|
for participant in foundMembers {
|
||||||
|
if excludeBots, let user = participant.peer as? TelegramUser, user.botInfo != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if !existingPeerIds.contains(participant.peer.id) {
|
if !existingPeerIds.contains(participant.peer.id) {
|
||||||
existingPeerIds.insert(participant.peer.id)
|
existingPeerIds.insert(participant.peer.id)
|
||||||
let section: ChannelMembersSearchSection
|
let section: ChannelMembersSearchSection
|
||||||
@ -1117,6 +1152,11 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon
|
|||||||
|
|
||||||
for foundPeer in foundRemotePeers.0 {
|
for foundPeer in foundRemotePeers.0 {
|
||||||
let peer = foundPeer.peer
|
let peer = foundPeer.peer
|
||||||
|
|
||||||
|
if excludeBots, let user = peer as? TelegramUser, user.botInfo != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if !existingPeerIds.contains(peer.id) && peer is TelegramUser {
|
if !existingPeerIds.contains(peer.id) && peer is TelegramUser {
|
||||||
existingPeerIds.insert(peer.id)
|
existingPeerIds.insert(peer.id)
|
||||||
entries.append(ChannelMembersSearchEntry(index: index, content: .peer(peer), section: .global, dateTimeFormat: presentationData.dateTimeFormat))
|
entries.append(ChannelMembersSearchEntry(index: index, content: .peer(peer), section: .global, dateTimeFormat: presentationData.dateTimeFormat))
|
||||||
@ -1126,6 +1166,11 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon
|
|||||||
|
|
||||||
for foundPeer in foundRemotePeers.1 {
|
for foundPeer in foundRemotePeers.1 {
|
||||||
let peer = foundPeer.peer
|
let peer = foundPeer.peer
|
||||||
|
|
||||||
|
if excludeBots, let user = peer as? TelegramUser, user.botInfo != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if !existingPeerIds.contains(peer.id) && peer is TelegramUser {
|
if !existingPeerIds.contains(peer.id) && peer is TelegramUser {
|
||||||
existingPeerIds.insert(peer.id)
|
existingPeerIds.insert(peer.id)
|
||||||
entries.append(ChannelMembersSearchEntry(index: index, content: .peer(peer), section: .global, dateTimeFormat: presentationData.dateTimeFormat))
|
entries.append(ChannelMembersSearchEntry(index: index, content: .peer(peer), section: .global, dateTimeFormat: presentationData.dateTimeFormat))
|
||||||
|
@ -19,6 +19,7 @@ public enum ChannelMembersSearchFilter {
|
|||||||
case exclude([PeerId])
|
case exclude([PeerId])
|
||||||
case disable([PeerId])
|
case disable([PeerId])
|
||||||
case excludeNonMembers
|
case excludeNonMembers
|
||||||
|
case excludeBots
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class ChannelMembersSearchController: ViewController {
|
public final class ChannelMembersSearchController: ViewController {
|
||||||
|
@ -243,6 +243,10 @@ class ChannelMembersSearchControllerNode: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
case .excludeNonMembers:
|
case .excludeNonMembers:
|
||||||
break
|
break
|
||||||
|
case .excludeBots:
|
||||||
|
if let user = peer as? TelegramUser, user.botInfo != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case .promote:
|
case .promote:
|
||||||
@ -261,6 +265,10 @@ class ChannelMembersSearchControllerNode: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
case .excludeNonMembers:
|
case .excludeNonMembers:
|
||||||
break
|
break
|
||||||
|
case .excludeBots:
|
||||||
|
if let user = peer as? TelegramUser, user.botInfo != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if case .creator = participant {
|
if case .creator = participant {
|
||||||
@ -283,6 +291,10 @@ class ChannelMembersSearchControllerNode: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
case .excludeNonMembers:
|
case .excludeNonMembers:
|
||||||
break
|
break
|
||||||
|
case .excludeBots:
|
||||||
|
if let user = peer as? TelegramUser, user.botInfo != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -327,9 +339,9 @@ class ChannelMembersSearchControllerNode: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var index = 0
|
var index = 0
|
||||||
for participant in state.list {
|
participantsLoop: for participant in state.list {
|
||||||
if participant.peer.isDeleted {
|
if participant.peer.isDeleted {
|
||||||
continue
|
continue participantsLoop
|
||||||
}
|
}
|
||||||
|
|
||||||
var label: String?
|
var label: String?
|
||||||
@ -337,13 +349,13 @@ class ChannelMembersSearchControllerNode: ASDisplayNode {
|
|||||||
switch mode {
|
switch mode {
|
||||||
case .ban:
|
case .ban:
|
||||||
if participant.peer.id == context.account.peerId {
|
if participant.peer.id == context.account.peerId {
|
||||||
continue
|
continue participantsLoop
|
||||||
}
|
}
|
||||||
for filter in filters {
|
for filter in filters {
|
||||||
switch filter {
|
switch filter {
|
||||||
case let .exclude(ids):
|
case let .exclude(ids):
|
||||||
if ids.contains(participant.peer.id) {
|
if ids.contains(participant.peer.id) {
|
||||||
continue
|
continue participantsLoop
|
||||||
}
|
}
|
||||||
case let .disable(ids):
|
case let .disable(ids):
|
||||||
if ids.contains(participant.peer.id) {
|
if ids.contains(participant.peer.id) {
|
||||||
@ -351,6 +363,10 @@ class ChannelMembersSearchControllerNode: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
case .excludeNonMembers:
|
case .excludeNonMembers:
|
||||||
break
|
break
|
||||||
|
case .excludeBots:
|
||||||
|
if let user = participant.peer as? TelegramUser, user.botInfo != nil {
|
||||||
|
continue participantsLoop
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case .promote:
|
case .promote:
|
||||||
@ -361,7 +377,7 @@ class ChannelMembersSearchControllerNode: ASDisplayNode {
|
|||||||
switch filter {
|
switch filter {
|
||||||
case let .exclude(ids):
|
case let .exclude(ids):
|
||||||
if ids.contains(participant.peer.id) {
|
if ids.contains(participant.peer.id) {
|
||||||
continue
|
continue participantsLoop
|
||||||
}
|
}
|
||||||
case let .disable(ids):
|
case let .disable(ids):
|
||||||
if ids.contains(participant.peer.id) {
|
if ids.contains(participant.peer.id) {
|
||||||
@ -369,6 +385,10 @@ class ChannelMembersSearchControllerNode: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
case .excludeNonMembers:
|
case .excludeNonMembers:
|
||||||
break
|
break
|
||||||
|
case .excludeBots:
|
||||||
|
if let user = participant.peer as? TelegramUser, user.botInfo != nil {
|
||||||
|
continue participantsLoop
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if case .creator = participant.participant {
|
if case .creator = participant.participant {
|
||||||
@ -383,7 +403,7 @@ class ChannelMembersSearchControllerNode: ASDisplayNode {
|
|||||||
switch filter {
|
switch filter {
|
||||||
case let .exclude(ids):
|
case let .exclude(ids):
|
||||||
if ids.contains(participant.peer.id) {
|
if ids.contains(participant.peer.id) {
|
||||||
continue
|
continue participantsLoop
|
||||||
}
|
}
|
||||||
case let .disable(ids):
|
case let .disable(ids):
|
||||||
if ids.contains(participant.peer.id) {
|
if ids.contains(participant.peer.id) {
|
||||||
@ -391,6 +411,10 @@ class ChannelMembersSearchControllerNode: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
case .excludeNonMembers:
|
case .excludeNonMembers:
|
||||||
break
|
break
|
||||||
|
case .excludeBots:
|
||||||
|
if let user = participant.peer as? TelegramUser, user.botInfo != nil {
|
||||||
|
continue participantsLoop
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -877,28 +877,7 @@ public func deviceContactInfoController(context: AccountContext, subject: Device
|
|||||||
ActionSheetItemGroup(items: [
|
ActionSheetItemGroup(items: [
|
||||||
ActionSheetButtonItem(title: presentationData.strings.UserInfo_TelegramCall, action: {
|
ActionSheetButtonItem(title: presentationData.strings.UserInfo_TelegramCall, action: {
|
||||||
dismissAction()
|
dismissAction()
|
||||||
let callResult = context.sharedContext.callManager?.requestCall(context: context, peerId: user.id, isVideo: false, endCurrentIfAny: false)
|
context.requestCall(peerId: user.id, isVideo: false, completion: {})
|
||||||
if let callResult = callResult, case let .alreadyInProgress(currentPeerId) = callResult {
|
|
||||||
if currentPeerId == user.id {
|
|
||||||
context.sharedContext.navigateToCurrentCall(sourcePanel: nil)
|
|
||||||
} else {
|
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
|
||||||
let _ = (context.account.postbox.transaction { transaction -> (Peer?, Peer?) in
|
|
||||||
return (transaction.getPeer(user.id), currentPeerId.flatMap(transaction.getPeer))
|
|
||||||
} |> deliverOnMainQueue).start(next: { peer, current in
|
|
||||||
if let peer = peer {
|
|
||||||
if let current = current {
|
|
||||||
presentControllerImpl?(textAlertController(context: context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_CallInProgressMessage(current.compactDisplayTitle, peer.compactDisplayTitle).0, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
let _ = context.sharedContext.callManager?.requestCall(context: context, peerId: user.id, isVideo: false, endCurrentIfAny: true)
|
|
||||||
})]), nil)
|
|
||||||
} else {
|
|
||||||
presentControllerImpl?(textAlertController(context: context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_ExternalCallInProgressMessage, actions: [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
})]), nil)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}),
|
}),
|
||||||
ActionSheetButtonItem(title: presentationData.strings.UserInfo_PhoneCall, action: {
|
ActionSheetButtonItem(title: presentationData.strings.UserInfo_PhoneCall, action: {
|
||||||
dismissAction()
|
dismissAction()
|
||||||
|
@ -873,23 +873,7 @@ public func userInfoController(context: AccountContext, peerId: PeerId, mode: Pe
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let callResult = context.sharedContext.callManager?.requestCall(context: context, peerId: peer.id, isVideo: isVideo, endCurrentIfAny: false)
|
context.requestCall(peerId: peer.id, isVideo: isVideo, completion: {})
|
||||||
if let callResult = callResult, case let .alreadyInProgress(currentPeerId) = callResult {
|
|
||||||
if currentPeerId == peer.id {
|
|
||||||
context.sharedContext.navigateToCurrentCall(sourcePanel: nil)
|
|
||||||
} else {
|
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
|
||||||
let _ = (context.account.postbox.transaction { transaction -> (Peer?, Peer?) in
|
|
||||||
return (transaction.getPeer(peer.id), currentPeerId.flatMap(transaction.getPeer))
|
|
||||||
} |> deliverOnMainQueue).start(next: { peer, current in
|
|
||||||
if let peer = peer, let current = current {
|
|
||||||
presentControllerImpl?(textAlertController(context: context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_CallInProgressMessage(current.compactDisplayTitle, peer.compactDisplayTitle).0, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
let _ = context.sharedContext.callManager?.requestCall(context: context, peerId: peer.id, isVideo: isVideo, endCurrentIfAny: true)
|
|
||||||
})]), nil)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -884,34 +884,6 @@ open class TelegramBaseController: ViewController, KeyShortcutResponder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func joinGroupCall(peerId: PeerId, info: GroupCallInfo, sourcePanel: GroupCallNavigationAccessoryPanel?) {
|
private func joinGroupCall(peerId: PeerId, info: GroupCallInfo, sourcePanel: GroupCallNavigationAccessoryPanel?) {
|
||||||
let callResult = self.context.sharedContext.callManager?.joinGroupCall(context: self.context, peerId: peerId, initialCall: CachedChannelData.ActiveCall(id: info.id, accessHash: info.accessHash), endCurrentIfAny: false, sourcePanel: sourcePanel)
|
self.context.joinGroupCall(peerId: peerId, activeCall: CachedChannelData.ActiveCall(id: info.id, accessHash: info.accessHash), sourcePanel: sourcePanel)
|
||||||
if let callResult = callResult, case let .alreadyInProgress(currentPeerId) = callResult {
|
|
||||||
if currentPeerId == peerId {
|
|
||||||
self.context.sharedContext.navigateToCurrentCall(sourcePanel: sourcePanel)
|
|
||||||
} else {
|
|
||||||
let presentationData = self.context.sharedContext.currentPresentationData.with { $0 }
|
|
||||||
let _ = (self.context.account.postbox.transaction { transaction -> (Peer?, Peer?) in
|
|
||||||
return (transaction.getPeer(peerId), currentPeerId.flatMap(transaction.getPeer))
|
|
||||||
}
|
|
||||||
|> deliverOnMainQueue).start(next: { [weak self] peer, current in
|
|
||||||
guard let strongSelf = self else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
guard let peer = peer else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if let current = current {
|
|
||||||
strongSelf.present(textAlertController(context: strongSelf.context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_CallInProgressMessage(current.compactDisplayTitle, peer.compactDisplayTitle).0, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
if let strongSelf = self {
|
|
||||||
let _ = strongSelf.context.sharedContext.callManager?.joinGroupCall(context: strongSelf.context, peerId: peerId, initialCall: CachedChannelData.ActiveCall(id: info.id, accessHash: info.accessHash), endCurrentIfAny: true, sourcePanel: sourcePanel)
|
|
||||||
}
|
|
||||||
})]), in: .window(.root))
|
|
||||||
} else {
|
|
||||||
strongSelf.present(textAlertController(context: strongSelf.context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_ExternalCallInProgressMessage, actions: [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
})]), in: .window(.root))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -48,16 +48,18 @@ public final class GroupCallPanelData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private final class FakeAudioLevelGenerator {
|
private final class FakeAudioLevelGenerator {
|
||||||
private var previousTarget: Float = 0.0
|
private var isFirstTime: Bool = true
|
||||||
private var nextTarget: Float = 0.0
|
private var nextTarget: Float = 0.0
|
||||||
private var nextTargetProgress: Float = 1.0
|
private var nextTargetProgress: Float = 0.0
|
||||||
private var nextTargetProgressNorm: Float = 1.0
|
private var nextTargetProgressNorm: Float = 1.0
|
||||||
|
|
||||||
func get() -> Float {
|
func get() -> Float {
|
||||||
|
let wasFirstTime = self.isFirstTime
|
||||||
|
self.isFirstTime = false
|
||||||
|
|
||||||
self.nextTargetProgress *= 0.82
|
self.nextTargetProgress *= 0.82
|
||||||
if self.nextTargetProgress <= 0.01 {
|
if self.nextTargetProgress <= 0.01 {
|
||||||
self.previousTarget = self.nextTarget
|
if Int.random(in: 0 ... 4) <= 1 && !wasFirstTime {
|
||||||
if Int.random(in: 0 ... 4) <= 1 {
|
|
||||||
self.nextTarget = 0.0
|
self.nextTarget = 0.0
|
||||||
self.nextTargetProgressNorm = Float.random(in: 0.1 ..< 0.3)
|
self.nextTargetProgressNorm = Float.random(in: 0.1 ..< 0.3)
|
||||||
} else {
|
} else {
|
||||||
|
@ -397,7 +397,6 @@ public final class VoiceChatController: ViewController {
|
|||||||
private var didSetContentsReady: Bool = false
|
private var didSetContentsReady: Bool = false
|
||||||
private var didSetDataReady: Bool = false
|
private var didSetDataReady: Bool = false
|
||||||
|
|
||||||
private var currentGroupMembers: [RenderedChannelParticipant]?
|
|
||||||
private var currentCallMembers: [GroupCallParticipantsContext.Participant]?
|
private var currentCallMembers: [GroupCallParticipantsContext.Participant]?
|
||||||
private var currentInvitedPeers: [Peer]?
|
private var currentInvitedPeers: [Peer]?
|
||||||
private var currentSpeakingPeers: Set<PeerId>?
|
private var currentSpeakingPeers: Set<PeerId>?
|
||||||
@ -542,6 +541,7 @@ public final class VoiceChatController: ViewController {
|
|||||||
if !groupPeer.hasPermission(.inviteMembers) {
|
if !groupPeer.hasPermission(.inviteMembers) {
|
||||||
filters.append(.excludeNonMembers)
|
filters.append(.excludeNonMembers)
|
||||||
}
|
}
|
||||||
|
filters.append(.excludeBots)
|
||||||
|
|
||||||
var dismissController: (() -> Void)?
|
var dismissController: (() -> Void)?
|
||||||
let controller = ChannelMembersSearchController(context: strongSelf.context, peerId: groupPeer.id, forceTheme: strongSelf.darkTheme, mode: .inviteToCall, filters: filters, openPeer: { peer, participant in
|
let controller = ChannelMembersSearchController(context: strongSelf.context, peerId: groupPeer.id, forceTheme: strongSelf.darkTheme, mode: .inviteToCall, filters: filters, openPeer: { peer, participant in
|
||||||
@ -560,6 +560,11 @@ public final class VoiceChatController: ViewController {
|
|||||||
|
|
||||||
strongSelf.controller?.present(UndoOverlayController(presentationData: strongSelf.presentationData, content: .invitedToVoiceChat(context: strongSelf.context, peer: participant.peer, text: strongSelf.presentationData.strings.VoiceChat_InvitedPeerText(peer.displayTitle(strings: strongSelf.presentationData.strings, displayOrder: strongSelf.presentationData.nameDisplayOrder)).0), elevatedLayout: false, action: { _ in return false }), in: .current)
|
strongSelf.controller?.present(UndoOverlayController(presentationData: strongSelf.presentationData, content: .invitedToVoiceChat(context: strongSelf.context, peer: participant.peer, text: strongSelf.presentationData.strings.VoiceChat_InvitedPeerText(peer.displayTitle(strings: strongSelf.presentationData.strings, displayOrder: strongSelf.presentationData.nameDisplayOrder)).0), elevatedLayout: false, action: { _ in return false }), in: .current)
|
||||||
} else {
|
} else {
|
||||||
|
strongSelf.controller?.present(textAlertController(context: strongSelf.context, title: nil, text: strongSelf.presentationData.strings.VoiceChat_InviteMemberToGroupFirstText(peer.displayTitle(strings: strongSelf.presentationData.strings, displayOrder: strongSelf.presentationData.nameDisplayOrder), groupPeer.displayTitle(strings: strongSelf.presentationData.strings, displayOrder: strongSelf.presentationData.nameDisplayOrder)).0, actions: [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .defaultAction, title: presentationData.strings.VoiceChat_InviteMemberToGroupFirstAdd, action: {
|
||||||
|
guard let strongSelf = self else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
let selfController = strongSelf.controller
|
let selfController = strongSelf.controller
|
||||||
let inviteDisposable = strongSelf.inviteDisposable
|
let inviteDisposable = strongSelf.inviteDisposable
|
||||||
var inviteSignal = strongSelf.context.peerChannelMemberCategoriesContextsManager.addMembers(account: strongSelf.context.account, peerId: groupPeer.id, memberIds: [peer.id])
|
var inviteSignal = strongSelf.context.peerChannelMemberCategoriesContextsManager.addMembers(account: strongSelf.context.account, peerId: groupPeer.id, memberIds: [peer.id])
|
||||||
@ -626,6 +631,7 @@ public final class VoiceChatController: ViewController {
|
|||||||
|
|
||||||
strongSelf.controller?.present(UndoOverlayController(presentationData: strongSelf.presentationData, content: .invitedToVoiceChat(context: strongSelf.context, peer: peer, text: strongSelf.presentationData.strings.VoiceChat_InvitedPeerText(peer.displayTitle(strings: strongSelf.presentationData.strings, displayOrder: strongSelf.presentationData.nameDisplayOrder)).0), elevatedLayout: false, action: { _ in return false }), in: .current)
|
strongSelf.controller?.present(UndoOverlayController(presentationData: strongSelf.presentationData, content: .invitedToVoiceChat(context: strongSelf.context, peer: peer, text: strongSelf.presentationData.strings.VoiceChat_InvitedPeerText(peer.displayTitle(strings: strongSelf.presentationData.strings, displayOrder: strongSelf.presentationData.nameDisplayOrder)).0), elevatedLayout: false, action: { _ in return false }), in: .current)
|
||||||
}))
|
}))
|
||||||
|
})]), in: .window(.root))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
controller.copyInviteLink = {
|
controller.copyInviteLink = {
|
||||||
@ -809,17 +815,9 @@ public final class VoiceChatController: ViewController {
|
|||||||
strongSelf.actionButton.isUserInteractionEnabled = true
|
strongSelf.actionButton.isUserInteractionEnabled = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if wasMuted != (state.muteState != nil), let groupMembers = strongSelf.currentGroupMembers {
|
|
||||||
strongSelf.updateMembers(muteState: strongSelf.effectiveMuteState, groupMembers: groupMembers, callMembers: strongSelf.currentCallMembers ?? [], invitedPeers: strongSelf.currentInvitedPeers ?? [], speakingPeers: strongSelf.currentSpeakingPeers ?? Set())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if let (layout, navigationHeight) = strongSelf.validLayout {
|
strongSelf.updateMembers(muteState: strongSelf.effectiveMuteState, callMembers: callMembers?.participants ?? [], invitedPeers: invitedPeers, speakingPeers: callMembers?.speakingParticipants ?? [])
|
||||||
strongSelf.containerLayoutUpdated(layout, navigationHeight: navigationHeight, transition: .immediate)
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
|
|
||||||
strongSelf.updateMembers(muteState: strongSelf.effectiveMuteState, groupMembers: strongSelf.currentGroupMembers ?? [], callMembers: callMembers?.participants ?? [], invitedPeers: invitedPeers, speakingPeers: callMembers?.speakingParticipants ?? [])
|
|
||||||
|
|
||||||
let subtitle = strongSelf.presentationData.strings.VoiceChat_Panel_Members(Int32(max(1, callMembers?.totalCount ?? 0)))
|
let subtitle = strongSelf.presentationData.strings.VoiceChat_Panel_Members(Int32(max(1, callMembers?.totalCount ?? 0)))
|
||||||
strongSelf.titleView.set(title: strongSelf.presentationData.strings.VoiceChat_Title, subtitle: subtitle)
|
strongSelf.titleView.set(title: strongSelf.presentationData.strings.VoiceChat_Title, subtitle: subtitle)
|
||||||
@ -837,7 +835,7 @@ public final class VoiceChatController: ViewController {
|
|||||||
|
|
||||||
if !strongSelf.didSetDataReady {
|
if !strongSelf.didSetDataReady {
|
||||||
strongSelf.accountPeer = accountPeer
|
strongSelf.accountPeer = accountPeer
|
||||||
strongSelf.updateMembers(muteState: strongSelf.effectiveMuteState, groupMembers: [], callMembers: strongSelf.currentCallMembers ?? [], invitedPeers: strongSelf.currentInvitedPeers ?? [], speakingPeers: strongSelf.currentSpeakingPeers ?? Set())
|
strongSelf.updateMembers(muteState: strongSelf.effectiveMuteState, callMembers: strongSelf.currentCallMembers ?? [], invitedPeers: strongSelf.currentInvitedPeers ?? [], speakingPeers: strongSelf.currentSpeakingPeers ?? Set())
|
||||||
|
|
||||||
if let peer = peerViewMainPeer(view), let channel = peer as? TelegramChannel {
|
if let peer = peerViewMainPeer(view), let channel = peer as? TelegramChannel {
|
||||||
let addressName = channel.addressName ?? ""
|
let addressName = channel.addressName ?? ""
|
||||||
@ -1113,7 +1111,7 @@ public final class VoiceChatController: ViewController {
|
|||||||
if let (layout, navigationHeight) = self.validLayout {
|
if let (layout, navigationHeight) = self.validLayout {
|
||||||
self.containerLayoutUpdated(layout, navigationHeight: navigationHeight, transition: .animated(duration: 0.3, curve: .spring))
|
self.containerLayoutUpdated(layout, navigationHeight: navigationHeight, transition: .animated(duration: 0.3, curve: .spring))
|
||||||
}
|
}
|
||||||
self.updateMembers(muteState: self.effectiveMuteState, groupMembers: self.currentGroupMembers ?? [], callMembers: self.currentCallMembers ?? [], invitedPeers: self.currentInvitedPeers ?? [], speakingPeers: self.currentSpeakingPeers ?? Set())
|
self.updateMembers(muteState: self.effectiveMuteState, callMembers: self.currentCallMembers ?? [], invitedPeers: self.currentInvitedPeers ?? [], speakingPeers: self.currentSpeakingPeers ?? Set())
|
||||||
case .ended, .cancelled:
|
case .ended, .cancelled:
|
||||||
self.hapticFeedback.impact(.light)
|
self.hapticFeedback.impact(.light)
|
||||||
|
|
||||||
@ -1129,7 +1127,7 @@ public final class VoiceChatController: ViewController {
|
|||||||
if let (layout, navigationHeight) = self.validLayout {
|
if let (layout, navigationHeight) = self.validLayout {
|
||||||
self.containerLayoutUpdated(layout, navigationHeight: navigationHeight, transition: .animated(duration: 0.3, curve: .spring))
|
self.containerLayoutUpdated(layout, navigationHeight: navigationHeight, transition: .animated(duration: 0.3, curve: .spring))
|
||||||
}
|
}
|
||||||
self.updateMembers(muteState: self.effectiveMuteState, groupMembers: self.currentGroupMembers ?? [], callMembers: self.currentCallMembers ?? [], invitedPeers: self.currentInvitedPeers ?? [], speakingPeers: self.currentSpeakingPeers ?? Set())
|
self.updateMembers(muteState: self.effectiveMuteState, callMembers: self.currentCallMembers ?? [], invitedPeers: self.currentInvitedPeers ?? [], speakingPeers: self.currentSpeakingPeers ?? Set())
|
||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@ -1542,8 +1540,7 @@ public final class VoiceChatController: ViewController {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private func updateMembers(muteState: GroupCallParticipantsContext.Participant.MuteState?, groupMembers: [RenderedChannelParticipant], callMembers: [GroupCallParticipantsContext.Participant], invitedPeers: [Peer], speakingPeers: Set<PeerId>) {
|
private func updateMembers(muteState: GroupCallParticipantsContext.Participant.MuteState?, callMembers: [GroupCallParticipantsContext.Participant], invitedPeers: [Peer], speakingPeers: Set<PeerId>) {
|
||||||
self.currentGroupMembers = groupMembers
|
|
||||||
self.currentCallMembers = callMembers
|
self.currentCallMembers = callMembers
|
||||||
self.currentSpeakingPeers = speakingPeers
|
self.currentSpeakingPeers = speakingPeers
|
||||||
self.currentInvitedPeers = invitedPeers
|
self.currentInvitedPeers = invitedPeers
|
||||||
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -15,6 +15,8 @@ import TelegramUIPreferences
|
|||||||
import TelegramVoip
|
import TelegramVoip
|
||||||
import TelegramCallsUI
|
import TelegramCallsUI
|
||||||
import TelegramBaseController
|
import TelegramBaseController
|
||||||
|
import AsyncDisplayKit
|
||||||
|
import PresentationDataUtils
|
||||||
|
|
||||||
private final class DeviceSpecificContactImportContext {
|
private final class DeviceSpecificContactImportContext {
|
||||||
let disposable = MetaDisposable()
|
let disposable = MetaDisposable()
|
||||||
@ -297,6 +299,98 @@ public final class AccountContextImpl: AccountContext {
|
|||||||
context.applyMaxReadIndex(messageIndex: messageIndex)
|
context.applyMaxReadIndex(messageIndex: messageIndex)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func joinGroupCall(peerId: PeerId, activeCall: CachedChannelData.ActiveCall, sourcePanel: ASDisplayNode?) {
|
||||||
|
let callResult = self.sharedContext.callManager?.joinGroupCall(context: self, peerId: peerId, initialCall: activeCall, endCurrentIfAny: false, sourcePanel: nil)
|
||||||
|
if let callResult = callResult, case let .alreadyInProgress(currentPeerId) = callResult {
|
||||||
|
if currentPeerId == peerId {
|
||||||
|
self.sharedContext.navigateToCurrentCall(sourcePanel: nil)
|
||||||
|
} else {
|
||||||
|
let _ = (self.account.postbox.transaction { transaction -> (Peer?, Peer?) in
|
||||||
|
return (transaction.getPeer(peerId), currentPeerId.flatMap(transaction.getPeer))
|
||||||
|
}
|
||||||
|
|> deliverOnMainQueue).start(next: { [weak self] peer, current in
|
||||||
|
guard let strongSelf = self else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
guard let peer = peer else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let presentationData = strongSelf.sharedContext.currentPresentationData.with { $0 }
|
||||||
|
if let current = current {
|
||||||
|
if current is TelegramChannel {
|
||||||
|
strongSelf.sharedContext.mainWindow?.present(textAlertController(context: strongSelf, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_VoiceChatInProgressMessage(current.compactDisplayTitle, peer.compactDisplayTitle).0, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
||||||
|
guard let strongSelf = self else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let _ = strongSelf.sharedContext.callManager?.joinGroupCall(context: strongSelf, peerId: peer.id, initialCall: activeCall, endCurrentIfAny: true, sourcePanel: nil)
|
||||||
|
})]), on: .root)
|
||||||
|
} else {
|
||||||
|
strongSelf.sharedContext.mainWindow?.present(textAlertController(context: strongSelf, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_CallInProgressVoiceChatMessage(current.compactDisplayTitle, peer.compactDisplayTitle).0, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
||||||
|
guard let strongSelf = self else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let _ = strongSelf.sharedContext.callManager?.joinGroupCall(context: strongSelf, peerId: peer.id, initialCall: activeCall, endCurrentIfAny: true, sourcePanel: nil)
|
||||||
|
})]), on: .root)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
strongSelf.sharedContext.mainWindow?.present(textAlertController(context: strongSelf, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_ExternalCallInProgressMessage, actions: [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
||||||
|
})]), on: .root)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func requestCall(peerId: PeerId, isVideo: Bool, completion: @escaping () -> Void) {
|
||||||
|
guard let callResult = self.sharedContext.callManager?.requestCall(context: self, peerId: peerId, isVideo: isVideo, endCurrentIfAny: false) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if case let .alreadyInProgress(currentPeerId) = callResult {
|
||||||
|
if currentPeerId == peerId {
|
||||||
|
completion()
|
||||||
|
self.sharedContext.navigateToCurrentCall(sourcePanel: nil)
|
||||||
|
} else {
|
||||||
|
let _ = (self.account.postbox.transaction { transaction -> (Peer?, Peer?) in
|
||||||
|
return (transaction.getPeer(peerId), currentPeerId.flatMap(transaction.getPeer))
|
||||||
|
}
|
||||||
|
|> deliverOnMainQueue).start(next: { [weak self] peer, current in
|
||||||
|
guard let strongSelf = self else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
guard let peer = peer else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let presentationData = strongSelf.sharedContext.currentPresentationData.with { $0 }
|
||||||
|
if let current = current {
|
||||||
|
if current is TelegramChannel {
|
||||||
|
strongSelf.sharedContext.mainWindow?.present(textAlertController(context: strongSelf, title: presentationData.strings.Call_VoiceChatInProgressTitle, text: presentationData.strings.Call_VoiceChatInProgressCallMessage(current.compactDisplayTitle, peer.compactDisplayTitle).0, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
||||||
|
guard let strongSelf = self else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let _ = strongSelf.sharedContext.callManager?.requestCall(context: strongSelf, peerId: peerId, isVideo: isVideo, endCurrentIfAny: true)
|
||||||
|
completion()
|
||||||
|
})]), on: .root)
|
||||||
|
} else {
|
||||||
|
strongSelf.sharedContext.mainWindow?.present(textAlertController(context: strongSelf, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_CallInProgressMessage(current.compactDisplayTitle, peer.compactDisplayTitle).0, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
||||||
|
guard let strongSelf = self else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let _ = strongSelf.sharedContext.callManager?.requestCall(context: strongSelf, peerId: peerId, isVideo: isVideo, endCurrentIfAny: true)
|
||||||
|
completion()
|
||||||
|
})]), on: .root)
|
||||||
|
}
|
||||||
|
} else if let strongSelf = self {
|
||||||
|
strongSelf.sharedContext.mainWindow?.present(textAlertController(context: strongSelf, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_ExternalCallInProgressMessage, actions: [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
||||||
|
})]), on: .root)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
completion()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func chatLocationContext(holder: Atomic<ChatLocationContextHolder?>, account: Account, data: ChatReplyThreadMessage) -> ReplyThreadHistoryContext {
|
private func chatLocationContext(holder: Atomic<ChatLocationContextHolder?>, account: Account, data: ChatReplyThreadMessage) -> ReplyThreadHistoryContext {
|
||||||
|
@ -507,36 +507,8 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
}
|
}
|
||||||
|
|
||||||
let peerId = message.id.peerId
|
let peerId = message.id.peerId
|
||||||
let callResult = strongSelf.context.sharedContext.callManager?.joinGroupCall(context: strongSelf.context, peerId: peerId, initialCall: CachedChannelData.ActiveCall(id: callId, accessHash: accessHash), endCurrentIfAny: false, sourcePanel: nil)
|
|
||||||
if let callResult = callResult, case let .alreadyInProgress(currentPeerId) = callResult {
|
strongSelf.context.joinGroupCall(peerId: peerId, activeCall: CachedChannelData.ActiveCall(id: callId, accessHash: accessHash), sourcePanel: nil)
|
||||||
if currentPeerId == peerId {
|
|
||||||
strongSelf.context.sharedContext.navigateToCurrentCall(sourcePanel: nil)
|
|
||||||
} else {
|
|
||||||
let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 }
|
|
||||||
let _ = (strongSelf.context.account.postbox.transaction { transaction -> (Peer?, Peer?) in
|
|
||||||
return (transaction.getPeer(peerId), currentPeerId.flatMap(transaction.getPeer))
|
|
||||||
}
|
|
||||||
|> deliverOnMainQueue).start(next: { [weak self] peer, current in
|
|
||||||
guard let strongSelf = self else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
guard let peer = peer else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if let current = current {
|
|
||||||
strongSelf.present(textAlertController(context: strongSelf.context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_CallInProgressMessage(current.compactDisplayTitle, peer.compactDisplayTitle).0, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
if let strongSelf = self {
|
|
||||||
let _ = strongSelf.context.sharedContext.callManager?.joinGroupCall(context: strongSelf.context, peerId: peerId, initialCall: CachedChannelData.ActiveCall(id: callId, accessHash: accessHash), endCurrentIfAny: true, sourcePanel: nil)
|
|
||||||
}
|
|
||||||
})]), in: .window(.root))
|
|
||||||
} else {
|
|
||||||
strongSelf.present(textAlertController(context: strongSelf.context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_ExternalCallInProgressMessage, actions: [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
})]), in: .window(.root))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break
|
|
||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@ -1413,30 +1385,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let callResult = context.sharedContext.callManager?.requestCall(context: context, peerId: peer.id, isVideo: isVideo, endCurrentIfAny: false)
|
context.requestCall(peerId: peer.id, isVideo: isVideo, completion: {})
|
||||||
if let callResult = callResult, case let .alreadyInProgress(currentPeerId) = callResult {
|
|
||||||
if currentPeerId == peer.id {
|
|
||||||
context.sharedContext.navigateToCurrentCall(sourcePanel: nil)
|
|
||||||
} else {
|
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
|
||||||
let _ = (context.account.postbox.transaction { transaction -> (Peer?, Peer?) in
|
|
||||||
return (transaction.getPeer(peerId), currentPeerId.flatMap(transaction.getPeer))
|
|
||||||
} |> deliverOnMainQueue).start(next: { [weak self] peer, current in
|
|
||||||
if let peer = peer {
|
|
||||||
if let strongSelf = self, let current = current {
|
|
||||||
strongSelf.present(textAlertController(context: strongSelf.context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_CallInProgressMessage(current.compactDisplayTitle, peer.compactDisplayTitle).0, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
if let strongSelf = self {
|
|
||||||
let _ = strongSelf.context.sharedContext.callManager?.requestCall(context: context, peerId: peerId, isVideo: isVideo, endCurrentIfAny: true)
|
|
||||||
}
|
|
||||||
})]), in: .window(.root))
|
|
||||||
} else {
|
|
||||||
strongSelf.present(textAlertController(context: strongSelf.context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_ExternalCallInProgressMessage, actions: [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
})]), in: .window(.root))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, longTap: { [weak self] action, message in
|
}, longTap: { [weak self] action, message in
|
||||||
@ -6035,30 +5984,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
guard let strongSelf = self, let peer = strongSelf.presentationInterfaceState.renderedPeer?.peer else {
|
guard let strongSelf = self, let peer = strongSelf.presentationInterfaceState.renderedPeer?.peer else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let callResult = strongSelf.context.sharedContext.callManager?.joinGroupCall(context: strongSelf.context, peerId: peer.id, initialCall: activeCall, endCurrentIfAny: false, sourcePanel: nil)
|
strongSelf.context.joinGroupCall(peerId: peer.id, activeCall: activeCall, sourcePanel: nil)
|
||||||
if let callResult = callResult, case let .alreadyInProgress(currentPeerId) = callResult {
|
|
||||||
if currentPeerId == peer.id {
|
|
||||||
strongSelf.context.sharedContext.navigateToCurrentCall(sourcePanel: nil)
|
|
||||||
} else {
|
|
||||||
let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 }
|
|
||||||
let _ = (strongSelf.context.account.postbox.transaction { transaction -> (Peer?, Peer?) in
|
|
||||||
return (transaction.getPeer(peer.id), currentPeerId.flatMap(transaction.getPeer))
|
|
||||||
} |> deliverOnMainQueue).start(next: { peer, current in
|
|
||||||
if let peer = peer {
|
|
||||||
if let strongSelf = self, let current = current {
|
|
||||||
strongSelf.present(textAlertController(context: strongSelf.context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_CallInProgressMessage(current.compactDisplayTitle, peer.compactDisplayTitle).0, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
if let strongSelf = self {
|
|
||||||
let _ = strongSelf.context.sharedContext.callManager?.joinGroupCall(context: strongSelf.context, peerId: peer.id, initialCall: activeCall, endCurrentIfAny: true, sourcePanel: nil)
|
|
||||||
}
|
|
||||||
})]), in: .window(.root))
|
|
||||||
} else {
|
|
||||||
strongSelf.present(textAlertController(context: strongSelf.context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_ExternalCallInProgressMessage, actions: [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
})]), in: .window(.root))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, editMessageMedia: { [weak self] messageId, draw in
|
}, editMessageMedia: { [weak self] messageId, draw in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
strongSelf.controllerInteraction?.editMessageMedia(messageId, draw)
|
strongSelf.controllerInteraction?.editMessageMedia(messageId, draw)
|
||||||
|
@ -3207,7 +3207,7 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let activeCall = cachedChannelData.activeCall {
|
if let activeCall = cachedChannelData.activeCall {
|
||||||
let _ = self.context.sharedContext.callManager?.joinGroupCall(context: self.context, peerId: peer.id, initialCall: activeCall, endCurrentIfAny: false, sourcePanel: nil)
|
self.context.joinGroupCall(peerId: peer.id, activeCall: activeCall, sourcePanel: nil)
|
||||||
} else {
|
} else {
|
||||||
self.createAndJoinGroupCall(peerId: peer.id)
|
self.createAndJoinGroupCall(peerId: peer.id)
|
||||||
}
|
}
|
||||||
@ -3222,47 +3222,7 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let callResult = self.context.sharedContext.callManager?.requestCall(context: self.context, peerId: peer.id, isVideo: isVideo, endCurrentIfAny: false)
|
self.context.requestCall(peerId: peer.id, isVideo: isVideo, completion: {})
|
||||||
if let callResult = callResult, case let .alreadyInProgress(currentPeerId) = callResult {
|
|
||||||
if currentPeerId == peer.id {
|
|
||||||
self.context.sharedContext.navigateToCurrentCall(sourcePanel: nil)
|
|
||||||
} else {
|
|
||||||
let presentationData = self.presentationData
|
|
||||||
let _ = (self.context.account.postbox.transaction { transaction -> (Peer?, Peer?) in
|
|
||||||
return (transaction.getPeer(peer.id), currentPeerId.flatMap(transaction.getPeer))
|
|
||||||
} |> deliverOnMainQueue).start(next: { [weak self] peer, current in
|
|
||||||
if let peer = peer {
|
|
||||||
if let strongSelf = self, let current = current {
|
|
||||||
strongSelf.controller?.present(textAlertController(context: strongSelf.context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_CallInProgressMessage(current.compactDisplayTitle, peer.compactDisplayTitle).0, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
if let strongSelf = self {
|
|
||||||
let _ = strongSelf.context.sharedContext.callManager?.requestCall(context: strongSelf.context, peerId: peer.id, isVideo: isVideo, endCurrentIfAny: true)
|
|
||||||
}
|
|
||||||
})]), in: .window(.root))
|
|
||||||
} else if let strongSelf = self {
|
|
||||||
strongSelf.controller?.present(textAlertController(context: strongSelf.context, title: presentationData.strings.Call_CallInProgressTitle, text: presentationData.strings.Call_ExternalCallInProgressMessage, actions: [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_OK, action: {
|
|
||||||
})]), in: .window(.root))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
/*let _ = (self.context.account.postbox.transaction { transaction -> (Peer?, Peer?) in
|
|
||||||
return (transaction.getPeer(peer.id), transaction.getPeer(currentPeerId))
|
|
||||||
}
|
|
||||||
|> deliverOnMainQueue).start(next: { [weak self] peer, current in
|
|
||||||
guard let strongSelf = self else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if let peer = peer, let current = current {
|
|
||||||
strongSelf.controller?.present(textAlertController(context: strongSelf.context, title: strongSelf.presentationData.strings.Call_CallInProgressTitle, text: strongSelf.presentationData.strings.Call_CallInProgressMessage(current.compactDisplayTitle, peer.compactDisplayTitle).0, actions: [TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: strongSelf.presentationData.strings.Common_OK, action: {
|
|
||||||
guard let strongSelf = self else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
let _ = strongSelf.context.sharedContext.callManager?.requestCall(context: strongSelf.context, peerId: peer.id, isVideo: isVideo, endCurrentIfAny: true)
|
|
||||||
})]), in: .window(.root))
|
|
||||||
}
|
|
||||||
})*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func createAndJoinGroupCall(peerId: PeerId) {
|
private func createAndJoinGroupCall(peerId: PeerId) {
|
||||||
@ -3286,7 +3246,7 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
guard let strongSelf = self else {
|
guard let strongSelf = self else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let _ = strongSelf.context.sharedContext.callManager?.joinGroupCall(context: strongSelf.context, peerId: peerId, initialCall: CachedChannelData.ActiveCall(id: info.id, accessHash: info.accessHash), endCurrentIfAny: endCurrentIfAny, sourcePanel: nil)
|
strongSelf.context.joinGroupCall(peerId: peerId, activeCall: CachedChannelData.ActiveCall(id: info.id, accessHash: info.accessHash), sourcePanel: nil)
|
||||||
}, error: { [weak self] _ in
|
}, error: { [weak self] _ in
|
||||||
dismissStatus?()
|
dismissStatus?()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user