mirror of https://github.com/procxx/kepka.git
Update kicked count in Channel Info box.
This commit is contained in:
parent
69d9072ff0
commit
21f4bbbe7b
|
@ -937,47 +937,65 @@ void ApiWrap::requestSelfParticipant(ChannelData *channel) {
|
|||
_selfParticipantRequests.insert(channel, requestId);
|
||||
}
|
||||
|
||||
void ApiWrap::kickParticipant(PeerData *peer, UserData *user, const MTPChannelBannedRights ¤tRights) {
|
||||
auto kick = KickRequest(peer, user);
|
||||
if (_kickRequests.contains(kick)) return;
|
||||
|
||||
if (auto channel = peer->asChannel()) {
|
||||
auto rights = ChannelData::KickedRestrictedRights();
|
||||
auto requestId = request(MTPchannels_EditBanned(channel->inputChannel, user->inputUser, rights)).done([this, channel, user, currentRights, rights](const MTPUpdates &result) {
|
||||
applyUpdates(result);
|
||||
|
||||
_kickRequests.remove(KickRequest(channel, user));
|
||||
channel->applyEditBanned(user, currentRights, rights);
|
||||
}).fail([this, kick](const RPCError &error) {
|
||||
_kickRequests.remove(kick);
|
||||
}).send();
|
||||
|
||||
_kickRequests.insert(kick, requestId);
|
||||
}
|
||||
void ApiWrap::kickParticipant(
|
||||
not_null<ChatData*> chat,
|
||||
not_null<UserData*> user) {
|
||||
request(MTPmessages_DeleteChatUser(
|
||||
chat->inputChat,
|
||||
user->inputUser
|
||||
)).done([=](const MTPUpdates &result) {
|
||||
applyUpdates(result);
|
||||
}).send();
|
||||
}
|
||||
|
||||
void ApiWrap::unblockParticipant(PeerData *peer, UserData *user) {
|
||||
auto kick = KickRequest(peer, user);
|
||||
void ApiWrap::kickParticipant(
|
||||
not_null<ChannelData*> channel,
|
||||
not_null<UserData*> user,
|
||||
const MTPChannelBannedRights ¤tRights) {
|
||||
const auto kick = KickRequest(channel, user);
|
||||
if (_kickRequests.contains(kick)) return;
|
||||
|
||||
if (auto channel = peer->asChannel()) {
|
||||
auto requestId = request(MTPchannels_EditBanned(channel->inputChannel, user->inputUser, MTP_channelBannedRights(MTP_flags(0), MTP_int(0)))).done([this, peer, user](const MTPUpdates &result) {
|
||||
applyUpdates(result);
|
||||
const auto rights = ChannelData::KickedRestrictedRights();
|
||||
const auto requestId = request(MTPchannels_EditBanned(
|
||||
channel->inputChannel,
|
||||
user->inputUser,
|
||||
rights
|
||||
)).done([=](const MTPUpdates &result) {
|
||||
applyUpdates(result);
|
||||
|
||||
_kickRequests.remove(KickRequest(peer, user));
|
||||
if (auto channel = peer->asMegagroup()) {
|
||||
if (channel->kickedCount() > 0) {
|
||||
channel->setKickedCount(channel->kickedCount() - 1);
|
||||
} else {
|
||||
channel->updateFullForced();
|
||||
}
|
||||
}
|
||||
}).fail([this, kick](const RPCError &error) {
|
||||
_kickRequests.remove(kick);
|
||||
}).send();
|
||||
_kickRequests.remove(KickRequest(channel, user));
|
||||
channel->applyEditBanned(user, currentRights, rights);
|
||||
}).fail([this, kick](const RPCError &error) {
|
||||
_kickRequests.remove(kick);
|
||||
}).send();
|
||||
|
||||
_kickRequests.insert(kick, requestId);
|
||||
}
|
||||
_kickRequests.emplace(kick, requestId);
|
||||
}
|
||||
|
||||
void ApiWrap::unblockParticipant(
|
||||
not_null<ChannelData*> channel,
|
||||
not_null<UserData*> user) {
|
||||
const auto kick = KickRequest(channel, user);
|
||||
if (_kickRequests.contains(kick)) return;
|
||||
|
||||
const auto requestId = request(MTPchannels_EditBanned(
|
||||
channel->inputChannel,
|
||||
user->inputUser,
|
||||
MTP_channelBannedRights(MTP_flags(0), MTP_int(0))
|
||||
)).done([=](const MTPUpdates &result) {
|
||||
applyUpdates(result);
|
||||
|
||||
_kickRequests.remove(KickRequest(channel, user));
|
||||
if (channel->kickedCount() > 0) {
|
||||
channel->setKickedCount(channel->kickedCount() - 1);
|
||||
} else {
|
||||
channel->updateFullForced();
|
||||
}
|
||||
}).fail([this, kick](const RPCError &error) {
|
||||
_kickRequests.remove(kick);
|
||||
}).send();
|
||||
|
||||
_kickRequests.emplace(kick, requestId);
|
||||
}
|
||||
|
||||
void ApiWrap::requestChannelMembersForAdd(
|
||||
|
|
|
@ -77,8 +77,14 @@ public:
|
|||
void processFullPeer(UserData *user, const MTPUserFull &result);
|
||||
|
||||
void requestSelfParticipant(ChannelData *channel);
|
||||
void kickParticipant(PeerData *peer, UserData *user, const MTPChannelBannedRights ¤tRights);
|
||||
void unblockParticipant(PeerData *peer, UserData *user);
|
||||
void kickParticipant(not_null<ChatData*> chat, not_null<UserData*> user);
|
||||
void kickParticipant(
|
||||
not_null<ChannelData*> channel,
|
||||
not_null<UserData*> user,
|
||||
const MTPChannelBannedRights ¤tRights);
|
||||
void unblockParticipant(
|
||||
not_null<ChannelData*> channel,
|
||||
not_null<UserData*> user);
|
||||
|
||||
void requestWebPageDelayed(WebPageData *page);
|
||||
void clearWebPageRequest(WebPageData *page);
|
||||
|
@ -357,9 +363,10 @@ private:
|
|||
mtpRequestId _channelMembersForAddRequestId = 0;
|
||||
base::lambda<void(const MTPchannels_ChannelParticipants&)> _channelMembersForAddCallback;
|
||||
|
||||
typedef QPair<PeerData*, UserData*> KickRequest;
|
||||
typedef QMap<KickRequest, mtpRequestId> KickRequests;
|
||||
KickRequests _kickRequests;
|
||||
using KickRequest = std::pair<
|
||||
not_null<ChannelData*>,
|
||||
not_null<UserData*>>;
|
||||
base::flat_map<KickRequest, mtpRequestId> _kickRequests;
|
||||
|
||||
QMap<ChannelData*, mtpRequestId> _selfParticipantRequests;
|
||||
|
||||
|
|
|
@ -565,13 +565,22 @@ void DeleteMessagesBox::deleteAndClear() {
|
|||
|
||||
if (_moderateFrom) {
|
||||
if (_banUser && _banUser->checked()) {
|
||||
Auth().api().kickParticipant(_moderateInChannel, _moderateFrom, MTP_channelBannedRights(MTP_flags(0), MTP_int(0)));
|
||||
Auth().api().kickParticipant(
|
||||
_moderateInChannel,
|
||||
_moderateFrom,
|
||||
MTP_channelBannedRights(MTP_flags(0), MTP_int(0)));
|
||||
}
|
||||
if (_reportSpam->checked()) {
|
||||
MTP::send(MTPchannels_ReportSpam(_moderateInChannel->inputChannel, _moderateFrom->inputUser, MTP_vector<MTPint>(1, MTP_int(_ids[0].msg))));
|
||||
MTP::send(
|
||||
MTPchannels_ReportSpam(
|
||||
_moderateInChannel->inputChannel,
|
||||
_moderateFrom->inputUser,
|
||||
MTP_vector<MTPint>(1, MTP_int(_ids[0].msg))));
|
||||
}
|
||||
if (_deleteAll && _deleteAll->checked()) {
|
||||
App::main()->deleteAllFromUser(_moderateInChannel, _moderateFrom);
|
||||
App::main()->deleteAllFromUser(
|
||||
_moderateInChannel,
|
||||
_moderateFrom);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -794,9 +794,12 @@ void ChannelData::applyEditBanned(not_null<UserData*> user, const MTPChannelBann
|
|||
}
|
||||
Data::ChannelAdminChanges(this).feed(peerToUser(user->id), false);
|
||||
} else {
|
||||
if (isKicked && membersCount() > 1) {
|
||||
setMembersCount(membersCount() - 1);
|
||||
flags |= Notify::PeerUpdate::Flag::MembersChanged;
|
||||
if (isKicked) {
|
||||
if (membersCount() > 1) {
|
||||
setMembersCount(membersCount() - 1);
|
||||
flags |= Notify::PeerUpdate::Flag::MembersChanged;
|
||||
}
|
||||
setKickedCount(kickedCount() + 1);
|
||||
}
|
||||
}
|
||||
Notify::peerUpdatedDelayed(this, flags);
|
||||
|
|
|
@ -309,7 +309,8 @@ void ChatMembersController::removeMember(not_null<UserData*> user) {
|
|||
auto text = lng_profile_sure_kick(lt_user, user->firstName);
|
||||
Ui::show(Box<ConfirmBox>(text, lang(lng_box_remove), [user, chat = _chat] {
|
||||
Ui::hideLayer();
|
||||
if (App::main()) App::main()->kickParticipant(chat, user);
|
||||
Auth().api().kickParticipant(chat, user);
|
||||
Ui::showPeerHistory(chat->id, ShowAtTheEndMsgId);
|
||||
}));
|
||||
}
|
||||
|
||||
|
|
|
@ -1268,21 +1268,6 @@ bool MainWidget::addParticipantsFail(
|
|||
return false;
|
||||
}
|
||||
|
||||
void MainWidget::kickParticipant(ChatData *chat, UserData *user) {
|
||||
MTP::send(
|
||||
MTPmessages_DeleteChatUser(chat->inputChat, user->inputUser),
|
||||
rpcDone(&MainWidget::sentUpdatesReceived),
|
||||
rpcFail(&MainWidget::kickParticipantFail, chat));
|
||||
Ui::showPeerHistory(chat->id, ShowAtTheEndMsgId);
|
||||
}
|
||||
|
||||
bool MainWidget::kickParticipantFail(ChatData *chat, const RPCError &error) {
|
||||
if (MTP::isDefaultHandledError(error)) return false;
|
||||
|
||||
error.type();
|
||||
return false;
|
||||
}
|
||||
|
||||
void MainWidget::checkPeerHistory(PeerData *peer) {
|
||||
auto offsetId = 0;
|
||||
auto offsetDate = 0;
|
||||
|
|
|
@ -224,9 +224,6 @@ public:
|
|||
not_null<ChannelData*> channel,
|
||||
const RPCError &e); // for multi invite in channels
|
||||
|
||||
void kickParticipant(ChatData *chat, UserData *user);
|
||||
bool kickParticipantFail(ChatData *chat, const RPCError &e);
|
||||
|
||||
void checkPeerHistory(PeerData *peer);
|
||||
void checkedHistory(PeerData *peer, const MTPmessages_Messages &result);
|
||||
|
||||
|
|
|
@ -116,6 +116,7 @@ void GroupMembersWidget::restrictUser(not_null<UserData*> user) {
|
|||
void GroupMembersWidget::removePeer(PeerData *selectedPeer) {
|
||||
auto user = selectedPeer->asUser();
|
||||
Assert(user != nullptr);
|
||||
|
||||
auto text = lng_profile_sure_kick(lt_user, user->firstName);
|
||||
auto currentRestrictedRights = [&]() -> MTPChannelBannedRights {
|
||||
if (auto channel = peer()->asMegagroup()) {
|
||||
|
@ -128,10 +129,14 @@ void GroupMembersWidget::removePeer(PeerData *selectedPeer) {
|
|||
}();
|
||||
Ui::show(Box<ConfirmBox>(text, lang(lng_box_remove), [user, currentRestrictedRights, peer = peer()] {
|
||||
Ui::hideLayer();
|
||||
if (auto chat = peer->asChat()) {
|
||||
if (App::main()) App::main()->kickParticipant(chat, user);
|
||||
} else if (auto channel = peer->asChannel()) {
|
||||
Auth().api().kickParticipant(channel, user, currentRestrictedRights);
|
||||
if (const auto chat = peer->asChat()) {
|
||||
Auth().api().kickParticipant(chat, user);
|
||||
Ui::showPeerHistory(chat->id, ShowAtTheEndMsgId);
|
||||
} else if (const auto channel = peer->asChannel()) {
|
||||
Auth().api().kickParticipant(
|
||||
channel,
|
||||
user,
|
||||
currentRestrictedRights);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
|
|
@ -860,7 +860,9 @@ void ParticipantsBoxController::kickMemberSure(not_null<UserData*> user) {
|
|||
_editBox->closeBox();
|
||||
}
|
||||
auto alreadyIt = _additional.restrictedRights.find(user);
|
||||
auto currentRights = (alreadyIt == _additional.restrictedRights.cend()) ? MTP_channelBannedRights(MTP_flags(0), MTP_int(0)) : alreadyIt->second;
|
||||
auto currentRights = (alreadyIt == _additional.restrictedRights.cend())
|
||||
? MTP_channelBannedRights(MTP_flags(0), MTP_int(0))
|
||||
: alreadyIt->second;
|
||||
|
||||
if (auto row = delegate()->peerListFindRow(user->id)) {
|
||||
delegate()->peerListRemoveRow(row);
|
||||
|
@ -899,7 +901,9 @@ void ParticipantsBoxController::removeAdminSure(not_null<UserData*> user) {
|
|||
});
|
||||
}
|
||||
|
||||
void ParticipantsBoxController::removeKicked(not_null<PeerListRow*> row, not_null<UserData*> user) {
|
||||
void ParticipantsBoxController::removeKicked(
|
||||
not_null<PeerListRow*> row,
|
||||
not_null<UserData*> user) {
|
||||
delegate()->peerListRemoveRow(row);
|
||||
delegate()->peerListRefreshRows();
|
||||
|
||||
|
|
|
@ -124,9 +124,13 @@ private:
|
|||
void sortByOnlineDelayed();
|
||||
void sortByOnline();
|
||||
void showAdmin(not_null<UserData*> user);
|
||||
void editAdminDone(not_null<UserData*> user, const MTPChannelAdminRights &rights);
|
||||
void editAdminDone(
|
||||
not_null<UserData*> user,
|
||||
const MTPChannelAdminRights &rights);
|
||||
void showRestricted(not_null<UserData*> user);
|
||||
void editRestrictedDone(not_null<UserData*> user, const MTPChannelBannedRights &rights);
|
||||
void editRestrictedDone(
|
||||
not_null<UserData*> user,
|
||||
const MTPChannelBannedRights &rights);
|
||||
void removeKicked(not_null<PeerListRow*> row, not_null<UserData*> user);
|
||||
void kickMember(not_null<UserData*> user);
|
||||
void kickMemberSure(not_null<UserData*> user);
|
||||
|
|
Loading…
Reference in New Issue