Provided session controller to Profile::GroupMembersWidget.

This commit is contained in:
23rd 2022-06-08 15:38:56 +03:00
parent 37f96534ec
commit 58163ea581
3 changed files with 28 additions and 9 deletions

View file

@ -4609,7 +4609,12 @@ void HistoryWidget::showMembersDropdown() {
} }
if (!_membersDropdown) { if (!_membersDropdown) {
_membersDropdown.create(this, st::membersInnerDropdown); _membersDropdown.create(this, st::membersInnerDropdown);
_membersDropdown->setOwnedWidget(object_ptr<Profile::GroupMembersWidget>(this, _peer, st::membersInnerItem)); _membersDropdown->setOwnedWidget(
object_ptr<Profile::GroupMembersWidget>(
this,
controller(),
_peer,
st::membersInnerItem));
_membersDropdown->resizeToWidth(st::membersInnerWidth); _membersDropdown->resizeToWidth(st::membersInnerWidth);
_membersDropdown->setMaxHeight(countMembersDropdownHeightMax()); _membersDropdown->setMaxHeight(countMembersDropdownHeightMax());

View file

@ -25,7 +25,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "apiwrap.h" #include "apiwrap.h"
#include "main/main_session.h" #include "main/main_session.h"
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "facades.h" // Ui::showPeerProfile #include "window/window_session_controller.h"
namespace Profile { namespace Profile {
namespace { namespace {
@ -43,9 +43,11 @@ not_null<UserData*> GroupMembersWidget::Member::user() const {
GroupMembersWidget::GroupMembersWidget( GroupMembersWidget::GroupMembersWidget(
QWidget *parent, QWidget *parent,
not_null<Window::SessionController*> controller,
not_null<PeerData*> peer, not_null<PeerData*> peer,
const style::PeerListItem &st) const style::PeerListItem &st)
: PeerListWidget(parent, peer, QString(), st, tr::lng_profile_kick(tr::now)) : PeerListWidget(parent, peer, QString(), st, tr::lng_profile_kick(tr::now))
, _controller(controller)
, _updateOnlineTimer([=] { updateOnlineDisplay(); }) { , _updateOnlineTimer([=] { updateOnlineDisplay(); }) {
peer->session().changes().peerUpdates( peer->session().changes().peerUpdates(
UpdateFlag::Admins UpdateFlag::Admins
@ -59,7 +61,7 @@ GroupMembersWidget::GroupMembersWidget(
removePeer(selectedPeer); removePeer(selectedPeer);
}); });
setSelectedCallback([=](PeerData *selectedPeer) { setSelectedCallback([=](PeerData *selectedPeer) {
Ui::showPeerProfile(selectedPeer); controller->showPeerInfo(selectedPeer);
}); });
setUpdateItemCallback([=](Item *item) { setUpdateItemCallback([=](Item *item) {
updateItemStatusText(item); updateItemStatusText(item);
@ -75,8 +77,10 @@ void GroupMembersWidget::removePeer(PeerData *selectedPeer) {
const auto user = selectedPeer->asUser(); const auto user = selectedPeer->asUser();
Assert(user != nullptr); Assert(user != nullptr);
auto text = tr::lng_profile_sure_kick(tr::now, lt_user, user->firstName); const auto text = tr::lng_profile_sure_kick(
auto currentRestrictedRights = [&]() -> ChatRestrictionsInfo { tr::now,
lt_user, user->firstName);
const auto currentRestrictedRights = [&]() -> ChatRestrictionsInfo {
if (auto channel = peer()->asMegagroup()) { if (auto channel = peer()->asMegagroup()) {
auto it = channel->mgInfo->lastRestricted.find(user); auto it = channel->mgInfo->lastRestricted.find(user);
if (it != channel->mgInfo->lastRestricted.cend()) { if (it != channel->mgInfo->lastRestricted.cend()) {
@ -87,11 +91,14 @@ void GroupMembersWidget::removePeer(PeerData *selectedPeer) {
}(); }();
const auto peer = this->peer(); const auto peer = this->peer();
const auto callback = [=] { const auto callback = [=, controller = _controller] {
Ui::hideLayer(); controller->hideLayer();
if (const auto chat = peer->asChat()) { if (const auto chat = peer->asChat()) {
chat->session().api().chatParticipants().kick(chat, user); chat->session().api().chatParticipants().kick(chat, user);
Ui::showPeerHistory(chat, ShowAtTheEndMsgId); controller->showPeerHistory(
chat->id,
Window::SectionShow::Way::ClearStack,
ShowAtTheEndMsgId);
} else if (const auto channel = peer->asChannel()) { } else if (const auto channel = peer->asChannel()) {
channel->session().api().chatParticipants().kick( channel->session().api().chatParticipants().kick(
channel, channel,
@ -99,7 +106,7 @@ void GroupMembersWidget::removePeer(PeerData *selectedPeer) {
currentRestrictedRights); currentRestrictedRights);
} }
}; };
Ui::show(Ui::MakeConfirmBox({ _controller->show(Ui::MakeConfirmBox({
.text = text, .text = text,
.confirmed = crl::guard(&peer->session(), callback), .confirmed = crl::guard(&peer->session(), callback),
.confirmText = tr::lng_box_remove(), .confirmText = tr::lng_box_remove(),

View file

@ -18,6 +18,10 @@ namespace Data {
struct PeerUpdate; struct PeerUpdate;
} // namespace Data } // namespace Data
namespace Window {
class SessionController;
} // namespace Window
namespace Profile { namespace Profile {
class GroupMembersWidget : public PeerListWidget { class GroupMembersWidget : public PeerListWidget {
@ -25,6 +29,7 @@ class GroupMembersWidget : public PeerListWidget {
public: public:
GroupMembersWidget( GroupMembersWidget(
QWidget *parent, QWidget *parent,
not_null<Window::SessionController*> controller,
not_null<PeerData*> peer, not_null<PeerData*> peer,
const style::PeerListItem &st); const style::PeerListItem &st);
@ -73,6 +78,8 @@ private:
not_null<ChannelData*> megagroup); not_null<ChannelData*> megagroup);
bool addUsersToEnd(not_null<ChannelData*> megagroup); bool addUsersToEnd(not_null<ChannelData*> megagroup);
const not_null<Window::SessionController*> _controller;
base::flat_map<UserData*, Member*> _membersByUser; base::flat_map<UserData*, Member*> _membersByUser;
bool _sortByOnline = false; bool _sortByOnline = false;
TimeId _now = 0; TimeId _now = 0;