Slightly simplified processing of received full peer info.
This commit is contained in:
parent
243b16398b
commit
7727cd734e
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue