Slightly simplified processing of received full peer info.

This commit is contained in:
23rd 2022-05-16 09:21:40 +03:00 committed by John Preston
parent 243b16398b
commit 7727cd734e
2 changed files with 16 additions and 34 deletions

View File

@ -998,46 +998,41 @@ void ApiWrap::requestFullPeer(not_null<PeerData*> peer) {
} }
return request(MTPusers_GetFullUser( return request(MTPusers_GetFullUser(
user->inputUser user->inputUser
)).done([=](const MTPusers_UserFull &result, mtpRequestId requestId) { )).done([=](const MTPusers_UserFull &result) {
result.match([&](const MTPDusers_userFull &data) { result.match([&](const MTPDusers_userFull &data) {
_session->data().processUsers(data.vusers()); _session->data().processUsers(data.vusers());
_session->data().processChats(data.vchats()); _session->data().processChats(data.vchats());
}); });
gotUserFull(user, result, requestId); gotUserFull(user, result);
}).fail(failHandler).send(); }).fail(failHandler).send();
} else if (const auto chat = peer->asChat()) { } else if (const auto chat = peer->asChat()) {
return request(MTPmessages_GetFullChat( return request(MTPmessages_GetFullChat(
chat->inputChat chat->inputChat
)).done([=]( )).done([=](const MTPmessages_ChatFull &result) {
const MTPmessages_ChatFull &result, gotChatFull(peer, result);
mtpRequestId requestId) {
gotChatFull(peer, result, requestId);
}).fail(failHandler).send(); }).fail(failHandler).send();
} else if (const auto channel = peer->asChannel()) { } else if (const auto channel = peer->asChannel()) {
return request(MTPchannels_GetFullChannel( return request(MTPchannels_GetFullChannel(
channel->inputChannel channel->inputChannel
)).done([=]( )).done([=](const MTPmessages_ChatFull &result) {
const MTPmessages_ChatFull &result, gotChatFull(peer, result);
mtpRequestId requestId) {
gotChatFull(peer, result, requestId);
migrateDone(channel, channel); migrateDone(channel, channel);
}).fail(failHandler).send(); }).fail(failHandler).send();
} }
Unexpected("Peer type in requestFullPeer."); Unexpected("Peer type in requestFullPeer.");
}(); }();
_fullPeerRequests.insert(peer, requestId); _fullPeerRequests.emplace(peer, requestId);
} }
void ApiWrap::processFullPeer( void ApiWrap::processFullPeer(
not_null<PeerData*> peer, not_null<PeerData*> peer,
const MTPmessages_ChatFull &result) { const MTPmessages_ChatFull &result) {
gotChatFull(peer, result, mtpRequestId(0)); gotChatFull(peer, result);
} }
void ApiWrap::gotChatFull( void ApiWrap::gotChatFull(
not_null<PeerData*> peer, not_null<PeerData*> peer,
const MTPmessages_ChatFull &result, const MTPmessages_ChatFull &result) {
mtpRequestId req) {
const auto &d = result.c_messages_chatFull(); const auto &d = result.c_messages_chatFull();
_session->data().applyMaximumChatVersions(d.vchats()); _session->data().applyMaximumChatVersions(d.vchats());
@ -1060,12 +1055,7 @@ void ApiWrap::gotChatFull(
} }
}); });
if (req) { _fullPeerRequests.remove(peer);
const auto i = _fullPeerRequests.find(peer);
if (i != _fullPeerRequests.cend() && i.value() == req) {
_fullPeerRequests.erase(i);
}
}
_session->changes().peerUpdated( _session->changes().peerUpdated(
peer, peer,
Data::PeerUpdate::Flag::FullInfo); Data::PeerUpdate::Flag::FullInfo);
@ -1073,8 +1063,7 @@ void ApiWrap::gotChatFull(
void ApiWrap::gotUserFull( void ApiWrap::gotUserFull(
not_null<UserData*> user, not_null<UserData*> user,
const MTPusers_UserFull &result, const MTPusers_UserFull &result) {
mtpRequestId req) {
result.match([&](const MTPDusers_userFull &data) { result.match([&](const MTPDusers_userFull &data) {
data.vfull_user().match([&](const MTPDuserFull &fields) { data.vfull_user().match([&](const MTPDuserFull &fields) {
if (user == _session->user() && !_session->validateSelf(fields.vid().v)) { if (user == _session->user() && !_session->validateSelf(fields.vid().v)) {
@ -1087,12 +1076,7 @@ void ApiWrap::gotUserFull(
Data::ApplyUserUpdate(user, fields); Data::ApplyUserUpdate(user, fields);
}); });
}); });
if (req) { _fullPeerRequests.remove(user);
const auto i = _fullPeerRequests.find(user);
if (i != _fullPeerRequests.cend() && i.value() == req) {
_fullPeerRequests.erase(i);
}
}
_session->changes().peerUpdated( _session->changes().peerUpdated(
user, user,
Data::PeerUpdate::Flag::FullInfo); Data::PeerUpdate::Flag::FullInfo);
@ -1133,7 +1117,7 @@ void ApiWrap::requestPeer(not_null<PeerData*> peer) {
} }
Unexpected("Peer type in requestPeer."); Unexpected("Peer type in requestPeer.");
}(); }();
_peerRequests.insert(peer, requestId); _peerRequests.emplace(peer, requestId);
} }
void ApiWrap::requestPeerSettings(not_null<PeerData*> peer) { void ApiWrap::requestPeerSettings(not_null<PeerData*> peer) {

View File

@ -420,12 +420,10 @@ private:
void gotChatFull( void gotChatFull(
not_null<PeerData*> peer, not_null<PeerData*> peer,
const MTPmessages_ChatFull &result, const MTPmessages_ChatFull &result);
mtpRequestId req);
void gotUserFull( void gotUserFull(
not_null<UserData*> user, not_null<UserData*> user,
const MTPusers_UserFull &result, const MTPusers_UserFull &result);
mtpRequestId req);
void resolveWebPages(); void resolveWebPages();
void gotWebPages( void gotWebPages(
ChannelData *channel, ChannelData *channel,
@ -522,7 +520,7 @@ private:
MessageDataRequests> _channelMessageDataRequests; MessageDataRequests> _channelMessageDataRequests;
SingleQueuedInvokation _messageDataResolveDelayed; SingleQueuedInvokation _messageDataResolveDelayed;
using PeerRequests = QMap<PeerData*, mtpRequestId>; using PeerRequests = base::flat_map<PeerData*, mtpRequestId>;
PeerRequests _fullPeerRequests; PeerRequests _fullPeerRequests;
PeerRequests _peerRequests; PeerRequests _peerRequests;
base::flat_set<not_null<PeerData*>> _requestedPeerSettings; base::flat_set<not_null<PeerData*>> _requestedPeerSettings;