mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Removed duplicated MTP* rights generation.
This commit is contained in:
parent
0eee937e6d
commit
3271cdf251
3 changed files with 93 additions and 119 deletions
|
@ -658,37 +658,7 @@ void AddSpecialBoxController::editAdminDone(
|
||||||
_editParticipantBox->closeBox();
|
_editParticipantBox->closeBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto date = base::unixtime::now(); // Incorrect, but ignored.
|
_additional.applyAdminLocally(user, rights, rank);
|
||||||
if (_additional.isCreator(user) && user->isSelf()) {
|
|
||||||
using Flag = MTPDchannelParticipantCreator::Flag;
|
|
||||||
_additional.applyParticipant(MTP_channelParticipantCreator(
|
|
||||||
MTP_flags(rank.isEmpty() ? Flag(0) : Flag::f_rank),
|
|
||||||
peerToBareMTPInt(user->id),
|
|
||||||
MTP_chatAdminRights(
|
|
||||||
MTP_flags(MTPDchatAdminRights::Flags::from_raw(
|
|
||||||
uint32(rights.flags)))),
|
|
||||||
MTP_string(rank)));
|
|
||||||
} else if (!rights.flags) {
|
|
||||||
_additional.applyParticipant(MTP_channelParticipant(
|
|
||||||
peerToBareMTPInt(user->id),
|
|
||||||
MTP_int(date)));
|
|
||||||
} else {
|
|
||||||
using Flag = MTPDchannelParticipantAdmin::Flag;
|
|
||||||
const auto alreadyPromotedBy = _additional.adminPromotedBy(user);
|
|
||||||
_additional.applyParticipant(MTP_channelParticipantAdmin(
|
|
||||||
MTP_flags(Flag::f_can_edit
|
|
||||||
| (rank.isEmpty() ? Flag(0) : Flag::f_rank)),
|
|
||||||
peerToBareMTPInt(user->id),
|
|
||||||
MTPlong(), // inviter_id
|
|
||||||
peerToBareMTPInt(alreadyPromotedBy
|
|
||||||
? alreadyPromotedBy->id
|
|
||||||
: user->session().userPeerId()),
|
|
||||||
MTP_int(date),
|
|
||||||
MTP_chatAdminRights(
|
|
||||||
MTP_flags(MTPDchatAdminRights::Flags::from_raw(
|
|
||||||
uint32(rights.flags)))),
|
|
||||||
MTP_string(rank)));
|
|
||||||
}
|
|
||||||
if (const auto callback = _adminDoneCallback) {
|
if (const auto callback = _adminDoneCallback) {
|
||||||
callback(user, rights, rank);
|
callback(user, rights, rank);
|
||||||
}
|
}
|
||||||
|
@ -765,33 +735,7 @@ void AddSpecialBoxController::editRestrictedDone(
|
||||||
_editParticipantBox->closeBox();
|
_editParticipantBox->closeBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto date = base::unixtime::now(); // Incorrect, but ignored.
|
_additional.applyBannedLocally(participant, rights);
|
||||||
if (!rights.flags) {
|
|
||||||
if (const auto user = participant->asUser()) {
|
|
||||||
_additional.applyParticipant(MTP_channelParticipant(
|
|
||||||
peerToBareMTPInt(user->id),
|
|
||||||
MTP_int(date)));
|
|
||||||
} else {
|
|
||||||
_additional.setExternal(participant);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const auto kicked = rights.flags & ChatRestriction::ViewMessages;
|
|
||||||
const auto alreadyRestrictedBy = _additional.restrictedBy(
|
|
||||||
participant);
|
|
||||||
_additional.applyParticipant(MTP_channelParticipantBanned(
|
|
||||||
MTP_flags(kicked
|
|
||||||
? MTPDchannelParticipantBanned::Flag::f_left
|
|
||||||
: MTPDchannelParticipantBanned::Flag(0)),
|
|
||||||
peerToMTP(participant->id),
|
|
||||||
peerToBareMTPInt(alreadyRestrictedBy
|
|
||||||
? alreadyRestrictedBy->id
|
|
||||||
: participant->session().userPeerId()),
|
|
||||||
MTP_int(date),
|
|
||||||
MTP_chatBannedRights(
|
|
||||||
MTP_flags(MTPDchatBannedRights::Flags::from_raw(
|
|
||||||
uint32(rights.flags))),
|
|
||||||
MTP_int(rights.until))));
|
|
||||||
}
|
|
||||||
if (const auto callback = _bannedDoneCallback) {
|
if (const auto callback = _bannedDoneCallback) {
|
||||||
callback(participant, rights);
|
callback(participant, rights);
|
||||||
}
|
}
|
||||||
|
|
|
@ -530,6 +530,76 @@ void ParticipantsAdditionalData::fillFromChannel(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ParticipantsAdditionalData::applyAdminLocally(
|
||||||
|
UserData *user,
|
||||||
|
ChatAdminRightsInfo rights,
|
||||||
|
const QString &rank) {
|
||||||
|
const auto date = base::unixtime::now(); // Incorrect, but ignored.
|
||||||
|
if (isCreator(user) && user->isSelf()) {
|
||||||
|
using Flag = MTPDchannelParticipantCreator::Flag;
|
||||||
|
applyParticipant(MTP_channelParticipantCreator(
|
||||||
|
MTP_flags(rank.isEmpty() ? Flag(0) : Flag::f_rank),
|
||||||
|
peerToBareMTPInt(user->id),
|
||||||
|
MTP_chatAdminRights(
|
||||||
|
MTP_flags(MTPDchatAdminRights::Flags::from_raw(
|
||||||
|
uint32(rights.flags)))),
|
||||||
|
MTP_string(rank)));
|
||||||
|
} else if (!rights.flags) {
|
||||||
|
applyParticipant(MTP_channelParticipant(
|
||||||
|
peerToBareMTPInt(user->id),
|
||||||
|
MTP_int(date)));
|
||||||
|
} else {
|
||||||
|
using Flag = MTPDchannelParticipantAdmin::Flag;
|
||||||
|
const auto alreadyPromotedBy = adminPromotedBy(user);
|
||||||
|
applyParticipant(MTP_channelParticipantAdmin(
|
||||||
|
MTP_flags(Flag::f_can_edit
|
||||||
|
| (rank.isEmpty() ? Flag(0) : Flag::f_rank)),
|
||||||
|
peerToBareMTPInt(user->id),
|
||||||
|
MTPlong(), // inviter_id
|
||||||
|
peerToBareMTPInt(alreadyPromotedBy
|
||||||
|
? alreadyPromotedBy->id
|
||||||
|
: user->session().userPeerId()),
|
||||||
|
MTP_int(date),
|
||||||
|
MTP_chatAdminRights(
|
||||||
|
MTP_flags(MTPDchatAdminRights::Flags::from_raw(
|
||||||
|
uint32(rights.flags)))),
|
||||||
|
MTP_string(rank)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ParticipantsAdditionalData::applyBannedLocally(
|
||||||
|
not_null<PeerData*> participant,
|
||||||
|
ChatRestrictionsInfo rights) {
|
||||||
|
const auto user = participant->asUser();
|
||||||
|
const auto date = base::unixtime::now(); // Incorrect, but ignored.
|
||||||
|
if (!rights.flags) {
|
||||||
|
if (user) {
|
||||||
|
applyParticipant(MTP_channelParticipant(
|
||||||
|
peerToBareMTPInt(user->id),
|
||||||
|
MTP_int(date)));
|
||||||
|
} else {
|
||||||
|
setExternal(participant);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const auto kicked = rights.flags & ChatRestriction::ViewMessages;
|
||||||
|
const auto alreadyRestrictedBy = restrictedBy(
|
||||||
|
participant);
|
||||||
|
applyParticipant(MTP_channelParticipantBanned(
|
||||||
|
MTP_flags(kicked
|
||||||
|
? MTPDchannelParticipantBanned::Flag::f_left
|
||||||
|
: MTPDchannelParticipantBanned::Flag(0)),
|
||||||
|
peerToMTP(participant->id),
|
||||||
|
peerToBareMTPInt(alreadyRestrictedBy
|
||||||
|
? alreadyRestrictedBy->id
|
||||||
|
: participant->session().userPeerId()),
|
||||||
|
MTP_int(date),
|
||||||
|
MTP_chatBannedRights(
|
||||||
|
MTP_flags(MTPDchatBannedRights::Flags::from_raw(
|
||||||
|
uint32(rights.flags))),
|
||||||
|
MTP_int(rights.until))));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PeerData *ParticipantsAdditionalData::applyParticipant(
|
PeerData *ParticipantsAdditionalData::applyParticipant(
|
||||||
const MTPChannelParticipant &data) {
|
const MTPChannelParticipant &data) {
|
||||||
return applyParticipant(data, _role);
|
return applyParticipant(data, _role);
|
||||||
|
@ -1558,43 +1628,18 @@ void ParticipantsBoxController::editAdminDone(
|
||||||
_editParticipantBox->closeBox();
|
_editParticipantBox->closeBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto date = base::unixtime::now(); // Incorrect, but ignored.
|
_additional.applyAdminLocally(user, rights, rank);
|
||||||
if (_additional.isCreator(user) && user->isSelf()) {
|
if (!_additional.isCreator(user) || !user->isSelf()) {
|
||||||
using Flag = MTPDchannelParticipantCreator::Flag;
|
if (!rights.flags) {
|
||||||
_additional.applyParticipant(MTP_channelParticipantCreator(
|
if (_role == Role::Admins) {
|
||||||
MTP_flags(rank.isEmpty() ? Flag(0) : Flag::f_rank),
|
removeRow(user);
|
||||||
peerToBareMTPInt(user->id),
|
}
|
||||||
MTP_chatAdminRights(
|
} else {
|
||||||
MTP_flags(MTPDchatAdminRights::Flags::from_raw(
|
if (_role == Role::Admins) {
|
||||||
uint32(rights.flags)))),
|
prependRow(user);
|
||||||
MTP_string(rank)));
|
} else if (_role == Role::Kicked || _role == Role::Restricted) {
|
||||||
} else if (!rights.flags) {
|
removeRow(user);
|
||||||
_additional.applyParticipant(MTP_channelParticipant(
|
}
|
||||||
peerToBareMTPInt(user->id),
|
|
||||||
MTP_int(date)));
|
|
||||||
if (_role == Role::Admins) {
|
|
||||||
removeRow(user);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
using Flag = MTPDchannelParticipantAdmin::Flag;
|
|
||||||
const auto alreadyPromotedBy = _additional.adminPromotedBy(user);
|
|
||||||
_additional.applyParticipant(MTP_channelParticipantAdmin(
|
|
||||||
MTP_flags(Flag::f_can_edit
|
|
||||||
| (rank.isEmpty() ? Flag(0) : Flag::f_rank)),
|
|
||||||
peerToBareMTPInt(user->id),
|
|
||||||
MTPlong(), // inviter_id
|
|
||||||
peerToBareMTPInt(alreadyPromotedBy
|
|
||||||
? alreadyPromotedBy->id
|
|
||||||
: user->session().userPeerId()),
|
|
||||||
MTP_int(date),
|
|
||||||
MTP_chatAdminRights(
|
|
||||||
MTP_flags(MTPDchatAdminRights::Flags::from_raw(
|
|
||||||
uint32(rights.flags)))),
|
|
||||||
MTP_string(rank)));
|
|
||||||
if (_role == Role::Admins) {
|
|
||||||
prependRow(user);
|
|
||||||
} else if (_role == Role::Kicked || _role == Role::Restricted) {
|
|
||||||
removeRow(user);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
recomputeTypeFor(user);
|
recomputeTypeFor(user);
|
||||||
|
@ -1636,36 +1681,13 @@ void ParticipantsBoxController::editRestrictedDone(
|
||||||
_editParticipantBox->closeBox();
|
_editParticipantBox->closeBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto user = participant->asUser();
|
_additional.applyBannedLocally(participant, rights);
|
||||||
const auto date = base::unixtime::now(); // Incorrect, but ignored.
|
|
||||||
if (!rights.flags) {
|
if (!rights.flags) {
|
||||||
if (user) {
|
|
||||||
_additional.applyParticipant(MTP_channelParticipant(
|
|
||||||
peerToBareMTPInt(user->id),
|
|
||||||
MTP_int(date)));
|
|
||||||
} else {
|
|
||||||
_additional.setExternal(participant);
|
|
||||||
}
|
|
||||||
if (_role == Role::Kicked || _role == Role::Restricted) {
|
if (_role == Role::Kicked || _role == Role::Restricted) {
|
||||||
removeRow(participant);
|
removeRow(participant);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const auto kicked = rights.flags & ChatRestriction::ViewMessages;
|
const auto kicked = rights.flags & ChatRestriction::ViewMessages;
|
||||||
const auto alreadyRestrictedBy = _additional.restrictedBy(
|
|
||||||
participant);
|
|
||||||
_additional.applyParticipant(MTP_channelParticipantBanned(
|
|
||||||
MTP_flags(kicked
|
|
||||||
? MTPDchannelParticipantBanned::Flag::f_left
|
|
||||||
: MTPDchannelParticipantBanned::Flag(0)),
|
|
||||||
peerToMTP(participant->id),
|
|
||||||
peerToBareMTPInt(alreadyRestrictedBy
|
|
||||||
? alreadyRestrictedBy->id
|
|
||||||
: participant->session().userPeerId()),
|
|
||||||
MTP_int(date),
|
|
||||||
MTP_chatBannedRights(
|
|
||||||
MTP_flags(MTPDchatBannedRights::Flags::from_raw(
|
|
||||||
uint32(rights.flags))),
|
|
||||||
MTP_int(rights.until))));
|
|
||||||
if (kicked) {
|
if (kicked) {
|
||||||
if (_role == Role::Kicked) {
|
if (_role == Role::Kicked) {
|
||||||
prependRow(participant);
|
prependRow(participant);
|
||||||
|
|
|
@ -108,6 +108,14 @@ public:
|
||||||
|
|
||||||
void migrate(not_null<ChatData*> chat, not_null<ChannelData*> channel);
|
void migrate(not_null<ChatData*> chat, not_null<ChannelData*> channel);
|
||||||
|
|
||||||
|
void applyAdminLocally(
|
||||||
|
UserData *user,
|
||||||
|
ChatAdminRightsInfo rights,
|
||||||
|
const QString &rank);
|
||||||
|
void applyBannedLocally(
|
||||||
|
not_null<PeerData*> participant,
|
||||||
|
ChatRestrictionsInfo rights);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UserData *applyCreator(const MTPDchannelParticipantCreator &data);
|
UserData *applyCreator(const MTPDchannelParticipantCreator &data);
|
||||||
UserData *applyAdmin(const MTPDchannelParticipantAdmin &data);
|
UserData *applyAdmin(const MTPDchannelParticipantAdmin &data);
|
||||||
|
|
Loading…
Add table
Reference in a new issue