1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-02 09:27:55 +01:00
Telegram/Telegraph/TGPasswordRecoveryController.m

133 lines
4.6 KiB
Mathematica
Raw Normal View History

2015-10-01 18:19:52 +02:00
#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