Login email reset improvements

This commit is contained in:
Ilya Laktyushin 2023-03-13 12:44:08 +04:00
parent 35f21a6cb6
commit a2ca4ddc3e
2 changed files with 62 additions and 47 deletions

View File

@ -319,13 +319,24 @@ public final class AuthorizationSequenceController: NavigationController, MFMail
let body = MarkdownAttributeSet(font: Font.regular(self.presentationData.listsFontSize.baseDisplaySize * 13.0 / 17.0), textColor: self.presentationData.theme.actionSheet.primaryTextColor) let body = MarkdownAttributeSet(font: Font.regular(self.presentationData.listsFontSize.baseDisplaySize * 13.0 / 17.0), textColor: self.presentationData.theme.actionSheet.primaryTextColor)
let bold = MarkdownAttributeSet(font: Font.semibold(self.presentationData.listsFontSize.baseDisplaySize * 13.0 / 17.0), textColor: self.presentationData.theme.actionSheet.primaryTextColor) let bold = MarkdownAttributeSet(font: Font.semibold(self.presentationData.listsFontSize.baseDisplaySize * 13.0 / 17.0), textColor: self.presentationData.theme.actionSheet.primaryTextColor)
if let _ = resetPendingDate { if let _ = resetPendingDate {
self.actionDisposable.set(
resetLoginEmail(account: self.account, phoneNumber: number, phoneCodeHash: phoneCodeHash).start(error: { [weak self] error in
if let self, case .alreadyInProgress = error {
let formattedNumber = formatPhoneNumber(number) let formattedNumber = formatPhoneNumber(number)
let title = NSAttributedString(string: self.presentationData.strings.Login_Email_PremiumRequiredTitle, font: Font.semibold(self.presentationData.listsFontSize.baseDisplaySize), textColor: self.presentationData.theme.actionSheet.primaryTextColor) let title = NSAttributedString(string: self.presentationData.strings.Login_Email_PremiumRequiredTitle, font: Font.semibold(self.presentationData.listsFontSize.baseDisplaySize), textColor: self.presentationData.theme.actionSheet.primaryTextColor)
let text = parseMarkdownIntoAttributedString(self.presentationData.strings.Login_Email_PremiumRequiredText(formattedNumber).string, attributes: MarkdownAttributes(body: body, bold: bold, link: body, linkAttribute: { _ in nil }), textAlignment: .center).mutableCopy() as! NSMutableAttributedString let text = parseMarkdownIntoAttributedString(self.presentationData.strings.Login_Email_PremiumRequiredText(formattedNumber).string, attributes: MarkdownAttributes(body: body, bold: bold, link: body, linkAttribute: { _ in nil }), textAlignment: .center).mutableCopy() as! NSMutableAttributedString
let alertController = textWithEntitiesAlertController(theme: AlertControllerTheme(presentationData: self.presentationData), title: title, text: text, actions: [TextAlertAction(type: .genericAction, title: self.presentationData.strings.Common_OK, action: { })]) let alertController = textWithEntitiesAlertController(theme: AlertControllerTheme(presentationData: self.presentationData), title: title, text: text, actions: [TextAlertAction(type: .genericAction, title: self.presentationData.strings.Common_OK, action: { })])
controller?.present(alertController, in: .window(.root)) controller?.present(alertController, in: .window(.root))
}
})
)
} else if let resetAvailablePeriod { } else if let resetAvailablePeriod {
if resetAvailablePeriod == 0 {
self.actionDisposable.set(
resetLoginEmail(account: self.account, phoneNumber: number, phoneCodeHash: phoneCodeHash).start()
)
} else {
let pattern = pattern.replacingOccurrences(of: "*", with: "#") let pattern = pattern.replacingOccurrences(of: "*", with: "#")
let title = NSAttributedString(string: self.presentationData.strings.Login_Email_ResetTitle, font: Font.semibold(self.presentationData.listsFontSize.baseDisplaySize), textColor: self.presentationData.theme.actionSheet.primaryTextColor) let title = NSAttributedString(string: self.presentationData.strings.Login_Email_ResetTitle, font: Font.semibold(self.presentationData.listsFontSize.baseDisplaySize), textColor: self.presentationData.theme.actionSheet.primaryTextColor)
let availableIn = unmuteIntervalString(strings: self.presentationData.strings, value: resetAvailablePeriod) let availableIn = unmuteIntervalString(strings: self.presentationData.strings, value: resetAvailablePeriod)
@ -354,7 +365,7 @@ public final class AuthorizationSequenceController: NavigationController, MFMail
switch error { switch error {
case .limitExceeded: case .limitExceeded:
text = self.presentationData.strings.Login_CodeFloodError text = self.presentationData.strings.Login_CodeFloodError
case .generic: case .generic, .alreadyInProgress:
text = self.presentationData.strings.Login_UnknownError text = self.presentationData.strings.Login_UnknownError
case .codeExpired: case .codeExpired:
text = self.presentationData.strings.Login_CodeExpired text = self.presentationData.strings.Login_CodeExpired
@ -371,6 +382,7 @@ public final class AuthorizationSequenceController: NavigationController, MFMail
} }
} }
} }
}
controller.loginWithCode = { [weak self, weak controller] code in controller.loginWithCode = { [weak self, weak controller] code in
if let strongSelf = self { if let strongSelf = self {
controller?.inProgress = true controller?.inProgress = true

View File

@ -809,6 +809,7 @@ public enum AuthorizationEmailResetError {
case generic case generic
case limitExceeded case limitExceeded
case codeExpired case codeExpired
case alreadyInProgress
} }
public func resetLoginEmail(account: UnauthorizedAccount, phoneNumber: String, phoneCodeHash: String) -> Signal<Never, AuthorizationEmailResetError> { public func resetLoginEmail(account: UnauthorizedAccount, phoneNumber: String, phoneCodeHash: String) -> Signal<Never, AuthorizationEmailResetError> {
@ -823,6 +824,8 @@ public func resetLoginEmail(account: UnauthorizedAccount, phoneNumber: String, p
return .fail(.limitExceeded) return .fail(.limitExceeded)
} else if errorDescription == "CODE_HASH_EXPIRED" || errorDescription == "PHONE_CODE_EXPIRED" { } else if errorDescription == "CODE_HASH_EXPIRED" || errorDescription == "PHONE_CODE_EXPIRED" {
return .fail(.codeExpired) return .fail(.codeExpired)
} else if errorDescription == "TASK_ALREADY_EXISTS" {
return .fail(.alreadyInProgress)
} else { } else {
return .fail(.generic) return .fail(.generic)
} }