diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.cpp index 0060eae45..caed2612e 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.cpp +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.cpp @@ -150,7 +150,8 @@ void MessageView::prepare( not_null item, Data::Forum *forum, Fn customEmojiRepaint, - ToPreviewOptions options) { + ToPreviewOptions options, + Fn customLoadingFinishCallback) { if (!forum) { _topics = nullptr; } else if (!_topics || _topics->forum() != forum) { @@ -212,9 +213,11 @@ void MessageView::prepare( if (!_loadingContext) { _loadingContext = std::make_unique(); item->history()->session().downloaderTaskFinished( - ) | rpl::start_with_next([=] { - _textCachedFor = nullptr; - }, _loadingContext->lifetime); + ) | rpl::start_with_next( + customLoadingFinishCallback + ? customLoadingFinishCallback + : Fn([=] { _textCachedFor = nullptr; }), + _loadingContext->lifetime); } _loadingContext->context = std::move(preview.loadingContext); } else { diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.h b/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.h index 58c1966a8..56aa8c2a9 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.h +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.h @@ -61,7 +61,8 @@ public: not_null item, Data::Forum *forum, Fn customEmojiRepaint, - ToPreviewOptions options); + ToPreviewOptions options, + Fn customLoadingFinishCallback = nullptr); void paint( Painter &p, diff --git a/Telegram/SourceFiles/info/profile/info_profile_actions.cpp b/Telegram/SourceFiles/info/profile/info_profile_actions.cpp index baf8cfe92..9551f822e 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_actions.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_actions.cpp @@ -1657,10 +1657,18 @@ object_ptr DetailsFiller::setupPersonalChannel( auto &lifetime = preview->lifetime(); using namespace Dialogs::Ui; const auto previewView = lifetime.make_state(); - const auto previewUpdate = [=] { preview->update(); }; preview->resize(0, st::infoLabeled.style.font->height); + const auto prepare = [previewView, preview]( + not_null item) { + previewView->prepare( + item, + nullptr, + [=] { preview->update(); }, + {}, + []{}); + }; if (!previewView->dependsOn(item)) { - previewView->prepare(item, nullptr, previewUpdate, {}); + prepare(item); } preview->paintRequest( ) | rpl::start_with_next([=, fullId = item->fullId()]( @@ -1690,7 +1698,7 @@ object_ptr DetailsFiller::setupPersonalChannel( preview->rect(), tr::lng_contacts_loading(tr::now), style::al_left); - previewView->prepare(item, nullptr, previewUpdate, {}); + prepare(item); preview->update(); } }, preview->lifetime());