void ApiWrap::gotWebPages(const MTPmessages_Messages &msgs, mtpRequestId req) { const QVector<MTPMessage> *v = 0; switch (msgs.type()) { case mtpc_messages_messages: App::feedUsers(msgs.c_messages_messages().vusers); App::feedChats(msgs.c_messages_messages().vchats); v = &msgs.c_messages_messages().vmessages.c_vector().v; break; case mtpc_messages_messagesSlice: App::feedUsers(msgs.c_messages_messagesSlice().vusers); App::feedChats(msgs.c_messages_messagesSlice().vchats); v = &msgs.c_messages_messagesSlice().vmessages.c_vector().v; break; } QMap<int32, int32> msgsIds; // copied from feedMsgs for (int32 i = 0, l = v->size(); i < l; ++i) { const MTPMessage &msg(v->at(i)); switch (msg.type()) { case mtpc_message: msgsIds.insert(msg.c_message().vid.v, i); break; case mtpc_messageEmpty: msgsIds.insert(msg.c_messageEmpty().vid.v, i); break; case mtpc_messageService: msgsIds.insert(msg.c_messageService().vid.v, i); break; } } MainWidget *m = App::main(); for (QMap<int32, int32>::const_iterator i = msgsIds.cbegin(), e = msgsIds.cend(); i != e; ++i) { HistoryItem *item = App::histories().addToBack(v->at(*i), -1); if (item) { item->initDimensions(); if (m) m->itemResized(item); } } const WebPageItems &items(App::webPageItems()); for (WebPagesPending::iterator i = _webPagesPending.begin(); i != _webPagesPending.cend();) { if (i.value() == req) { if (i.key()->pendingTill > 0) { i.key()->pendingTill = -1; WebPageItems::const_iterator j = items.constFind(i.key()); if (j != items.cend()) { for (HistoryItemsMap::const_iterator k = j.value().cbegin(), e = j.value().cend(); k != e; ++k) { k.key()->initDimensions(); if (m) m->itemResized(k.key()); } } } i = _webPagesPending.erase(i); } else { ++i; } } }
void ApiWrap::gotWebPages(ChannelData *channel, const MTPmessages_Messages &msgs, mtpRequestId req) { const QVector<MTPMessage> *v = 0; switch (msgs.type()) { case mtpc_messages_messages: { const MTPDmessages_messages &d(msgs.c_messages_messages()); App::feedUsers(d.vusers); App::feedChats(d.vchats); v = &d.vmessages.c_vector().v; } break; case mtpc_messages_messagesSlice: { const MTPDmessages_messagesSlice &d(msgs.c_messages_messagesSlice()); App::feedUsers(d.vusers); App::feedChats(d.vchats); v = &d.vmessages.c_vector().v; } break; case mtpc_messages_channelMessages: { const MTPDmessages_channelMessages &d(msgs.c_messages_channelMessages()); if (channel) { channel->ptsReceived(d.vpts.v); } else { LOG(("API Error: received messages.channelMessages when no channel was passed! (ApiWrap::gotWebPages)")); } if (d.has_collapsed()) { // should not be returned LOG(("API Error: channels.getMessages and messages.getMessages should not return collapsed groups! (ApiWrap::gotWebPages)")); } App::feedUsers(d.vusers); App::feedChats(d.vchats); v = &d.vmessages.c_vector().v; } break; } if (!v) return; QMap<uint64, int32> msgsIds; // copied from feedMsgs for (int32 i = 0, l = v->size(); i < l; ++i) { const MTPMessage &msg(v->at(i)); switch (msg.type()) { case mtpc_message: msgsIds.insert((uint64(uint32(msg.c_message().vid.v)) << 32) | uint64(i), i); break; case mtpc_messageEmpty: msgsIds.insert((uint64(uint32(msg.c_messageEmpty().vid.v)) << 32) | uint64(i), i); break; case mtpc_messageService: msgsIds.insert((uint64(uint32(msg.c_messageService().vid.v)) << 32) | uint64(i), i); break; } } for (QMap<uint64, int32>::const_iterator i = msgsIds.cbegin(), e = msgsIds.cend(); i != e; ++i) { HistoryItem *item = App::histories().addNewMessage(v->at(i.value()), NewMessageExisting); if (item) { item->initDimensions(); Notify::historyItemResized(item); } } const WebPageItems &items(App::webPageItems()); for (WebPagesPending::iterator i = _webPagesPending.begin(); i != _webPagesPending.cend();) { if (i.value() == req) { if (i.key()->pendingTill > 0) { i.key()->pendingTill = -1; WebPageItems::const_iterator j = items.constFind(i.key()); if (j != items.cend()) { for (HistoryItemsMap::const_iterator k = j.value().cbegin(), e = j.value().cend(); k != e; ++k) { k.key()->initDimensions(); Notify::historyItemResized(k.key()); } } } i = _webPagesPending.erase(i); } else { ++i; } } }