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,45 +1628,20 @@ 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(
 | 
					 | 
				
			||||||
			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) {
 | 
								if (_role == Role::Admins) {
 | 
				
			||||||
				removeRow(user);
 | 
									removeRow(user);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		} else {
 | 
							} 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) {
 | 
								if (_role == Role::Admins) {
 | 
				
			||||||
				prependRow(user);
 | 
									prependRow(user);
 | 
				
			||||||
			} else if (_role == Role::Kicked || _role == Role::Restricted) {
 | 
								} else if (_role == Role::Kicked || _role == Role::Restricted) {
 | 
				
			||||||
				removeRow(user);
 | 
									removeRow(user);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	recomputeTypeFor(user);
 | 
						recomputeTypeFor(user);
 | 
				
			||||||
	delegate()->peerListRefreshRows();
 | 
						delegate()->peerListRefreshRows();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -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