Fix crash in wrong confirm email button.

This commit is contained in:
John Preston 2018-12-25 14:52:53 +04:00
parent d1be4c6d96
commit 9c579e0d5b
1 changed files with 22 additions and 14 deletions

View File

@ -328,20 +328,23 @@ void SetupCloudPassword(not_null<Ui::VerticalLayout*> container) {
}); });
auto confirmation = rpl::single( auto confirmation = rpl::single(
lang(lng_profile_loading) lang(lng_profile_loading)
) | rpl::then(base::duplicate( ) | rpl::then(rpl::duplicate(
pattern pattern
) | rpl::filter([](const QString &pattern) { ) | rpl::filter([](const QString &pattern) {
return !pattern.isEmpty(); return !pattern.isEmpty();
}) | rpl::map([](const QString &pattern) { }) | rpl::map([](const QString &pattern) {
return lng_cloud_password_waiting_code(lt_email, pattern); return lng_cloud_password_waiting_code(lt_email, pattern);
})); }));
auto unconfirmed = rpl::single( auto unconfirmed = rpl::duplicate(
true
) | rpl::then(base::duplicate(
pattern pattern
) | rpl::map([](const QString &pattern) { ) | rpl::map([](const QString &pattern) {
return !pattern.isEmpty(); return !pattern.isEmpty();
})); });
auto noconfirmed = rpl::single(
true
) | rpl::then(rpl::duplicate(
unconfirmed
));
const auto label = container->add( const auto label = container->add(
object_ptr<Ui::SlideWrap<Ui::FlatLabel>>( object_ptr<Ui::SlideWrap<Ui::FlatLabel>>(
container, container,
@ -356,7 +359,7 @@ void SetupCloudPassword(not_null<Ui::VerticalLayout*> container) {
(st::settingsButton.height (st::settingsButton.height
- st::settingsCloudPasswordLabel.style.font->height - st::settingsCloudPasswordLabel.style.font->height
+ st::settingsButton.padding.bottom())))); + st::settingsButton.padding.bottom()))));
label->toggleOn(base::duplicate(unconfirmed))->setDuration(0); label->toggleOn(base::duplicate(noconfirmed))->setDuration(0);
std::move( std::move(
confirmation confirmation
@ -379,10 +382,10 @@ void SetupCloudPassword(not_null<Ui::VerticalLayout*> container) {
std::move(text), std::move(text),
st::settingsButton))); st::settingsButton)));
change->toggleOn(rpl::duplicate( change->toggleOn(rpl::duplicate(
unconfirmed noconfirmed
) | rpl::map([](bool unconfirmed) { ) | rpl::map(
return !unconfirmed; !_1
}))->setDuration(0); ))->setDuration(0);
change->entity()->addClickHandler([] { change->entity()->addClickHandler([] {
if (CheckEditCloudPassword()) { if (CheckEditCloudPassword()) {
EditCloudPassword(); EditCloudPassword();
@ -396,11 +399,16 @@ void SetupCloudPassword(not_null<Ui::VerticalLayout*> container) {
container, container,
Lang::Viewer(lng_cloud_password_confirm), Lang::Viewer(lng_cloud_password_confirm),
st::settingsButton))); st::settingsButton)));
confirm->toggleOn(rpl::duplicate( confirm->toggleOn(rpl::single(
false
) | rpl::then(rpl::duplicate(
unconfirmed unconfirmed
))->setDuration(0); )))->setDuration(0);
confirm->entity()->addClickHandler([] { confirm->entity()->addClickHandler([] {
const auto state = Auth().api().passwordStateCurrent(); const auto state = Auth().api().passwordStateCurrent();
if (!state) {
return;
}
auto validation = ConfirmRecoveryEmail(state->unconfirmedPattern); auto validation = ConfirmRecoveryEmail(state->unconfirmedPattern);
std::move( std::move(
@ -432,7 +440,7 @@ void SetupCloudPassword(not_null<Ui::VerticalLayout*> container) {
st::settingsButton))); st::settingsButton)));
disable->toggleOn(rpl::combine( disable->toggleOn(rpl::combine(
rpl::duplicate(has), rpl::duplicate(has),
rpl::duplicate(unconfirmed), rpl::duplicate(noconfirmed),
_1 && !_2)); _1 && !_2));
disable->entity()->addClickHandler(remove); disable->entity()->addClickHandler(remove);
@ -445,7 +453,7 @@ void SetupCloudPassword(not_null<Ui::VerticalLayout*> container) {
st::settingsAttentionButton))); st::settingsAttentionButton)));
abort->toggleOn(rpl::combine( abort->toggleOn(rpl::combine(
rpl::duplicate(has), rpl::duplicate(has),
rpl::duplicate(unconfirmed), rpl::duplicate(noconfirmed),
_1 && _2)); _1 && _2));
abort->entity()->addClickHandler(remove); abort->entity()->addClickHandler(remove);