/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "dialogs/dialogs_search_from_controllers.h" #include "lang/lang_keys.h" #include "data/data_peer_values.h" #include "data/data_channel.h" #include "data/data_chat.h" #include "data/data_user.h" #include "observer_peer.h" #include "main/main_session.h" #include "apiwrap.h" namespace Dialogs { void ShowSearchFromBox( not_null peer, Fn)> callback, Fn closedCallback) { auto createController = [ peer, callback = std::move(callback) ]() -> std::unique_ptr { if (peer && (peer->isChat() || peer->isMegagroup())) { return std::make_unique( peer, std::move(callback)); } return nullptr; }; if (auto controller = createController()) { auto subscription = std::make_shared(); auto box = Ui::show(Box(std::move(controller), [subscription](not_null box) { box->addButton(tr::lng_cancel(), [box, subscription] { box->closeBox(); }); }), Ui::LayerOption::KeepOther); box->boxClosing() | rpl::start_with_next( std::move(closedCallback), *subscription); } } SearchFromController::SearchFromController( not_null peer, Fn)> callback) : AddSpecialBoxController( peer, ParticipantsBoxController::Role::Members, AdminDoneCallback(), BannedDoneCallback()) , _callback(std::move(callback)) { _excludeSelf = false; } void SearchFromController::prepare() { AddSpecialBoxController::prepare(); delegate()->peerListSetTitle(tr::lng_search_messages_from()); } void SearchFromController::rowClicked(not_null row) { Expects(row->peer()->isUser()); if (const auto onstack = base::duplicate(_callback)) { onstack(row->peer()->asUser()); } } std::unique_ptr SearchFromController::createRow( not_null user) const { return std::make_unique(user); } } // namespace Dialogs