From bde39970a076f0f9b59ef11bbd70b4523fe46b9c Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 31 Oct 2023 11:17:55 +0400 Subject: [PATCH] Fix boost reassign. --- .../window/window_session_controller.cpp | 21 +++++++++++-------- .../window/window_session_controller.h | 2 ++ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Telegram/SourceFiles/window/window_session_controller.cpp b/Telegram/SourceFiles/window/window_session_controller.cpp index 3fbfd8145..b6822f2d4 100644 --- a/Telegram/SourceFiles/window/window_session_controller.cpp +++ b/Telegram/SourceFiles/window/window_session_controller.cpp @@ -685,6 +685,7 @@ void SessionNavigation::applyBoost( done(false); return; } + auto slot = int(); auto different = PeerId(); auto earliest = TimeId(-1); const auto now = base::unixtime::now(); @@ -695,13 +696,13 @@ void SessionNavigation::applyBoost( ? peerFromMTP(*data.vpeer()) : PeerId(); if (!peerId && cooldown <= now) { - applyBoostChecked(channel, done); + applyBoostChecked(channel, data.vslot().v, done); return; - } else if (peerId != channel->id) { + } else if (peerId != channel->id + && (earliest < 0 || cooldown < earliest)) { + slot = data.vslot().v; different = peerId; - if (earliest < 0 || cooldown < earliest) { - earliest = cooldown; - } + earliest = cooldown; } } if (different) { @@ -727,7 +728,7 @@ void SessionNavigation::applyBoost( done(false); } else { const auto peer = _session->data().peer(different); - replaceBoostConfirm(peer, channel, done); + replaceBoostConfirm(peer, channel, slot, done); } } else { uiShow()->show(Ui::MakeConfirmBox({ @@ -748,11 +749,12 @@ void SessionNavigation::applyBoost( void SessionNavigation::replaceBoostConfirm( not_null from, not_null channel, + int slot, Fn done) { const auto forwarded = std::make_shared(false); const auto confirmed = [=](Fn close) { *forwarded = true; - applyBoostChecked(channel, done); + applyBoostChecked(channel, slot, done); close(); }; const auto box = uiShow()->show(Box([=](not_null box) { @@ -781,10 +783,11 @@ void SessionNavigation::replaceBoostConfirm( void SessionNavigation::applyBoostChecked( not_null channel, + int slot, Fn done) { _api.request(MTPpremium_ApplyBoost( - MTP_flags(0), - MTPVector(), // slots + MTP_flags(MTPpremium_ApplyBoost::Flag::f_slots), + MTP_vector({ MTP_int(slot) }), channel->input )).done([=](const MTPpremium_MyBoosts &result) { done(true); diff --git a/Telegram/SourceFiles/window/window_session_controller.h b/Telegram/SourceFiles/window/window_session_controller.h index 0bca576aa..2ae888937 100644 --- a/Telegram/SourceFiles/window/window_session_controller.h +++ b/Telegram/SourceFiles/window/window_session_controller.h @@ -318,9 +318,11 @@ private: void replaceBoostConfirm( not_null from, not_null channel, + int slot, Fn done); void applyBoostChecked( not_null channel, + int slot, Fn done); const not_null _session;