mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2026-07-25 15:04:57 +00:00
Check all peers load status in short updates.
This commit is contained in:
@@ -91,6 +91,90 @@ enum class DataIsLoadedResult {
|
||||
Ok = 3,
|
||||
};
|
||||
|
||||
[[nodiscard]] bool PeerDataIsLoaded(
|
||||
not_null<Data::Session*> owner,
|
||||
PeerId peerId) {
|
||||
return !peerId || owner->peerLoaded(peerId);
|
||||
}
|
||||
|
||||
[[nodiscard]] bool MentionUsersDataIsLoaded(
|
||||
not_null<Data::Session*> owner,
|
||||
const MTPVector<MTPMessageEntity> &entities) {
|
||||
for (const auto &entity : entities.v) {
|
||||
auto loaded = true;
|
||||
entity.match([&](const MTPDmessageEntityMentionName &data) {
|
||||
loaded = owner->userLoaded(data.vuser_id());
|
||||
}, [&](const MTPDinputMessageEntityMentionName &data) {
|
||||
data.vuser_id().match([&](const MTPDinputUser &data) {
|
||||
loaded = owner->userLoaded(data.vuser_id());
|
||||
}, [](const auto &) {
|
||||
});
|
||||
}, [](const auto &) {
|
||||
});
|
||||
if (!loaded) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
[[nodiscard]] bool ForwardedInfoDataIsLoaded(
|
||||
not_null<Data::Session*> owner,
|
||||
const MTPMessageFwdHeader &header) {
|
||||
return header.match([&](const MTPDmessageFwdHeader &data) {
|
||||
return (!data.vfrom_id()
|
||||
|| PeerDataIsLoaded(owner, peerFromMTP(*data.vfrom_id())))
|
||||
&& (!data.vsaved_from_peer()
|
||||
|| PeerDataIsLoaded(owner, peerFromMTP(*data.vsaved_from_peer())))
|
||||
&& (!data.vsaved_from_id()
|
||||
|| PeerDataIsLoaded(owner, peerFromMTP(*data.vsaved_from_id())));
|
||||
});
|
||||
}
|
||||
|
||||
[[nodiscard]] bool ReplyDataIsLoaded(
|
||||
not_null<Data::Session*> owner,
|
||||
const MTPMessageReplyHeader &header) {
|
||||
return header.match([&](const MTPDmessageReplyHeader &data) {
|
||||
return (!data.vreply_to_peer_id()
|
||||
|| PeerDataIsLoaded(owner, peerFromMTP(*data.vreply_to_peer_id())))
|
||||
&& (!data.vreply_from()
|
||||
|| ForwardedInfoDataIsLoaded(owner, *data.vreply_from()))
|
||||
&& (!data.vquote_entities()
|
||||
|| MentionUsersDataIsLoaded(owner, *data.vquote_entities()));
|
||||
}, [&](const MTPDmessageReplyStoryHeader &data) {
|
||||
return PeerDataIsLoaded(owner, peerFromMTP(data.vpeer()));
|
||||
});
|
||||
}
|
||||
|
||||
[[nodiscard]] bool DataIsLoaded(
|
||||
not_null<Data::Session*> owner,
|
||||
const MTPDupdateShortMessage &data) {
|
||||
return owner->userLoaded(data.vuser_id())
|
||||
&& (!data.vfwd_from()
|
||||
|| ForwardedInfoDataIsLoaded(owner, *data.vfwd_from()))
|
||||
&& (!data.vvia_bot_id()
|
||||
|| owner->userLoaded(*data.vvia_bot_id()))
|
||||
&& (!data.vreply_to()
|
||||
|| ReplyDataIsLoaded(owner, *data.vreply_to()))
|
||||
&& (!data.ventities()
|
||||
|| MentionUsersDataIsLoaded(owner, *data.ventities()));
|
||||
}
|
||||
|
||||
[[nodiscard]] bool DataIsLoaded(
|
||||
not_null<Data::Session*> owner,
|
||||
const MTPDupdateShortChatMessage &data) {
|
||||
return owner->chatLoaded(data.vchat_id())
|
||||
&& owner->userLoaded(data.vfrom_id())
|
||||
&& (!data.vfwd_from()
|
||||
|| ForwardedInfoDataIsLoaded(owner, *data.vfwd_from()))
|
||||
&& (!data.vvia_bot_id()
|
||||
|| owner->userLoaded(*data.vvia_bot_id()))
|
||||
&& (!data.vreply_to()
|
||||
|| ReplyDataIsLoaded(owner, *data.vreply_to()))
|
||||
&& (!data.ventities()
|
||||
|| MentionUsersDataIsLoaded(owner, *data.ventities()));
|
||||
}
|
||||
|
||||
void ProcessScheduledMessageWithElapsedTime(
|
||||
not_null<Main::Session*> session,
|
||||
bool needToAdd,
|
||||
@@ -1424,9 +1508,9 @@ void Updates::applyUpdates(
|
||||
|
||||
case mtpc_updateShortMessage: {
|
||||
auto &d = updates.c_updateShortMessage();
|
||||
if (!session().data().userLoaded(d.vuser_id())) {
|
||||
if (!DataIsLoaded(&_session->data(), d)) {
|
||||
MTP_LOG(0, ("getDifference "
|
||||
"{ good - getting user for updateShortMessage }%1"
|
||||
"{ good - after not all data loaded in updateShortMessage }%1"
|
||||
).arg(_session->mtp().isTestMode() ? " TESTMODE" : ""));
|
||||
return getDifference();
|
||||
}
|
||||
@@ -1439,10 +1523,9 @@ void Updates::applyUpdates(
|
||||
|
||||
case mtpc_updateShortChatMessage: {
|
||||
auto &d = updates.c_updateShortChatMessage();
|
||||
const auto chat = session().data().chatLoaded(d.vchat_id());
|
||||
if (!chat) {
|
||||
if (!DataIsLoaded(&_session->data(), d)) {
|
||||
MTP_LOG(0, ("getDifference "
|
||||
"{ good - getting chat for updateShortChatMessage }%1"
|
||||
"{ good - after not all data loaded in updateShortChatMessage }%1"
|
||||
).arg(_session->mtp().isTestMode() ? " TESTMODE" : ""));
|
||||
return getDifference();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user