mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-07-30 23:20:28 +00:00
Wait until authorized context is there
This commit is contained in:
parent
791569951f
commit
4bf57d60fd
@ -1147,8 +1147,21 @@ final class SharedApplicationContext {
|
|||||||
|
|
||||||
if let authContextValue = self.authContextValue {
|
if let authContextValue = self.authContextValue {
|
||||||
authContextValue.account.shouldBeServiceTaskMaster.set(.single(.never))
|
authContextValue.account.shouldBeServiceTaskMaster.set(.single(.never))
|
||||||
authContextValue.rootController.view.endEditing(true)
|
if authContextValue.authorizationCompleted {
|
||||||
authContextValue.rootController.dismiss()
|
let accountId = authContextValue.account.id
|
||||||
|
let _ = (self.context.get()
|
||||||
|
|> filter { context in
|
||||||
|
return context?.context.account.id == accountId
|
||||||
|
}
|
||||||
|
|> take(1)
|
||||||
|
|> timeout(4.0, queue: .mainQueue(), alternate: .complete())
|
||||||
|
|> deliverOnMainQueue).start(completed: { authContextValue.rootController.view.endEditing(true)
|
||||||
|
authContextValue.rootController.dismiss()
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
authContextValue.rootController.view.endEditing(true)
|
||||||
|
authContextValue.rootController.dismiss()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
self.authContextValue = context
|
self.authContextValue = context
|
||||||
if let context = context {
|
if let context = context {
|
||||||
|
@ -31,12 +31,23 @@ final class UnauthorizedApplicationContext {
|
|||||||
|
|
||||||
let isReady = Promise<Bool>()
|
let isReady = Promise<Bool>()
|
||||||
|
|
||||||
|
var authorizationCompleted: Bool = false
|
||||||
|
|
||||||
init(apiId: Int32, apiHash: String, sharedContext: SharedAccountContextImpl, account: UnauthorizedAccount, otherAccountPhoneNumbers: ((String, AccountRecordId, Bool)?, [(String, AccountRecordId, Bool)])) {
|
init(apiId: Int32, apiHash: String, sharedContext: SharedAccountContextImpl, account: UnauthorizedAccount, otherAccountPhoneNumbers: ((String, AccountRecordId, Bool)?, [(String, AccountRecordId, Bool)])) {
|
||||||
self.sharedContext = sharedContext
|
self.sharedContext = sharedContext
|
||||||
self.account = account
|
self.account = account
|
||||||
let presentationData = sharedContext.currentPresentationData.with { $0 }
|
let presentationData = sharedContext.currentPresentationData.with { $0 }
|
||||||
|
|
||||||
self.rootController = AuthorizationSequenceController(sharedContext: sharedContext, account: account, otherAccountPhoneNumbers: otherAccountPhoneNumbers, strings: presentationData.strings, theme: presentationData.theme, openUrl: sharedContext.applicationBindings.openUrl, apiId: apiId, apiHash: apiHash)
|
var authorizationCompleted: (() -> Void)?
|
||||||
|
|
||||||
|
self.rootController = AuthorizationSequenceController(sharedContext: sharedContext, account: account, otherAccountPhoneNumbers: otherAccountPhoneNumbers, strings: presentationData.strings, theme: presentationData.theme, openUrl: sharedContext.applicationBindings.openUrl, apiId: apiId, apiHash: apiHash, authorizationCompleted: {
|
||||||
|
authorizationCompleted?()
|
||||||
|
})
|
||||||
|
|
||||||
|
authorizationCompleted = { [weak self] in
|
||||||
|
self?.authorizationCompleted = true
|
||||||
|
}
|
||||||
|
|
||||||
self.isReady.set(self.rootController.ready.get())
|
self.isReady.set(self.rootController.ready.get())
|
||||||
|
|
||||||
account.shouldBeServiceTaskMaster.set(sharedContext.applicationBindings.applicationInForeground |> map { value -> AccountServiceTaskMasterMode in
|
account.shouldBeServiceTaskMaster.set(sharedContext.applicationBindings.applicationInForeground |> map { value -> AccountServiceTaskMasterMode in
|
||||||
|
@ -38,6 +38,7 @@ public final class AuthorizationSequenceController: NavigationController, MFMail
|
|||||||
private var strings: PresentationStrings
|
private var strings: PresentationStrings
|
||||||
public let theme: PresentationTheme
|
public let theme: PresentationTheme
|
||||||
private let openUrl: (String) -> Void
|
private let openUrl: (String) -> Void
|
||||||
|
private let authorizationCompleted: () -> Void
|
||||||
|
|
||||||
private var stateDisposable: Disposable?
|
private var stateDisposable: Disposable?
|
||||||
private let actionDisposable = MetaDisposable()
|
private let actionDisposable = MetaDisposable()
|
||||||
@ -50,7 +51,7 @@ public final class AuthorizationSequenceController: NavigationController, MFMail
|
|||||||
}
|
}
|
||||||
private var didSetReady = false
|
private var didSetReady = false
|
||||||
|
|
||||||
public init(sharedContext: SharedAccountContext, account: UnauthorizedAccount, otherAccountPhoneNumbers: ((String, AccountRecordId, Bool)?, [(String, AccountRecordId, Bool)]), strings: PresentationStrings, theme: PresentationTheme, openUrl: @escaping (String) -> Void, apiId: Int32, apiHash: String) {
|
public init(sharedContext: SharedAccountContext, account: UnauthorizedAccount, otherAccountPhoneNumbers: ((String, AccountRecordId, Bool)?, [(String, AccountRecordId, Bool)]), strings: PresentationStrings, theme: PresentationTheme, openUrl: @escaping (String) -> Void, apiId: Int32, apiHash: String, authorizationCompleted: @escaping () -> Void) {
|
||||||
self.sharedContext = sharedContext
|
self.sharedContext = sharedContext
|
||||||
self.account = account
|
self.account = account
|
||||||
self.otherAccountPhoneNumbers = otherAccountPhoneNumbers
|
self.otherAccountPhoneNumbers = otherAccountPhoneNumbers
|
||||||
@ -59,6 +60,7 @@ public final class AuthorizationSequenceController: NavigationController, MFMail
|
|||||||
self.strings = strings
|
self.strings = strings
|
||||||
self.theme = theme
|
self.theme = theme
|
||||||
self.openUrl = openUrl
|
self.openUrl = openUrl
|
||||||
|
self.authorizationCompleted = authorizationCompleted
|
||||||
|
|
||||||
let navigationStatusBar: NavigationStatusBarStyle
|
let navigationStatusBar: NavigationStatusBarStyle
|
||||||
switch theme.rootController.statusBarStyle {
|
switch theme.rootController.statusBarStyle {
|
||||||
@ -719,68 +721,68 @@ public final class AuthorizationSequenceController: NavigationController, MFMail
|
|||||||
|
|
||||||
private func updateState(state: InnerState) {
|
private func updateState(state: InnerState) {
|
||||||
switch state {
|
switch state {
|
||||||
case .authorized:
|
case .authorized:
|
||||||
break
|
self.authorizationCompleted()
|
||||||
case let .state(state):
|
case let .state(state):
|
||||||
switch state {
|
switch state {
|
||||||
case .empty:
|
case .empty:
|
||||||
if let _ = self.viewControllers.last as? AuthorizationSequenceSplashController {
|
if let _ = self.viewControllers.last as? AuthorizationSequenceSplashController {
|
||||||
} else {
|
} else {
|
||||||
var controllers: [ViewController] = []
|
|
||||||
if self.otherAccountPhoneNumbers.1.isEmpty {
|
|
||||||
controllers.append(self.splashController())
|
|
||||||
} else {
|
|
||||||
controllers.append(self.phoneEntryController(countryCode: defaultCountryCode(), number: ""))
|
|
||||||
}
|
|
||||||
self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty)
|
|
||||||
}
|
|
||||||
case let .phoneEntry(countryCode, number):
|
|
||||||
var controllers: [ViewController] = []
|
var controllers: [ViewController] = []
|
||||||
if !self.otherAccountPhoneNumbers.1.isEmpty {
|
if self.otherAccountPhoneNumbers.1.isEmpty {
|
||||||
controllers.append(self.splashController())
|
|
||||||
}
|
|
||||||
controllers.append(self.phoneEntryController(countryCode: countryCode, number: number))
|
|
||||||
self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty)
|
|
||||||
case let .confirmationCodeEntry(number, type, _, timeout, nextType, _):
|
|
||||||
var controllers: [ViewController] = []
|
|
||||||
if !self.otherAccountPhoneNumbers.1.isEmpty {
|
|
||||||
controllers.append(self.splashController())
|
|
||||||
}
|
|
||||||
controllers.append(self.phoneEntryController(countryCode: defaultCountryCode(), number: ""))
|
|
||||||
controllers.append(self.codeEntryController(number: number, type: type, nextType: nextType, timeout: timeout, termsOfService: nil))
|
|
||||||
self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty)
|
|
||||||
case let .passwordEntry(hint, _, _, suggestReset, syncContacts):
|
|
||||||
var controllers: [ViewController] = []
|
|
||||||
if !self.otherAccountPhoneNumbers.1.isEmpty {
|
|
||||||
controllers.append(self.splashController())
|
|
||||||
}
|
|
||||||
controllers.append(self.passwordEntryController(hint: hint, suggestReset: suggestReset, syncContacts: syncContacts))
|
|
||||||
self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty)
|
|
||||||
case let .passwordRecovery(_, _, _, emailPattern, syncContacts):
|
|
||||||
var controllers: [ViewController] = []
|
|
||||||
if !self.otherAccountPhoneNumbers.1.isEmpty {
|
|
||||||
controllers.append(self.splashController())
|
|
||||||
}
|
|
||||||
controllers.append(self.passwordRecoveryController(emailPattern: emailPattern, syncContacts: syncContacts))
|
|
||||||
self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty)
|
|
||||||
case let .awaitingAccountReset(protectedUntil, number, _):
|
|
||||||
var controllers: [ViewController] = []
|
|
||||||
if !self.otherAccountPhoneNumbers.1.isEmpty {
|
|
||||||
controllers.append(self.splashController())
|
|
||||||
}
|
|
||||||
controllers.append(self.awaitingAccountResetController(protectedUntil: protectedUntil, number: number))
|
|
||||||
self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty)
|
|
||||||
case let .signUp(_, _, firstName, lastName, termsOfService, _):
|
|
||||||
var controllers: [ViewController] = []
|
|
||||||
var displayCancel = false
|
|
||||||
if !self.otherAccountPhoneNumbers.1.isEmpty {
|
|
||||||
controllers.append(self.splashController())
|
controllers.append(self.splashController())
|
||||||
} else {
|
} else {
|
||||||
displayCancel = true
|
controllers.append(self.phoneEntryController(countryCode: defaultCountryCode(), number: ""))
|
||||||
}
|
}
|
||||||
controllers.append(self.signUpController(firstName: firstName, lastName: lastName, termsOfService: termsOfService, displayCancel: displayCancel))
|
|
||||||
self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty)
|
self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty)
|
||||||
}
|
}
|
||||||
|
case let .phoneEntry(countryCode, number):
|
||||||
|
var controllers: [ViewController] = []
|
||||||
|
if !self.otherAccountPhoneNumbers.1.isEmpty {
|
||||||
|
controllers.append(self.splashController())
|
||||||
|
}
|
||||||
|
controllers.append(self.phoneEntryController(countryCode: countryCode, number: number))
|
||||||
|
self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty)
|
||||||
|
case let .confirmationCodeEntry(number, type, _, timeout, nextType, _):
|
||||||
|
var controllers: [ViewController] = []
|
||||||
|
if !self.otherAccountPhoneNumbers.1.isEmpty {
|
||||||
|
controllers.append(self.splashController())
|
||||||
|
}
|
||||||
|
controllers.append(self.phoneEntryController(countryCode: defaultCountryCode(), number: ""))
|
||||||
|
controllers.append(self.codeEntryController(number: number, type: type, nextType: nextType, timeout: timeout, termsOfService: nil))
|
||||||
|
self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty)
|
||||||
|
case let .passwordEntry(hint, _, _, suggestReset, syncContacts):
|
||||||
|
var controllers: [ViewController] = []
|
||||||
|
if !self.otherAccountPhoneNumbers.1.isEmpty {
|
||||||
|
controllers.append(self.splashController())
|
||||||
|
}
|
||||||
|
controllers.append(self.passwordEntryController(hint: hint, suggestReset: suggestReset, syncContacts: syncContacts))
|
||||||
|
self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty)
|
||||||
|
case let .passwordRecovery(_, _, _, emailPattern, syncContacts):
|
||||||
|
var controllers: [ViewController] = []
|
||||||
|
if !self.otherAccountPhoneNumbers.1.isEmpty {
|
||||||
|
controllers.append(self.splashController())
|
||||||
|
}
|
||||||
|
controllers.append(self.passwordRecoveryController(emailPattern: emailPattern, syncContacts: syncContacts))
|
||||||
|
self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty)
|
||||||
|
case let .awaitingAccountReset(protectedUntil, number, _):
|
||||||
|
var controllers: [ViewController] = []
|
||||||
|
if !self.otherAccountPhoneNumbers.1.isEmpty {
|
||||||
|
controllers.append(self.splashController())
|
||||||
|
}
|
||||||
|
controllers.append(self.awaitingAccountResetController(protectedUntil: protectedUntil, number: number))
|
||||||
|
self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty)
|
||||||
|
case let .signUp(_, _, firstName, lastName, termsOfService, _):
|
||||||
|
var controllers: [ViewController] = []
|
||||||
|
var displayCancel = false
|
||||||
|
if !self.otherAccountPhoneNumbers.1.isEmpty {
|
||||||
|
controllers.append(self.splashController())
|
||||||
|
} else {
|
||||||
|
displayCancel = true
|
||||||
|
}
|
||||||
|
controllers.append(self.signUpController(firstName: firstName, lastName: lastName, termsOfService: termsOfService, displayCancel: displayCancel))
|
||||||
|
self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user