fix: more checks for disposal

This commit is contained in:
AlexeyZavar 2025-03-09 00:30:18 +03:00
parent ce8650b4de
commit 9ca0c3c41d
4 changed files with 121 additions and 78 deletions

View file

@ -43,7 +43,8 @@ bool ResolveUser(
return true; return true;
} }
searchById(userId, searchById(
userId,
&controller->session(), &controller->session(),
[=](const QString &title, UserData *data) [=](const QString &title, UserData *data)
{ {
@ -54,7 +55,8 @@ bool ResolveUser(
Core::App().hideMediaView(); Core::App().hideMediaView();
Ui::show(Ui::MakeInformBox(tr::ayu_UserNotFoundMessage())); Ui::show(Ui::MakeInformBox(tr::ayu_UserNotFoundMessage()));
}); }
);
return true; return true;
} }

View file

@ -218,22 +218,32 @@ ActionStickerPackAuthor::ActionStickerPackAuthor(not_null<Menu::Menu*> menu,
} }
void ActionStickerPackAuthor::searchAuthor(ID authorId) { void ActionStickerPackAuthor::searchAuthor(ID authorId) {
const auto pointer = Ui::MakeWeak(this); const auto session = _session;
searchById(authorId, const auto weak = Ui::MakeWeak(this);
_session,
[=](const QString &username, UserData *user) searchById(
authorId,
session,
[session, weak, authorId](const QString &username, UserData *user)
{ {
if (!pointer) { if (!weak) {
LOG(("ContextActionStickerAuthor: searchById callback after destruction")); LOG(("ContextActionStickerAuthor: searchById callback after destruction"));
return; return;
} }
const auto strong = weak.data();
if (!strong) {
LOG(("ContextActionStickerAuthor: weak.data() returned null"));
return;
}
if (username.isEmpty() && !user) { if (username.isEmpty() && !user) {
_subText = QString(tr::ayu_MessageDetailsPackOwnerNotFoundPC(tr::now)); strong->_subText = QString(tr::ayu_MessageDetailsPackOwnerNotFoundPC(tr::now));
setClickedCallback( strong->setClickedCallback(
[=] [authorId, session]
{ {
QGuiApplication::clipboard()->setText(QString::number(authorId)); QGuiApplication::clipboard()->setText(QString::number(authorId));
if (const auto window = _session->tryResolveWindow()) { if (const auto window = session->tryResolveWindow()) {
if (const auto mainWidget = window->widget()->sessionController()) { if (const auto mainWidget = window->widget()->sessionController()) {
mainWidget->showToast(tr::ayu_IDCopiedToast(tr::now)); mainWidget->showToast(tr::ayu_IDCopiedToast(tr::now));
} }
@ -241,18 +251,20 @@ void ActionStickerPackAuthor::searchAuthor(ID authorId) {
}); });
crl::on_main( crl::on_main(
[=] [weak]
{ {
update(); if (const auto strongInner = weak.data()) {
strongInner->update();
}
}); });
return; return;
} }
const auto title = username.isEmpty() ? user ? user->name() : QString() : username; const auto title = username.isEmpty() ? (user ? user->name() : QString()) : username;
const auto callback = [=] const auto callback = [user, title, session]
{ {
if (user) { if (user) {
if (const auto window = _session->tryResolveWindow()) { if (const auto window = session->tryResolveWindow()) {
if (const auto mainWidget = window->widget()->sessionController()) { if (const auto mainWidget = window->widget()->sessionController()) {
mainWidget->showPeer(user); mainWidget->showPeer(user);
} }
@ -262,16 +274,18 @@ void ActionStickerPackAuthor::searchAuthor(ID authorId) {
} }
}; };
setClickedCallback(callback); strong->setClickedCallback(callback);
strong->_subText = QString(title);
_subText = QString(title);
crl::on_main( crl::on_main(
[=] [weak]
{ {
update(); if (const auto strongInner = weak.data()) {
}); strongInner->update();
}
}); });
} }
);
}
} // namespace } // namespace

View file

@ -771,30 +771,43 @@ void StickerSetBox::updateButtons() {
const auto addPackOwner = [=](const std::shared_ptr<base::unique_qptr<Ui::PopupMenu>> &menu) const auto addPackOwner = [=](const std::shared_ptr<base::unique_qptr<Ui::PopupMenu>> &menu)
{ {
if (type == Data::StickersType::Stickers || type == Data::StickersType::Emoji) { if (type == Data::StickersType::Stickers || type == Data::StickersType::Emoji) {
const auto pointer = Ui::MakeWeak(this); const auto weak = Ui::MakeWeak(this);
const auto session = _session;
const auto innerId = _inner->setId() >> 32;
(*menu)->addAction( (*menu)->addAction(
tr::ayu_MessageDetailsPackOwnerPC(tr::now), tr::ayu_MessageDetailsPackOwnerPC(tr::now),
[=] [weak, session, innerId]
{ {
if (!pointer) { if (!weak) {
return;
}
const auto strong = weak.data();
if (!strong) {
return; return;
} }
searchById( searchById(
_inner->setId() >> 32, innerId,
_session, session,
[=](const QString &username, UserData *user) [session, weak](const QString &username, UserData *user)
{ {
if (!pointer) { if (!weak) {
return;
}
const auto strongInner = weak.data();
if (!strongInner) {
return; return;
} }
if (!user) { if (!user) {
showToast(tr::ayu_UserNotFoundMessage(tr::now)); strongInner->showToast(tr::ayu_UserNotFoundMessage(tr::now));
return; return;
} }
if (const auto window = _session->tryResolveWindow()) { if (const auto window = session->tryResolveWindow()) {
if (const auto mainWidget = window->widget()->sessionController()) { if (const auto mainWidget = window->widget()->sessionController()) {
mainWidget->showPeer(user); mainWidget->showPeer(user);
} }

View file

@ -127,16 +127,30 @@ ResolvePhoneAction::ResolvePhoneAction(
return; return;
} }
searchById(possibleId, const auto weak = Ui::MakeWeak(this);
&controller->session(), const auto session = &controller->session();
[=](const QString &username, UserData *user)
searchById(
possibleId,
session,
[session, weak, possibleId](const QString &username, UserData *user)
{ {
if (user) { if (!weak) {
_peer = user; return;
} }
_loaded.force_assign(true); const auto strong = weak.data();
}); if (!strong) {
return;
}
if (user) {
strong->_peer = user;
}
strong->_loaded.force_assign(true);
}
);
} }
}).send(); }).send();
} }