fixed bad resizing calls, 0.9.6 stable version

This commit is contained in:
John Preston 2015-10-15 02:15:28 +02:00
parent 4857135e42
commit 1c28d59ed2
3 changed files with 38 additions and 16 deletions

View File

@ -747,7 +747,7 @@ namespace App {
} }
} }
void checkEntitiesAndViewsUpdate(const MTPDmessage &m) { bool checkEntitiesAndViewsUpdate(const MTPDmessage &m) {
PeerId peerId = peerFromMTP(m.vto_id); PeerId peerId = peerFromMTP(m.vto_id);
if (m.has_from_id() && peerToUser(peerId) == MTP::authedId()) { if (m.has_from_id() && peerToUser(peerId) == MTP::authedId()) {
peerId = peerFromUser(m.vfrom_id); peerId = peerFromUser(m.vfrom_id);
@ -766,7 +766,10 @@ namespace App {
existing->updateMedia(m.has_media() ? (&m.vmedia) : 0, true); existing->updateMedia(m.has_media() ? (&m.vmedia) : 0, true);
existing->setViewsCount(m.has_views() ? m.vviews.v : -1); existing->setViewsCount(m.has_views() ? m.vviews.v : -1);
return !existing->detached();
} }
return false;
} }
void feedMsgs(const MTPVector<MTPMessage> &msgs, NewMessageType type) { void feedMsgs(const MTPVector<MTPMessage> &msgs, NewMessageType type) {
@ -777,9 +780,15 @@ namespace App {
switch (msg.type()) { switch (msg.type()) {
case mtpc_message: { case mtpc_message: {
const MTPDmessage &d(msg.c_message()); const MTPDmessage &d(msg.c_message());
msgsIds.insert((uint64(uint32(d.vid.v)) << 32) | uint64(i), i); bool needToAdd = true;
if (type == NewMessageUnread) { // new message, index my forwarded messages to links overview if (type == NewMessageUnread) { // new message, index my forwarded messages to links overview
checkEntitiesAndViewsUpdate(d); if (checkEntitiesAndViewsUpdate(d)) { // already in blocks
LOG(("Skipping message, because it is already in blocks!"));
needToAdd = false;
}
}
if (needToAdd) {
msgsIds.insert((uint64(uint32(d.vid.v)) << 32) | uint64(i), i);
} }
} break; } break;
case mtpc_messageEmpty: msgsIds.insert((uint64(uint32(msg.c_messageEmpty().vid.v)) << 32) | uint64(i), i); break; case mtpc_messageEmpty: msgsIds.insert((uint64(uint32(msg.c_messageEmpty().vid.v)) << 32) | uint64(i), i); break;

View File

@ -105,7 +105,7 @@ namespace App {
void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos, bool emitPeerUpdated = true); void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos, bool emitPeerUpdated = true);
void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d, bool emitPeerUpdated = true); void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d, bool emitPeerUpdated = true);
void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d, bool emitPeerUpdated = true); void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d, bool emitPeerUpdated = true);
void checkEntitiesAndViewsUpdate(const MTPDmessage &m); bool checkEntitiesAndViewsUpdate(const MTPDmessage &m); // returns true if item found and it is not detached
void feedMsgs(const MTPVector<MTPMessage> &msgs, NewMessageType type); void feedMsgs(const MTPVector<MTPMessage> &msgs, NewMessageType type);
void feedInboxRead(const PeerId &peer, MsgId upTo); void feedInboxRead(const PeerId &peer, MsgId upTo);
void feedOutboxRead(const PeerId &peer, MsgId upTo); void feedOutboxRead(const PeerId &peer, MsgId upTo);

View File

@ -3091,8 +3091,11 @@ void MainWidget::gotChannelDifference(ChannelData *channel, const MTPupdates_Cha
switch (msg.type()) { switch (msg.type()) {
case mtpc_message: { case mtpc_message: {
const MTPDmessage &d(msg.c_message()); const MTPDmessage &d(msg.c_message());
msgsIds.insert((uint64(uint32(d.vid.v)) << 32) | uint64(i), i + 1); if (App::checkEntitiesAndViewsUpdate(d)) { // new message, index my forwarded messages to links overview, already in blocks
App::checkEntitiesAndViewsUpdate(d); // new message, index my forwarded messages to links overview LOG(("Skipping message, because it is already in blocks!"));
} else {
msgsIds.insert((uint64(uint32(d.vid.v)) << 32) | uint64(i), i + 1);
}
} break; } break;
case mtpc_messageEmpty: msgsIds.insert((uint64(uint32(msg.c_messageEmpty().vid.v)) << 32) | uint64(i), i + 1); break; case mtpc_messageEmpty: msgsIds.insert((uint64(uint32(msg.c_messageEmpty().vid.v)) << 32) | uint64(i), i + 1); break;
case mtpc_messageService: msgsIds.insert((uint64(uint32(msg.c_messageService().vid.v)) << 32) | uint64(i), i + 1); break; case mtpc_messageService: msgsIds.insert((uint64(uint32(msg.c_messageService().vid.v)) << 32) | uint64(i), i + 1); break;
@ -4202,14 +4205,19 @@ void MainWidget::feedUpdate(const MTPUpdate &update) {
} }
// update before applying skipped // update before applying skipped
bool needToAdd = true;
if (d.vmessage.type() == mtpc_message) { // index forwarded messages to links overview if (d.vmessage.type() == mtpc_message) { // index forwarded messages to links overview
App::checkEntitiesAndViewsUpdate(d.vmessage.c_message()); if (App::checkEntitiesAndViewsUpdate(d.vmessage.c_message())) { // already in blocks
LOG(("Skipping message, because it is already in blocks!"));
needToAdd = false;
}
} }
HistoryItem *item = App::histories().addNewMessage(d.vmessage, NewMessageUnread); if (needToAdd) {
if (item) { HistoryItem *item = App::histories().addNewMessage(d.vmessage, NewMessageUnread);
history.peerMessagesUpdated(item->history()->peer->id); if (item) {
history.peerMessagesUpdated(item->history()->peer->id);
}
} }
ptsApplySkippedUpdates(); ptsApplySkippedUpdates();
} break; } break;
@ -4562,14 +4570,19 @@ void MainWidget::feedUpdate(const MTPUpdate &update) {
} }
// update before applying skipped // update before applying skipped
bool needToAdd = true;
if (d.vmessage.type() == mtpc_message) { // index forwarded messages to links overview if (d.vmessage.type() == mtpc_message) { // index forwarded messages to links overview
App::checkEntitiesAndViewsUpdate(d.vmessage.c_message()); if (App::checkEntitiesAndViewsUpdate(d.vmessage.c_message())) { // already in blocks
LOG(("Skipping message, because it is already in blocks!"));
needToAdd = false;
}
} }
HistoryItem *item = App::histories().addNewMessage(d.vmessage, NewMessageUnread); if (needToAdd) {
if (item) { HistoryItem *item = App::histories().addNewMessage(d.vmessage, NewMessageUnread);
history.peerMessagesUpdated(item->history()->peer->id); if (item) {
history.peerMessagesUpdated(item->history()->peer->id);
}
} }
if (channel && !_handlingChannelDifference) { if (channel && !_handlingChannelDifference) {
channel->ptsApplySkippedUpdates(); channel->ptsApplySkippedUpdates();
} }