From 5b1739246d74e2f2b6ca842200cfcf587bd21058 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 25 Jul 2025 17:58:02 +0400 Subject: [PATCH] Correctly handle gift collection updates. --- Telegram/SourceFiles/data/data_session.h | 3 ++- .../peer_gifts/info_peer_gifts_widget.cpp | 22 ++++++++++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/Telegram/SourceFiles/data/data_session.h b/Telegram/SourceFiles/data/data_session.h index d934a7ae35..8260fd042f 100644 --- a/Telegram/SourceFiles/data/data_session.h +++ b/Telegram/SourceFiles/data/data_session.h @@ -104,9 +104,10 @@ struct GiftUpdate { Action action = {}; }; struct GiftsUpdate { + not_null peer; + int collectionId = 0; std::vector added; std::vector removed; - int collectionId = 0; }; struct SentToScheduled { diff --git a/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_widget.cpp b/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_widget.cpp index 07f985ecce..92f22f488e 100644 --- a/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_widget.cpp +++ b/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_widget.cpp @@ -265,6 +265,7 @@ InnerWidget::InnerWidget( , _entries(&_all) , _list(&_entries->list) , _collectionChanges(Data::GiftsUpdate{ + .peer = _peer, .collectionId = addingToCollectionId, }) , _api(&_peer->session().mtp()) { @@ -282,6 +283,9 @@ InnerWidget::InnerWidget( _window->session().data().giftsUpdates( ) | rpl::start_with_next([=](const Data::GiftsUpdate &update) { + if (update.peer != _peer) { + return; + } const auto added = base::flat_set{ begin(update.added), end(update.added) @@ -523,7 +527,12 @@ void InnerWidget::paintEvent(QPaintEvent *e) { void InnerWidget::collectionAdded(MTPStarGiftCollection result) { _collections.push_back(FromTL(&_window->session(), result)); + const auto id = _collections.back().id; refreshCollectionsTabs(); + + auto now = _descriptor.current(); + now.collectionId = id; + _descriptorChanges.fire(std::move(now)); } void InnerWidget::loadMore() { @@ -1018,10 +1027,6 @@ void InnerWidget::reloadCollection(int id) { } void InnerWidget::editCollectionGifts(int id) { - auto now = _descriptor.current(); - now.filter = Filter(); - now.collectionId = 0; - const auto weak = base::make_weak(this); _window->uiShow()->show(Box([=](not_null box) { box->setTitle(tr::lng_gift_collection_add_title()); @@ -1034,7 +1039,12 @@ void InnerWidget::editCollectionGifts(int id) { base::unique_qptr menu; bool saving = false; }; - const auto state = box->lifetime().make_state(); + const auto state = box->lifetime().make_state(State{ + .changes = Data::GiftsUpdate{ + .peer = _peer, + .collectionId = id, + }, + }); const auto content = box->addRow( object_ptr( box, @@ -1077,7 +1087,6 @@ void InnerWidget::editCollectionGifts(int id) { if (state->saving) { return; } - using Flag = MTPpayments_UpdateStarGiftCollection::Flag; auto add = QVector(); auto remove = QVector(); const auto &changes = state->changes.current(); @@ -1093,6 +1102,7 @@ void InnerWidget::editCollectionGifts(int id) { } state->saving = true; const auto session = &_window->session(); + using Flag = MTPpayments_UpdateStarGiftCollection::Flag; session->api().request( MTPpayments_UpdateStarGiftCollection( MTP_flags(Flag()