Return some of getDifference on unknown peers.

This commit is contained in:
John Preston
2025-12-22 17:35:53 +04:00
parent 39bd52c1e2
commit fac241b87e
3 changed files with 27 additions and 1 deletions

View File

@@ -1419,6 +1419,12 @@ void Updates::applyUpdates(
case mtpc_updateShortMessage: {
auto &d = updates.c_updateShortMessage();
if (!session().data().userLoaded(d.vuser_id())) {
MTP_LOG(0, ("getDifference "
"{ good - getting user for updateShortMessage }%1"
).arg(_session->mtp().isTestMode() ? " TESTMODE" : ""));
return getDifference();
}
_session->data().fillMessagePeers(d);
if (updateAndApply(d.vpts().v, d.vpts_count().v, updates)) {
// Update date as well.
@@ -1428,6 +1434,13 @@ void Updates::applyUpdates(
case mtpc_updateShortChatMessage: {
auto &d = updates.c_updateShortChatMessage();
const auto chat = session().data().chatLoaded(d.vchat_id());
if (!chat) {
MTP_LOG(0, ("getDifference "
"{ good - getting chat for updateShortChatMessage }%1"
).arg(_session->mtp().isTestMode() ? " TESTMODE" : ""));
return getDifference();
}
_session->data().fillMessagePeers(d);
if (updateAndApply(d.vpts().v, d.vpts_count().v, updates)) {
// Update date as well.
@@ -1485,6 +1498,16 @@ void Updates::feedUpdate(const MTPUpdate &update) {
// New messages.
case mtpc_updateNewMessage: {
auto &d = update.c_updateNewMessage();
if (!requestingDifference()) {
const auto peerId = PeerFromMessage(d.vmessage());
const auto peer = session().data().peerLoaded(peerId);
if (peerId && !peer) {
MTP_LOG(0, ("getDifference "
"{ good - getting peer for updateNewMessage }%1"
).arg(_session->mtp().isTestMode() ? " TESTMODE" : ""));
return getDifference();
}
}
updateAndApply(d.vpts().v, d.vpts_count().v, update);
} break;

View File

@@ -5339,7 +5339,7 @@ void Session::clearLocalStorage() {
}
void Session::fillMessagePeer(FullMsgId fullId, PeerId peerId) {
if (!peerLoaded(peerId)) {
if (!peerLoaded(peerId) && fullId.peer != peerId) {
_messagesWithPeer[peerId].push_back(fullId);
}
}

View File

@@ -321,6 +321,9 @@ void UserData::setPersonalChannel(ChannelId channelId, MsgId messageId) {
MTPInputUser UserData::inputUser() const {
const auto item = isLoaded() ? nullptr : owner().messageWithPeer(id);
if (item) {
const auto peer = item->history()->peer;
Assert(peer.get() != this);
return MTP_inputUserFromMessage(
item->history()->peer->input(),
MTP_int(item->id.bare),