mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 14:17:12 +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();
|
||||
}
|
||||
|
||||
const auto date = base::unixtime::now(); // Incorrect, but ignored.
|
||||
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)));
|
||||
}
|
||||
_additional.applyAdminLocally(user, rights, rank);
|
||||
if (const auto callback = _adminDoneCallback) {
|
||||
callback(user, rights, rank);
|
||||
}
|
||||
|
@ -765,33 +735,7 @@ void AddSpecialBoxController::editRestrictedDone(
|
|||
_editParticipantBox->closeBox();
|
||||
}
|
||||
|
||||
const auto date = base::unixtime::now(); // Incorrect, but ignored.
|
||||
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))));
|
||||
}
|
||||
_additional.applyBannedLocally(participant, rights);
|
||||
if (const auto callback = _bannedDoneCallback) {
|
||||
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(
|
||||
const MTPChannelParticipant &data) {
|
||||
return applyParticipant(data, _role);
|
||||
|
@ -1558,43 +1628,18 @@ void ParticipantsBoxController::editAdminDone(
|
|||
_editParticipantBox->closeBox();
|
||||
}
|
||||
|
||||
const auto date = base::unixtime::now(); // Incorrect, but ignored.
|
||||
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)));
|
||||
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);
|
||||
_additional.applyAdminLocally(user, rights, rank);
|
||||
if (!_additional.isCreator(user) || !user->isSelf()) {
|
||||
if (!rights.flags) {
|
||||
if (_role == Role::Admins) {
|
||||
removeRow(user);
|
||||
}
|
||||
} else {
|
||||
if (_role == Role::Admins) {
|
||||
prependRow(user);
|
||||
} else if (_role == Role::Kicked || _role == Role::Restricted) {
|
||||
removeRow(user);
|
||||
}
|
||||
}
|
||||
}
|
||||
recomputeTypeFor(user);
|
||||
|
@ -1636,36 +1681,13 @@ void ParticipantsBoxController::editRestrictedDone(
|
|||
_editParticipantBox->closeBox();
|
||||
}
|
||||
|
||||
const auto user = participant->asUser();
|
||||
const auto date = base::unixtime::now(); // Incorrect, but ignored.
|
||||
_additional.applyBannedLocally(participant, rights);
|
||||
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) {
|
||||
removeRow(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 (kicked) {
|
||||
if (_role == Role::Kicked) {
|
||||
prependRow(participant);
|
||||
|
|
|
@ -108,6 +108,14 @@ public:
|
|||
|
||||
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:
|
||||
UserData *applyCreator(const MTPDchannelParticipantCreator &data);
|
||||
UserData *applyAdmin(const MTPDchannelParticipantAdmin &data);
|
||||
|
|
Loading…
Add table
Reference in a new issue