diff --git a/Telegram/SourceFiles/ayu/features/translator/ayu_translator.cpp b/Telegram/SourceFiles/ayu/features/translator/ayu_translator.cpp index 2b295f58dc..2465ee4dda 100644 --- a/Telegram/SourceFiles/ayu/features/translator/ayu_translator.cpp +++ b/Telegram/SourceFiles/ayu/features/translator/ayu_translator.cpp @@ -43,12 +43,12 @@ TranslateManager::Builder::Builder( , _toLang(to_lang) { } -TranslateManager::Builder &TranslateManager::Builder::done(std::function < void(const Result &) > cb) { +TranslateManager::Builder &TranslateManager::Builder::done(std::function cb) { _done = std::move(cb); return *this; } -TranslateManager::Builder &TranslateManager::Builder::fail(std::function < void(const MTP::Error &) > cb) { +TranslateManager::Builder &TranslateManager::Builder::fail(std::function cb) { _fail = std::move(cb); return *this; } @@ -242,7 +242,8 @@ bool TranslateManager::cancel(mtpRequestId requestId) { if (it->second.cancel) { it->second.cancel(); } - _pending.erase(it); + // already erased by `triggerFail` + // _pending.erase(it); return true; } @@ -329,4 +330,4 @@ void TranslateManager::removeLeastRecentlyUsed() { _cacheList.pop_back(); } -} \ No newline at end of file +} diff --git a/Telegram/SourceFiles/boxes/translate_box.cpp b/Telegram/SourceFiles/boxes/translate_box.cpp index ac4ff28d2d..642af2c813 100644 --- a/Telegram/SourceFiles/boxes/translate_box.cpp +++ b/Telegram/SourceFiles/boxes/translate_box.cpp @@ -230,7 +230,7 @@ void TranslateBox( const auto send = [=](LanguageId to) { loading->show(anim::type::instant); translated->hide(anim::type::instant); - Ayu::Translator::TranslateManager::currentInstance()->request( + const auto reqId = Ayu::Translator::TranslateManager::currentInstance()->request( &peer->session(), MTP_flags(flags), msgId ? peer->input : MTP_inputPeerEmpty(), @@ -261,6 +261,11 @@ void TranslateBox( showText( Ui::Text::Italic(tr::lng_translate_box_error(tr::now))); }).send(); + + box->boxClosing() | rpl::start_with_next([=] + { + Ayu::Translator::TranslateManager::currentInstance()->cancel(reqId); + }, box->lifetime()); }; state->to.value() | rpl::start_with_next(send, box->lifetime());