Add start secret chat confirmation alert

This commit is contained in:
Ilya Laktyushin 2019-11-07 22:22:38 +04:00
parent e1171e80d3
commit 840b3cf22a
4 changed files with 3400 additions and 3389 deletions

View File

@ -5088,3 +5088,6 @@ Any member of this group will be able to see messages in the channel.";
"ChatList.DeletedChats_any" = "Deleted %@ chats"; "ChatList.DeletedChats_any" = "Deleted %@ chats";
"Appearance.ColorThemeNight" = "COLOR THEME — AUTO-NIGHT MODE"; "Appearance.ColorThemeNight" = "COLOR THEME — AUTO-NIGHT MODE";
"UserInfo.StartSecretChatConfirmation" = "Are you sure you want to start a secret chat with\n%@?";
"UserInfo.StartSecretChatStart" = "Start";

View File

@ -1361,7 +1361,8 @@ public func userInfoController(context: AccountContext, peerId: PeerId, mode: Pe
}) })
} }
startSecretChatImpl = { [weak controller] in startSecretChatImpl = { [weak controller] in
let _ = (context.account.postbox.transaction { transaction -> PeerId? in let _ = (context.account.postbox.transaction { transaction -> (Peer?, PeerId?) in
let peer = transaction.getPeer(peerId)
let filteredPeerIds = Array(transaction.getAssociatedPeerIds(peerId)).filter { $0.namespace == Namespaces.Peer.SecretChat } let filteredPeerIds = Array(transaction.getAssociatedPeerIds(peerId)).filter { $0.namespace == Namespaces.Peer.SecretChat }
var activeIndices: [ChatListIndex] = [] var activeIndices: [ChatListIndex] = []
for associatedId in filteredPeerIds { for associatedId in filteredPeerIds {
@ -1378,54 +1379,57 @@ public func userInfoController(context: AccountContext, peerId: PeerId, mode: Pe
} }
activeIndices.sort() activeIndices.sort()
if let index = activeIndices.last { if let index = activeIndices.last {
return index.messageIndex.id.peerId return (peer, index.messageIndex.id.peerId)
} else { } else {
return nil return (peer, nil)
} }
} |> deliverOnMainQueue).start(next: { currentPeerId in } |> deliverOnMainQueue).start(next: { peer, currentPeerId in
if let currentPeerId = currentPeerId { if let currentPeerId = currentPeerId {
if let navigationController = (controller?.navigationController as? NavigationController) { if let navigationController = (controller?.navigationController as? NavigationController) {
context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: context, chatLocation: .peer(currentPeerId))) context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: context, chatLocation: .peer(currentPeerId)))
} }
} else { } else if let controller = controller {
var createSignal = createSecretChat(account: context.account, peerId: peerId) let presentationData = context.sharedContext.currentPresentationData.with { $0 }
var cancelImpl: (() -> Void)? let displayTitle = peer?.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder) ?? ""
let progressSignal = Signal<Never, NoError> { subscriber in controller.present(textAlertController(context: context, title: nil, text: presentationData.strings.UserInfo_StartSecretChatConfirmation(displayTitle).0, actions: [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .defaultAction, title: presentationData.strings.UserInfo_StartSecretChatStart, action: {
let presentationData = context.sharedContext.currentPresentationData.with { $0 } var createSignal = createSecretChat(account: context.account, peerId: peerId)
let controller = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: { var cancelImpl: (() -> Void)?
cancelImpl?() let progressSignal = Signal<Never, NoError> { subscriber in
})) let controller = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: {
presentControllerImpl?(controller, nil) cancelImpl?()
return ActionDisposable { [weak controller] in }))
Queue.mainQueue().async() { presentControllerImpl?(controller, nil)
controller?.dismiss() return ActionDisposable { [weak controller] in
Queue.mainQueue().async() {
controller?.dismiss()
}
} }
} }
} |> runOn(Queue.mainQueue())
|> runOn(Queue.mainQueue()) |> delay(0.15, queue: Queue.mainQueue())
|> delay(0.15, queue: Queue.mainQueue()) let progressDisposable = progressSignal.start()
let progressDisposable = progressSignal.start()
createSignal = createSignal
createSignal = createSignal |> afterDisposed {
|> afterDisposed { Queue.mainQueue().async {
Queue.mainQueue().async { progressDisposable.dispose()
progressDisposable.dispose() }
} }
} cancelImpl = {
cancelImpl = { createSecretChatDisposable.set(nil)
createSecretChatDisposable.set(nil)
}
createSecretChatDisposable.set((createSignal |> deliverOnMainQueue).start(next: { peerId in
if let navigationController = (controller?.navigationController as? NavigationController) {
context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: context, chatLocation: .peer(peerId)))
} }
}, error: { _ in
if let controller = controller { createSecretChatDisposable.set((createSignal |> deliverOnMainQueue).start(next: { [weak controller] peerId in
let presentationData = context.sharedContext.currentPresentationData.with { $0 } if let navigationController = (controller?.navigationController as? NavigationController) {
controller.present(textAlertController(context: context, title: nil, text: presentationData.strings.Login_UnknownError, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), in: .window(.root)) context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: context, chatLocation: .peer(peerId)))
} }
})) }, error: { [weak controller] _ in
if let controller = controller {
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
controller.present(textAlertController(context: context, title: nil, text: presentationData.strings.Login_UnknownError, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), in: .window(.root))
}
}))
})]), in: .window(.root))
} }
}) })
} }