From 21e417433bd035fa056c6fa43fb575b2c69fcd59 Mon Sep 17 00:00:00 2001
From: 23rd <23rd@vivaldi.net>
Date: Sun, 17 Mar 2019 11:14:31 +0300
Subject: [PATCH] Added waiting for full data update of peer to open
 EditPeerInfoBox.

---
 Telegram/SourceFiles/window/window_controller.cpp | 13 +++++++++++++
 Telegram/SourceFiles/window/window_controller.h   |  8 +++++++-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/Telegram/SourceFiles/window/window_controller.cpp b/Telegram/SourceFiles/window/window_controller.cpp
index 35f5d754d..74ecc4e1c 100644
--- a/Telegram/SourceFiles/window/window_controller.cpp
+++ b/Telegram/SourceFiles/window/window_controller.cpp
@@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 */
 #include "window/window_controller.h"
 
+#include "boxes/peers/edit_peer_info_box.h"
 #include "window/main_window.h"
 #include "info/info_memento.h"
 #include "info/info_controller.h"
@@ -100,6 +101,18 @@ Controller::Controller(
 : Navigation(session)
 , _window(window) {
 	init();
+
+	subscribe(Auth().api().fullPeerUpdated(), [=](PeerData *peer) {
+		if (peer == _showEditPeer) {
+			_showEditPeer = nullptr;
+			Ui::show(Box<EditPeerInfoBox>(peer));
+		}
+	});
+}
+
+void Controller::showEditPeerBox(PeerData *peer) {
+	_showEditPeer = peer;
+	Auth().api().requestFullPeer(peer);
 }
 
 void Controller::init() {
diff --git a/Telegram/SourceFiles/window/window_controller.h b/Telegram/SourceFiles/window/window_controller.h
index 8ad0bea45..abc00adac 100644
--- a/Telegram/SourceFiles/window/window_controller.h
+++ b/Telegram/SourceFiles/window/window_controller.h
@@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 
 #include <rpl/variable.h>
 #include "base/flags.h"
+#include "base/observer.h"
 #include "dialogs/dialogs_key.h"
 
 class AuthSession;
@@ -137,7 +138,9 @@ private:
 
 };
 
-class Controller : public Navigation {
+class Controller 
+	: public Navigation
+	, private base::Subscriber {
 public:
 	Controller(
 		not_null<AuthSession*> session,
@@ -160,6 +163,7 @@ public:
 	rpl::producer<Dialogs::RowDescriptor> activeChatEntryValue() const;
 	rpl::producer<Dialogs::Key> activeChatValue() const;
 	bool jumpToChatListEntry(Dialogs::RowDescriptor row);
+	void showEditPeerBox(PeerData *peer);
 
 	void enableGifPauseReason(GifPauseReason reason);
 	void disableGifPauseReason(GifPauseReason reason);
@@ -308,6 +312,8 @@ private:
 	Media::Player::FloatDelegate *_defaultFloatPlayerDelegate = nullptr;
 	Media::Player::FloatDelegate *_replacementFloatPlayerDelegate = nullptr;
 
+	PeerData *_showEditPeer = nullptr;
+
 	rpl::lifetime _lifetime;
 
 };