mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-08-02 10:53:02 +02:00
Use MTP::Sender in Intro.
This commit is contained in:
parent
0b028b959b
commit
7f09da9e32
15 changed files with 166 additions and 162 deletions
|
@ -410,12 +410,12 @@ bool Call::handleUpdate(const MTPPhoneCall &call) {
|
||||||
? _controller->getDebugInfo()
|
? _controller->getDebugInfo()
|
||||||
: std::string();
|
: std::string();
|
||||||
if (!debugLog.empty()) {
|
if (!debugLog.empty()) {
|
||||||
MTP::send(
|
user()->session().api().request(MTPphone_SaveCallDebug(
|
||||||
MTPphone_SaveCallDebug(
|
MTP_inputPhoneCall(
|
||||||
MTP_inputPhoneCall(
|
MTP_long(_id),
|
||||||
MTP_long(_id),
|
MTP_long(_accessHash)),
|
||||||
MTP_long(_accessHash)),
|
MTP_dataJSON(MTP_string(debugLog))
|
||||||
MTP_dataJSON(MTP_string(debugLog))));
|
)).send();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (data.is_need_rating() && _id && _accessHash) {
|
if (data.is_need_rating() && _id && _accessHash) {
|
||||||
|
|
|
@ -15,6 +15,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "ui/widgets/labels.h"
|
#include "ui/widgets/labels.h"
|
||||||
#include "ui/text/text_utilities.h"
|
#include "ui/text/text_utilities.h"
|
||||||
#include "boxes/confirm_box.h"
|
#include "boxes/confirm_box.h"
|
||||||
|
#include "main/main_account.h"
|
||||||
|
#include "mtproto/mtp_instance.h"
|
||||||
#include "app.h"
|
#include "app.h"
|
||||||
#include "styles/style_intro.h"
|
#include "styles/style_intro.h"
|
||||||
|
|
||||||
|
@ -201,7 +203,7 @@ void CodeWidget::finished() {
|
||||||
Step::finished();
|
Step::finished();
|
||||||
_checkRequestTimer.cancel();
|
_checkRequestTimer.cancel();
|
||||||
_callTimer.cancel();
|
_callTimer.cancel();
|
||||||
rpcInvalidate();
|
apiClear();
|
||||||
|
|
||||||
cancelled();
|
cancelled();
|
||||||
_sentCode.clear();
|
_sentCode.clear();
|
||||||
|
@ -209,9 +211,12 @@ void CodeWidget::finished() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CodeWidget::cancelled() {
|
void CodeWidget::cancelled() {
|
||||||
MTP::cancel(base::take(_sentRequest));
|
api()->request(base::take(_sentRequest)).cancel();
|
||||||
MTP::cancel(base::take(_callRequestId));
|
api()->request(base::take(_callRequestId)).cancel();
|
||||||
MTP::send(MTPauth_CancelCode(MTP_string(getData()->phone), MTP_bytes(getData()->phoneHash)));
|
api()->request(MTPauth_CancelCode(
|
||||||
|
MTP_string(getData()->phone),
|
||||||
|
MTP_bytes(getData()->phoneHash)
|
||||||
|
)).send();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CodeWidget::stopCheck() {
|
void CodeWidget::stopCheck() {
|
||||||
|
@ -219,12 +224,12 @@ void CodeWidget::stopCheck() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CodeWidget::checkRequest() {
|
void CodeWidget::checkRequest() {
|
||||||
auto status = MTP::state(_sentRequest);
|
auto status = api()->instance()->state(_sentRequest);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
auto leftms = -status;
|
auto leftms = -status;
|
||||||
if (leftms >= 1000) {
|
if (leftms >= 1000) {
|
||||||
if (_sentRequest) {
|
if (_sentRequest) {
|
||||||
MTP::cancel(base::take(_sentRequest));
|
api()->request(base::take(_sentRequest)).cancel();
|
||||||
_sentCode.clear();
|
_sentCode.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -259,14 +264,13 @@ void CodeWidget::codeSubmitDone(const MTPauth_Authorization &result) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CodeWidget::codeSubmitFail(const RPCError &error) {
|
void CodeWidget::codeSubmitFail(const RPCError &error) {
|
||||||
if (MTP::isFloodError(error)) {
|
if (MTP::isFloodError(error)) {
|
||||||
stopCheck();
|
stopCheck();
|
||||||
_sentRequest = 0;
|
_sentRequest = 0;
|
||||||
showCodeError(tr::lng_flood_error());
|
showCodeError(tr::lng_flood_error());
|
||||||
return true;
|
return;
|
||||||
}
|
}
|
||||||
if (MTP::isDefaultHandledError(error)) return false;
|
|
||||||
|
|
||||||
stopCheck();
|
stopCheck();
|
||||||
_sentRequest = 0;
|
_sentRequest = 0;
|
||||||
|
@ -275,24 +279,21 @@ bool CodeWidget::codeSubmitFail(const RPCError &error) {
|
||||||
|| err == qstr("PHONE_CODE_EXPIRED")
|
|| err == qstr("PHONE_CODE_EXPIRED")
|
||||||
|| err == qstr("PHONE_NUMBER_BANNED")) { // show error
|
|| err == qstr("PHONE_NUMBER_BANNED")) { // show error
|
||||||
goBack();
|
goBack();
|
||||||
return true;
|
|
||||||
} else if (err == qstr("PHONE_CODE_EMPTY") || err == qstr("PHONE_CODE_INVALID")) {
|
} else if (err == qstr("PHONE_CODE_EMPTY") || err == qstr("PHONE_CODE_INVALID")) {
|
||||||
showCodeError(tr::lng_bad_code());
|
showCodeError(tr::lng_bad_code());
|
||||||
return true;
|
|
||||||
} else if (err == qstr("SESSION_PASSWORD_NEEDED")) {
|
} else if (err == qstr("SESSION_PASSWORD_NEEDED")) {
|
||||||
_checkRequestTimer.callEach(1000);
|
_checkRequestTimer.callEach(1000);
|
||||||
_sentRequest = MTP::send(
|
_sentRequest = api()->request(MTPaccount_GetPassword(
|
||||||
MTPaccount_GetPassword(),
|
)).done([=](const MTPaccount_Password &result) {
|
||||||
rpcDone(&CodeWidget::gotPassword),
|
gotPassword(result);
|
||||||
rpcFail(&CodeWidget::codeSubmitFail));
|
}).fail([=](const RPCError &error) {
|
||||||
return true;
|
codeSubmitFail(error);
|
||||||
}
|
}).handleFloodErrors().send();
|
||||||
if (Logs::DebugEnabled()) { // internal server error
|
} else if (Logs::DebugEnabled()) { // internal server error
|
||||||
showCodeError(rpl::single(err + ": " + error.description()));
|
showCodeError(rpl::single(err + ": " + error.description()));
|
||||||
} else {
|
} else {
|
||||||
showCodeError(rpl::single(Lang::Hard::ServerError()));
|
showCodeError(rpl::single(Lang::Hard::ServerError()));
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CodeWidget::codeChanged() {
|
void CodeWidget::codeChanged() {
|
||||||
|
@ -305,11 +306,12 @@ void CodeWidget::sendCall() {
|
||||||
if (--_callTimeout <= 0) {
|
if (--_callTimeout <= 0) {
|
||||||
_callStatus = CallStatus::Calling;
|
_callStatus = CallStatus::Calling;
|
||||||
_callTimer.cancel();
|
_callTimer.cancel();
|
||||||
_callRequestId = MTP::send(
|
_callRequestId = api()->request(MTPauth_ResendCode(
|
||||||
MTPauth_ResendCode(
|
MTP_string(getData()->phone),
|
||||||
MTP_string(getData()->phone),
|
MTP_bytes(getData()->phoneHash)
|
||||||
MTP_bytes(getData()->phoneHash)),
|
)).done([=](const MTPauth_SentCode &result) {
|
||||||
rpcDone(&CodeWidget::callDone));
|
callDone(result);
|
||||||
|
}).send();
|
||||||
} else {
|
} else {
|
||||||
getData()->callStatus = _callStatus;
|
getData()->callStatus = _callStatus;
|
||||||
getData()->callTimeout = _callTimeout;
|
getData()->callTimeout = _callTimeout;
|
||||||
|
@ -382,25 +384,29 @@ void CodeWidget::submit() {
|
||||||
getData()->hasRecovery = false;
|
getData()->hasRecovery = false;
|
||||||
getData()->pwdHint = QString();
|
getData()->pwdHint = QString();
|
||||||
getData()->pwdNotEmptyPassport = false;
|
getData()->pwdNotEmptyPassport = false;
|
||||||
_sentRequest = MTP::send(
|
_sentRequest = api()->request(MTPauth_SignIn(
|
||||||
MTPauth_SignIn(
|
MTP_string(getData()->phone),
|
||||||
MTP_string(getData()->phone),
|
MTP_bytes(getData()->phoneHash),
|
||||||
MTP_bytes(getData()->phoneHash),
|
MTP_string(_sentCode)
|
||||||
MTP_string(_sentCode)),
|
)).done([=](const MTPauth_Authorization &result) {
|
||||||
rpcDone(&CodeWidget::codeSubmitDone),
|
codeSubmitDone(result);
|
||||||
rpcFail(&CodeWidget::codeSubmitFail));
|
}).fail([=](const RPCError &error) {
|
||||||
|
codeSubmitFail(error);
|
||||||
|
}).handleFloodErrors().send();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CodeWidget::noTelegramCode() {
|
void CodeWidget::noTelegramCode() {
|
||||||
if (_noTelegramCodeRequestId) {
|
if (_noTelegramCodeRequestId) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_noTelegramCodeRequestId = MTP::send(
|
_noTelegramCodeRequestId = api()->request(MTPauth_ResendCode(
|
||||||
MTPauth_ResendCode(
|
MTP_string(getData()->phone),
|
||||||
MTP_string(getData()->phone),
|
MTP_bytes(getData()->phoneHash)
|
||||||
MTP_bytes(getData()->phoneHash)),
|
)).done([=](const MTPauth_SentCode &result) {
|
||||||
rpcDone(&CodeWidget::noTelegramCodeDone),
|
noTelegramCodeDone(result);
|
||||||
rpcFail(&CodeWidget::noTelegramCodeFail));
|
}).fail([=](const RPCError &error) {
|
||||||
|
noTelegramCodeFail(error);
|
||||||
|
}).handleFloodErrors().send();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CodeWidget::noTelegramCodeDone(const MTPauth_SentCode &result) {
|
void CodeWidget::noTelegramCodeDone(const MTPauth_SentCode &result) {
|
||||||
|
@ -426,14 +432,11 @@ void CodeWidget::noTelegramCodeDone(const MTPauth_SentCode &result) {
|
||||||
updateDescText();
|
updateDescText();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CodeWidget::noTelegramCodeFail(const RPCError &error) {
|
void CodeWidget::noTelegramCodeFail(const RPCError &error) {
|
||||||
if (MTP::isFloodError(error)) {
|
if (MTP::isFloodError(error)) {
|
||||||
_noTelegramCodeRequestId = 0;
|
_noTelegramCodeRequestId = 0;
|
||||||
showCodeError(tr::lng_flood_error());
|
showCodeError(tr::lng_flood_error());
|
||||||
return true;
|
return;
|
||||||
}
|
|
||||||
if (MTP::isDefaultHandledError(error)) {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_noTelegramCodeRequestId = 0;
|
_noTelegramCodeRequestId = 0;
|
||||||
|
@ -442,7 +445,6 @@ bool CodeWidget::noTelegramCodeFail(const RPCError &error) {
|
||||||
} else {
|
} else {
|
||||||
showCodeError(rpl::single(Lang::Hard::ServerError()));
|
showCodeError(rpl::single(Lang::Hard::ServerError()));
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace details
|
} // namespace details
|
||||||
|
|
|
@ -74,14 +74,14 @@ private:
|
||||||
void updateControlsGeometry();
|
void updateControlsGeometry();
|
||||||
|
|
||||||
void codeSubmitDone(const MTPauth_Authorization &result);
|
void codeSubmitDone(const MTPauth_Authorization &result);
|
||||||
bool codeSubmitFail(const RPCError &error);
|
void codeSubmitFail(const RPCError &error);
|
||||||
|
|
||||||
void showCodeError(rpl::producer<QString> text);
|
void showCodeError(rpl::producer<QString> text);
|
||||||
void callDone(const MTPauth_SentCode &v);
|
void callDone(const MTPauth_SentCode &v);
|
||||||
void gotPassword(const MTPaccount_Password &result);
|
void gotPassword(const MTPaccount_Password &result);
|
||||||
|
|
||||||
void noTelegramCodeDone(const MTPauth_SentCode &result);
|
void noTelegramCodeDone(const MTPauth_SentCode &result);
|
||||||
bool noTelegramCodeFail(const RPCError &result);
|
void noTelegramCodeFail(const RPCError &result);
|
||||||
|
|
||||||
void stopCheck();
|
void stopCheck();
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,6 @@ PasswordCheckWidget::PasswordCheckWidget(
|
||||||
not_null<Main::Account*> account,
|
not_null<Main::Account*> account,
|
||||||
not_null<Data*> data)
|
not_null<Data*> data)
|
||||||
: Step(parent, account, data)
|
: Step(parent, account, data)
|
||||||
, _api(account->mtp())
|
|
||||||
, _request(getData()->pwdRequest)
|
, _request(getData()->pwdRequest)
|
||||||
, _hasRecovery(getData()->hasRecovery)
|
, _hasRecovery(getData()->hasRecovery)
|
||||||
, _notEmptyPassport(getData()->pwdNotEmptyPassport)
|
, _notEmptyPassport(getData()->pwdNotEmptyPassport)
|
||||||
|
@ -115,7 +114,7 @@ void PasswordCheckWidget::activate() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void PasswordCheckWidget::cancelled() {
|
void PasswordCheckWidget::cancelled() {
|
||||||
_api.request(base::take(_sentRequest)).cancel();
|
api()->request(base::take(_sentRequest)).cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PasswordCheckWidget::pwdSubmitDone(bool recover, const MTPauth_Authorization &result) {
|
void PasswordCheckWidget::pwdSubmitDone(bool recover, const MTPauth_Authorization &result) {
|
||||||
|
@ -182,8 +181,8 @@ void PasswordCheckWidget::checkPasswordHash() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void PasswordCheckWidget::requestPasswordData() {
|
void PasswordCheckWidget::requestPasswordData() {
|
||||||
_api.request(base::take(_sentRequest)).cancel();
|
api()->request(base::take(_sentRequest)).cancel();
|
||||||
_sentRequest = _api.request(
|
_sentRequest = api()->request(
|
||||||
MTPaccount_GetPassword()
|
MTPaccount_GetPassword()
|
||||||
).done([=](const MTPaccount_Password &result) {
|
).done([=](const MTPaccount_Password &result) {
|
||||||
_sentRequest = 0;
|
_sentRequest = 0;
|
||||||
|
@ -205,13 +204,13 @@ void PasswordCheckWidget::passwordChecked() {
|
||||||
return serverError();
|
return serverError();
|
||||||
}
|
}
|
||||||
_request.id = 0;
|
_request.id = 0;
|
||||||
_sentRequest = _api.request(
|
_sentRequest = api()->request(
|
||||||
MTPauth_CheckPassword(check.result)
|
MTPauth_CheckPassword(check.result)
|
||||||
).done([=](const MTPauth_Authorization &result) {
|
).done([=](const MTPauth_Authorization &result) {
|
||||||
pwdSubmitDone(false, result);
|
pwdSubmitDone(false, result);
|
||||||
}).handleFloodErrors().fail([=](const RPCError &error) {
|
}).fail([=](const RPCError &error) {
|
||||||
pwdSubmitFail(error);
|
pwdSubmitFail(error);
|
||||||
}).send();
|
}).handleFloodErrors().send();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PasswordCheckWidget::serverError() {
|
void PasswordCheckWidget::serverError() {
|
||||||
|
@ -267,7 +266,7 @@ void PasswordCheckWidget::recoverStartFail(const RPCError &error) {
|
||||||
void PasswordCheckWidget::toRecover() {
|
void PasswordCheckWidget::toRecover() {
|
||||||
if (_hasRecovery) {
|
if (_hasRecovery) {
|
||||||
if (_sentRequest) {
|
if (_sentRequest) {
|
||||||
_api.request(base::take(_sentRequest)).cancel();
|
api()->request(base::take(_sentRequest)).cancel();
|
||||||
}
|
}
|
||||||
hideError();
|
hideError();
|
||||||
_toRecover->hide();
|
_toRecover->hide();
|
||||||
|
@ -279,7 +278,7 @@ void PasswordCheckWidget::toRecover() {
|
||||||
_codeField->setFocus();
|
_codeField->setFocus();
|
||||||
updateDescriptionText();
|
updateDescriptionText();
|
||||||
if (_emailPattern.isEmpty()) {
|
if (_emailPattern.isEmpty()) {
|
||||||
_api.request(
|
api()->request(
|
||||||
MTPauth_RequestPasswordRecovery()
|
MTPauth_RequestPasswordRecovery()
|
||||||
).done([=](const MTPauth_PasswordRecovery &result) {
|
).done([=](const MTPauth_PasswordRecovery &result) {
|
||||||
recoverStarted(result);
|
recoverStarted(result);
|
||||||
|
@ -302,7 +301,7 @@ void PasswordCheckWidget::toPassword() {
|
||||||
|
|
||||||
void PasswordCheckWidget::showReset() {
|
void PasswordCheckWidget::showReset() {
|
||||||
if (_sentRequest) {
|
if (_sentRequest) {
|
||||||
_api.request(base::take(_sentRequest)).cancel();
|
api()->request(base::take(_sentRequest)).cancel();
|
||||||
}
|
}
|
||||||
_toRecover->show();
|
_toRecover->show();
|
||||||
_toPassword->hide();
|
_toPassword->hide();
|
||||||
|
@ -335,13 +334,13 @@ void PasswordCheckWidget::submit() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const auto send = crl::guard(this, [=] {
|
const auto send = crl::guard(this, [=] {
|
||||||
_sentRequest = _api.request(
|
_sentRequest = api()->request(
|
||||||
MTPauth_RecoverPassword(MTP_string(code))
|
MTPauth_RecoverPassword(MTP_string(code))
|
||||||
).done([=](const MTPauth_Authorization &result) {
|
).done([=](const MTPauth_Authorization &result) {
|
||||||
pwdSubmitDone(true, result);
|
pwdSubmitDone(true, result);
|
||||||
}).handleFloodErrors().fail([=](const RPCError &error) {
|
}).fail([=](const RPCError &error) {
|
||||||
codeSubmitFail(error);
|
codeSubmitFail(error);
|
||||||
}).send();
|
}).handleFloodErrors().send();
|
||||||
});
|
});
|
||||||
|
|
||||||
if (_notEmptyPassport) {
|
if (_notEmptyPassport) {
|
||||||
|
|
|
@ -62,7 +62,6 @@ private:
|
||||||
void passwordChecked();
|
void passwordChecked();
|
||||||
void serverError();
|
void serverError();
|
||||||
|
|
||||||
MTP::Sender _api;
|
|
||||||
Core::CloudPasswordCheckRequest _request;
|
Core::CloudPasswordCheckRequest _request;
|
||||||
crl::time _lastSrpIdInvalidTime = 0;
|
crl::time _lastSrpIdInvalidTime = 0;
|
||||||
bytes::vector _passwordHash;
|
bytes::vector _passwordHash;
|
||||||
|
|
|
@ -141,15 +141,17 @@ void PhoneWidget::submit() {
|
||||||
_checkRequestTimer.callEach(1000);
|
_checkRequestTimer.callEach(1000);
|
||||||
|
|
||||||
_sentPhone = phone;
|
_sentPhone = phone;
|
||||||
account().mtp()->setUserPhone(_sentPhone);
|
api()->instance()->setUserPhone(_sentPhone);
|
||||||
_sentRequest = MTP::send(
|
_sentRequest = api()->request(MTPauth_SendCode(
|
||||||
MTPauth_SendCode(
|
MTP_string(_sentPhone),
|
||||||
MTP_string(_sentPhone),
|
MTP_int(ApiId),
|
||||||
MTP_int(ApiId),
|
MTP_string(ApiHash),
|
||||||
MTP_string(ApiHash),
|
MTP_codeSettings(MTP_flags(0))
|
||||||
MTP_codeSettings(MTP_flags(0))),
|
)).done([=](const MTPauth_SentCode &result) {
|
||||||
rpcDone(&PhoneWidget::phoneSubmitDone),
|
phoneSubmitDone(result);
|
||||||
rpcFail(&PhoneWidget::phoneSubmitFail));
|
}).fail([=](const RPCError &error) {
|
||||||
|
phoneSubmitFail(error);
|
||||||
|
}).handleFloodErrors().send();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhoneWidget::stopCheck() {
|
void PhoneWidget::stopCheck() {
|
||||||
|
@ -157,11 +159,11 @@ void PhoneWidget::stopCheck() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhoneWidget::checkRequest() {
|
void PhoneWidget::checkRequest() {
|
||||||
auto status = MTP::state(_sentRequest);
|
auto status = api()->instance()->state(_sentRequest);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
auto leftms = -status;
|
auto leftms = -status;
|
||||||
if (leftms >= 1000) {
|
if (leftms >= 1000) {
|
||||||
MTP::cancel(base::take(_sentRequest));
|
api()->request(base::take(_sentRequest)).cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!_sentRequest && status == MTP::RequestSent) {
|
if (!_sentRequest && status == MTP::RequestSent) {
|
||||||
|
@ -193,34 +195,28 @@ void PhoneWidget::phoneSubmitDone(const MTPauth_SentCode &result) {
|
||||||
goNext<CodeWidget>();
|
goNext<CodeWidget>();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PhoneWidget::phoneSubmitFail(const RPCError &error) {
|
void PhoneWidget::phoneSubmitFail(const RPCError &error) {
|
||||||
if (MTP::isFloodError(error)) {
|
if (MTP::isFloodError(error)) {
|
||||||
stopCheck();
|
stopCheck();
|
||||||
_sentRequest = 0;
|
_sentRequest = 0;
|
||||||
showPhoneError(tr::lng_flood_error());
|
showPhoneError(tr::lng_flood_error());
|
||||||
return true;
|
return;
|
||||||
}
|
}
|
||||||
if (MTP::isDefaultHandledError(error)) return false;
|
|
||||||
|
|
||||||
stopCheck();
|
stopCheck();
|
||||||
_sentRequest = 0;
|
_sentRequest = 0;
|
||||||
auto &err = error.type();
|
auto &err = error.type();
|
||||||
if (err == qstr("PHONE_NUMBER_FLOOD")) {
|
if (err == qstr("PHONE_NUMBER_FLOOD")) {
|
||||||
Ui::show(Box<InformBox>(tr::lng_error_phone_flood(tr::now)));
|
Ui::show(Box<InformBox>(tr::lng_error_phone_flood(tr::now)));
|
||||||
return true;
|
|
||||||
} else if (err == qstr("PHONE_NUMBER_INVALID")) { // show error
|
} else if (err == qstr("PHONE_NUMBER_INVALID")) { // show error
|
||||||
showPhoneError(tr::lng_bad_phone());
|
showPhoneError(tr::lng_bad_phone());
|
||||||
return true;
|
|
||||||
} else if (err == qstr("PHONE_NUMBER_BANNED")) {
|
} else if (err == qstr("PHONE_NUMBER_BANNED")) {
|
||||||
ShowPhoneBannedError(_sentPhone);
|
ShowPhoneBannedError(_sentPhone);
|
||||||
return true;
|
} else if (Logs::DebugEnabled()) { // internal server error
|
||||||
}
|
|
||||||
if (Logs::DebugEnabled()) { // internal server error
|
|
||||||
showPhoneError(rpl::single(err + ": " + error.description()));
|
showPhoneError(rpl::single(err + ": " + error.description()));
|
||||||
} else {
|
} else {
|
||||||
showPhoneError(rpl::single(Lang::Hard::ServerError()));
|
showPhoneError(rpl::single(Lang::Hard::ServerError()));
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString PhoneWidget::fullNumber() const {
|
QString PhoneWidget::fullNumber() const {
|
||||||
|
@ -244,13 +240,13 @@ void PhoneWidget::activate() {
|
||||||
void PhoneWidget::finished() {
|
void PhoneWidget::finished() {
|
||||||
Step::finished();
|
Step::finished();
|
||||||
_checkRequestTimer.cancel();
|
_checkRequestTimer.cancel();
|
||||||
rpcInvalidate();
|
apiClear();
|
||||||
|
|
||||||
cancelled();
|
cancelled();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhoneWidget::cancelled() {
|
void PhoneWidget::cancelled() {
|
||||||
MTP::cancel(base::take(_sentRequest));
|
api()->request(base::take(_sentRequest)).cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace details
|
} // namespace details
|
||||||
|
|
|
@ -50,7 +50,7 @@ private:
|
||||||
void countryChanged();
|
void countryChanged();
|
||||||
|
|
||||||
void phoneSubmitDone(const MTPauth_SentCode &result);
|
void phoneSubmitDone(const MTPauth_SentCode &result);
|
||||||
bool phoneSubmitFail(const RPCError &error);
|
void phoneSubmitFail(const RPCError &error);
|
||||||
|
|
||||||
QString fullNumber() const;
|
QString fullNumber() const;
|
||||||
void stopCheck();
|
void stopCheck();
|
||||||
|
|
|
@ -174,7 +174,6 @@ QrWidget::QrWidget(
|
||||||
not_null<Main::Account*> account,
|
not_null<Main::Account*> account,
|
||||||
not_null<Data*> data)
|
not_null<Data*> data)
|
||||||
: Step(parent, account, data)
|
: Step(parent, account, data)
|
||||||
, _api(account->mtp())
|
|
||||||
, _refreshTimer([=] { refreshCode(); }) {
|
, _refreshTimer([=] { refreshCode(); }) {
|
||||||
setTitleText(rpl::single(QString()));
|
setTitleText(rpl::single(QString()));
|
||||||
setDescriptionText(rpl::single(QString()));
|
setDescriptionText(rpl::single(QString()));
|
||||||
|
@ -309,7 +308,7 @@ void QrWidget::refreshCode() {
|
||||||
if (_requestId) {
|
if (_requestId) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_requestId = _api.request(MTPauth_ExportLoginToken(
|
_requestId = api()->request(MTPauth_ExportLoginToken(
|
||||||
MTP_int(ApiId),
|
MTP_int(ApiId),
|
||||||
MTP_string(ApiHash),
|
MTP_string(ApiHash),
|
||||||
MTP_vector<MTPint>(0)
|
MTP_vector<MTPint>(0)
|
||||||
|
@ -357,8 +356,8 @@ void QrWidget::showToken(const QByteArray &token) {
|
||||||
void QrWidget::importTo(MTP::DcId dcId, const QByteArray &token) {
|
void QrWidget::importTo(MTP::DcId dcId, const QByteArray &token) {
|
||||||
Expects(_requestId != 0);
|
Expects(_requestId != 0);
|
||||||
|
|
||||||
_api.instance()->setMainDcId(dcId);
|
api()->instance()->setMainDcId(dcId);
|
||||||
_requestId = _api.request(MTPauth_ImportLoginToken(
|
_requestId = api()->request(MTPauth_ImportLoginToken(
|
||||||
MTP_bytes(token)
|
MTP_bytes(token)
|
||||||
)).done([=](const MTPauth_LoginToken &result) {
|
)).done([=](const MTPauth_LoginToken &result) {
|
||||||
handleTokenResult(result);
|
handleTokenResult(result);
|
||||||
|
@ -385,7 +384,7 @@ void QrWidget::done(const MTPauth_Authorization &authorization) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void QrWidget::sendCheckPasswordRequest() {
|
void QrWidget::sendCheckPasswordRequest() {
|
||||||
_requestId = _api.request(MTPaccount_GetPassword(
|
_requestId = api()->request(MTPaccount_GetPassword(
|
||||||
)).done([=](const MTPaccount_Password &result) {
|
)).done([=](const MTPaccount_Password &result) {
|
||||||
result.match([&](const MTPDaccount_password &data) {
|
result.match([&](const MTPDaccount_password &data) {
|
||||||
getData()->pwdRequest = Core::ParseCloudPasswordCheckRequest(
|
getData()->pwdRequest = Core::ParseCloudPasswordCheckRequest(
|
||||||
|
@ -424,12 +423,12 @@ void QrWidget::activate() {
|
||||||
void QrWidget::finished() {
|
void QrWidget::finished() {
|
||||||
Step::finished();
|
Step::finished();
|
||||||
_refreshTimer.cancel();
|
_refreshTimer.cancel();
|
||||||
rpcInvalidate();
|
apiClear();
|
||||||
cancelled();
|
cancelled();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QrWidget::cancelled() {
|
void QrWidget::cancelled() {
|
||||||
_api.request(base::take(_requestId)).cancel();
|
api()->request(base::take(_requestId)).cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace details
|
} // namespace details
|
||||||
|
|
|
@ -9,7 +9,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
|
|
||||||
#include "ui/countryinput.h"
|
#include "ui/countryinput.h"
|
||||||
#include "intro/intro_step.h"
|
#include "intro/intro_step.h"
|
||||||
#include "mtproto/sender.h"
|
|
||||||
#include "base/timer.h"
|
#include "base/timer.h"
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
|
@ -53,7 +52,6 @@ private:
|
||||||
void showToken(const QByteArray &token);
|
void showToken(const QByteArray &token);
|
||||||
void done(const MTPauth_Authorization &authorization);
|
void done(const MTPauth_Authorization &authorization);
|
||||||
|
|
||||||
MTP::Sender _api;
|
|
||||||
rpl::event_stream<QByteArray> _qrCodes;
|
rpl::event_stream<QByteArray> _qrCodes;
|
||||||
base::Timer _refreshTimer;
|
base::Timer _refreshTimer;
|
||||||
mtpRequestId _requestId = 0;
|
mtpRequestId _requestId = 0;
|
||||||
|
|
|
@ -101,7 +101,7 @@ void SignupWidget::activate() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SignupWidget::cancelled() {
|
void SignupWidget::cancelled() {
|
||||||
MTP::cancel(base::take(_sentRequest));
|
api()->request(base::take(_sentRequest)).cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SignupWidget::nameSubmitDone(const MTPauth_Authorization &result) {
|
void SignupWidget::nameSubmitDone(const MTPauth_Authorization &result) {
|
||||||
|
@ -113,7 +113,7 @@ void SignupWidget::nameSubmitDone(const MTPauth_Authorization &result) {
|
||||||
finish(d.vuser(), _photo->takeResultImage());
|
finish(d.vuser(), _photo->takeResultImage());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SignupWidget::nameSubmitFail(const RPCError &error) {
|
void SignupWidget::nameSubmitFail(const RPCError &error) {
|
||||||
if (MTP::isFloodError(error)) {
|
if (MTP::isFloodError(error)) {
|
||||||
showError(tr::lng_flood_error());
|
showError(tr::lng_flood_error());
|
||||||
if (_invertOrder) {
|
if (_invertOrder) {
|
||||||
|
@ -121,14 +121,12 @@ bool SignupWidget::nameSubmitFail(const RPCError &error) {
|
||||||
} else {
|
} else {
|
||||||
_last->setFocus();
|
_last->setFocus();
|
||||||
}
|
}
|
||||||
return true;
|
return;
|
||||||
}
|
}
|
||||||
if (MTP::isDefaultHandledError(error)) return false;
|
|
||||||
|
|
||||||
auto &err = error.type();
|
auto &err = error.type();
|
||||||
if (err == qstr("PHONE_NUMBER_FLOOD")) {
|
if (err == qstr("PHONE_NUMBER_FLOOD")) {
|
||||||
Ui::show(Box<InformBox>(tr::lng_error_phone_flood(tr::now)));
|
Ui::show(Box<InformBox>(tr::lng_error_phone_flood(tr::now)));
|
||||||
return true;
|
|
||||||
} else if (err == qstr("PHONE_NUMBER_INVALID")
|
} else if (err == qstr("PHONE_NUMBER_INVALID")
|
||||||
|| err == qstr("PHONE_NUMBER_BANNED")
|
|| err == qstr("PHONE_NUMBER_BANNED")
|
||||||
|| err == qstr("PHONE_CODE_EXPIRED")
|
|| err == qstr("PHONE_CODE_EXPIRED")
|
||||||
|
@ -136,27 +134,24 @@ bool SignupWidget::nameSubmitFail(const RPCError &error) {
|
||||||
|| err == qstr("PHONE_CODE_INVALID")
|
|| err == qstr("PHONE_CODE_INVALID")
|
||||||
|| err == qstr("PHONE_NUMBER_OCCUPIED")) {
|
|| err == qstr("PHONE_NUMBER_OCCUPIED")) {
|
||||||
goBack();
|
goBack();
|
||||||
return true;
|
|
||||||
} else if (err == "FIRSTNAME_INVALID") {
|
} else if (err == "FIRSTNAME_INVALID") {
|
||||||
showError(tr::lng_bad_name());
|
showError(tr::lng_bad_name());
|
||||||
_first->setFocus();
|
_first->setFocus();
|
||||||
return true;
|
|
||||||
} else if (err == "LASTNAME_INVALID") {
|
} else if (err == "LASTNAME_INVALID") {
|
||||||
showError(tr::lng_bad_name());
|
showError(tr::lng_bad_name());
|
||||||
_last->setFocus();
|
_last->setFocus();
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (Logs::DebugEnabled()) { // internal server error
|
|
||||||
showError(rpl::single(err + ": " + error.description()));
|
|
||||||
} else {
|
} else {
|
||||||
showError(rpl::single(Lang::Hard::ServerError()));
|
if (Logs::DebugEnabled()) { // internal server error
|
||||||
|
showError(rpl::single(err + ": " + error.description()));
|
||||||
|
} else {
|
||||||
|
showError(rpl::single(Lang::Hard::ServerError()));
|
||||||
|
}
|
||||||
|
if (_invertOrder) {
|
||||||
|
_last->setFocus();
|
||||||
|
} else {
|
||||||
|
_first->setFocus();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (_invertOrder) {
|
|
||||||
_last->setFocus();
|
|
||||||
} else {
|
|
||||||
_first->setFocus();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SignupWidget::submit() {
|
void SignupWidget::submit() {
|
||||||
|
@ -186,14 +181,16 @@ void SignupWidget::submit() {
|
||||||
|
|
||||||
_firstName = _first->getLastText().trimmed();
|
_firstName = _first->getLastText().trimmed();
|
||||||
_lastName = _last->getLastText().trimmed();
|
_lastName = _last->getLastText().trimmed();
|
||||||
_sentRequest = MTP::send(
|
_sentRequest = api()->request(MTPauth_SignUp(
|
||||||
MTPauth_SignUp(
|
MTP_string(getData()->phone),
|
||||||
MTP_string(getData()->phone),
|
MTP_bytes(getData()->phoneHash),
|
||||||
MTP_bytes(getData()->phoneHash),
|
MTP_string(_firstName),
|
||||||
MTP_string(_firstName),
|
MTP_string(_lastName)
|
||||||
MTP_string(_lastName)),
|
)).done([=](const MTPauth_Authorization &result) {
|
||||||
rpcDone(&SignupWidget::nameSubmitDone),
|
nameSubmitDone(result);
|
||||||
rpcFail(&SignupWidget::nameSubmitFail));
|
}).fail([=](const RPCError &error) {
|
||||||
|
nameSubmitFail(error);
|
||||||
|
}).handleFloodErrors().send();
|
||||||
};
|
};
|
||||||
if (_termsAccepted
|
if (_termsAccepted
|
||||||
|| getData()->termsLock.text.text.isEmpty()
|
|| getData()->termsLock.text.text.isEmpty()
|
||||||
|
|
|
@ -40,7 +40,7 @@ private:
|
||||||
void updateControlsGeometry();
|
void updateControlsGeometry();
|
||||||
|
|
||||||
void nameSubmitDone(const MTPauth_Authorization &result);
|
void nameSubmitDone(const MTPauth_Authorization &result);
|
||||||
bool nameSubmitFail(const RPCError &error);
|
void nameSubmitFail(const RPCError &error);
|
||||||
|
|
||||||
object_ptr<Ui::UserpicButton> _photo;
|
object_ptr<Ui::UserpicButton> _photo;
|
||||||
object_ptr<Ui::InputField> _first;
|
object_ptr<Ui::InputField> _first;
|
||||||
|
|
|
@ -98,6 +98,17 @@ Step::Step(
|
||||||
|
|
||||||
Step::~Step() = default;
|
Step::~Step() = default;
|
||||||
|
|
||||||
|
not_null<MTP::Sender*> Step::api() const {
|
||||||
|
if (!_api) {
|
||||||
|
_api.emplace(_account->mtp());
|
||||||
|
}
|
||||||
|
return &*_api;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Step::apiClear() {
|
||||||
|
_api.reset();
|
||||||
|
}
|
||||||
|
|
||||||
rpl::producer<QString> Step::nextButtonText() const {
|
rpl::producer<QString> Step::nextButtonText() const {
|
||||||
return tr::lng_intro_next();
|
return tr::lng_intro_next();
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,10 +30,7 @@ namespace details {
|
||||||
struct Data;
|
struct Data;
|
||||||
enum class Direction;
|
enum class Direction;
|
||||||
|
|
||||||
class Step
|
class Step : public Ui::RpWidget, protected base::Subscriber {
|
||||||
: public Ui::RpWidget
|
|
||||||
, public RPCSender
|
|
||||||
, protected base::Subscriber {
|
|
||||||
public:
|
public:
|
||||||
Step(
|
Step(
|
||||||
QWidget *parent,
|
QWidget *parent,
|
||||||
|
@ -46,6 +43,11 @@ public:
|
||||||
return *_account;
|
return *_account;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// It should not be called in StartWidget, in other steps it should be
|
||||||
|
// present and not changing.
|
||||||
|
[[nodiscard]] not_null<MTP::Sender*> api() const;
|
||||||
|
void apiClear();
|
||||||
|
|
||||||
virtual void finishInit() {
|
virtual void finishInit() {
|
||||||
}
|
}
|
||||||
virtual void setInnerFocus() {
|
virtual void setInnerFocus() {
|
||||||
|
@ -167,6 +169,7 @@ private:
|
||||||
|
|
||||||
const not_null<Main::Account*> _account;
|
const not_null<Main::Account*> _account;
|
||||||
const not_null<Data*> _data;
|
const not_null<Data*> _data;
|
||||||
|
mutable std::optional<MTP::Sender> _api;
|
||||||
|
|
||||||
bool _hasCover = false;
|
bool _hasCover = false;
|
||||||
Fn<void(Step *step, Direction direction)> _goCallback;
|
Fn<void(Step *step, Direction direction)> _goCallback;
|
||||||
|
|
|
@ -277,7 +277,7 @@ void Uploader::currentFailed() {
|
||||||
|
|
||||||
void Uploader::stopSessions() {
|
void Uploader::stopSessions() {
|
||||||
for (int i = 0; i < MTP::kUploadSessionsCount; ++i) {
|
for (int i = 0; i < MTP::kUploadSessionsCount; ++i) {
|
||||||
MTP::stopSession(MTP::uploadDcId(i));
|
_api->instance()->stopSession(MTP::uploadDcId(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -440,24 +440,26 @@ void Uploader::sendNext() {
|
||||||
}
|
}
|
||||||
mtpRequestId requestId;
|
mtpRequestId requestId;
|
||||||
if (uploadingData.docSize > kUseBigFilesFrom) {
|
if (uploadingData.docSize > kUseBigFilesFrom) {
|
||||||
requestId = MTP::send(
|
requestId = _api->request(MTPupload_SaveBigFilePart(
|
||||||
MTPupload_SaveBigFilePart(
|
MTP_long(uploadingData.id()),
|
||||||
MTP_long(uploadingData.id()),
|
MTP_int(uploadingData.docSentParts),
|
||||||
MTP_int(uploadingData.docSentParts),
|
MTP_int(uploadingData.docPartsCount),
|
||||||
MTP_int(uploadingData.docPartsCount),
|
MTP_bytes(toSend)
|
||||||
MTP_bytes(toSend)),
|
)).done([=](const MTPBool &result, mtpRequestId requestId) {
|
||||||
rpcDone(&Uploader::partLoaded),
|
partLoaded(result, requestId);
|
||||||
rpcFail(&Uploader::partFailed),
|
}).fail([=](const RPCError &error, mtpRequestId requestId) {
|
||||||
MTP::uploadDcId(todc));
|
partFailed(error, requestId);
|
||||||
|
}).toDC(MTP::uploadDcId(todc)).send();
|
||||||
} else {
|
} else {
|
||||||
requestId = MTP::send(
|
requestId = _api->request(MTPupload_SaveFilePart(
|
||||||
MTPupload_SaveFilePart(
|
MTP_long(uploadingData.id()),
|
||||||
MTP_long(uploadingData.id()),
|
MTP_int(uploadingData.docSentParts),
|
||||||
MTP_int(uploadingData.docSentParts),
|
MTP_bytes(toSend)
|
||||||
MTP_bytes(toSend)),
|
)).done([=](const MTPBool &result, mtpRequestId requestId) {
|
||||||
rpcDone(&Uploader::partLoaded),
|
partLoaded(result, requestId);
|
||||||
rpcFail(&Uploader::partFailed),
|
}).fail([=](const RPCError &error, mtpRequestId requestId) {
|
||||||
MTP::uploadDcId(todc));
|
partFailed(error, requestId);
|
||||||
|
}).toDC(MTP::uploadDcId(todc)).send();
|
||||||
}
|
}
|
||||||
docRequestsSent.emplace(requestId, uploadingData.docSentParts);
|
docRequestsSent.emplace(requestId, uploadingData.docSentParts);
|
||||||
dcMap.emplace(requestId, todc);
|
dcMap.emplace(requestId, todc);
|
||||||
|
@ -468,14 +470,15 @@ void Uploader::sendNext() {
|
||||||
} else {
|
} else {
|
||||||
auto part = parts.begin();
|
auto part = parts.begin();
|
||||||
|
|
||||||
const auto requestId = MTP::send(
|
const auto requestId = _api->request(MTPupload_SaveFilePart(
|
||||||
MTPupload_SaveFilePart(
|
MTP_long(partsOfId),
|
||||||
MTP_long(partsOfId),
|
MTP_int(part.key()),
|
||||||
MTP_int(part.key()),
|
MTP_bytes(part.value())
|
||||||
MTP_bytes(part.value())),
|
)).done([=](const MTPBool &result, mtpRequestId requestId) {
|
||||||
rpcDone(&Uploader::partLoaded),
|
partLoaded(result, requestId);
|
||||||
rpcFail(&Uploader::partFailed),
|
}).fail([=](const RPCError &error, mtpRequestId requestId) {
|
||||||
MTP::uploadDcId(todc));
|
partFailed(error, requestId);
|
||||||
|
}).toDC(MTP::uploadDcId(todc)).send();
|
||||||
requestsSent.emplace(requestId, part.value());
|
requestsSent.emplace(requestId, part.value());
|
||||||
dcMap.emplace(requestId, todc);
|
dcMap.emplace(requestId, todc);
|
||||||
sentSize += part.value().size();
|
sentSize += part.value().size();
|
||||||
|
@ -511,17 +514,17 @@ void Uploader::clear() {
|
||||||
uploaded.clear();
|
uploaded.clear();
|
||||||
queue.clear();
|
queue.clear();
|
||||||
for (const auto &requestData : requestsSent) {
|
for (const auto &requestData : requestsSent) {
|
||||||
MTP::cancel(requestData.first);
|
_api->request(requestData.first).cancel();
|
||||||
}
|
}
|
||||||
requestsSent.clear();
|
requestsSent.clear();
|
||||||
for (const auto &requestData : docRequestsSent) {
|
for (const auto &requestData : docRequestsSent) {
|
||||||
MTP::cancel(requestData.first);
|
_api->request(requestData.first).cancel();
|
||||||
}
|
}
|
||||||
docRequestsSent.clear();
|
docRequestsSent.clear();
|
||||||
dcMap.clear();
|
dcMap.clear();
|
||||||
sentSize = 0;
|
sentSize = 0;
|
||||||
for (int i = 0; i < MTP::kUploadSessionsCount; ++i) {
|
for (int i = 0; i < MTP::kUploadSessionsCount; ++i) {
|
||||||
MTP::stopSession(MTP::uploadDcId(i));
|
_api->instance()->stopSession(MTP::uploadDcId(i));
|
||||||
sentSizes[i] = 0;
|
sentSizes[i] = 0;
|
||||||
}
|
}
|
||||||
stopSessionsTimer.stop();
|
stopSessionsTimer.stop();
|
||||||
|
@ -592,16 +595,13 @@ void Uploader::partLoaded(const MTPBool &result, mtpRequestId requestId) {
|
||||||
sendNext();
|
sendNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Uploader::partFailed(const RPCError &error, mtpRequestId requestId) {
|
void Uploader::partFailed(const RPCError &error, mtpRequestId requestId) {
|
||||||
if (MTP::isDefaultHandledError(error)) return false;
|
|
||||||
|
|
||||||
// failed to upload current file
|
// failed to upload current file
|
||||||
if ((requestsSent.find(requestId) != requestsSent.cend())
|
if ((requestsSent.find(requestId) != requestsSent.cend())
|
||||||
|| (docRequestsSent.find(requestId) != docRequestsSent.cend())) {
|
|| (docRequestsSent.find(requestId) != docRequestsSent.cend())) {
|
||||||
currentFailed();
|
currentFailed();
|
||||||
}
|
}
|
||||||
sendNext();
|
sendNext();
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Storage
|
} // namespace Storage
|
||||||
|
|
|
@ -119,7 +119,7 @@ private:
|
||||||
struct File;
|
struct File;
|
||||||
|
|
||||||
void partLoaded(const MTPBool &result, mtpRequestId requestId);
|
void partLoaded(const MTPBool &result, mtpRequestId requestId);
|
||||||
bool partFailed(const RPCError &err, mtpRequestId requestId);
|
void partFailed(const RPCError &error, mtpRequestId requestId);
|
||||||
|
|
||||||
void currentFailed();
|
void currentFailed();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue