diff --git a/Telegram/SourceFiles/api/api_updates.cpp b/Telegram/SourceFiles/api/api_updates.cpp index e0306a92aa..1a70668671 100644 --- a/Telegram/SourceFiles/api/api_updates.cpp +++ b/Telegram/SourceFiles/api/api_updates.cpp @@ -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; diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index 559769fb07..149a29570c 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -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); } } diff --git a/Telegram/SourceFiles/data/data_user.cpp b/Telegram/SourceFiles/data/data_user.cpp index 545d85c400..700c14d416 100644 --- a/Telegram/SourceFiles/data/data_user.cpp +++ b/Telegram/SourceFiles/data/data_user.cpp @@ -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),