From f2465eba73400199bd1f02d37dca93e36bd28345 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 10 Mar 2017 22:46:28 +0300 Subject: [PATCH] Make MTPstring and MTPvector value types. Also move MTPstring implementation to QByteArray. --- Telegram/SourceFiles/apiwrap.cpp | 52 ++++--- Telegram/SourceFiles/app.cpp | 20 +-- Telegram/SourceFiles/boxes/addcontactbox.cpp | 8 +- Telegram/SourceFiles/boxes/backgroundbox.cpp | 8 +- Telegram/SourceFiles/boxes/confirmbox.cpp | 4 +- Telegram/SourceFiles/boxes/contactsbox.cpp | 6 +- Telegram/SourceFiles/boxes/members_box.cpp | 4 +- Telegram/SourceFiles/boxes/send_files_box.cpp | 2 +- Telegram/SourceFiles/boxes/sessionsbox.cpp | 2 +- Telegram/SourceFiles/boxes/sharebox.cpp | 2 +- Telegram/SourceFiles/boxes/stickers_box.cpp | 2 +- Telegram/SourceFiles/boxes/stickersetbox.cpp | 6 +- Telegram/SourceFiles/data/data_drafts.cpp | 2 +- Telegram/SourceFiles/dialogswidget.cpp | 28 ++-- Telegram/SourceFiles/history.cpp | 17 +-- Telegram/SourceFiles/history/history_item.cpp | 6 +- .../history/history_media_types.cpp | 6 +- .../SourceFiles/history/history_message.cpp | 6 +- Telegram/SourceFiles/historywidget.cpp | 25 ++-- .../inline_bots/inline_bot_result.cpp | 2 +- .../inline_bots/inline_bot_send_data.cpp | 4 +- Telegram/SourceFiles/intro/introcode.cpp | 8 +- Telegram/SourceFiles/intro/introphone.cpp | 2 +- Telegram/SourceFiles/intro/introsignup.cpp | 2 +- Telegram/SourceFiles/intro/introwidget.cpp | 2 +- Telegram/SourceFiles/intro/introwidget.h | 2 +- Telegram/SourceFiles/mainwidget.cpp | 76 +++++------ Telegram/SourceFiles/mediaview.cpp | 10 +- Telegram/SourceFiles/mtproto/connection.cpp | 76 ++++++----- Telegram/SourceFiles/mtproto/connection.h | 2 +- Telegram/SourceFiles/mtproto/core_types.cpp | 8 +- Telegram/SourceFiles/mtproto/core_types.h | 129 ++++++------------ Telegram/SourceFiles/mtproto/dc_options.cpp | 6 +- Telegram/SourceFiles/mtproto/mtp_instance.cpp | 4 +- Telegram/SourceFiles/overviewwidget.cpp | 14 +- .../profile/profile_common_groups_section.cpp | 2 +- Telegram/SourceFiles/stickers/emoji_pan.cpp | 6 +- Telegram/SourceFiles/stickers/stickers.cpp | 2 +- .../SourceFiles/storage/file_download.cpp | 2 +- Telegram/SourceFiles/structs.cpp | 4 +- Telegram/SourceFiles/structs.h | 6 +- 41 files changed, 268 insertions(+), 307 deletions(-) diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 7bf8db354b..d726240603 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -175,9 +175,9 @@ void ApiWrap::processFullPeer(PeerData *peer, const MTPUserFull &result) { } void ApiWrap::gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result, mtpRequestId req) { - const auto &d(result.c_messages_chatFull()); - const auto &vc(d.vchats.c_vector().v); - bool badVersion = false; + auto &d = result.c_messages_chatFull(); + auto &vc = d.vchats.v; + auto badVersion = false; if (peer->isChat()) { badVersion = (!vc.isEmpty() && vc.at(0).type() == mtpc_chat && vc.at(0).c_chat().vversion.v < peer->asChat()->version); } else if (peer->isChannel()) { @@ -192,16 +192,15 @@ void ApiWrap::gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result, mt LOG(("MTP Error: bad type in gotChatFull for chat: %1").arg(d.vfull_chat.type())); return; } - const auto &f(d.vfull_chat.c_chatFull()); + auto &f = d.vfull_chat.c_chatFull(); App::feedParticipants(f.vparticipants, false, false); - const auto &v(f.vbot_info.c_vector().v); - for (QVector::const_iterator i = v.cbegin(), e = v.cend(); i < e; ++i) { - switch (i->type()) { + auto &v = f.vbot_info.v; + for_const (auto &item, v) { + switch (item.type()) { case mtpc_botInfo: { - const auto &b(i->c_botInfo()); - UserData *user = App::userLoaded(b.vuser_id.v); - if (user) { - user->setBotInfo(*i); + auto &b = item.c_botInfo(); + if (auto user = App::userLoaded(b.vuser_id.v)) { + user->setBotInfo(item); App::clearPeerUpdated(user); emit fullPeerUpdated(user); } @@ -267,14 +266,13 @@ void ApiWrap::gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result, mt App::main()->peerUpdated(cfrom); } } - auto &v(f.vbot_info.c_vector().v); - for (QVector::const_iterator i = v.cbegin(), e = v.cend(); i < e; ++i) { - switch (i->type()) { + auto &v = f.vbot_info.v; + for_const (auto &item, v) { + switch (item.type()) { case mtpc_botInfo: { - const auto &b(i->c_botInfo()); - UserData *user = App::userLoaded(b.vuser_id.v); - if (user) { - user->setBotInfo(*i); + auto &b = item.c_botInfo(); + if (auto user = App::userLoaded(b.vuser_id.v)) { + user->setBotInfo(item); App::clearPeerUpdated(user); emit fullPeerUpdated(user); } @@ -428,7 +426,7 @@ void ApiWrap::gotChat(PeerData *peer, const MTPmessages_Chats &result) { _peerRequests.remove(peer); if (auto chats = Api::getChatsFromMessagesChats(result)) { - auto &v = chats->c_vector().v; + auto &v = chats->v; bool badVersion = false; if (peer->isChat()) { badVersion = (!v.isEmpty() && v.at(0).type() == mtpc_chat && v.at(0).c_chat().vversion.v < peer->asChat()->version); @@ -501,8 +499,8 @@ void ApiWrap::lastParticipantsDone(ChannelData *peer, const MTPchannels_ChannelP peer->mgInfo->lastParticipantsStatus = MegagroupInfo::LastParticipantsUpToDate; } - const auto &d(result.c_channels_channelParticipants()); - const auto &v(d.vparticipants.c_vector().v); + auto &d = result.c_channels_channelParticipants(); + auto &v = d.vparticipants.v; App::feedUsers(d.vusers); bool added = false, needBotsInfos = false; int32 botStatus = peer->mgInfo->botStatus; @@ -1050,7 +1048,7 @@ void ApiWrap::gotStickerSet(uint64 setId, const MTPmessages_StickerSet &result) it->flags = s.vflags.v | clientFlags; it->flags &= ~MTPDstickerSet_ClientFlag::f_not_loaded; - const auto &d_docs(d.vdocuments.c_vector().v); + auto &d_docs = d.vdocuments.v; auto custom = sets.find(Stickers::CustomSetId); StickerPack pack; @@ -1090,14 +1088,14 @@ void ApiWrap::gotStickerSet(uint64 setId, const MTPmessages_StickerSet &result) } else { it->stickers = pack; it->emoji.clear(); - auto &v = d.vpacks.c_vector().v; + auto &v = d.vpacks.v; for (auto i = 0, l = v.size(); i != l; ++i) { if (v[i].type() != mtpc_stickerPack) continue; auto &pack = v[i].c_stickerPack(); if (auto emoji = Ui::Emoji::Find(qs(pack.vemoticon))) { emoji = emoji->original(); - auto &stickers = pack.vdocuments.c_vector().v; + auto &stickers = pack.vdocuments.v; StickerPack p; p.reserve(stickers.size()); @@ -1227,14 +1225,14 @@ void ApiWrap::gotWebPages(ChannelData *channel, const MTPmessages_Messages &msgs auto &d = msgs.c_messages_messages(); App::feedUsers(d.vusers); App::feedChats(d.vchats); - v = &d.vmessages.c_vector().v; + v = &d.vmessages.v; } break; case mtpc_messages_messagesSlice: { auto &d = msgs.c_messages_messagesSlice(); App::feedUsers(d.vusers); App::feedChats(d.vchats); - v = &d.vmessages.c_vector().v; + v = &d.vmessages.v; } break; case mtpc_messages_channelMessages: { @@ -1246,7 +1244,7 @@ void ApiWrap::gotWebPages(ChannelData *channel, const MTPmessages_Messages &msgs } App::feedUsers(d.vusers); App::feedChats(d.vchats); - v = &d.vmessages.c_vector().v; + v = &d.vmessages.v; } break; } diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index a78961b13a..1c8144695a 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -571,7 +571,7 @@ namespace { UserData *feedUsers(const MTPVector &users) { UserData *result = nullptr; - for_const (auto &user, users.c_vector().v) { + for_const (auto &user, users.v) { if (auto feededUser = feedUser(user)) { result = feededUser; } @@ -793,7 +793,7 @@ namespace { PeerData *feedChats(const MTPVector &chats) { PeerData *result = nullptr; - for_const (auto &chat, chats.c_vector().v) { + for_const (auto &chat, chats.v) { if (auto feededChat = feedChat(chat)) { result = feededChat; } @@ -817,7 +817,7 @@ namespace { auto canEdit = chat->canEdit(); if (!requestBotInfos || chat->version <= d.vversion.v) { // !requestBotInfos is true on getFullChat result chat->version = d.vversion.v; - const auto &v(d.vparticipants.c_vector().v); + auto &v = d.vparticipants.v; chat->count = v.size(); int32 pversion = chat->participants.isEmpty() ? 1 : (chat->participants.begin().value() + 1); chat->invitedByMe = ChatData::InvitedByMe(); @@ -1101,7 +1101,7 @@ namespace { } if (auto existing = App::histItemById(peerToChannel(peerId), m.vid.v)) { auto text = qs(m.vmessage); - auto entities = m.has_entities() ? entitiesFromMTP(m.ventities.c_vector().v) : EntitiesInText(); + auto entities = m.has_entities() ? entitiesFromMTP(m.ventities.v) : EntitiesInText(); existing->setText({ text, entities }); existing->updateMedia(m.has_media() ? (&m.vmedia) : nullptr); existing->updateReplyMarkup(m.has_reply_markup() ? (&m.vreply_markup) : nullptr); @@ -1192,7 +1192,7 @@ namespace { } void feedMsgs(const MTPVector &msgs, NewMessageType type) { - return feedMsgs(msgs.c_vector().v, type); + return feedMsgs(msgs.v, type); } ImagePtr image(const MTPPhotoSize &size) { @@ -1422,19 +1422,19 @@ namespace { } PhotoData *feedPhoto(const MTPDphoto &photo, PhotoData *convert) { - const auto &sizes(photo.vsizes.c_vector().v); + auto &sizes = photo.vsizes.v; const MTPPhotoSize *thumb = 0, *medium = 0, *full = 0; int32 thumbLevel = -1, mediumLevel = -1, fullLevel = -1; for (QVector::const_iterator i = sizes.cbegin(), e = sizes.cend(); i != e; ++i) { char size = 0; switch (i->type()) { case mtpc_photoSize: { - auto &s = i->c_photoSize().vtype.c_string().v; + auto &s = i->c_photoSize().vtype.v; if (s.size()) size = s[0]; } break; case mtpc_photoCachedSize: { - auto &s = i->c_photoCachedSize().vtype.c_string().v; + auto &s = i->c_photoCachedSize().vtype.v; if (s.size()) size = s[0]; } break; } @@ -1478,7 +1478,7 @@ namespace { switch (document.type()) { case mtpc_document: { auto &d = document.c_document(); - return App::documentSet(d.vid.v, 0, d.vaccess_hash.v, d.vversion.v, d.vdate.v, d.vattributes.c_vector().v, qs(d.vmime_type), ImagePtr(thumb, "JPG"), d.vdc_id.v, d.vsize.v, StorageImageLocation()); + return App::documentSet(d.vid.v, 0, d.vaccess_hash.v, d.vversion.v, d.vdate.v, d.vattributes.v, qs(d.vmime_type), ImagePtr(thumb, "JPG"), d.vdc_id.v, d.vsize.v, StorageImageLocation()); } break; case mtpc_documentEmpty: return App::document(document.c_documentEmpty().vid.v); } @@ -1498,7 +1498,7 @@ namespace { } DocumentData *feedDocument(const MTPDdocument &document, DocumentData *convert) { - return App::documentSet(document.vid.v, convert, document.vaccess_hash.v, document.vversion.v, document.vdate.v, document.vattributes.c_vector().v, qs(document.vmime_type), App::image(document.vthumb), document.vdc_id.v, document.vsize.v, App::imageLocation(document.vthumb)); + return App::documentSet(document.vid.v, convert, document.vaccess_hash.v, document.vversion.v, document.vdate.v, document.vattributes.v, qs(document.vmime_type), App::image(document.vthumb), document.vdc_id.v, document.vsize.v, App::imageLocation(document.vthumb)); } WebPageData *feedWebPage(const MTPDwebPage &webpage, WebPageData *convert) { diff --git a/Telegram/SourceFiles/boxes/addcontactbox.cpp b/Telegram/SourceFiles/boxes/addcontactbox.cpp index 0067c1531a..6abd3c3b5a 100644 --- a/Telegram/SourceFiles/boxes/addcontactbox.cpp +++ b/Telegram/SourceFiles/boxes/addcontactbox.cpp @@ -194,7 +194,7 @@ void AddContactBox::onImportDone(const MTPcontacts_ImportedContacts &res) { auto &d = res.c_contacts_importedContacts(); App::feedUsers(d.vusers); - auto &v = d.vimported.c_vector().v; + auto &v = d.vimported.v; UserData *user = nullptr; if (!v.isEmpty()) { const auto &c(v.front().c_importedContact()); @@ -352,8 +352,8 @@ void GroupInfoBox::creationDone(const MTPUpdates &updates) { const QVector *v = 0; switch (updates.type()) { - case mtpc_updates: v = &updates.c_updates().vchats.c_vector().v; break; - case mtpc_updatesCombined: v = &updates.c_updatesCombined().vchats.c_vector().v; break; + case mtpc_updates: v = &updates.c_updates().vchats.v; break; + case mtpc_updatesCombined: v = &updates.c_updatesCombined().vchats.v; break; default: LOG(("API Error: unexpected update cons %1 (GroupInfoBox::creationDone)").arg(updates.type())); break; } @@ -1218,7 +1218,7 @@ void RevokePublicLinkBox::paintChat(Painter &p, const ChatRow &row, bool selecte void RevokePublicLinkBox::getPublicDone(const MTPmessages_Chats &result) { if (auto chats = Api::getChatsFromMessagesChats(result)) { - for_const (auto &chat, chats->c_vector().v) { + for_const (auto &chat, chats->v) { if (auto peer = App::feedChat(chat)) { if (!peer->isChannel() || peer->userName().isEmpty()) continue; diff --git a/Telegram/SourceFiles/boxes/backgroundbox.cpp b/Telegram/SourceFiles/boxes/backgroundbox.cpp index 5a128ee7fd..60156f5abf 100644 --- a/Telegram/SourceFiles/boxes/backgroundbox.cpp +++ b/Telegram/SourceFiles/boxes/backgroundbox.cpp @@ -108,12 +108,12 @@ void BackgroundBox::Inner::gotWallpapers(const MTPVector &result) auto oldBackground = ImagePtr(qsl(":/gui/art/bg_initial.jpg")); wallpapers.push_back(App::WallPaper(Window::Theme::kInitialBackground, oldBackground, oldBackground)); - auto &v = result.c_vector().v; + auto &v = result.v; for_const (auto &w, v) { switch (w.type()) { case mtpc_wallPaper: { auto &d = w.c_wallPaper(); - auto &sizes = d.vsizes.c_vector().v; + auto &sizes = d.vsizes.v; const MTPPhotoSize *thumb = 0, *full = 0; int32 thumbLevel = -1, fullLevel = -1; for (QVector::const_iterator j = sizes.cbegin(), e = sizes.cend(); j != e; ++j) { @@ -121,14 +121,14 @@ void BackgroundBox::Inner::gotWallpapers(const MTPVector &result) int32 w = 0, h = 0; switch (j->type()) { case mtpc_photoSize: { - auto &s = j->c_photoSize().vtype.c_string().v; + auto &s = j->c_photoSize().vtype.v; if (s.size()) size = s[0]; w = j->c_photoSize().vw.v; h = j->c_photoSize().vh.v; } break; case mtpc_photoCachedSize: { - auto &s = j->c_photoCachedSize().vtype.c_string().v; + auto &s = j->c_photoCachedSize().vtype.v; if (s.size()) size = s[0]; w = j->c_photoCachedSize().vw.v; h = j->c_photoCachedSize().vh.v; diff --git a/Telegram/SourceFiles/boxes/confirmbox.cpp b/Telegram/SourceFiles/boxes/confirmbox.cpp index cc0ea625ad..4c75bae895 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.cpp +++ b/Telegram/SourceFiles/boxes/confirmbox.cpp @@ -315,8 +315,8 @@ void ConvertToSupergroupBox::convertDone(const MTPUpdates &updates) { App::main()->sentUpdatesReceived(updates); const QVector *v = 0; switch (updates.type()) { - case mtpc_updates: v = &updates.c_updates().vchats.c_vector().v; break; - case mtpc_updatesCombined: v = &updates.c_updatesCombined().vchats.c_vector().v; break; + case mtpc_updates: v = &updates.c_updates().vchats.v; break; + case mtpc_updatesCombined: v = &updates.c_updatesCombined().vchats.v; break; default: LOG(("API Error: unexpected update cons %1 (ConvertToSupergroupBox::convertDone)").arg(updates.type())); break; } diff --git a/Telegram/SourceFiles/boxes/contactsbox.cpp b/Telegram/SourceFiles/boxes/contactsbox.cpp index 50aba9103b..33dcc853b9 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.cpp +++ b/Telegram/SourceFiles/boxes/contactsbox.cpp @@ -240,7 +240,7 @@ void ContactsBox::peopleReceived(const MTPcontacts_Found &result, mtpRequestId r case mtpc_contacts_found: { App::feedUsers(result.c_contacts_found().vusers); App::feedChats(result.c_contacts_found().vchats); - _inner->peopleReceived(q, result.c_contacts_found().vresults.c_vector().v); + _inner->peopleReceived(q, result.c_contacts_found().vresults.v); } break; } @@ -487,8 +487,8 @@ void ContactsBox::creationDone(const MTPUpdates &updates) { App::main()->sentUpdatesReceived(updates); const QVector *v = 0; switch (updates.type()) { - case mtpc_updates: v = &updates.c_updates().vchats.c_vector().v; break; - case mtpc_updatesCombined: v = &updates.c_updatesCombined().vchats.c_vector().v; break; + case mtpc_updates: v = &updates.c_updates().vchats.v; break; + case mtpc_updatesCombined: v = &updates.c_updatesCombined().vchats.v; break; default: LOG(("API Error: unexpected update cons %1 (ContactsBox::creationDone)").arg(updates.type())); break; } diff --git a/Telegram/SourceFiles/boxes/members_box.cpp b/Telegram/SourceFiles/boxes/members_box.cpp index df6e6dfef0..444299864d 100644 --- a/Telegram/SourceFiles/boxes/members_box.cpp +++ b/Telegram/SourceFiles/boxes/members_box.cpp @@ -510,8 +510,8 @@ void MembersBox::Inner::membersReceived(const MTPchannels_ChannelParticipants &r _loadingRequestId = 0; if (result.type() == mtpc_channels_channelParticipants) { - const auto &d(result.c_channels_channelParticipants()); - const auto &v(d.vparticipants.c_vector().v); + auto &d = result.c_channels_channelParticipants(); + auto &v = d.vparticipants.v; _rows.reserve(v.size()); _datas.reserve(v.size()); _dates.reserve(v.size()); diff --git a/Telegram/SourceFiles/boxes/send_files_box.cpp b/Telegram/SourceFiles/boxes/send_files_box.cpp index 52821a4e71..4e97537f06 100644 --- a/Telegram/SourceFiles/boxes/send_files_box.cpp +++ b/Telegram/SourceFiles/boxes/send_files_box.cpp @@ -774,7 +774,7 @@ void EditCaptionBox::onSave(bool ctrlShiftEnter) { flags |= MTPmessages_EditMessage::Flag::f_no_webpage; } MTPVector sentEntities; - if (!sentEntities.c_vector().v.isEmpty()) { + if (!sentEntities.v.isEmpty()) { flags |= MTPmessages_EditMessage::Flag::f_entities; } auto text = prepareText(_field->getLastText(), true); diff --git a/Telegram/SourceFiles/boxes/sessionsbox.cpp b/Telegram/SourceFiles/boxes/sessionsbox.cpp index af5dae3c13..8b3a846a89 100644 --- a/Telegram/SourceFiles/boxes/sessionsbox.cpp +++ b/Telegram/SourceFiles/boxes/sessionsbox.cpp @@ -91,7 +91,7 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) { if (result.type() != mtpc_account_authorizations) { return; } - auto &v = result.c_account_authorizations().vauthorizations.c_vector().v; + auto &v = result.c_account_authorizations().vauthorizations.v; _list.reserve(v.size()); const CountriesByISO2 &countries(countriesByISO2()); diff --git a/Telegram/SourceFiles/boxes/sharebox.cpp b/Telegram/SourceFiles/boxes/sharebox.cpp index 235bfe5f61..5914d23377 100644 --- a/Telegram/SourceFiles/boxes/sharebox.cpp +++ b/Telegram/SourceFiles/boxes/sharebox.cpp @@ -143,7 +143,7 @@ void ShareBox::peopleReceived(const MTPcontacts_Found &result, mtpRequestId requ auto &found = result.c_contacts_found(); App::feedUsers(found.vusers); App::feedChats(found.vchats); - _inner->peopleReceived(query, found.vresults.c_vector().v); + _inner->peopleReceived(query, found.vresults.v); } break; } diff --git a/Telegram/SourceFiles/boxes/stickers_box.cpp b/Telegram/SourceFiles/boxes/stickers_box.cpp index 972dadb303..cabe2b5d2d 100644 --- a/Telegram/SourceFiles/boxes/stickers_box.cpp +++ b/Telegram/SourceFiles/boxes/stickers_box.cpp @@ -171,7 +171,7 @@ void StickersBox::getArchivedDone(uint64 offsetId, const MTPmessages_ArchivedSti auto addedSet = false; auto changedSets = false; - auto &v = stickers.vsets.c_vector().v; + auto &v = stickers.vsets.v; for_const (auto &stickerSet, v) { const MTPDstickerSet *setData = nullptr; switch (stickerSet.type()) { diff --git a/Telegram/SourceFiles/boxes/stickersetbox.cpp b/Telegram/SourceFiles/boxes/stickersetbox.cpp index 30d69c63fb..d3b9242c6e 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.cpp +++ b/Telegram/SourceFiles/boxes/stickersetbox.cpp @@ -126,7 +126,7 @@ void StickerSetBox::Inner::gotSet(const MTPmessages_StickerSet &set) { setCursor(style::cur_default); if (set.type() == mtpc_messages_stickerSet) { auto &d = set.c_messages_stickerSet(); - auto &v = d.vdocuments.c_vector().v; + auto &v = d.vdocuments.v; _pack.reserve(v.size()); _packOvers.reserve(v.size()); for (int i = 0, l = v.size(); i < l; ++i) { @@ -136,13 +136,13 @@ void StickerSetBox::Inner::gotSet(const MTPmessages_StickerSet &set) { _pack.push_back(doc); _packOvers.push_back(Animation()); } - auto &packs = d.vpacks.c_vector().v; + auto &packs = d.vpacks.v; for (auto i = 0, l = packs.size(); i != l; ++i) { if (packs.at(i).type() != mtpc_stickerPack) continue; auto &pack = packs.at(i).c_stickerPack(); if (auto emoji = Ui::Emoji::Find(qs(pack.vemoticon))) { emoji = emoji->original(); - auto &stickers = pack.vdocuments.c_vector().v; + auto &stickers = pack.vdocuments.v; StickerPack p; p.reserve(stickers.size()); diff --git a/Telegram/SourceFiles/data/data_drafts.cpp b/Telegram/SourceFiles/data/data_drafts.cpp index 919ac6eecb..8e00dda415 100644 --- a/Telegram/SourceFiles/data/data_drafts.cpp +++ b/Telegram/SourceFiles/data/data_drafts.cpp @@ -40,7 +40,7 @@ Draft::Draft(const Ui::FlatTextarea *field, MsgId msgId, bool previewCancelled, void applyPeerCloudDraft(PeerId peerId, const MTPDdraftMessage &draft) { auto history = App::history(peerId); auto text = qs(draft.vmessage); - auto entities = draft.has_entities() ? entitiesFromMTP(draft.ventities.c_vector().v) : EntitiesInText(); + auto entities = draft.has_entities() ? entitiesFromMTP(draft.ventities.v) : EntitiesInText(); TextWithTags textWithTags = { textApplyEntities(text, entities), textTagsFromEntities(entities) }; MsgId replyTo = draft.has_reply_to_msg_id() ? draft.vreply_to_msg_id.v : 0; auto cloudDraft = std::make_unique(textWithTags, replyTo, MessageCursor(QFIXED_MAX, QFIXED_MAX, QFIXED_MAX), draft.is_no_webpage()); diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index b2927ac564..a67c7944a5 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -2477,16 +2477,16 @@ void DialogsWidget::dialogsReceived(const MTPmessages_Dialogs &dialogs, mtpReque auto &data = dialogs.c_messages_dialogs(); App::feedUsers(data.vusers); App::feedChats(data.vchats); - messagesList = &data.vmessages.c_vector().v; - dialogsList = &data.vdialogs.c_vector().v; + messagesList = &data.vmessages.v; + dialogsList = &data.vdialogs.v; _dialogsFull = true; } break; case mtpc_messages_dialogsSlice: { auto &data = dialogs.c_messages_dialogsSlice(); App::feedUsers(data.vusers); App::feedChats(data.vchats); - messagesList = &data.vmessages.c_vector().v; - dialogsList = &data.vdialogs.c_vector().v; + messagesList = &data.vmessages.v; + dialogsList = &data.vdialogs.v; } break; } @@ -2557,7 +2557,7 @@ void DialogsWidget::pinnedDialogsReceived(const MTPmessages_PeerDialogs &dialogs auto &dialogsData = dialogs.c_messages_peerDialogs(); App::feedUsers(dialogsData.vusers); App::feedChats(dialogsData.vchats); - auto &list = dialogsData.vdialogs.c_vector().v; + auto &list = dialogsData.vdialogs.v; for (auto i = list.size(); i > 0;) { auto &dialog = list[--i]; if (dialog.type() != mtpc_dialog) { @@ -2741,7 +2741,7 @@ void DialogsWidget::contactsReceived(const MTPcontacts_Contacts &result) { if (result.type() == mtpc_contacts_contacts) { auto &d = result.c_contacts_contacts(); App::feedUsers(d.vusers); - _inner->contactsReceived(d.vcontacts.c_vector().v); + _inner->contactsReceived(d.vcontacts.v); } if (App::main()) App::main()->contactsReceived(); } @@ -2755,7 +2755,7 @@ bool DialogsWidget::contactsFailed(const RPCError &error) { void DialogsWidget::searchReceived(DialogsSearchRequestType type, const MTPmessages_Messages &result, mtpRequestId req) { if (_inner->state() == DialogsInner::FilteredState || _inner->state() == DialogsInner::SearchedState) { if (type == DialogsSearchFromStart || type == DialogsSearchPeerFromStart) { - SearchQueries::iterator i = _searchQueries.find(req); + auto i = _searchQueries.find(req); if (i != _searchQueries.cend()) { _searchCache[i.value()] = result; _searchQueries.erase(i); @@ -2766,10 +2766,10 @@ void DialogsWidget::searchReceived(DialogsSearchRequestType type, const MTPmessa if (_searchRequest == req) { switch (result.type()) { case mtpc_messages_messages: { - auto &d(result.c_messages_messages()); + auto &d = result.c_messages_messages(); App::feedUsers(d.vusers); App::feedChats(d.vchats); - auto &msgs(d.vmessages.c_vector().v); + auto &msgs = d.vmessages.v; if (!_inner->searchReceived(msgs, type, msgs.size())) { if (type == DialogsSearchMigratedFromStart || type == DialogsSearchMigratedFromOffset) { _searchFullMigrated = true; @@ -2780,10 +2780,10 @@ void DialogsWidget::searchReceived(DialogsSearchRequestType type, const MTPmessa } break; case mtpc_messages_messagesSlice: { - auto &d(result.c_messages_messagesSlice()); + auto &d = result.c_messages_messagesSlice(); App::feedUsers(d.vusers); App::feedChats(d.vchats); - auto &msgs(d.vmessages.c_vector().v); + auto &msgs = d.vmessages.v; if (!_inner->searchReceived(msgs, type, d.vcount.v)) { if (type == DialogsSearchMigratedFromStart || type == DialogsSearchMigratedFromOffset) { _searchFullMigrated = true; @@ -2794,7 +2794,7 @@ void DialogsWidget::searchReceived(DialogsSearchRequestType type, const MTPmessa } break; case mtpc_messages_channelMessages: { - auto &d(result.c_messages_channelMessages()); + auto &d = result.c_messages_channelMessages(); if (_searchInPeer && _searchInPeer->isChannel()) { _searchInPeer->asChannel()->ptsReceived(d.vpts.v); } else { @@ -2802,7 +2802,7 @@ void DialogsWidget::searchReceived(DialogsSearchRequestType type, const MTPmessa } App::feedUsers(d.vusers); App::feedChats(d.vchats); - auto &msgs(d.vmessages.c_vector().v); + auto &msgs = d.vmessages.v; if (!_inner->searchReceived(msgs, type, d.vcount.v)) { if (type == DialogsSearchMigratedFromStart || type == DialogsSearchMigratedFromOffset) { _searchFullMigrated = true; @@ -2835,7 +2835,7 @@ void DialogsWidget::peerSearchReceived(const MTPcontacts_Found &result, mtpReque auto &d = result.c_contacts_found(); App::feedUsers(d.vusers); App::feedChats(d.vchats); - _inner->peerSearchReceived(q, d.vresults.c_vector().v); + _inner->peerSearchReceived(q, d.vresults.v); } break; } diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 443001a8ee..75f54ce211 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -840,7 +840,7 @@ HistoryItem *History::createItem(const MTPMessage &msg, bool applyServiceAction, case mtpc_messageActionChatAddUser: { auto &d = action.c_messageActionChatAddUser(); if (peer->isMegagroup()) { - auto &v = d.vusers.c_vector().v; + auto &v = d.vusers.v; for (auto i = 0, l = v.size(); i != l; ++i) { if (auto user = App::userLoaded(peerFromUser(v[i]))) { if (peer->asChannel()->mgInfo->lastParticipants.indexOf(user) < 0) { @@ -920,13 +920,14 @@ HistoryItem *History::createItem(const MTPMessage &msg, bool applyServiceAction, } break; case mtpc_messageActionChatEditPhoto: { - const auto &d(action.c_messageActionChatEditPhoto()); + auto &d = action.c_messageActionChatEditPhoto(); if (d.vphoto.type() == mtpc_photo) { - const auto &sizes(d.vphoto.c_photo().vsizes.c_vector().v); + auto &sizes = d.vphoto.c_photo().vsizes.v; if (!sizes.isEmpty()) { - PhotoData *photo = App::feedPhoto(d.vphoto.c_photo()); + auto photo = App::feedPhoto(d.vphoto.c_photo()); if (photo) photo->peer = peer; - const auto &smallSize(sizes.front()), &bigSize(sizes.back()); + auto &smallSize = sizes.front(); + auto &bigSize = sizes.back(); const MTPFileLocation *smallLoc = 0, *bigLoc = 0; switch (smallSize.type()) { case mtpc_photoSize: smallLoc = &smallSize.c_photoSize().vlocation; break; @@ -2121,7 +2122,7 @@ void History::overviewSliceDone(int32 overviewIndex, const MTPmessages_Messages auto &d(result.c_messages_messages()); App::feedUsers(d.vusers); App::feedChats(d.vchats); - v = &d.vmessages.c_vector().v; + v = &d.vmessages.v; overviewCountData[overviewIndex] = 0; } break; @@ -2130,7 +2131,7 @@ void History::overviewSliceDone(int32 overviewIndex, const MTPmessages_Messages App::feedUsers(d.vusers); App::feedChats(d.vchats); overviewCountData[overviewIndex] = d.vcount.v; - v = &d.vmessages.c_vector().v; + v = &d.vmessages.v; } break; case mtpc_messages_channelMessages: { @@ -2143,7 +2144,7 @@ void History::overviewSliceDone(int32 overviewIndex, const MTPmessages_Messages App::feedUsers(d.vusers); App::feedChats(d.vchats); overviewCountData[overviewIndex] = d.vcount.v; - v = &d.vmessages.c_vector().v; + v = &d.vmessages.v; } break; default: return; diff --git a/Telegram/SourceFiles/history/history_item.cpp b/Telegram/SourceFiles/history/history_item.cpp index 98a48d9062..c4a0eabc5f 100644 --- a/Telegram/SourceFiles/history/history_item.cpp +++ b/Telegram/SourceFiles/history/history_item.cpp @@ -401,7 +401,7 @@ void HistoryMessageReplyMarkup::createFromButtonRows(const QVector unread; - for_const (auto &unreadSetId, d.vunread.c_vector().v) { + for_const (auto &unreadSetId, d.vunread.v) { unread.insert(unreadSetId.v); } - auto &d_sets = d.vsets.c_vector().v; + auto &d_sets = d.vsets.v; auto &setsOrder = Global::RefFeaturedStickerSetsOrder(); setsOrder.clear(); @@ -4122,9 +4122,9 @@ void HistoryWidget::savedGifsGot(const MTPmessages_SavedGifs &gifs) { _savedGifsUpdateRequest = 0; if (gifs.type() != mtpc_messages_savedGifs) return; - const auto &d(gifs.c_messages_savedGifs()); + auto &d = gifs.c_messages_savedGifs(); - const auto &d_gifs(d.vgifs.c_vector().v); + auto &d_gifs = d.vgifs.v; SavedGifs &saved(cRefSavedGifs()); saved.clear(); @@ -4965,14 +4965,14 @@ void HistoryWidget::messagesReceived(PeerData *peer, const MTPmessages_Messages auto &d(messages.c_messages_messages()); App::feedUsers(d.vusers); App::feedChats(d.vchats); - histList = &d.vmessages.c_vector().v; + histList = &d.vmessages.v; count = histList->size(); } break; case mtpc_messages_messagesSlice: { auto &d(messages.c_messages_messagesSlice()); App::feedUsers(d.vusers); App::feedChats(d.vchats); - histList = &d.vmessages.c_vector().v; + histList = &d.vmessages.v; count = d.vcount.v; } break; case mtpc_messages_channelMessages: { @@ -4984,7 +4984,7 @@ void HistoryWidget::messagesReceived(PeerData *peer, const MTPmessages_Messages } App::feedUsers(d.vusers); App::feedChats(d.vchats); - histList = &d.vmessages.c_vector().v; + histList = &d.vmessages.v; count = d.vcount.v; } break; } @@ -5321,8 +5321,9 @@ void HistoryWidget::saveEditMsg() { if (webPageId == CancelledWebPageId) { sendFlags |= MTPmessages_EditMessage::Flag::f_no_webpage; } - MTPVector localEntities = linksToMTP(sendingEntities), sentEntities = linksToMTP(sendingEntities, true); - if (!sentEntities.c_vector().v.isEmpty()) { + auto localEntities = linksToMTP(sendingEntities); + auto sentEntities = linksToMTP(sendingEntities, true); + if (!sentEntities.v.isEmpty()) { sendFlags |= MTPmessages_EditMessage::Flag::f_entities; } _saveEditMsgRequestId = MTP::send(MTPmessages_EditMessage(MTP_flags(sendFlags), _history->peer->input, MTP_int(_editMsgId), MTP_string(sendingText), MTPnullMarkup, sentEntities), rpcDone(&HistoryWidget::saveEditMsgDone, _history), rpcFail(&HistoryWidget::saveEditMsgFail, _history)); diff --git a/Telegram/SourceFiles/inline_bots/inline_bot_result.cpp b/Telegram/SourceFiles/inline_bots/inline_bot_result.cpp index 692508c33b..514e3e61b4 100644 --- a/Telegram/SourceFiles/inline_bots/inline_bot_result.cpp +++ b/Telegram/SourceFiles/inline_bots/inline_bot_result.cpp @@ -136,7 +136,7 @@ std::unique_ptr Result::create(uint64 queryId, const MTPBotInlineResult case mtpc_botInlineMessageText: { auto &r = message->c_botInlineMessageText(); - EntitiesInText entities = r.has_entities() ? entitiesFromMTP(r.ventities.c_vector().v) : EntitiesInText(); + auto entities = r.has_entities() ? entitiesFromMTP(r.ventities.v) : EntitiesInText(); result->sendData.reset(new internal::SendText(qs(r.vmessage), entities, r.is_no_webpage())); if (result->_type == Type::Photo) { result->createPhoto(); diff --git a/Telegram/SourceFiles/inline_bots/inline_bot_send_data.cpp b/Telegram/SourceFiles/inline_bots/inline_bot_send_data.cpp index bb6d437bff..6702ae4f22 100644 --- a/Telegram/SourceFiles/inline_bots/inline_bot_send_data.cpp +++ b/Telegram/SourceFiles/inline_bots/inline_bot_send_data.cpp @@ -37,8 +37,8 @@ QString SendData::getLayoutDescription(const Result *owner) const { void SendDataCommon::addToHistory(const Result *owner, History *history, MTPDmessage::Flags flags, MsgId msgId, UserId fromId, MTPint mtpDate, UserId viaBotId, MsgId replyToId, const MTPReplyMarkup &markup) const { - SentMTPMessageFields fields = getSentMessageFields(); - if (!fields.entities.c_vector().v.isEmpty()) { + auto fields = getSentMessageFields(); + if (!fields.entities.v.isEmpty()) { flags |= MTPDmessage::Flag::f_entities; } history->addNewMessage(MTP_message(MTP_flags(flags), MTP_int(msgId), MTP_int(fromId), peerToMTP(history->peer->id), MTPnullFwdHeader, MTP_int(viaBotId), MTP_int(replyToId), mtpDate, fields.text, fields.media, markup, fields.entities, MTP_int(1), MTPint()), NewMessageUnread); diff --git a/Telegram/SourceFiles/intro/introcode.cpp b/Telegram/SourceFiles/intro/introcode.cpp index bd86c62429..75b025dfc5 100644 --- a/Telegram/SourceFiles/intro/introcode.cpp +++ b/Telegram/SourceFiles/intro/introcode.cpp @@ -180,7 +180,7 @@ void CodeWidget::finished() { void CodeWidget::cancelled() { MTP::cancel(base::take(_sentRequest)); MTP::cancel(base::take(_callRequestId)); - MTP::send(MTPauth_CancelCode(MTP_string(getData()->phone), MTP_string(getData()->phoneHash))); + MTP::send(MTPauth_CancelCode(MTP_string(getData()->phone), MTP_bytes(getData()->phoneHash))); } void CodeWidget::stopCheck() { @@ -263,7 +263,7 @@ void CodeWidget::onSendCall() { if (--_callTimeout <= 0) { _callStatus = Widget::Data::CallStatus::Calling; _callTimer->stop(); - _callRequestId = MTP::send(MTPauth_ResendCode(MTP_string(getData()->phone), MTP_string(getData()->phoneHash)), rpcDone(&CodeWidget::callDone)); + _callRequestId = MTP::send(MTPauth_ResendCode(MTP_string(getData()->phone), MTP_bytes(getData()->phoneHash)), rpcDone(&CodeWidget::callDone)); } else { getData()->callStatus = _callStatus; getData()->callTimeout = _callTimeout; @@ -314,12 +314,12 @@ void CodeWidget::submit() { getData()->pwdSalt = QByteArray(); getData()->hasRecovery = false; getData()->pwdHint = QString(); - _sentRequest = MTP::send(MTPauth_SignIn(MTP_string(getData()->phone), MTP_string(getData()->phoneHash), MTP_string(_sentCode)), rpcDone(&CodeWidget::codeSubmitDone), rpcFail(&CodeWidget::codeSubmitFail)); + _sentRequest = MTP::send(MTPauth_SignIn(MTP_string(getData()->phone), MTP_bytes(getData()->phoneHash), MTP_string(_sentCode)), rpcDone(&CodeWidget::codeSubmitDone), rpcFail(&CodeWidget::codeSubmitFail)); } void CodeWidget::onNoTelegramCode() { if (_noTelegramCodeRequestId) return; - _noTelegramCodeRequestId = MTP::send(MTPauth_ResendCode(MTP_string(getData()->phone), MTP_string(getData()->phoneHash)), rpcDone(&CodeWidget::noTelegramCodeDone), rpcFail(&CodeWidget::noTelegramCodeFail)); + _noTelegramCodeRequestId = MTP::send(MTPauth_ResendCode(MTP_string(getData()->phone), MTP_bytes(getData()->phoneHash)), rpcDone(&CodeWidget::noTelegramCodeDone), rpcFail(&CodeWidget::noTelegramCodeFail)); } void CodeWidget::noTelegramCodeDone(const MTPauth_SentCode &result) { diff --git a/Telegram/SourceFiles/intro/introphone.cpp b/Telegram/SourceFiles/intro/introphone.cpp index f382cf100c..c185580b68 100644 --- a/Telegram/SourceFiles/intro/introphone.cpp +++ b/Telegram/SourceFiles/intro/introphone.cpp @@ -180,7 +180,7 @@ void PhoneWidget::phoneSubmitDone(const MTPauth_SentCode &result) { auto &d = result.c_auth_sentCode(); fillSentCodeData(d.vtype); getData()->phone = _sentPhone; - getData()->phoneHash = d.vphone_code_hash.c_string().v.c_str(); + getData()->phoneHash = qba(d.vphone_code_hash); getData()->phoneIsRegistered = d.is_phone_registered(); if (d.has_next_type() && d.vnext_type.type() == mtpc_auth_codeTypeCall) { getData()->callStatus = Widget::Data::CallStatus::Waiting; diff --git a/Telegram/SourceFiles/intro/introsignup.cpp b/Telegram/SourceFiles/intro/introsignup.cpp index 8fbd70d6ea..b9e7d81d35 100644 --- a/Telegram/SourceFiles/intro/introsignup.cpp +++ b/Telegram/SourceFiles/intro/introsignup.cpp @@ -223,7 +223,7 @@ void SignupWidget::submit() { _firstName = _first->getLastText().trimmed(); _lastName = _last->getLastText().trimmed(); - _sentRequest = MTP::send(MTPauth_SignUp(MTP_string(getData()->phone), MTP_string(getData()->phoneHash), MTP_string(getData()->code), MTP_string(_firstName), MTP_string(_lastName)), rpcDone(&SignupWidget::nameSubmitDone), rpcFail(&SignupWidget::nameSubmitFail)); + _sentRequest = MTP::send(MTPauth_SignUp(MTP_string(getData()->phone), MTP_bytes(getData()->phoneHash), MTP_string(getData()->code), MTP_string(_firstName), MTP_string(_lastName)), rpcDone(&SignupWidget::nameSubmitDone), rpcFail(&SignupWidget::nameSubmitFail)); } QString SignupWidget::nextButtonText() const { diff --git a/Telegram/SourceFiles/intro/introwidget.cpp b/Telegram/SourceFiles/intro/introwidget.cpp index 89e8271756..c172a097cb 100644 --- a/Telegram/SourceFiles/intro/introwidget.cpp +++ b/Telegram/SourceFiles/intro/introwidget.cpp @@ -263,7 +263,7 @@ bool Widget::resetFail(const RPCError &error) { void Widget::gotNearestDC(const MTPNearestDc &result) { auto &nearest = result.c_nearestDc(); - DEBUG_LOG(("Got nearest dc, country: %1, nearest: %2, this: %3").arg(nearest.vcountry.c_string().v.c_str()).arg(nearest.vnearest_dc.v).arg(nearest.vthis_dc.v)); + DEBUG_LOG(("Got nearest dc, country: %1, nearest: %2, this: %3").arg(qs(nearest.vcountry)).arg(nearest.vnearest_dc.v).arg(nearest.vthis_dc.v)); Messenger::Instance().suggestMainDcId(nearest.vnearest_dc.v); auto nearestCountry = qs(nearest.vcountry); if (getData()->country != nearestCountry) { diff --git a/Telegram/SourceFiles/intro/introwidget.h b/Telegram/SourceFiles/intro/introwidget.h index e6df6eda88..d14d4c4a53 100644 --- a/Telegram/SourceFiles/intro/introwidget.h +++ b/Telegram/SourceFiles/intro/introwidget.h @@ -63,7 +63,7 @@ public: struct Data { QString country; QString phone; - QString phoneHash; + QByteArray phoneHash; bool phoneIsRegistered = false; enum class CallStatus { diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 87ec80af01..9a6b21a38c 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -1015,14 +1015,14 @@ void MainWidget::checkedHistory(PeerData *peer, const MTPmessages_Messages &resu auto &d(result.c_messages_messages()); App::feedUsers(d.vusers); App::feedChats(d.vchats); - v = &d.vmessages.c_vector().v; + v = &d.vmessages.v; } break; case mtpc_messages_messagesSlice: { auto &d(result.c_messages_messagesSlice()); App::feedUsers(d.vusers); App::feedChats(d.vchats); - v = &d.vmessages.c_vector().v; + v = &d.vmessages.v; } break; case mtpc_messages_channelMessages: { @@ -1034,19 +1034,19 @@ void MainWidget::checkedHistory(PeerData *peer, const MTPmessages_Messages &resu } App::feedUsers(d.vusers); App::feedChats(d.vchats); - v = &d.vmessages.c_vector().v; + v = &d.vmessages.v; } break; } if (!v) return; if (v->isEmpty()) { if (peer->isChat() && !peer->asChat()->haveLeft()) { - History *h = App::historyLoaded(peer->id); + auto h = App::historyLoaded(peer->id); if (h) Local::addSavedPeer(peer, h->lastMsgDate); } else if (peer->isChannel()) { if (peer->asChannel()->inviter > 0 && peer->asChannel()->amIn()) { - if (UserData *from = App::userLoaded(peer->asChannel()->inviter)) { - History *h = App::history(peer->id); + if (auto from = App::userLoaded(peer->asChannel()->inviter)) { + auto h = App::history(peer->id); h->clear(true); h->addNewerSlice(QVector()); h->asChannelHistory()->insertJoinedMessage(true); @@ -1244,8 +1244,9 @@ void MainWidget::sendMessage(const MessageToSend &message) { if (silentPost) { sendFlags |= MTPmessages_SendMessage::Flag::f_silent; } - MTPVector localEntities = linksToMTP(sendingEntities), sentEntities = linksToMTP(sendingEntities, true); - if (!sentEntities.c_vector().v.isEmpty()) { + auto localEntities = linksToMTP(sendingEntities); + auto sentEntities = linksToMTP(sendingEntities, true); + if (!sentEntities.v.isEmpty()) { sendFlags |= MTPmessages_SendMessage::Flag::f_entities; } if (message.clearDraft) { @@ -2123,7 +2124,7 @@ void MainWidget::onViewsIncrement() { } void MainWidget::viewsIncrementDone(QVector ids, const MTPVector &result, mtpRequestId req) { - const auto &v(result.c_vector().v); + auto &v = result.v; if (ids.size() == v.size()) { for (ViewsIncrementRequests::iterator i = _viewsIncrementRequests.begin(); i != _viewsIncrementRequests.cend(); ++i) { if (i.value() == req) { @@ -2820,7 +2821,7 @@ void MainWidget::jumpToDate(PeerData *peer, const QDate &date) { auto handleMessages = [](auto &messages) { App::feedUsers(messages.vusers); App::feedChats(messages.vchats); - return &messages.vmessages.c_vector().v; + return &messages.vmessages.v; }; switch (result.type()) { case mtpc_messages_messages: return handleMessages(result.c_messages_messages()); @@ -3359,18 +3360,16 @@ void MainWidget::onUpdateNotifySettings() { } void MainWidget::feedUpdateVector(const MTPVector &updates, bool skipMessageIds) { - const auto &v(updates.c_vector().v); - for (QVector::const_iterator i = v.cbegin(), e = v.cend(); i != e; ++i) { - if (skipMessageIds && i->type() == mtpc_updateMessageID) continue; - feedUpdate(*i); + for_const (auto &update, updates.v) { + if (skipMessageIds && update.type() == mtpc_updateMessageID) continue; + feedUpdate(update); } } void MainWidget::feedMessageIds(const MTPVector &updates) { - const auto &v(updates.c_vector().v); - for (QVector::const_iterator i = v.cbegin(), e = v.cend(); i != e; ++i) { - if (i->type() == mtpc_updateMessageID) { - feedUpdate(*i); + for_const (auto &update, updates.v) { + if (update.type() == mtpc_updateMessageID) { + feedUpdate(update); } } } @@ -3463,7 +3462,7 @@ void MainWidget::gotChannelDifference(ChannelData *channel, const MTPupdates_Cha // feed messages and groups, copy from App::feedMsgs auto h = App::history(channel->id); - auto &vmsgs = d.vnew_messages.c_vector().v; + auto &vmsgs = d.vnew_messages.v; QMap msgsIds; for (int i = 0, l = vmsgs.size(); i < l; ++i) { auto &msg = vmsgs[i]; @@ -4054,7 +4053,7 @@ void MainWidget::inviteCheckDone(QString hash, const MTPChatInvite &invite) { QVector participants; if (d.has_participants()) { - auto &v = d.vparticipants.c_vector().v; + auto &v = d.vparticipants.v; participants.reserve(v.size()); for_const (auto &user, v) { if (auto feededUser = App::feedUser(user)) { @@ -4096,8 +4095,8 @@ void MainWidget::inviteImportDone(const MTPUpdates &updates) { Ui::hideLayer(); const QVector *v = 0; switch (updates.type()) { - case mtpc_updates: v = &updates.c_updates().vchats.c_vector().v; break; - case mtpc_updatesCombined: v = &updates.c_updatesCombined().vchats.c_vector().v; break; + case mtpc_updates: v = &updates.c_updates().vchats.v; break; + case mtpc_updatesCombined: v = &updates.c_updatesCombined().vchats.v; break; default: LOG(("API Error: unexpected update cons %1 (MainWidget::inviteImportDone)").arg(updates.type())); break; } if (v && !v->isEmpty()) { @@ -4122,7 +4121,7 @@ bool MainWidget::inviteImportFail(const RPCError &error) { } void MainWidget::startWithSelf(const MTPVector &users) { - auto &v = users.c_vector().v; + auto &v = users.v; if (v.isEmpty()) { LOG(("Auth Error: self user not received.")); return App::logOutDelayed(); @@ -4174,11 +4173,12 @@ void MainWidget::applyNotifySetting(const MTPNotifyPeer &peer, const MTPPeerNoti } if (setTo == UnknownNotifySettings) break; - changed = (setTo->flags != d.vflags.v) || (setTo->mute != d.vmute_until.v) || (setTo->sound != d.vsound.c_string().v); + auto sound = qs(d.vsound); + changed = (setTo->flags != d.vflags.v) || (setTo->mute != d.vmute_until.v) || (setTo->sound != sound); if (changed) { setTo->flags = d.vflags.v; setTo->mute = d.vmute_until.v; - setTo->sound = d.vsound.c_string().v; + setTo->sound = sound; if (updatePeer) { if (!h) h = App::history(updatePeer->id); int32 changeIn = 0; @@ -4514,7 +4514,7 @@ bool fwdInfoDataLoaded(const MTPMessageFwdHeader &header) { } bool mentionUsersLoaded(const MTPVector &entities) { - for_const (auto &entity, entities.c_vector().v) { + for_const (auto &entity, entities.v) { auto type = entity.type(); if (type == mtpc_messageEntityMentionName) { if (!App::userLoaded(peerFromUser(entity.c_messageEntityMentionName().vuser_id))) { @@ -4568,7 +4568,7 @@ DataIsLoadedResult allDataLoadedForMessage(const MTPMessage &msg) { } switch (d.vaction.type()) { case mtpc_messageActionChatAddUser: { - for_const (const MTPint &userId, d.vaction.c_messageActionChatAddUser().vusers.c_vector().v) { + for_const (const MTPint &userId, d.vaction.c_messageActionChatAddUser().vusers.v) { if (!App::userLoaded(peerFromUser(userId))) { return DataIsLoadedResult::NotLoaded; } @@ -4701,7 +4701,7 @@ void MainWidget::feedUpdates(const MTPUpdates &updates, uint64 randomId) { if (d.has_entities() && !mentionUsersLoaded(d.ventities)) { api()->requestMessageData(item->history()->peer->asChannel(), item->id, ApiWrap::RequestMessageDataCallback()); } - auto entities = d.has_entities() ? entitiesFromMTP(d.ventities.c_vector().v) : EntitiesInText(); + auto entities = d.has_entities() ? entitiesFromMTP(d.ventities.v) : EntitiesInText(); item->setText({ text, entities }); item->updateMedia(d.has_media() ? (&d.vmedia) : nullptr); item->addToOverview(AddToOverviewNew); @@ -4796,9 +4796,9 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { } // update before applying skipped - auto &v = d.vmessages.c_vector().v; + auto &v = d.vmessages.v; for (int32 i = 0, l = v.size(); i < l; ++i) { - if (HistoryItem *item = App::histItemById(NoChannel, v.at(i).v)) { + if (auto item = App::histItemById(NoChannel, v.at(i).v)) { if (item->isMediaUnread()) { item->markMediaRead(); Ui::repaintHistoryItem(item); @@ -4867,7 +4867,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { } // update before applying skipped - App::feedWereDeleted(NoChannel, d.vmessages.c_vector().v); + App::feedWereDeleted(NoChannel, d.vmessages.v); _history->peerMessagesUpdated(); ptsApplySkippedUpdates(); @@ -5053,7 +5053,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { if (d.is_popup()) { Ui::show(Box(qs(d.vmessage))); } else { - App::wnd()->serviceNotification({ qs(d.vmessage), entitiesFromMTP(d.ventities.c_vector().v) }, d.vmedia); + App::wnd()->serviceNotification({ qs(d.vmessage), entitiesFromMTP(d.ventities.v) }, d.vmedia); emit App::wnd()->checkNewAuthorization(); } } break; @@ -5066,7 +5066,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { auto &d = update.c_updatePinnedDialogs(); if (d.has_order()) { auto allLoaded = true; - auto &order = d.vorder.c_vector().v; + auto &order = d.vorder.v; for_const (auto &peer, order) { auto peerId = peerFromMTP(peer); if (!App::historyLoaded(peerId)) { @@ -5258,7 +5258,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { } // update before applying skipped - App::feedWereDeleted(d.vchannel_id.v, d.vmessages.c_vector().v); + App::feedWereDeleted(d.vchannel_id.v, d.vmessages.v); _history->peerMessagesUpdated(); if (channel && !_handlingChannelDifference) { @@ -5303,7 +5303,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { } } auto inputSet = MTP_inputStickerSetID(MTP_long(it->id), MTP_long(it->access)); - auto &v = set.vdocuments.c_vector().v; + auto &v = set.vdocuments.v; it->stickers.clear(); it->stickers.reserve(v.size()); for (int i = 0, l = v.size(); i < l; ++i) { @@ -5316,13 +5316,13 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { } } it->emoji.clear(); - auto &packs = set.vpacks.c_vector().v; + auto &packs = set.vpacks.v; for (auto i = 0, l = packs.size(); i != l; ++i) { if (packs[i].type() != mtpc_stickerPack) continue; auto &pack = packs.at(i).c_stickerPack(); if (auto emoji = Ui::Emoji::Find(qs(pack.vemoticon))) { emoji = emoji->original(); - auto &stickers = pack.vdocuments.c_vector().v; + auto &stickers = pack.vdocuments.v; StickerPack p; p.reserve(stickers.size()); @@ -5366,7 +5366,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { case mtpc_updateStickerSetsOrder: { auto &d = update.c_updateStickerSetsOrder(); if (!d.is_masks()) { - auto &order = d.vorder.c_vector().v; + auto &order = d.vorder.v; auto &sets = Global::StickerSets(); Stickers::Order result; for (int i = 0, l = order.size(); i < l; ++i) { diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index 88ba64c777..c8e2b32679 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -2813,20 +2813,20 @@ void MediaView::userPhotosLoaded(UserData *u, const MTPphotos_Photos &photos, mt _loadRequest = 0; } - const QVector *v = 0; + const QVector *v = nullptr; switch (photos.type()) { case mtpc_photos_photos: { - const auto &d(photos.c_photos_photos()); + auto &d = photos.c_photos_photos(); App::feedUsers(d.vusers); - v = &d.vphotos.c_vector().v; + v = &d.vphotos.v; u->photosCount = 0; } break; case mtpc_photos_photosSlice: { - const auto &d(photos.c_photos_photosSlice()); + auto &d = photos.c_photos_photosSlice(); App::feedUsers(d.vusers); u->photosCount = d.vcount.v; - v = &d.vphotos.c_vector().v; + v = &d.vphotos.v; } break; default: return; diff --git a/Telegram/SourceFiles/mtproto/connection.cpp b/Telegram/SourceFiles/mtproto/connection.cpp index 01fa4d80aa..2394fbc3df 100644 --- a/Telegram/SourceFiles/mtproto/connection.cpp +++ b/Telegram/SourceFiles/mtproto/connection.cpp @@ -66,11 +66,11 @@ void wrapInvokeAfter(mtpRequest &to, const mtpRequest &from, const mtpRequestMap } } -bool parsePQ(const string &pqStr, string &pStr, string &qStr) { +bool parsePQ(const QByteArray &pqStr, QByteArray &pStr, QByteArray &qStr) { if (pqStr.length() > 8) return false; // more than 64 bit pq uint64 pq = 0, p, q; - const uchar *pqChars = (const uchar*)&pqStr[0]; + const uchar *pqChars = (const uchar*)pqStr.constData(); for (uint32 i = 0, l = pqStr.length(); i < l; ++i) { pq <<= 8; pq |= (uint64)pqChars[i]; @@ -92,14 +92,14 @@ bool parsePQ(const string &pqStr, string &pStr, string &qStr) { if (p > q) std::swap(p, q); pStr.resize(4); - uchar *pChars = (uchar*)&pStr[0]; + uchar *pChars = (uchar*)pStr.data(); for (uint32 i = 0; i < 4; ++i) { *(pChars + 3 - i) = (uchar)(p & 0xFF); p >>= 8; } qStr.resize(4); - uchar *qChars = (uchar*)&qStr[0]; + uchar *qChars = (uchar*)qStr.data(); for (uint32 i = 0; i < 4; ++i) { *(qChars + 3 - i) = (uchar)(q & 0xFF); q >>= 8; @@ -1570,7 +1570,7 @@ ConnectionPrivate::HandleResult ConnectionPrivate::handleOneReceived(const mtpPr case mtpc_msgs_ack: { MTPMsgsAck msg; msg.read(from, end); - const auto &ids(msg.c_msgs_ack().vmsg_ids.c_vector().v); + auto &ids = msg.c_msgs_ack().vmsg_ids.v; uint32 idsCount = ids.size(); DEBUG_LOG(("Message Info: acks received, ids: %1").arg(Logs::vector(ids))); @@ -1701,8 +1701,8 @@ ConnectionPrivate::HandleResult ConnectionPrivate::handleOneReceived(const mtpPr } MTPMsgsStateReq msg; msg.read(from, end); - const auto &ids(msg.c_msgs_state_req().vmsg_ids.c_vector().v); - uint32 idsCount = ids.size(); + auto &ids = msg.c_msgs_state_req().vmsg_ids.v; + auto idsCount = ids.size(); DEBUG_LOG(("Message Info: msgs_state_req received, ids: %1").arg(Logs::vector(ids))); if (!idsCount) return HandleResult::Success; @@ -1749,10 +1749,10 @@ ConnectionPrivate::HandleResult ConnectionPrivate::handleOneReceived(const mtpPr case mtpc_msgs_state_info: { MTPMsgsStateInfo msg; msg.read(from, end); - const auto &data(msg.c_msgs_state_info()); + auto &data = msg.c_msgs_state_info(); - uint64 reqMsgId = data.vreq_msg_id.v; - const auto &states(data.vinfo.c_string().v); + auto reqMsgId = data.vreq_msg_id.v; + auto &states = data.vinfo.v; DEBUG_LOG(("Message Info: msg state received, msgId %1, reqMsgId: %2, HEX states %3").arg(msgId).arg(reqMsgId).arg(Logs::mb(states.data(), states.length()).str())); mtpRequest requestBuffer; @@ -1786,11 +1786,11 @@ ConnectionPrivate::HandleResult ConnectionPrivate::handleOneReceived(const mtpPr if (mtpTypeId(*rFrom) == mtpc_msgs_state_req) { MTPMsgsStateReq request; request.read(rFrom, rEnd); - handleMsgsStates(request.c_msgs_state_req().vmsg_ids.c_vector().v, states, toAck); + handleMsgsStates(request.c_msgs_state_req().vmsg_ids.v, states, toAck); } else { MTPMsgResendReq request; request.read(rFrom, rEnd); - handleMsgsStates(request.c_msg_resend_req().vmsg_ids.c_vector().v, states, toAck); + handleMsgsStates(request.c_msg_resend_req().vmsg_ids.v, states, toAck); } } catch(Exception &) { LOG(("Message Error: could not parse sent msgs_state_req")); @@ -1808,9 +1808,9 @@ ConnectionPrivate::HandleResult ConnectionPrivate::handleOneReceived(const mtpPr MTPMsgsAllInfo msg; msg.read(from, end); - const auto &data(msg.c_msgs_all_info()); - const auto &ids(data.vmsg_ids.c_vector().v); - const auto &states(data.vinfo.c_string().v); + auto &data = msg.c_msgs_all_info(); + auto &ids = data.vmsg_ids.v; + auto &states = data.vinfo.v; QVector toAck; @@ -1880,9 +1880,9 @@ ConnectionPrivate::HandleResult ConnectionPrivate::handleOneReceived(const mtpPr case mtpc_msg_resend_req: { MTPMsgResendReq msg; msg.read(from, end); - const auto &ids(msg.c_msg_resend_req().vmsg_ids.c_vector().v); + auto &ids = msg.c_msg_resend_req().vmsg_ids.v; - uint32 idsCount = ids.size(); + auto idsCount = ids.size(); DEBUG_LOG(("Message Info: resend of msgs requested, ids: %1").arg(Logs::vector(ids))); if (!idsCount) return (badTime ? HandleResult::Ignored : HandleResult::Success); @@ -2045,7 +2045,7 @@ ConnectionPrivate::HandleResult ConnectionPrivate::handleOneReceived(const mtpPr mtpBuffer ConnectionPrivate::ungzip(const mtpPrime *from, const mtpPrime *end) const { MTPstring packed; packed.read(from, end); // read packed string as serialized mtp string type - uint32 packedLen = packed.c_string().v.size(), unpackedChunk = packedLen, unpackedLen = 0; + uint32 packedLen = packed.v.size(), unpackedChunk = packedLen, unpackedLen = 0; mtpBuffer result; // * 4 because of mtpPrime type result.resize(0); @@ -2061,7 +2061,7 @@ mtpBuffer ConnectionPrivate::ungzip(const mtpPrime *from, const mtpPrime *end) c return result; } stream.avail_in = packedLen; - stream.next_in = const_cast(reinterpret_cast(packed.c_string().v.data())); + stream.next_in = reinterpret_cast(packed.v.data()); stream.avail_out = 0; while (!stream.avail_out) { @@ -2072,7 +2072,7 @@ mtpBuffer ConnectionPrivate::ungzip(const mtpPrime *from, const mtpPrime *end) c if (res != Z_OK && res != Z_STREAM_END) { inflateEnd(&stream); LOG(("RPC Error: could not unpack gziped data, code: %1").arg(res)); - DEBUG_LOG(("RPC Error: bad gzip: %1").arg(Logs::mb(&packed.c_string().v[0], packedLen).str())); + DEBUG_LOG(("RPC Error: bad gzip: %1").arg(Logs::mb(&packed.v[0], packedLen).str())); return mtpBuffer(); } } @@ -2202,15 +2202,18 @@ void ConnectionPrivate::requestsAcked(const QVector &ids, bool byRespon } } -void ConnectionPrivate::handleMsgsStates(const QVector &ids, const string &states, QVector &acked) { +void ConnectionPrivate::handleMsgsStates(const QVector &ids, const QByteArray &states, QVector &acked) { uint32 idsCount = ids.size(); if (!idsCount) { DEBUG_LOG(("Message Info: void ids vector in handleMsgsStates()")); return; } + if (states.size() < idsCount) { + LOG(("Message Error: got less states than required ids count.")); + return; + } acked.reserve(acked.size() + idsCount); - for (uint32 i = 0, count = idsCount; i < count; ++i) { char state = states[i]; uint64 requestMsgId = ids[i].v; @@ -2410,7 +2413,7 @@ void ConnectionPrivate::pqAnswered() { static MTP::internal::RSAPublicKeys RSAKeys = MTP::internal::InitRSAPublicKeys(); const MTP::internal::RSAPublicKey *rsaKey = nullptr; - auto &fingerPrints = res_pq.c_resPQ().vserver_public_key_fingerprints.c_vector().v; + auto &fingerPrints = res_pq.c_resPQ().vserver_public_key_fingerprints.v; for (auto &fingerPrint : fingerPrints) { auto it = RSAKeys.constFind(static_cast(fingerPrint.v)); if (it != RSAKeys.cend()) { @@ -2433,16 +2436,16 @@ void ConnectionPrivate::pqAnswered() { _authKeyData->server_nonce = res_pq_data.vserver_nonce; _authKeyData->new_nonce = rand_value(); - auto &pq = res_pq_data.vpq.c_string().v; - auto p = std::string(); - auto q = std::string(); + auto &pq = res_pq_data.vpq.v; + auto p = QByteArray(); + auto q = QByteArray(); if (!MTP::internal::parsePQ(pq, p, q)) { LOG(("AuthKey Error: could not factor pq!")); - DEBUG_LOG(("AuthKey Error: problematic pq: %1").arg(Logs::mb(&pq[0], pq.length()).str())); + DEBUG_LOG(("AuthKey Error: problematic pq: %1").arg(Logs::mb(pq.constData(), pq.length()).str())); return restart(); } - auto p_q_inner = MTP_p_q_inner_data(res_pq_data.vpq, MTP_string(std::move(p)), MTP_string(std::move(q)), _authKeyData->nonce, _authKeyData->server_nonce, _authKeyData->new_nonce); + auto p_q_inner = MTP_p_q_inner_data(res_pq_data.vpq, MTP_bytes(std::move(p)), MTP_bytes(std::move(q)), _authKeyData->nonce, _authKeyData->server_nonce, _authKeyData->new_nonce); auto dhEncString = encryptPQInnerRSA(p_q_inner, rsaKey); if (dhEncString.empty()) { return restart(); @@ -2516,11 +2519,11 @@ void ConnectionPrivate::dhParamsAnswered() { return restart(); } - const string &encDHStr(encDH.vencrypted_answer.c_string().v); + auto &encDHStr = encDH.vencrypted_answer.v; uint32 encDHLen = encDHStr.length(), encDHBufLen = encDHLen >> 2; if ((encDHLen & 0x03) || encDHBufLen < 6) { LOG(("AuthKey Error: bad encrypted data length %1 (in server_DH_params_ok)!").arg(encDHLen)); - DEBUG_LOG(("AuthKey Error: received encrypted data %1").arg(Logs::mb(&encDHStr[0], encDHLen).str())); + DEBUG_LOG(("AuthKey Error: received encrypted data %1").arg(Logs::mb(encDHStr.constData(), encDHLen).str())); return restart(); } @@ -2543,7 +2546,7 @@ void ConnectionPrivate::dhParamsAnswered() { memcpy(_authKeyData->aesIV + 8, sha1nn, 20); memcpy(_authKeyData->aesIV + 28, &_authKeyData->new_nonce, 4); - aesIgeDecrypt(&encDHStr[0], &decBuffer[0], encDHLen, _authKeyData->aesKey, _authKeyData->aesIV); + aesIgeDecrypt(encDHStr.constData(), &decBuffer[0], encDHLen, _authKeyData->aesKey, _authKeyData->aesIV); const mtpPrime *from(&decBuffer[5]), *to(from), *end(from + (encDHBufLen - 5)); MTPServer_DH_inner_data dh_inner; @@ -2562,23 +2565,24 @@ void ConnectionPrivate::dhParamsAnswered() { uchar sha1Buffer[20]; if (memcmp(&decBuffer[0], hashSha1(&decBuffer[5], (to - from) * sizeof(mtpPrime), sha1Buffer), 20)) { LOG(("AuthKey Error: sha1 hash of encrypted part did not match!")); - DEBUG_LOG(("AuthKey Error: sha1 did not match, server_nonce: %1, new_nonce %2, encrypted data %3").arg(Logs::mb(&_authKeyData->server_nonce, 16).str()).arg(Logs::mb(&_authKeyData->new_nonce, 16).str()).arg(Logs::mb(&encDHStr[0], encDHLen).str())); + DEBUG_LOG(("AuthKey Error: sha1 did not match, server_nonce: %1, new_nonce %2, encrypted data %3").arg(Logs::mb(&_authKeyData->server_nonce, 16).str()).arg(Logs::mb(&_authKeyData->new_nonce, 16).str()).arg(Logs::mb(encDHStr.constData(), encDHLen).str())); return restart(); } unixtimeSet(dh_inner_data.vserver_time.v); - const string &dhPrime(dh_inner_data.vdh_prime.c_string().v), &g_a(dh_inner_data.vg_a.c_string().v); + auto &dhPrime = dh_inner_data.vdh_prime.v; + auto &g_a = dh_inner_data.vg_a.v; if (dhPrime.length() != 256 || g_a.length() != 256) { LOG(("AuthKey Error: bad dh_prime len (%1) or g_a len (%2)").arg(dhPrime.length()).arg(g_a.length())); - DEBUG_LOG(("AuthKey Error: dh_prime %1, g_a %2").arg(Logs::mb(&dhPrime[0], dhPrime.length()).str()).arg(Logs::mb(&g_a[0], g_a.length()).str())); + DEBUG_LOG(("AuthKey Error: dh_prime %1, g_a %2").arg(Logs::mb(dhPrime.constData(), dhPrime.length()).str()).arg(Logs::mb(g_a.constData(), g_a.length()).str())); return restart(); } // check that dhPrime and (dhPrime - 1) / 2 are really prime using openssl BIGNUM methods MTP::internal::BigNumPrimeTest bnPrimeTest; - if (!bnPrimeTest.isPrimeAndGood(&dhPrime[0], MTPMillerRabinIterCount, dh_inner_data.vg.v)) { + if (!bnPrimeTest.isPrimeAndGood(dhPrime.constData(), MTPMillerRabinIterCount, dh_inner_data.vg.v)) { LOG(("AuthKey Error: bad dh_prime primality!").arg(dhPrime.length()).arg(g_a.length())); - DEBUG_LOG(("AuthKey Error: dh_prime %1").arg(Logs::mb(&dhPrime[0], dhPrime.length()).str())); + DEBUG_LOG(("AuthKey Error: dh_prime %1").arg(Logs::mb(dhPrime.constData(), dhPrime.length()).str())); return restart(); } diff --git a/Telegram/SourceFiles/mtproto/connection.h b/Telegram/SourceFiles/mtproto/connection.h index 8973876cd2..7b33ea1fd3 100644 --- a/Telegram/SourceFiles/mtproto/connection.h +++ b/Telegram/SourceFiles/mtproto/connection.h @@ -174,7 +174,7 @@ private: }; HandleResult handleOneReceived(const mtpPrime *from, const mtpPrime *end, uint64 msgId, int32 serverTime, uint64 serverSalt, bool badTime); mtpBuffer ungzip(const mtpPrime *from, const mtpPrime *end) const; - void handleMsgsStates(const QVector &ids, const std::string &states, QVector &acked); + void handleMsgsStates(const QVector &ids, const QByteArray &states, QVector &acked); void clearMessages(); diff --git a/Telegram/SourceFiles/mtproto/core_types.cpp b/Telegram/SourceFiles/mtproto/core_types.cpp index 59ac597916..a8b9f3ae54 100644 --- a/Telegram/SourceFiles/mtproto/core_types.cpp +++ b/Telegram/SourceFiles/mtproto/core_types.cpp @@ -63,8 +63,8 @@ void mtpTextSerializeCore(MTPStringLogger &to, const mtpPrime *&from, const mtpP case mtpc_string: { MTPstring value; value.read(from, end, cons); - QByteArray strUtf8(value.c_string().v.c_str(), value.c_string().v.length()); - QString str = QString::fromUtf8(strUtf8); + auto strUtf8 = value.v; + auto str = QString::fromUtf8(strUtf8); if (str.toUtf8() == strUtf8) { to.add("\"").add(str.replace('\\', "\\\\").replace('"', "\\\"").replace('\n', "\\n")).add("\" [STRING]"); } else if (strUtf8.size() < 64) { @@ -96,7 +96,7 @@ void mtpTextSerializeCore(MTPStringLogger &to, const mtpPrime *&from, const mtpP case mtpc_gzip_packed: { MTPstring packed; packed.read(from, end); // read packed string as serialized mtp string type - uint32 packedLen = packed.c_string().v.size(), unpackedChunk = packedLen; + uint32 packedLen = packed.v.size(), unpackedChunk = packedLen; mtpBuffer result; // * 4 because of mtpPrime type result.resize(0); @@ -111,7 +111,7 @@ void mtpTextSerializeCore(MTPStringLogger &to, const mtpPrime *&from, const mtpP throw Exception(QString("ungzip init, code: %1").arg(res)); } stream.avail_in = packedLen; - stream.next_in = const_cast(reinterpret_cast(packed.c_string().v.data())); + stream.next_in = reinterpret_cast(packed.v.data()); stream.avail_out = 0; while (!stream.avail_out) { result.resize(result.size() + unpackedChunk); diff --git a/Telegram/SourceFiles/mtproto/core_types.h b/Telegram/SourceFiles/mtproto/core_types.h index 8262120571..bc6d2e97df 100644 --- a/Telegram/SourceFiles/mtproto/core_types.h +++ b/Telegram/SourceFiles/mtproto/core_types.h @@ -99,7 +99,6 @@ public: static bool needAckByType(mtpTypeId type); private: - static uint32 _padding(uint32 requestSize) { return ((8 + requestSize) & 0x03) ? (4 - ((8 + requestSize) & 0x03)) : 0; } @@ -542,36 +541,15 @@ inline bool operator!=(const MTPdouble &a, const MTPdouble &b) { return a.v != b.v; } -class MTPDstring : public mtpData { -public: - MTPDstring() { - } - MTPDstring(const std::string &val) : v(val) { - } - MTPDstring(std::string &&val) : v(std::move(val)) { - } - MTPDstring(const QString &val) : v(val.toUtf8().constData()) { - } - MTPDstring(const QByteArray &val) : v(val.constData(), val.size()) { - } - MTPDstring(const char *val) : v(val) { - } +class MTPstring; +using MTPbytes = MTPstring; - std::string v; - -}; - -class MTPstring : private mtpDataOwner { +class MTPstring { public: MTPstring() = default; - const MTPDstring &c_string() const { - t_assert(data != nullptr); - return static_cast(*data); - } - uint32 innerLength() const { - uint32 l = c_string().v.length(); + uint32 l = v.length(); if (l < 254) { l += 1; } else { @@ -601,11 +579,10 @@ public: } if (from > end) throw mtpErrorInsufficient(); - auto string = std::string(reinterpret_cast(buf), l); - data = std::make_shared(std::move(string)); + v = QByteArray(reinterpret_cast(buf), l); } void write(mtpBuffer &to) const { - uint32 l = c_string().v.length(), s = l + ((l < 254) ? 1 : 4), was = to.size(); + uint32 l = v.length(), s = l + ((l < 254) ? 1 : 4), was = to.size(); if (s & 0x03) { s += 4; } @@ -621,89 +598,67 @@ public: *(buf++) = (char)((l >> 8) & 0xFF); *(buf++) = (char)((l >> 16) & 0xFF); } - memcpy(buf, c_string().v.c_str(), l); + memcpy(buf, v.constData(), l); } + QByteArray v; + private: - explicit MTPstring(std::shared_ptr &&data) : mtpDataOwner(std::move(data)) { + explicit MTPstring(QByteArray &&data) : v(std::move(data)) { } friend MTPstring MTP_string(const std::string &v); - friend MTPstring MTP_string(std::string &&v); friend MTPstring MTP_string(const QString &v); friend MTPstring MTP_string(const char *v); - friend MTPstring MTP_bytes(const QByteArray &v); + friend MTPbytes MTP_bytes(const QByteArray &v); + friend MTPbytes MTP_bytes(QByteArray &&v); }; -inline MTPstring MTP_string(const std::string &v) { - return MTPstring(std::make_shared(v)); -} -inline MTPstring MTP_string(std::string &&v) { - return MTPstring(std::make_shared(std::move(v))); -} -inline MTPstring MTP_string(const QString &v) { - return MTPstring(std::make_shared(v)); -} -inline MTPstring MTP_string(const char *v) { - return MTPstring(std::make_shared(v)); -} -MTPstring MTP_string(const QByteArray &v) = delete; using MTPString = MTPBoxed; - -using MTPbytes = MTPstring; using MTPBytes = MTPBoxed; +inline MTPstring MTP_string(const std::string &v) { + return MTPstring(QByteArray(v.data(), v.size())); +} +inline MTPstring MTP_string(const QString &v) { + return MTPstring(v.toUtf8()); +} +inline MTPstring MTP_string(const char *v) { + return MTPstring(QByteArray(v, strlen(v))); +} +MTPstring MTP_string(const QByteArray &v) = delete; + inline MTPbytes MTP_bytes(const QByteArray &v) { - return MTPbytes(std::make_shared(v)); + return MTPbytes(QByteArray(v)); +} +inline MTPbytes MTP_bytes(QByteArray &&v) { + return MTPbytes(std::move(v)); } inline bool operator==(const MTPstring &a, const MTPstring &b) { - return a.c_string().v == b.c_string().v; + return a.v == b.v; } inline bool operator!=(const MTPstring &a, const MTPstring &b) { - return a.c_string().v != b.c_string().v; + return a.v != b.v; } inline QString qs(const MTPstring &v) { - auto &d = v.c_string().v; - return QString::fromUtf8(d.data(), d.length()); + return QString::fromUtf8(v.v); } inline QByteArray qba(const MTPstring &v) { - auto &d = v.c_string().v; - return QByteArray(d.data(), d.length()); + return v.v; } template -class MTPDvector : public mtpData { -public: - MTPDvector() { - } - MTPDvector(uint32 count) : v(count) { - } - MTPDvector(uint32 count, const T &value) : v(count, value) { - } - MTPDvector(const QVector &vec) : v(vec) { - } - - using VType = QVector; - VType v; -}; - -template -class MTPvector : private mtpDataOwner { +class MTPvector { public: MTPvector() = default; - const MTPDvector &c_vector() const { - t_assert(data != nullptr); - return static_cast&>(*data); - } - uint32 innerLength() const { uint32 result(sizeof(uint32)); - for_const (auto &item, c_vector().v) { + for_const (auto &item, v) { result += item.innerLength(); } return result; @@ -720,17 +675,19 @@ public: for (auto &item : vector) { item.read(from, end); } - data = std::make_shared>(std::move(vector)); + v = std::move(vector); } void write(mtpBuffer &to) const { - to.push_back(c_vector().v.size()); - for_const (auto &item, c_vector().v) { + to.push_back(v.size()); + for_const (auto &item, v) { item.write(to); } } + QVector v; + private: - explicit MTPvector(std::shared_ptr> &&data) : mtpDataOwner(std::move(data)) { + explicit MTPvector(QVector &&data) : v(std::move(data)) { } template @@ -745,19 +702,19 @@ private: }; template inline MTPvector MTP_vector(uint32 count) { - return MTPvector(std::make_shared>(count)); + return MTPvector(QVector(count)); } template inline MTPvector MTP_vector(uint32 count, const T &value) { - return MTPvector(std::make_shared>(count, value)); + return MTPvector(QVector(count, value)); } template inline MTPvector MTP_vector(const QVector &v) { - return MTPvector(std::make_shared>(v)); + return MTPvector(QVector(v)); } template inline MTPvector MTP_vector(QVector &&v) { - return MTPvector(std::make_shared>(std::move(v))); + return MTPvector(std::move(v)); } template using MTPVector = MTPBoxed>; diff --git a/Telegram/SourceFiles/mtproto/dc_options.cpp b/Telegram/SourceFiles/mtproto/dc_options.cpp index dc99dd9c60..8ab5e7817d 100644 --- a/Telegram/SourceFiles/mtproto/dc_options.cpp +++ b/Telegram/SourceFiles/mtproto/dc_options.cpp @@ -72,7 +72,7 @@ void DcOptions::processFromList(const QVector &options, bool overwr } shiftedIdsProcessed.push_back(dcIdWithShift); - auto &ip = option.vip_address.c_string().v; + auto &ip = std::string(option.vip_address.v.constData(), option.vip_address.v.size()); auto port = option.vport.v; if (applyOneGuarded(dcId, flags, ip, port)) { if (!base::contains(idsChanged, dcId)) { @@ -100,11 +100,11 @@ void DcOptions::processFromList(const QVector &options, bool overwr } void DcOptions::setFromList(const MTPVector &options) { - processFromList(options.c_vector().v, true); + processFromList(options.v, true); } void DcOptions::addFromList(const MTPVector &options) { - processFromList(options.c_vector().v, false); + processFromList(options.v, false); } void DcOptions::addFromOther(const DcOptions &options) { diff --git a/Telegram/SourceFiles/mtproto/mtp_instance.cpp b/Telegram/SourceFiles/mtproto/mtp_instance.cpp index 403c3b679a..2d2e0b413e 100644 --- a/Telegram/SourceFiles/mtproto/mtp_instance.cpp +++ b/Telegram/SourceFiles/mtproto/mtp_instance.cpp @@ -536,9 +536,9 @@ void Instance::Private::configLoadDone(const MTPConfig &result) { } auto &data = result.c_config(); - DEBUG_LOG(("MTP Info: got config, chat_size_max: %1, date: %2, test_mode: %3, this_dc: %4, dc_options.length: %5").arg(data.vchat_size_max.v).arg(data.vdate.v).arg(mtpIsTrue(data.vtest_mode)).arg(data.vthis_dc.v).arg(data.vdc_options.c_vector().v.size())); + DEBUG_LOG(("MTP Info: got config, chat_size_max: %1, date: %2, test_mode: %3, this_dc: %4, dc_options.length: %5").arg(data.vchat_size_max.v).arg(data.vdate.v).arg(mtpIsTrue(data.vtest_mode)).arg(data.vthis_dc.v).arg(data.vdc_options.v.size())); - if (data.vdc_options.c_vector().v.empty()) { + if (data.vdc_options.v.empty()) { LOG(("MTP Error: config with empty dc_options received!")); } else { _dcOptions->setFromList(data.vdc_options); diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index 4ff7dec87c..ee586a94e6 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -204,26 +204,26 @@ void OverviewInner::searchReceived(SearchRequestType type, const MTPmessages_Mes } if (_searchRequest == req) { - const QVector *messages = 0; + const QVector *messages = nullptr; switch (result.type()) { case mtpc_messages_messages: { - auto &d(result.c_messages_messages()); + auto &d = result.c_messages_messages(); App::feedUsers(d.vusers); App::feedChats(d.vchats); - messages = &d.vmessages.c_vector().v; + messages = &d.vmessages.v; _searchedCount = messages->size(); } break; case mtpc_messages_messagesSlice: { - auto &d(result.c_messages_messagesSlice()); + auto &d = result.c_messages_messagesSlice(); App::feedUsers(d.vusers); App::feedChats(d.vchats); - messages = &d.vmessages.c_vector().v; + messages = &d.vmessages.v; _searchedCount = d.vcount.v; } break; case mtpc_messages_channelMessages: { - auto &d(result.c_messages_channelMessages()); + auto &d = result.c_messages_channelMessages(); if (_peer && _peer->isChannel()) { _peer->asChannel()->ptsReceived(d.vpts.v); } else { @@ -231,7 +231,7 @@ void OverviewInner::searchReceived(SearchRequestType type, const MTPmessages_Mes } App::feedUsers(d.vusers); App::feedChats(d.vchats); - messages = &d.vmessages.c_vector().v; + messages = &d.vmessages.v; _searchedCount = d.vcount.v; } break; } diff --git a/Telegram/SourceFiles/profile/profile_common_groups_section.cpp b/Telegram/SourceFiles/profile/profile_common_groups_section.cpp index f3734754ca..705be58722 100644 --- a/Telegram/SourceFiles/profile/profile_common_groups_section.cpp +++ b/Telegram/SourceFiles/profile/profile_common_groups_section.cpp @@ -159,7 +159,7 @@ void InnerWidget::preloadMore() { _preloadGroupId = 0; _allLoaded = true; if (auto chats = Api::getChatsFromMessagesChats(result)) { - auto &list = chats->c_vector().v; + auto &list = chats->v; if (!list.empty()) { _items.reserve(_items.size() + list.size()); for_const (auto &chatData, list) { diff --git a/Telegram/SourceFiles/stickers/emoji_pan.cpp b/Telegram/SourceFiles/stickers/emoji_pan.cpp index ed4f5b80ea..eb238591cc 100644 --- a/Telegram/SourceFiles/stickers/emoji_pan.cpp +++ b/Telegram/SourceFiles/stickers/emoji_pan.cpp @@ -3799,9 +3799,9 @@ void EmojiPan::inlineResultsDone(const MTPmessages_BotResults &result) { bool adding = (it != _inlineCache.cend()); if (result.type() == mtpc_messages_botResults) { - const auto &d(result.c_messages_botResults()); - const auto &v(d.vresults.c_vector().v); - uint64 queryId(d.vquery_id.v); + auto &d = result.c_messages_botResults(); + auto &v = d.vresults.v; + auto queryId = d.vquery_id.v; if (!adding) { it = _inlineCache.insert(_inlineQuery, new internal::InlineCacheEntry()); diff --git a/Telegram/SourceFiles/stickers/stickers.cpp b/Telegram/SourceFiles/stickers/stickers.cpp index bbabbce0a9..fe1a3a7631 100644 --- a/Telegram/SourceFiles/stickers/stickers.cpp +++ b/Telegram/SourceFiles/stickers/stickers.cpp @@ -39,7 +39,7 @@ internal::FeaturedReader *FeaturedReaderInstance = nullptr; } // namespace void applyArchivedResult(const MTPDmessages_stickerSetInstallResultArchive &d) { - auto &v = d.vsets.c_vector().v; + auto &v = d.vsets.v; auto &order = Global::RefStickerSetsOrder(); Stickers::Order archived; archived.reserve(v.size()); diff --git a/Telegram/SourceFiles/storage/file_download.cpp b/Telegram/SourceFiles/storage/file_download.cpp index fdf6aa5e0f..38cb3862a0 100644 --- a/Telegram/SourceFiles/storage/file_download.cpp +++ b/Telegram/SourceFiles/storage/file_download.cpp @@ -473,7 +473,7 @@ void mtpFileLoader::partLoaded(int32 offset, const MTPupload_File &result, mtpRe _requests.erase(i); auto &d = result.c_upload_file(); - auto &bytes = d.vbytes.c_string().v; + auto &bytes = d.vbytes.v; if (DebugLogging::FileLoader() && _id) { DEBUG_LOG(("FileLoader(%1): got part with offset=%2, bytes=%3, _queue->queries=%4, _nextRequestOffset=%5, _requests=%6").arg(_id).arg(offset).arg(bytes.size()).arg(_queue->queries).arg(_nextRequestOffset).arg(serializereqs(_requests))); diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 9b6bca4e2b..79e5f923b9 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -514,9 +514,9 @@ void UserData::setBotInfo(const MTPBotInfo &info) { botInfo->text = Text(st::msgMinWidth); } - const auto &v(d.vcommands.c_vector().v); + auto &v = d.vcommands.v; botInfo->commands.reserve(v.size()); - bool changedCommands = false; + auto changedCommands = false; int32 j = 0; for (int32 i = 0, l = v.size(); i < l; ++i) { if (v.at(i).type() != mtpc_botCommand) continue; diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index d472cbe0d9..a797c8f4a4 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -195,11 +195,11 @@ constexpr const MsgId ServerMaxMsgId = 0x3FFFFFFF; constexpr const MsgId ShowAtUnreadMsgId = 0; struct NotifySettings { - NotifySettings() : flags(MTPDpeerNotifySettings::Flag::f_show_previews), mute(0), sound("default") { + NotifySettings() : flags(MTPDpeerNotifySettings::Flag::f_show_previews), sound(qsl("default")) { } MTPDpeerNotifySettings::Flags flags; - TimeId mute; - std::string sound; + TimeId mute = 0; + QString sound; bool previews() const { return flags & MTPDpeerNotifySettings::Flag::f_show_previews; }