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) {
_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->setMaxHeight(countMembersDropdownHeightMax());

View File

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

View File

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