mirror of
https://github.com/danog/Telegram.git
synced 2024-12-02 09:27:55 +01:00
133 lines
4.6 KiB
Objective-C
133 lines
4.6 KiB
Objective-C
#import "TGPasswordRecoveryController.h"
|
|
|
|
#import "TGTwoStepRecoverySignals.h"
|
|
|
|
#import "TGUsernameCollectionItem.h"
|
|
#import "TGCommentCollectionItem.h"
|
|
|
|
#import "TGProgressWindow.h"
|
|
|
|
#import "TGAlertView.h"
|
|
|
|
@interface TGPasswordRecoveryController ()
|
|
{
|
|
NSString *_emailPattern;
|
|
|
|
UIBarButtonItem *_nextItem;
|
|
TGUsernameCollectionItem *_codeItem;
|
|
|
|
SMetaDisposable *_recoverDisposable;
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation TGPasswordRecoveryController
|
|
|
|
- (instancetype)initWithEmailPattern:(NSString *)emailPattern
|
|
{
|
|
self = [super init];
|
|
if (self != nil)
|
|
{
|
|
_emailPattern = emailPattern;
|
|
|
|
_recoverDisposable = [[SMetaDisposable alloc] init];
|
|
|
|
self.title = TGLocalized(@"TwoStepAuth.RecoveryTitle");
|
|
|
|
_nextItem = [[UIBarButtonItem alloc] initWithTitle:TGLocalized(@"Common.Next") style:UIBarButtonItemStyleDone target:self action:@selector(nextPressed)];
|
|
[self setRightBarButtonItem:_nextItem];
|
|
_nextItem.enabled = false;
|
|
|
|
[self setLeftBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:TGLocalized(@"Common.Cancel") style:UIBarButtonItemStylePlain target:self action:@selector(cancelPressed)]];
|
|
|
|
_codeItem = [[TGUsernameCollectionItem alloc] init];
|
|
_codeItem.title = TGLocalized(@"TwoStepAuth.RecoveryCode");
|
|
_codeItem.placeholder = @"";
|
|
_codeItem.keyboardType = UIKeyboardTypeNumberPad;
|
|
__weak TGPasswordRecoveryController *weakSelf = self;
|
|
_codeItem.usernameChanged = ^(NSString *code)
|
|
{
|
|
__strong TGPasswordRecoveryController *strongSelf = weakSelf;
|
|
if (strongSelf != nil)
|
|
strongSelf->_nextItem.enabled = code.length != 0;
|
|
};
|
|
_codeItem.usernameValid = true;
|
|
|
|
TGCommentCollectionItem *helpItem = [[TGCommentCollectionItem alloc] initWithFormattedText:TGLocalized(@"TwoStepAuth.RecoveryCodeHelp")];
|
|
|
|
TGCollectionMenuSection *firstSection = [[TGCollectionMenuSection alloc] initWithItems:@[
|
|
_codeItem,
|
|
helpItem
|
|
]];
|
|
firstSection.insets = UIEdgeInsetsMake(32.0f, 0.0f, 0.0f, 0.0);
|
|
[self.menuSections addSection:firstSection];
|
|
|
|
TGCommentCollectionItem *recoverItem = [[TGCommentCollectionItem alloc] initWithText:[[NSString alloc] initWithFormat:TGLocalized(@"TwoStepAuth.RecoveryEmailUnavailable"), _emailPattern]];
|
|
recoverItem.textColor = TGAccentColor();
|
|
recoverItem.action = ^
|
|
{
|
|
__strong TGPasswordRecoveryController *strongSelf = weakSelf;
|
|
if (strongSelf != nil)
|
|
{
|
|
if (strongSelf->_completion)
|
|
strongSelf->_completion(false, 0);
|
|
}
|
|
};
|
|
|
|
TGCollectionMenuSection *secondSection = [[TGCollectionMenuSection alloc] initWithItems:@[recoverItem]];
|
|
secondSection.insets = UIEdgeInsetsMake(6.0f, 0.0f, 32.0f, 0.0f);
|
|
[self.menuSections addSection:secondSection];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)viewWillAppear:(BOOL)animated
|
|
{
|
|
[super viewWillAppear:animated];
|
|
|
|
[_codeItem becomeFirstResponder];
|
|
}
|
|
|
|
- (void)cancelPressed
|
|
{
|
|
if (_cancelled)
|
|
_cancelled();
|
|
}
|
|
|
|
- (void)nextPressed
|
|
{
|
|
TGProgressWindow *progressWindow = [[TGProgressWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
|
|
[progressWindow show:true];
|
|
|
|
__weak TGPasswordRecoveryController *weakSelf = self;
|
|
[_recoverDisposable setDisposable:[[[[TGTwoStepRecoverySignals recoverPasswordWithCode:_codeItem.username] deliverOn:[SQueue mainQueue]] onDispose:^
|
|
{
|
|
TGDispatchOnMainThread(^
|
|
{
|
|
[progressWindow dismiss:true];
|
|
});
|
|
}] startWithNext:^(NSNumber *userId)
|
|
{
|
|
__strong TGPasswordRecoveryController *strongSelf = weakSelf;
|
|
if (strongSelf != nil)
|
|
{
|
|
if (strongSelf->_completion)
|
|
strongSelf->_completion(true, [userId intValue]);
|
|
}
|
|
} error:^(id error)
|
|
{
|
|
NSString *errorText = TGLocalized(@"TwoStepAuth.RecoveryCodeInvalid");
|
|
if ([error respondsToSelector:@selector(intValue)])
|
|
{
|
|
if ([error intValue] == TGTwoStepRecoveryErrorCodeExpired)
|
|
errorText = TGLocalized(@"TwoStepAuth.RecoveryCodeExpired");
|
|
else if ([error intValue] == TGTwoStepRecoveryErrorFlood)
|
|
errorText = TGLocalized(@"TwoStepAuth.FloodError");
|
|
}
|
|
|
|
[[[TGAlertView alloc] initWithTitle:nil message:errorText cancelButtonTitle:TGLocalized(@"Common.OK") okButtonTitle:nil completionBlock:nil] show];
|
|
} completed:nil]];
|
|
}
|
|
|
|
@end
|