Save recent requester userIds from API.
This commit is contained in:
		
							parent
							
								
									f839c7f2bb
								
							
						
					
					
						commit
						36271d6b85
					
				
					 5 changed files with 61 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -1970,10 +1970,11 @@ void Updates::feedUpdate(const MTPUpdate &update) {
 | 
			
		|||
		const auto &d = update.c_updatePendingJoinRequests();
 | 
			
		||||
		if (const auto peer = session().data().peerLoaded(peerFromMTP(d.vpeer()))) {
 | 
			
		||||
			const auto count = d.vrequests_pending().v;
 | 
			
		||||
			const auto &requesters = d.vrecent_requesters().v;
 | 
			
		||||
			if (const auto chat = peer->asChat()) {
 | 
			
		||||
				chat->setPendingRequestsCount(count);
 | 
			
		||||
				chat->setPendingRequestsCount(count, requesters);
 | 
			
		||||
			} else if (const auto channel = peer->asChannel()) {
 | 
			
		||||
				channel->setPendingRequestsCount(count);
 | 
			
		||||
				channel->setPendingRequestsCount(count, requesters);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	} break;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -195,9 +195,23 @@ void ChannelData::setKickedCount(int newKickedCount) {
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ChannelData::setPendingRequestsCount(int count) {
 | 
			
		||||
	if (_pendingRequestsCount != count) {
 | 
			
		||||
void ChannelData::setPendingRequestsCount(
 | 
			
		||||
		int count,
 | 
			
		||||
		const QVector<MTPlong> &recentRequesters) {
 | 
			
		||||
	setPendingRequestsCount(count, ranges::views::all(
 | 
			
		||||
		recentRequesters
 | 
			
		||||
	) | ranges::views::transform([&](const MTPlong &value) {
 | 
			
		||||
		return UserId(value);
 | 
			
		||||
	}) | ranges::to_vector);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ChannelData::setPendingRequestsCount(
 | 
			
		||||
		int count,
 | 
			
		||||
		std::vector<UserId> recentRequesters) {
 | 
			
		||||
	if (_pendingRequestsCount != count
 | 
			
		||||
		|| _recentRequesters != recentRequesters) {
 | 
			
		||||
		_pendingRequestsCount = count;
 | 
			
		||||
		_recentRequesters = std::move(recentRequesters);
 | 
			
		||||
		session().changes().peerUpdated(this, UpdateFlag::PendingRequests);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -550,7 +564,7 @@ void ChannelData::setAdminRights(ChatAdminRights rights) {
 | 
			
		|||
	}
 | 
			
		||||
	_adminRights.set(rights);
 | 
			
		||||
	if (!canHaveInviteLink()) {
 | 
			
		||||
		setPendingRequestsCount(0);
 | 
			
		||||
		setPendingRequestsCount(0, std::vector<UserId>{});
 | 
			
		||||
	}
 | 
			
		||||
	if (isMegagroup()) {
 | 
			
		||||
		const auto self = session().user();
 | 
			
		||||
| 
						 | 
				
			
			@ -885,7 +899,8 @@ void ApplyChannelUpdate(
 | 
			
		|||
	channel->setThemeEmoji(qs(update.vtheme_emoticon().value_or_empty()));
 | 
			
		||||
	channel->fullUpdated();
 | 
			
		||||
	channel->setPendingRequestsCount(
 | 
			
		||||
		update.vrequests_pending().value_or_empty());
 | 
			
		||||
		update.vrequests_pending().value_or_empty(),
 | 
			
		||||
		update.vrecent_requesters().value_or_empty());
 | 
			
		||||
 | 
			
		||||
	if (canViewAdmins != channel->canViewAdmins()
 | 
			
		||||
		|| canViewMembers != channel->canViewMembers()) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -180,7 +180,15 @@ public:
 | 
			
		|||
	[[nodiscard]] int pendingRequestsCount() const {
 | 
			
		||||
		return _pendingRequestsCount;
 | 
			
		||||
	}
 | 
			
		||||
	void setPendingRequestsCount(int count);
 | 
			
		||||
	[[nodiscard]] const std::vector<UserId> &recentRequesters() const {
 | 
			
		||||
		return _recentRequesters;
 | 
			
		||||
	}
 | 
			
		||||
	void setPendingRequestsCount(
 | 
			
		||||
		int count,
 | 
			
		||||
		const QVector<MTPlong> &recentRequesters);
 | 
			
		||||
	void setPendingRequestsCount(
 | 
			
		||||
		int count,
 | 
			
		||||
		std::vector<UserId> recentRequesters);
 | 
			
		||||
 | 
			
		||||
	[[nodiscard]] bool haveLeft() const {
 | 
			
		||||
		return flags() & Flag::Left;
 | 
			
		||||
| 
						 | 
				
			
			@ -433,6 +441,7 @@ private:
 | 
			
		|||
	int _restrictedCount = 0;
 | 
			
		||||
	int _kickedCount = 0;
 | 
			
		||||
	int _pendingRequestsCount = 0;
 | 
			
		||||
	std::vector<UserId> _recentRequesters;
 | 
			
		||||
	MsgId _availableMinId = 0;
 | 
			
		||||
 | 
			
		||||
	RestrictionFlags _defaultRestrictions;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -147,7 +147,7 @@ void ChatData::setAdminRights(ChatAdminRights rights) {
 | 
			
		|||
	}
 | 
			
		||||
	_adminRights.set(rights);
 | 
			
		||||
	if (!canHaveInviteLink()) {
 | 
			
		||||
		setPendingRequestsCount(0);
 | 
			
		||||
		setPendingRequestsCount(0, std::vector<UserId>{});
 | 
			
		||||
	}
 | 
			
		||||
	session().changes().peerUpdated(
 | 
			
		||||
		this,
 | 
			
		||||
| 
						 | 
				
			
			@ -261,9 +261,23 @@ void ChatData::setBotCommands(
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ChatData::setPendingRequestsCount(int count) {
 | 
			
		||||
	if (_pendingRequestsCount != count) {
 | 
			
		||||
void ChatData::setPendingRequestsCount(
 | 
			
		||||
		int count,
 | 
			
		||||
		const QVector<MTPlong> &recentRequesters) {
 | 
			
		||||
	setPendingRequestsCount(count, ranges::views::all(
 | 
			
		||||
		recentRequesters
 | 
			
		||||
	) | ranges::views::transform([&](const MTPlong &value) {
 | 
			
		||||
		return UserId(value);
 | 
			
		||||
	}) | ranges::to_vector);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ChatData::setPendingRequestsCount(
 | 
			
		||||
		int count,
 | 
			
		||||
		std::vector<UserId> recentRequesters) {
 | 
			
		||||
	if (_pendingRequestsCount != count
 | 
			
		||||
		|| _recentRequesters != recentRequesters) {
 | 
			
		||||
		_pendingRequestsCount = count;
 | 
			
		||||
		_recentRequesters = std::move(recentRequesters);
 | 
			
		||||
		session().changes().peerUpdated(this, UpdateFlag::PendingRequests);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -442,7 +456,8 @@ void ApplyChatUpdate(not_null<ChatData*> chat, const MTPDchatFull &update) {
 | 
			
		|||
	chat->fullUpdated();
 | 
			
		||||
	chat->setAbout(qs(update.vabout()));
 | 
			
		||||
	chat->setPendingRequestsCount(
 | 
			
		||||
		update.vrequests_pending().value_or_empty());
 | 
			
		||||
		update.vrequests_pending().value_or_empty(),
 | 
			
		||||
		update.vrecent_requesters().value_or_empty());
 | 
			
		||||
 | 
			
		||||
	chat->session().api().applyNotifySettings(
 | 
			
		||||
		MTP_inputNotifyPeer(chat->input),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -167,7 +167,15 @@ public:
 | 
			
		|||
	[[nodiscard]] int pendingRequestsCount() const {
 | 
			
		||||
		return _pendingRequestsCount;
 | 
			
		||||
	}
 | 
			
		||||
	void setPendingRequestsCount(int count);
 | 
			
		||||
	[[nodiscard]] const std::vector<UserId> &recentRequesters() const {
 | 
			
		||||
		return _recentRequesters;
 | 
			
		||||
	}
 | 
			
		||||
	void setPendingRequestsCount(
 | 
			
		||||
		int count,
 | 
			
		||||
		const QVector<MTPlong> &recentRequesters);
 | 
			
		||||
	void setPendingRequestsCount(
 | 
			
		||||
		int count,
 | 
			
		||||
		std::vector<UserId> recentRequesters);
 | 
			
		||||
 | 
			
		||||
	// Still public data members.
 | 
			
		||||
	const MTPlong inputChat;
 | 
			
		||||
| 
						 | 
				
			
			@ -191,6 +199,7 @@ private:
 | 
			
		|||
	AdminRightFlags _adminRights;
 | 
			
		||||
	int _version = 0;
 | 
			
		||||
	int _pendingRequestsCount = 0;
 | 
			
		||||
	std::vector<UserId> _recentRequesters;
 | 
			
		||||
 | 
			
		||||
	std::unique_ptr<Data::GroupCall> _call;
 | 
			
		||||
	PeerId _callDefaultJoinAs = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue