From 9d4e1689fa33f359b634c6a716134207f085312f Mon Sep 17 00:00:00 2001
From: 23rd <23rd@vivaldi.net>
Date: Wed, 8 Nov 2023 18:10:48 +0300
Subject: [PATCH] Added state restoring to list for boost awarding members.

---
 .../SourceFiles/info/boosts/create_giveaway_box.cpp  |  3 ++-
 .../boosts/giveaway/giveaway_list_controllers.cpp    | 12 ++++++++++--
 .../info/boosts/giveaway/giveaway_list_controllers.h |  7 ++++++-
 3 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/Telegram/SourceFiles/info/boosts/create_giveaway_box.cpp b/Telegram/SourceFiles/info/boosts/create_giveaway_box.cpp
index cd833d1e2..605c5681b 100644
--- a/Telegram/SourceFiles/info/boosts/create_giveaway_box.cpp
+++ b/Telegram/SourceFiles/info/boosts/create_giveaway_box.cpp
@@ -367,7 +367,8 @@ void CreateGiveawayBox(
 			using Controller = Giveaway::AwardMembersListController;
 			auto listController = std::make_unique<Controller>(
 				controller,
-				peer);
+				peer,
+				state->selectedToAward);
 			listController->setCheckError(CreateErrorCallback(
 				state->apiOptions.giveawayAddPeersMax(),
 				tr::lng_giveaway_maximum_users_error));
diff --git a/Telegram/SourceFiles/info/boosts/giveaway/giveaway_list_controllers.cpp b/Telegram/SourceFiles/info/boosts/giveaway/giveaway_list_controllers.cpp
index dd6df700f..f65fda97d 100644
--- a/Telegram/SourceFiles/info/boosts/giveaway/giveaway_list_controllers.cpp
+++ b/Telegram/SourceFiles/info/boosts/giveaway/giveaway_list_controllers.cpp
@@ -107,8 +107,16 @@ void ChannelRow::rightActionStopLastRipple() {
 
 AwardMembersListController::AwardMembersListController(
 	not_null<Window::SessionNavigation*> navigation,
-	not_null<PeerData*> peer)
-: ParticipantsBoxController(navigation, peer, ParticipantsRole::Members) {
+	not_null<PeerData*> peer,
+	std::vector<not_null<PeerData*>> selected)
+: ParticipantsBoxController(navigation, peer, ParticipantsRole::Members)
+, _selected(std::move(selected)) {
+}
+
+void AwardMembersListController::prepare() {
+	ParticipantsBoxController::prepare();
+	delegate()->peerListAddSelectedPeers(base::take(_selected));
+	delegate()->peerListRefreshRows();
 }
 
 void AwardMembersListController::rowClicked(not_null<PeerListRow*> row) {
diff --git a/Telegram/SourceFiles/info/boosts/giveaway/giveaway_list_controllers.h b/Telegram/SourceFiles/info/boosts/giveaway/giveaway_list_controllers.h
index 8d08a8a15..8f3f44ecf 100644
--- a/Telegram/SourceFiles/info/boosts/giveaway/giveaway_list_controllers.h
+++ b/Telegram/SourceFiles/info/boosts/giveaway/giveaway_list_controllers.h
@@ -27,7 +27,10 @@ class AwardMembersListController : public ParticipantsBoxController {
 public:
 	AwardMembersListController(
 		not_null<Window::SessionNavigation*> navigation,
-		not_null<PeerData*> peer);
+		not_null<PeerData*> peer,
+		std::vector<not_null<PeerData*>> selected);
+
+	void prepare() override;
 
 	void setCheckError(Fn<bool(int)> callback);
 
@@ -41,6 +44,8 @@ public:
 private:
 	Fn<bool(int)> _checkErrorCallback;
 
+	std::vector<not_null<PeerData*>> _selected;
+
 };
 
 class MyChannelsListController : public PeerListController {