From 567bf6064485a25da3c5d17f292246160f97c3da Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 5 Jul 2019 15:38:38 +0200 Subject: [PATCH] Use getters in MTP classes. --- Telegram/SourceFiles/apiwrap.cpp | 473 +++++++-------- Telegram/SourceFiles/auth_session.cpp | 2 +- .../SourceFiles/boxes/add_contact_box.cpp | 28 +- .../SourceFiles/boxes/change_phone_box.cpp | 14 +- Telegram/SourceFiles/boxes/confirm_box.cpp | 11 +- .../SourceFiles/boxes/confirm_phone_box.cpp | 36 +- Telegram/SourceFiles/boxes/passcode_box.cpp | 18 +- .../boxes/peer_list_controllers.cpp | 12 +- .../boxes/peers/add_participants_box.cpp | 18 +- .../boxes/peers/edit_participant_box.cpp | 14 +- .../boxes/peers/edit_participants_box.cpp | 34 +- .../boxes/peers/edit_peer_info_box.cpp | 2 +- Telegram/SourceFiles/boxes/sessions_box.cpp | 28 +- Telegram/SourceFiles/boxes/share_box.cpp | 10 +- .../SourceFiles/boxes/sticker_set_box.cpp | 40 +- Telegram/SourceFiles/boxes/stickers_box.cpp | 22 +- Telegram/SourceFiles/boxes/url_auth_box.cpp | 8 +- .../calls/calls_box_controller.cpp | 8 +- Telegram/SourceFiles/calls/calls_call.cpp | 91 ++- Telegram/SourceFiles/calls/calls_instance.cpp | 26 +- .../chat_helpers/emoji_keywords.cpp | 16 +- .../chat_helpers/gifs_list_widget.cpp | 18 +- .../SourceFiles/chat_helpers/stickers.cpp | 155 ++--- .../chat_helpers/stickers_list_widget.cpp | 20 +- .../codegen/scheme/codegen_scheme.py | 153 +++-- Telegram/SourceFiles/core/changelogs.cpp | 4 +- .../SourceFiles/core/core_cloud_password.cpp | 36 +- .../SourceFiles/core/local_url_handlers.cpp | 11 +- Telegram/SourceFiles/core/update_checker.cpp | 6 +- Telegram/SourceFiles/data/data_channel.cpp | 125 ++-- Telegram/SourceFiles/data/data_chat.cpp | 78 +-- Telegram/SourceFiles/data/data_document.cpp | 36 +- Telegram/SourceFiles/data/data_drafts.cpp | 13 +- .../SourceFiles/data/data_file_origin.cpp | 54 +- Telegram/SourceFiles/data/data_folder.cpp | 20 +- Telegram/SourceFiles/data/data_location.h | 6 +- .../SourceFiles/data/data_media_types.cpp | 86 +-- .../SourceFiles/data/data_notify_settings.cpp | 22 +- Telegram/SourceFiles/data/data_peer.cpp | 4 +- Telegram/SourceFiles/data/data_poll.cpp | 25 +- .../data/data_search_controller.cpp | 40 +- .../SourceFiles/data/data_search_controller.h | 2 +- Telegram/SourceFiles/data/data_session.cpp | 494 ++++++++-------- Telegram/SourceFiles/data/data_types.cpp | 18 +- Telegram/SourceFiles/data/data_types.h | 6 +- Telegram/SourceFiles/data/data_user.cpp | 40 +- Telegram/SourceFiles/data/data_wall_paper.cpp | 26 +- Telegram/SourceFiles/data/data_web_page.cpp | 41 +- .../dialogs/dialogs_pinned_list.cpp | 4 +- .../SourceFiles/dialogs/dialogs_widget.cpp | 35 +- .../export/data/export_data_types.cpp | 538 +++++++++--------- .../SourceFiles/export/export_api_wrap.cpp | 93 +-- .../export/view/export_view_settings.cpp | 10 +- .../admin_log/history_admin_log_inner.cpp | 20 +- .../admin_log/history_admin_log_item.cpp | 157 ++--- Telegram/SourceFiles/history/history.cpp | 101 ++-- Telegram/SourceFiles/history/history_item.cpp | 53 +- .../history/history_item_components.cpp | 42 +- .../SourceFiles/history/history_message.cpp | 150 ++--- .../SourceFiles/history/history_service.cpp | 85 +-- .../SourceFiles/history/history_widget.cpp | 50 +- .../info_common_groups_inner_widget.cpp | 2 +- .../inline_bots/inline_bot_result.cpp | 139 ++--- .../inline_bots/inline_bot_send_data.h | 4 +- .../inline_bots/inline_results_widget.cpp | 17 +- Telegram/SourceFiles/intro/introcode.cpp | 13 +- Telegram/SourceFiles/intro/introphone.cpp | 7 +- Telegram/SourceFiles/intro/intropwdcheck.cpp | 6 +- Telegram/SourceFiles/intro/introsignup.cpp | 4 +- Telegram/SourceFiles/intro/introwidget.cpp | 27 +- .../SourceFiles/lang/lang_cloud_manager.cpp | 30 +- Telegram/SourceFiles/lang/lang_instance.cpp | 36 +- Telegram/SourceFiles/mainwidget.cpp | 444 ++++++++------- .../media_streaming_loader_mtproto.cpp | 12 +- .../SourceFiles/mtproto/config_loader.cpp | 4 +- Telegram/SourceFiles/mtproto/connection.cpp | 197 +++---- .../SourceFiles/mtproto/connection_http.cpp | 2 +- .../SourceFiles/mtproto/connection_tcp.cpp | 2 +- Telegram/SourceFiles/mtproto/core_types.h | 61 ++ Telegram/SourceFiles/mtproto/dc_options.cpp | 22 +- .../mtproto/dedicated_file_loader.cpp | 46 +- Telegram/SourceFiles/mtproto/mtp_instance.cpp | 82 ++- Telegram/SourceFiles/mtproto/rpc_sender.cpp | 4 +- .../mtproto/special_config_request.cpp | 22 +- Telegram/SourceFiles/mtproto/type_utils.cpp | 10 - Telegram/SourceFiles/mtproto/type_utils.h | 2 - .../passport/passport_form_controller.cpp | 202 ++++--- .../settings/settings_privacy_controllers.cpp | 8 +- .../SourceFiles/storage/file_download.cpp | 28 +- .../SourceFiles/storage/localimageloader.cpp | 21 +- Telegram/SourceFiles/storage/localstorage.cpp | 10 +- .../support/support_autocomplete.cpp | 6 +- .../SourceFiles/support/support_helper.cpp | 10 +- Telegram/SourceFiles/ui/image/image.cpp | 77 +-- .../SourceFiles/ui/image/image_location.cpp | 74 +-- Telegram/SourceFiles/ui/text/text_entity.cpp | 44 +- .../window/themes/window_theme.cpp | 2 +- .../window/window_lock_widgets.cpp | 11 +- .../SourceFiles/window/window_peer_menu.cpp | 2 +- Telegram/gyp/telegram_sources.txt | 1 - 100 files changed, 2807 insertions(+), 2672 deletions(-) delete mode 100644 Telegram/SourceFiles/mtproto/type_utils.cpp diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 090488ae7..b52302197 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -326,16 +326,16 @@ void ApiWrap::getProxyPromotionDelayed(TimeId now, TimeId next) { void ApiWrap::proxyPromotionDone(const MTPhelp_ProxyData &proxy) { _proxyPromotionNextRequestTime = proxy.match([&](const auto &data) { - return data.vexpires.v; + return data.vexpires().v; }); getProxyPromotionDelayed(unixtime(), _proxyPromotionNextRequestTime); proxy.match([&](const MTPDhelp_proxyDataEmpty &data) { _session->data().setProxyPromoted(nullptr); }, [&](const MTPDhelp_proxyDataPromo &data) { - _session->data().processChats(data.vchats); - _session->data().processUsers(data.vusers); - const auto peerId = peerFromMTP(data.vpeer); + _session->data().processChats(data.vchats()); + _session->data().processUsers(data.vusers()); + const auto peerId = peerFromMTP(data.vpeer()); const auto peer = _session->data().peer(peerId); _session->data().setProxyPromoted(peer); if (const auto history = _session->data().historyLoaded(peer)) { @@ -380,7 +380,7 @@ void ApiWrap::requestTermsUpdate() { _termsUpdateRequestId = 0; const auto requestNext = [&](auto &&data) { - const auto timeout = (data.vexpires.v - unixtime()); + const auto timeout = (data.vexpires().v - unixtime()); _termsUpdateSendAt = crl::now() + snap( timeout * crl::time(1000), kTermsUpdateTimeoutMin, @@ -394,7 +394,7 @@ void ApiWrap::requestTermsUpdate() { } break; case mtpc_help_termsOfServiceUpdate: { const auto &data = result.c_help_termsOfServiceUpdate(); - const auto &terms = data.vterms_of_service; + const auto &terms = data.vterms_of_service(); const auto &fields = terms.c_help_termsOfService(); Core::App().lockByTerms( Window::TermsLock::FromMTP(fields)); @@ -439,9 +439,9 @@ void ApiWrap::importChatInvite(const QString &hash) { return; } const auto peerId = chats.v[0].match([](const MTPDchat &data) { - return peerFromChat(data.vid.v); + return peerFromChat(data.vid().v); }, [](const MTPDchannel &data) { - return peerFromChannel(data.vid.v); + return peerFromChannel(data.vid().v); }, [](auto&&) { return PeerId(0); }); @@ -452,9 +452,9 @@ void ApiWrap::importChatInvite(const QString &hash) { } }; result.match([&](const MTPDupdates &data) { - handleChats(data.vchats); + handleChats(data.vchats()); }, [&](const MTPDupdatesCombined &data) { - handleChats(data.vchats); + handleChats(data.vchats()); }, [&](auto &&) { LOG(("API Error: unexpected update cons %1 " "(MainWidget::inviteImportDone)").arg(result.type())); @@ -639,10 +639,10 @@ void ApiWrap::resolveMessageDatas() { void ApiWrap::gotMessageDatas(ChannelData *channel, const MTPmessages_Messages &msgs, mtpRequestId requestId) { const auto handleResult = [&](auto &&result) { - _session->data().processUsers(result.vusers); - _session->data().processChats(result.vchats); + _session->data().processUsers(result.vusers()); + _session->data().processChats(result.vchats()); _session->data().processMessages( - result.vmessages, + result.vmessages(), NewMessageType::Existing); }; switch (msgs.type()) { @@ -655,7 +655,7 @@ void ApiWrap::gotMessageDatas(ChannelData *channel, const MTPmessages_Messages & case mtpc_messages_channelMessages: { auto &d = msgs.c_messages_channelMessages(); if (channel) { - channel->ptsReceived(d.vpts.v); + channel->ptsReceived(d.vpts().v); } else { LOG(("App Error: received messages.channelMessages when no channel was passed! (ApiWrap::gotDependencyItem)")); } @@ -720,7 +720,7 @@ QString ApiWrap::exportDirectMessageLink(not_null item) { MTP_bool(false) )).done([=](const MTPExportedMessageLink &result) { const auto link = result.match([&](const auto &data) { - return qs(data.vlink); + return qs(data.vlink()); }); if (current != link) { _unlikelyMessageLinks.emplace_or_assign(itemId, link); @@ -742,11 +742,11 @@ void ApiWrap::requestContacts() { } Assert(result.type() == mtpc_contacts_contacts); const auto &d = result.c_contacts_contacts(); - _session->data().processUsers(d.vusers); - for (const auto &contact : d.vcontacts.v) { + _session->data().processUsers(d.vusers()); + for (const auto &contact : d.vcontacts().v) { if (contact.type() != mtpc_contact) continue; - const auto userId = contact.c_contact().vuser_id.v; + const auto userId = contact.c_contact().vuser_id().v; if (userId == _session->userId()) { _session->user()->setIsContact(true); } @@ -800,23 +800,23 @@ void ApiWrap::requestMoreDialogs(Data::Folder *folder) { state->listReceived = true; dialogsLoadFinish(folder); // may kill 'state'. } - return int(data.vdialogs.v.size()); + return int(data.vdialogs().v.size()); }, [&](const MTPDmessages_dialogsSlice &data) { updateDialogsOffset( folder, - data.vdialogs.v, - data.vmessages.v); - return data.vcount.v; + data.vdialogs().v, + data.vmessages().v); + return data.vcount().v; }); result.match([](const MTPDmessages_dialogsNotModified & data) { LOG(("API Error: not-modified received for requested dialogs.")); }, [&](const auto &data) { - _session->data().processUsers(data.vusers); - _session->data().processChats(data.vchats); + _session->data().processUsers(data.vusers()); + _session->data().processChats(data.vchats()); _session->data().applyDialogs( folder, - data.vmessages.v, - data.vdialogs.v, + data.vmessages().v, + data.vdialogs().v, count); }); @@ -861,8 +861,8 @@ void ApiWrap::updateDialogsOffset( auto lastMsgId = MsgId(0); for (const auto &dialog : ranges::view::reverse(dialogs)) { dialog.match([&](const auto &dialog) { - const auto peer = peerFromMTP(dialog.vpeer); - const auto messageId = dialog.vtop_message.v; + const auto peer = peerFromMTP(dialog.vpeer()); + const auto messageId = dialog.vtop_message().v; if (!peer || !messageId) { return; } @@ -944,13 +944,13 @@ void ApiWrap::requestPinnedDialogs(Data::Folder *folder) { )).done([=](const MTPmessages_PeerDialogs &result) { finalize(); result.match([&](const MTPDmessages_peerDialogs &data) { - _session->data().processUsers(data.vusers); - _session->data().processChats(data.vchats); + _session->data().processUsers(data.vusers()); + _session->data().processChats(data.vchats()); _session->data().clearPinnedChats(folder); _session->data().applyDialogs( folder, - data.vmessages.v, - data.vdialogs.v); + data.vmessages().v, + data.vdialogs().v); _session->data().chatsListChanged(folder); _session->data().notifyPinnedDialogsOrderUpdated(); }); @@ -1079,16 +1079,16 @@ void ApiWrap::applyPeerDialogs(const MTPmessages_PeerDialogs &dialogs) { Expects(dialogs.type() == mtpc_messages_peerDialogs); const auto &data = dialogs.c_messages_peerDialogs(); - _session->data().processUsers(data.vusers); - _session->data().processChats(data.vchats); - _session->data().processMessages(data.vmessages, NewMessageType::Last); - for (const auto &dialog : data.vdialogs.v) { + _session->data().processUsers(data.vusers()); + _session->data().processChats(data.vchats()); + _session->data().processMessages(data.vmessages(), NewMessageType::Last); + for (const auto &dialog : data.vdialogs().v) { dialog.match([&](const MTPDdialog &data) { - if (const auto peerId = peerFromMTP(data.vpeer)) { + if (const auto peerId = peerFromMTP(data.vpeer())) { _session->data().history(peerId)->applyDialog(nullptr, data); } }, [&](const MTPDdialogFolder &data) { - const auto folder = _session->data().processFolder(data.vfolder); + const auto folder = _session->data().processFolder(data.vfolder()); folder->applyDialog(data); }); } @@ -1230,24 +1230,24 @@ void ApiWrap::gotChatFull( const MTPmessages_ChatFull &result, mtpRequestId req) { const auto &d = result.c_messages_chatFull(); - _session->data().applyMaximumChatVersions(d.vchats); + _session->data().applyMaximumChatVersions(d.vchats()); - _session->data().processUsers(d.vusers); - _session->data().processChats(d.vchats); + _session->data().processUsers(d.vusers()); + _session->data().processChats(d.vchats()); - d.vfull_chat.match([&](const MTPDchatFull &data) { + d.vfull_chat().match([&](const MTPDchatFull &data) { if (const auto chat = peer->asChat()) { Data::ApplyChatUpdate(chat, data); } else { LOG(("MTP Error: bad type in gotChatFull for channel: %1" - ).arg(d.vfull_chat.type())); + ).arg(d.vfull_chat().type())); } }, [&](const MTPDchannelFull &data) { if (const auto channel = peer->asChannel()) { Data::ApplyChannelUpdate(channel, data); } else { LOG(("MTP Error: bad type in gotChatFull for chat: %1" - ).arg(d.vfull_chat.type())); + ).arg(d.vfull_chat().type())); } }); @@ -1265,7 +1265,7 @@ void ApiWrap::gotUserFull( const MTPUserFull &result, mtpRequestId req) { const auto &d = result.c_userFull(); - if (user == _session->user() && !_session->validateSelf(d.vuser)) { + if (user == _session->user() && !_session->validateSelf(d.vuser())) { constexpr auto kRequestUserAgainTimeout = crl::time(10000); App::CallDelayed(kRequestUserAgainTimeout, _session, [=] { requestFullPeer(user); @@ -1295,7 +1295,7 @@ void ApiWrap::requestPeer(not_null peer) { const auto chatHandler = [=](const MTPmessages_Chats &result) { _peerRequests.remove(peer); const auto &chats = result.match([](const auto &data) { - return data.vchats; + return data.vchats(); }); _session->data().applyMaximumChatVersions(chats); _session->data().processChats(chats); @@ -1329,7 +1329,7 @@ void ApiWrap::requestPeerSettings(not_null peer) { peer->input )).done([=](const MTPPeerSettings &result) { peer->setSettings(result.match([&](const MTPDpeerSettings &data) { - return data.vflags.v; + return data.vflags().v; })); _requestedPeerSettings.erase(peer); }).fail([=](const RPCError &error) { @@ -1509,7 +1509,7 @@ void ApiWrap::requestPeers(const QList &peers) { } const auto handleChats = [=](const MTPmessages_Chats &result) { _session->data().processChats(result.match([](const auto &data) { - return data.vchats; + return data.vchats(); })); }; if (!chats.isEmpty()) { @@ -1608,11 +1608,11 @@ void ApiWrap::requestAdmins(not_null channel) { )).done([this, channel](const MTPchannels_ChannelParticipants &result) { _adminsRequests.remove(channel); result.match([&](const MTPDchannels_channelParticipants &data) { - _session->data().processUsers(data.vusers); + _session->data().processUsers(data.vusers()); applyAdminsList( channel, - data.vcount.v, - data.vparticipants.v); + data.vcount().v, + data.vparticipants().v); }, [&](const MTPDchannels_channelParticipantsNotModified &) { LOG(("API Error: channels.channelParticipantsNotModified received!")); }); @@ -1639,16 +1639,16 @@ void ApiWrap::applyLastParticipantsList( MTP_int(0)); for (const auto &p : list) { const auto userId = p.match([](const auto &data) { - return data.vuser_id.v; + return data.vuser_id().v; }); const auto adminCanEdit = (p.type() == mtpc_channelParticipantAdmin) ? p.c_channelParticipantAdmin().is_can_edit() : false; const auto adminRights = (p.type() == mtpc_channelParticipantAdmin) - ? p.c_channelParticipantAdmin().vadmin_rights + ? p.c_channelParticipantAdmin().vadmin_rights() : emptyAdminRights; const auto restrictedRights = (p.type() == mtpc_channelParticipantBanned) - ? p.c_channelParticipantBanned().vbanned_rights + ? p.c_channelParticipantBanned().vbanned_rights() : emptyRestrictedRights; if (!userId) { continue; @@ -1664,11 +1664,11 @@ void ApiWrap::applyLastParticipantsList( } if (!base::contains(channel->mgInfo->lastParticipants, user)) { channel->mgInfo->lastParticipants.push_back(user); - if (adminRights.c_chatAdminRights().vflags.v) { + if (adminRights.c_chatAdminRights().vflags().v) { channel->mgInfo->lastAdmins.emplace( user, MegagroupInfo::Admin{ adminRights, adminCanEdit }); - } else if (restrictedRights.c_chatBannedRights().vflags.v != 0) { + } else if (restrictedRights.c_chatBannedRights().vflags().v != 0) { channel->mgInfo->lastRestricted.emplace( user, MegagroupInfo::Restricted{ restrictedRights }); @@ -1714,7 +1714,7 @@ void ApiWrap::applyBotsList( auto keyboardBotFound = !history || !history->lastKeyboardFrom; for (const auto &p : list) { const auto userId = p.match([](const auto &data) { - return data.vuser_id.v; + return data.vuser_id().v; }); if (!userId) { continue; @@ -1750,7 +1750,7 @@ void ApiWrap::applyAdminsList( auto admins = ranges::make_iterator_range( list.begin(), list.end() ) | ranges::view::transform([](const MTPChannelParticipant &p) { - return p.match([](const auto &data) { return data.vuser_id.v; }); + return p.match([](const auto &data) { return data.vuser_id().v; }); }); auto adding = base::flat_set{ admins.begin(), admins.end() }; if (channel->mgInfo->creator) { @@ -1800,22 +1800,21 @@ void ApiWrap::requestSelfParticipant(not_null channel) { )).done([=](const MTPchannels_ChannelParticipant &result) { _selfParticipantRequests.erase(channel); result.match([&](const MTPDchannels_channelParticipant &data) { - _session->data().processUsers(data.vusers); + _session->data().processUsers(data.vusers()); - const auto &participant = data.vparticipant; + const auto &participant = data.vparticipant(); participant.match([&](const MTPDchannelParticipantSelf &data) { - finalize(data.vinviter_id.v, data.vdate.v); + finalize(data.vinviter_id().v, data.vdate().v); }, [&](const MTPDchannelParticipantCreator &) { if (channel->mgInfo) { channel->mgInfo->creator = _session->user(); } finalize(_session->userId(), channel->date); }, [&](const MTPDchannelParticipantAdmin &data) { - const auto inviter = (data.is_self() - && data.has_inviter_id()) - ? data.vinviter_id.v + const auto inviter = data.is_self() + ? data.vinviter_id().value_or(-1) : -1; - finalize(inviter, data.vdate.v); + finalize(inviter, data.vdate().v); }, [&](const MTPDchannelParticipantBanned &data) { LOG(("API Error: Got self banned participant.")); finalize(-1, 0); @@ -2275,7 +2274,7 @@ void ApiWrap::exportInviteLink(not_null peer) { )).done([=](const MTPExportedChatInvite &result) { _exportInviteRequests.erase(peer); const auto link = (result.type() == mtpc_chatInviteExported) - ? qs(result.c_chatInviteExported().vlink) + ? qs(result.c_chatInviteExported().vlink()) : QString(); if (const auto chat = peer->asChat()) { chat->setInviteLink(link); @@ -2298,7 +2297,7 @@ void ApiWrap::requestNotifySettings(const MTPInputNotifyPeer &peer) { case mtpc_inputNotifyChats: return peerFromChat(0); case mtpc_inputNotifyBroadcasts: return peerFromChannel(0); case mtpc_inputNotifyPeer: { - const auto &inner = peer.c_inputNotifyPeer().vpeer; + const auto &inner = peer.c_inputNotifyPeer().vpeer(); switch (inner.type()) { case mtpc_inputPeerSelf: return _session->userPeerId(); @@ -2306,11 +2305,11 @@ void ApiWrap::requestNotifySettings(const MTPInputNotifyPeer &peer) { return PeerId(0); case mtpc_inputPeerChannel: return peerFromChannel( - inner.c_inputPeerChannel().vchannel_id); + inner.c_inputPeerChannel().vchannel_id()); case mtpc_inputPeerChat: - return peerFromChat(inner.c_inputPeerChat().vchat_id); + return peerFromChat(inner.c_inputPeerChat().vchat_id()); case mtpc_inputPeerUser: - return peerFromUser(inner.c_inputPeerUser().vuser_id); + return peerFromUser(inner.c_inputPeerUser().vuser_id()); } Unexpected("Type in ApiRequest::requestNotifySettings peer."); } break; @@ -2378,11 +2377,11 @@ void ApiWrap::savePrivacy( MTP_vector(std::move(rules)) )).done([=](const MTPaccount_PrivacyRules &result) { result.match([&](const MTPDaccount_privacyRules &data) { - _session->data().processUsers(data.vusers); - _session->data().processChats(data.vchats); + _session->data().processUsers(data.vusers()); + _session->data().processChats(data.vchats()); _privacySaveRequests.remove(keyTypeId); if (const auto key = Privacy::KeyFromMTP(keyTypeId)) { - handlePrivacyChange(*key, data.vrules); + handlePrivacyChange(*key, data.vrules()); } }); }).fail([=](const RPCError &error) { @@ -2432,9 +2431,9 @@ void ApiWrap::updatePrivacyLastSeens(const QVector &rules) { for_const (auto &item, result.v) { Assert(item.type() == mtpc_contactStatus); auto &data = item.c_contactStatus(); - if (auto user = _session->data().userLoaded(data.vuser_id.v)) { + if (auto user = _session->data().userLoaded(data.vuser_id().v)) { auto oldOnlineTill = user->onlineTill; - auto newOnlineTill = OnlineTillFromStatus(data.vstatus, oldOnlineTill); + auto newOnlineTill = OnlineTillFromStatus(data.vstatus(), oldOnlineTill); if (oldOnlineTill != newOnlineTill) { user->onlineTill = newOnlineTill; Notify::peerUpdatedDelayed(user, Notify::PeerUpdate::Flag::UserOnlineChanged); @@ -2456,8 +2455,8 @@ int ApiWrap::OnlineTillFromStatus( return (currentOnlineTill > -10) ? -2 : currentOnlineTill; case mtpc_userStatusLastWeek: return -3; case mtpc_userStatusLastMonth: return -4; - case mtpc_userStatusOffline: return status.c_userStatusOffline().vwas_online.v; - case mtpc_userStatusOnline: return status.c_userStatusOnline().vexpires.v; + case mtpc_userStatusOffline: return status.c_userStatusOffline().vwas_online().v; + case mtpc_userStatusOnline: return status.c_userStatusOnline().vexpires().v; } Unexpected("Bad UserStatus type."); } @@ -2545,11 +2544,11 @@ int ApiWrap::applyAffectedHistory( const MTPmessages_AffectedHistory &result) { const auto &data = result.c_messages_affectedHistory(); if (const auto channel = peer->asChannel()) { - channel->ptsUpdateAndApply(data.vpts.v, data.vpts_count.v); + channel->ptsUpdateAndApply(data.vpts().v, data.vpts_count().v); } else { - App::main()->ptsUpdateAndApply(data.vpts.v, data.vpts_count.v); + App::main()->ptsUpdateAndApply(data.vpts().v, data.vpts_count().v); } - return data.voffset.v; + return data.voffset().v; } void ApiWrap::applyAffectedMessages( @@ -2557,7 +2556,7 @@ void ApiWrap::applyAffectedMessages( const MTPmessages_AffectedMessages &result) { const auto &data = result.c_messages_affectedMessages(); if (const auto channel = peer->asChannel()) { - channel->ptsUpdateAndApply(data.vpts.v, data.vpts_count.v); + channel->ptsUpdateAndApply(data.vpts().v, data.vpts_count().v); } else { applyAffectedMessages(result); } @@ -2566,7 +2565,7 @@ void ApiWrap::applyAffectedMessages( void ApiWrap::applyAffectedMessages( const MTPmessages_AffectedMessages &result) { const auto &data = result.c_messages_affectedMessages(); - App::main()->ptsUpdateAndApply(data.vpts.v, data.vpts_count.v); + App::main()->ptsUpdateAndApply(data.vpts().v, data.vpts_count().v); } void ApiWrap::deleteMessages( @@ -2699,7 +2698,7 @@ void ApiWrap::applyNotifySettings( settings); break; case mtpc_inputNotifyPeer: { - auto &peer = notifyPeer.c_inputNotifyPeer().vpeer; + auto &peer = notifyPeer.c_inputNotifyPeer().vpeer(); const auto apply = [&](PeerId peerId) { _session->data().applyNotifySetting( MTP_notifyPeer(peerToMTP(peerId)), @@ -2713,13 +2712,13 @@ void ApiWrap::applyNotifySettings( apply(_session->userPeerId()); break; case mtpc_inputPeerUser: - apply(peerFromUser(peer.c_inputPeerUser().vuser_id)); + apply(peerFromUser(peer.c_inputPeerUser().vuser_id())); break; case mtpc_inputPeerChat: - apply(peerFromChat(peer.c_inputPeerChat().vchat_id)); + apply(peerFromChat(peer.c_inputPeerChat().vchat_id())); break; case mtpc_inputPeerChannel: - apply(peerFromChannel(peer.c_inputPeerChannel().vchannel_id)); + apply(peerFromChannel(peer.c_inputPeerChannel().vchannel_id())); break; } } break; @@ -2841,18 +2840,17 @@ void ApiWrap::requestAttachedStickerSets(not_null photo) { } // Single attached sticker pack. const auto setData = result.v.front().match([&](const auto &data) { - return data.vset.match([&](const MTPDstickerSet &data) { + return data.vset().match([&](const MTPDstickerSet &data) { return &data; }); }); - const auto setId = (setData->vid.v && setData->vaccess_hash.v) - ? MTP_inputStickerSetID(setData->vid, setData->vaccess_hash) - : MTP_inputStickerSetShortName(setData->vshort_name); + const auto setId = (setData->vid().v && setData->vaccess_hash().v) + ? MTP_inputStickerSetID(setData->vid(), setData->vaccess_hash()) + : MTP_inputStickerSetShortName(setData->vshort_name()); Ui::show( Box(App::wnd()->sessionController(), setId), LayerOption::KeepOther); - }).fail([=](const RPCError &error) { Ui::show(Box(tr::lng_stickers_not_found(tr::now))); }).send(); @@ -2920,18 +2918,18 @@ void ApiWrap::channelRangeDifferenceDone( switch (result.type()) { case mtpc_updates_channelDifferenceEmpty: { const auto &d = result.c_updates_channelDifferenceEmpty(); - nextRequestPts = d.vpts.v; + nextRequestPts = d.vpts().v; isFinal = d.is_final(); } break; case mtpc_updates_channelDifferenceTooLong: { const auto &d = result.c_updates_channelDifferenceTooLong(); - _session->data().processUsers(d.vusers); - _session->data().processChats(d.vchats); + _session->data().processUsers(d.vusers()); + _session->data().processChats(d.vchats()); - nextRequestPts = d.vdialog.match([&](const MTPDdialog &data) { - return data.has_pts() ? data.vpts.v : 0; + nextRequestPts = d.vdialog().match([&](const MTPDdialog &data) { + return data.vpts().value_or_empty(); }, [&](const MTPDdialogFolder &data) { return 0; }); @@ -2943,7 +2941,7 @@ void ApiWrap::channelRangeDifferenceDone( App::main()->feedChannelDifference(d); - nextRequestPts = d.vpts.v; + nextRequestPts = d.vpts().v; isFinal = d.is_final(); } break; } @@ -3113,28 +3111,28 @@ void ApiWrap::gotWebPages(ChannelData *channel, const MTPmessages_Messages &msgs switch (msgs.type()) { case mtpc_messages_messages: { auto &d = msgs.c_messages_messages(); - _session->data().processUsers(d.vusers); - _session->data().processChats(d.vchats); - v = &d.vmessages.v; + _session->data().processUsers(d.vusers()); + _session->data().processChats(d.vchats()); + v = &d.vmessages().v; } break; case mtpc_messages_messagesSlice: { auto &d = msgs.c_messages_messagesSlice(); - _session->data().processUsers(d.vusers); - _session->data().processChats(d.vchats); - v = &d.vmessages.v; + _session->data().processUsers(d.vusers()); + _session->data().processChats(d.vchats()); + v = &d.vmessages().v; } break; case mtpc_messages_channelMessages: { auto &d = msgs.c_messages_channelMessages(); if (channel) { - channel->ptsReceived(d.vpts.v); + channel->ptsReceived(d.vpts().v); } else { LOG(("API Error: received messages.channelMessages when no channel was passed! (ApiWrap::gotWebPages)")); } - _session->data().processUsers(d.vusers); - _session->data().processChats(d.vchats); - v = &d.vmessages.v; + _session->data().processUsers(d.vusers()); + _session->data().processChats(d.vchats()); + v = &d.vmessages().v; } break; case mtpc_messages_messagesNotModified: { @@ -3150,7 +3148,7 @@ void ApiWrap::gotWebPages(ChannelData *channel, const MTPmessages_Messages &msgs indices.emplace((uint64(uint32(msgId)) << 32) | uint64(i), i); } - for (const auto [position, index] : indices) { + for (const auto &[position, index] : indices) { const auto item = _session->data().addNewMessage( v->at(index), NewMessageType::Existing); @@ -3239,15 +3237,15 @@ std::vector> *ApiWrap::stickersByEmoji( const auto &data = result.c_messages_stickers(); auto &entry = _stickersByEmoji[emoji]; entry.list.clear(); - entry.list.reserve(data.vstickers.v.size()); - for (const auto &sticker : data.vstickers.v) { + entry.list.reserve(data.vstickers().v.size()); + for (const auto &sticker : data.vstickers().v) { const auto document = _session->data().processDocument( sticker); if (document->sticker()) { entry.list.push_back(document); } } - entry.hash = data.vhash.v; + entry.hash = data.vhash().v; entry.received = crl::now(); _session->data().notifyStickersUpdated(); }).send(); @@ -3347,7 +3345,7 @@ void ApiWrap::requestStickers(TimeId now) { case mtpc_messages_allStickersNotModified: return; case mtpc_messages_allStickers: { auto &d = result.c_messages_allStickers(); - Stickers::SetsReceived(d.vsets.v, d.vhash.v); + Stickers::SetsReceived(d.vsets().v, d.vhash().v); } return; default: Unexpected("Type in ApiWrap::stickersDone()"); } @@ -3385,10 +3383,10 @@ void ApiWrap::requestRecentStickersWithHash(int32 hash) { Stickers::SpecialSetReceived( Stickers::CloudRecentSetId, tr::lng_recent_stickers(tr::now), - d.vstickers.v, - d.vhash.v, - d.vpacks.v, - d.vdates.v); + d.vstickers().v, + d.vhash().v, + d.vpacks().v, + d.vdates().v); } return; default: Unexpected("Type in ApiWrap::recentStickersDone()"); } @@ -3418,9 +3416,9 @@ void ApiWrap::requestFavedStickers(TimeId now) { Stickers::SpecialSetReceived( Stickers::FavedSetId, Lang::Hard::FavedSetTitle(), - d.vstickers.v, - d.vhash.v, - d.vpacks.v); + d.vstickers().v, + d.vhash().v, + d.vpacks().v); } return; default: Unexpected("Type in ApiWrap::favedStickersDone()"); } @@ -3447,7 +3445,7 @@ void ApiWrap::requestFeaturedStickers(TimeId now) { case mtpc_messages_featuredStickersNotModified: return; case mtpc_messages_featuredStickers: { auto &d = result.c_messages_featuredStickers(); - Stickers::FeaturedSetsReceived(d.vsets.v, d.vunread.v, d.vhash.v); + Stickers::FeaturedSetsReceived(d.vsets().v, d.vunread().v, d.vhash().v); } return; default: Unexpected("Type in ApiWrap::featuredStickersDone()"); } @@ -3474,7 +3472,7 @@ void ApiWrap::requestSavedGifs(TimeId now) { case mtpc_messages_savedGifsNotModified: return; case mtpc_messages_savedGifs: { auto &d = result.c_messages_savedGifs(); - Stickers::GifsReceived(d.vgifs.v, d.vhash.v); + Stickers::GifsReceived(d.vgifs().v, d.vhash().v); } return; default: Unexpected("Type in ApiWrap::savedGifsDone()"); } @@ -3530,12 +3528,12 @@ void ApiWrap::parseChannelParticipants( const QVector &list)> callbackList, Fn callbackNotModified) { result.match([&](const MTPDchannels_channelParticipants &data) { - _session->data().processUsers(data.vusers); + _session->data().processUsers(data.vusers()); if (channel->mgInfo) { - refreshChannelAdmins(channel, data.vparticipants.v); + refreshChannelAdmins(channel, data.vparticipants().v); } if (callbackList) { - callbackList(data.vcount.v, data.vparticipants.v); + callbackList(data.vcount().v, data.vparticipants().v); } }, [&](const MTPDchannels_channelParticipantsNotModified &) { if (callbackNotModified) { @@ -3553,7 +3551,7 @@ void ApiWrap::refreshChannelAdmins( Data::ChannelAdminChanges changes(channel); for (const auto &p : participants) { const auto userId = p.match([](const auto &data) { - return data.vuser_id.v; + return data.vuser_id().v; }); const auto isAdmin = (p.type() == mtpc_channelParticipantAdmin) || (p.type() == mtpc_channelParticipantCreator); @@ -3588,25 +3586,26 @@ void ApiWrap::parseRecentChannelParticipants( void ApiWrap::applyUpdatesNoPtsCheck(const MTPUpdates &updates) { switch (updates.type()) { case mtpc_updateShortMessage: { - auto &d = updates.c_updateShortMessage(); - auto flags = mtpCastFlags(d.vflags.v) | MTPDmessage::Flag::f_from_id; + const auto &d = updates.c_updateShortMessage(); + const auto flags = mtpCastFlags(d.vflags().v) | MTPDmessage::Flag::f_from_id; const auto peerUserId = d.is_out() - ? d.vuser_id + ? d.vuser_id() : MTP_int(_session->userId()); + const auto fwd = d.vfwd_from(); _session->data().addNewMessage( MTP_message( MTP_flags(flags), - d.vid, - d.is_out() ? MTP_int(_session->userId()) : d.vuser_id, + d.vid(), + d.is_out() ? MTP_int(_session->userId()) : d.vuser_id(), MTP_peerUser(peerUserId), - d.vfwd_from, - d.vvia_bot_id, - d.vreply_to_msg_id, - d.vdate, - d.vmessage, + fwd ? (*fwd) : MTPMessageFwdHeader(), + MTP_int(d.vvia_bot_id().value_or_empty()), + MTP_int(d.vreply_to_msg_id().value_or_empty()), + d.vdate(), + d.vmessage(), MTP_messageMediaEmpty(), MTPReplyMarkup(), - d.has_entities() ? d.ventities : MTPnullEntities, + MTP_vector(d.ventities().value_or_empty()), MTPint(), MTPint(), MTPstring(), @@ -3615,22 +3614,23 @@ void ApiWrap::applyUpdatesNoPtsCheck(const MTPUpdates &updates) { } break; case mtpc_updateShortChatMessage: { - auto &d = updates.c_updateShortChatMessage(); - auto flags = mtpCastFlags(d.vflags.v) | MTPDmessage::Flag::f_from_id; + const auto &d = updates.c_updateShortChatMessage(); + const auto flags = mtpCastFlags(d.vflags().v) | MTPDmessage::Flag::f_from_id; + const auto fwd = d.vfwd_from(); _session->data().addNewMessage( MTP_message( MTP_flags(flags), - d.vid, - d.vfrom_id, - MTP_peerChat(d.vchat_id), - d.vfwd_from, - d.vvia_bot_id, - d.vreply_to_msg_id, - d.vdate, - d.vmessage, + d.vid(), + d.vfrom_id(), + MTP_peerChat(d.vchat_id()), + fwd ? (*fwd) : MTPMessageFwdHeader(), + MTP_int(d.vvia_bot_id().value_or_empty()), + MTP_int(d.vreply_to_msg_id().value_or_empty()), + d.vdate(), + d.vmessage(), MTP_messageMediaEmpty(), MTPReplyMarkup(), - d.has_entities() ? d.ventities : MTPnullEntities, + MTP_vector(d.ventities().value_or_empty()), MTPint(), MTPint(), MTPstring(), @@ -3652,21 +3652,21 @@ void ApiWrap::applyUpdateNoPtsCheck(const MTPUpdate &update) { case mtpc_updateNewMessage: { auto &d = update.c_updateNewMessage(); auto needToAdd = true; - if (d.vmessage.type() == mtpc_message) { // index forwarded messages to links _overview - if (_session->data().checkEntitiesAndViewsUpdate(d.vmessage.c_message())) { // already in blocks + if (d.vmessage().type() == mtpc_message) { // index forwarded messages to links _overview + if (_session->data().checkEntitiesAndViewsUpdate(d.vmessage().c_message())) { // already in blocks LOG(("Skipping message, because it is already in blocks!")); needToAdd = false; } } if (needToAdd) { - _session->data().addNewMessage(d.vmessage, NewMessageType::Unread); + _session->data().addNewMessage(d.vmessage(), NewMessageType::Unread); } } break; case mtpc_updateReadMessagesContents: { const auto &d = update.c_updateReadMessagesContents(); auto possiblyReadMentions = base::flat_set(); - for (const auto &msgId : d.vmessages.v) { + for (const auto &msgId : d.vmessages().v) { if (const auto item = _session->data().message(NoChannel, msgId.v)) { if (item->isUnreadMedia() || item->isUnreadMention()) { item->markMediaRead(); @@ -3688,21 +3688,21 @@ void ApiWrap::applyUpdateNoPtsCheck(const MTPUpdate &update) { case mtpc_updateReadHistoryInbox: { const auto &d = update.c_updateReadHistoryInbox(); - const auto peer = peerFromMTP(d.vpeer); + const auto peer = peerFromMTP(d.vpeer()); if (const auto history = _session->data().historyLoaded(peer)) { - const auto folderId = d.has_folder_id() ? d.vfolder_id.v : 0; + const auto folderId = d.vfolder_id().value_or_empty(); history->applyInboxReadUpdate( folderId, - d.vmax_id.v, - d.vstill_unread_count.v); + d.vmax_id().v, + d.vstill_unread_count().v); } } break; case mtpc_updateReadHistoryOutbox: { const auto &d = update.c_updateReadHistoryOutbox(); - const auto peer = peerFromMTP(d.vpeer); + const auto peer = peerFromMTP(d.vpeer()); if (const auto history = _session->data().historyLoaded(peer)) { - history->outboxRead(d.vmax_id.v); + history->outboxRead(d.vmax_id().v); if (!App::main()->requestingDifference()) { if (const auto user = history->peer->asUser()) { user->madeAction(unixtime()); @@ -3719,11 +3719,11 @@ void ApiWrap::applyUpdateNoPtsCheck(const MTPUpdate &update) { case mtpc_updateFolderPeers: { const auto &data = update.c_updateFolderPeers(); auto &owner = _session->data(); - for (const auto &peer : data.vfolder_peers.v) { + for (const auto &peer : data.vfolder_peers().v) { peer.match([&](const MTPDfolderPeer &data) { - const auto peerId = peerFromMTP(data.vpeer); + const auto peerId = peerFromMTP(data.vpeer()); if (const auto history = owner.historyLoaded(peerId)) { - if (const auto folderId = data.vfolder_id.v) { + if (const auto folderId = data.vfolder_id().v) { history->setFolder(owner.folder(folderId)); } else { history->clearFolder(); @@ -3735,31 +3735,31 @@ void ApiWrap::applyUpdateNoPtsCheck(const MTPUpdate &update) { case mtpc_updateDeleteMessages: { auto &d = update.c_updateDeleteMessages(); - _session->data().processMessagesDeleted(NoChannel, d.vmessages.v); + _session->data().processMessagesDeleted(NoChannel, d.vmessages().v); } break; case mtpc_updateNewChannelMessage: { auto &d = update.c_updateNewChannelMessage(); auto needToAdd = true; - if (d.vmessage.type() == mtpc_message) { // index forwarded messages to links _overview - if (_session->data().checkEntitiesAndViewsUpdate(d.vmessage.c_message())) { // already in blocks + if (d.vmessage().type() == mtpc_message) { // index forwarded messages to links _overview + if (_session->data().checkEntitiesAndViewsUpdate(d.vmessage().c_message())) { // already in blocks LOG(("Skipping message, because it is already in blocks!")); needToAdd = false; } } if (needToAdd) { - _session->data().addNewMessage(d.vmessage, NewMessageType::Unread); + _session->data().addNewMessage(d.vmessage(), NewMessageType::Unread); } } break; case mtpc_updateEditChannelMessage: { auto &d = update.c_updateEditChannelMessage(); - _session->data().updateEditedMessage(d.vmessage); + _session->data().updateEditedMessage(d.vmessage()); } break; case mtpc_updateEditMessage: { auto &d = update.c_updateEditMessage(); - _session->data().updateEditedMessage(d.vmessage); + _session->data().updateEditedMessage(d.vmessage()); } break; case mtpc_updateChannelWebPage: { @@ -3769,7 +3769,7 @@ void ApiWrap::applyUpdateNoPtsCheck(const MTPUpdate &update) { case mtpc_updateDeleteChannelMessages: { auto &d = update.c_updateDeleteChannelMessages(); - _session->data().processMessagesDeleted(d.vchannel_id.v, d.vmessages.v); + _session->data().processMessagesDeleted(d.vchannel_id().v, d.vmessages().v); } break; default: Unexpected("Type in applyUpdateNoPtsCheck()"); @@ -3814,9 +3814,9 @@ void ApiWrap::requestMessageAfterDate( ](const MTPmessages_Messages &result) { auto getMessagesList = [&]() -> const QVector* { auto handleMessages = [&](auto &messages) { - _session->data().processUsers(messages.vusers); - _session->data().processChats(messages.vchats); - return &messages.vmessages.v; + _session->data().processUsers(messages.vusers()); + _session->data().processChats(messages.vchats()); + return &messages.vmessages().v; }; switch (result.type()) { case mtpc_messages_messages: @@ -3826,7 +3826,7 @@ void ApiWrap::requestMessageAfterDate( case mtpc_messages_channelMessages: { auto &messages = result.c_messages_channelMessages(); if (peer && peer->isChannel()) { - peer->asChannel()->ptsReceived(messages.vpts.v); + peer->asChannel()->ptsReceived(messages.vpts().v); } else { LOG(("API Error: received messages.channelMessages when no channel was passed! (ApiWrap::jumpToDate)")); } @@ -3909,10 +3909,10 @@ void ApiWrap::jumpToHistoryDate(not_null peer, const QDate &date) { // } // Assert(result.type() == mtpc_messages_feedMessages); // const auto &data = result.c_messages_feedMessages(); -// const auto &messages = data.vmessages.v; +// const auto &messages = data.vmessages().v; // const auto type = NewMessageExisting; -// _session->data().processUsers(data.vusers); -// _session->data().processChats(data.vchats); +// _session->data().processUsers(data.vusers()); +// _session->data().processChats(data.vchats()); // for (const auto &msg : messages) { // if (const auto item = _session->data().addNewMessage(msg, type)) { // if (item->date() >= offsetDate || true) { @@ -4046,12 +4046,12 @@ void ApiWrap::requestSharedMedia( QString(), messageId, slice); - if (prepared.vfilter.type() == mtpc_inputMessagesFilterEmpty) { + if (!prepared) { return; } auto requestId = request( - std::move(prepared) + std::move(*prepared) ).done([this, peer, type, messageId, slice]( const MTPmessages_Messages &result) { auto key = std::make_tuple(peer, type, messageId, slice); @@ -4116,16 +4116,16 @@ void ApiWrap::userPhotosDone( switch (result.type()) { case mtpc_photos_photos: { auto &d = result.c_photos_photos(); - _session->data().processUsers(d.vusers); - fullCount = d.vphotos.v.size(); - return &d.vphotos.v; + _session->data().processUsers(d.vusers()); + fullCount = d.vphotos().v.size(); + return &d.vphotos().v; } break; case mtpc_photos_photosSlice: { auto &d = result.c_photos_photosSlice(); - _session->data().processUsers(d.vusers); - fullCount = d.vcount.v; - return &d.vphotos.v; + _session->data().processUsers(d.vusers()); + fullCount = d.vcount().v; + return &d.vphotos().v; } break; } Unexpected("photos.Photos type in userPhotosDone()"); @@ -4189,25 +4189,24 @@ void ApiWrap::userPhotosDone( // // First we set channels without reading them from data. // // This allows us to apply them all at once without registering // // them one by one. -// for (const auto &broadcasts : data.vfeeds.v) { +// for (const auto &broadcasts : data.vfeeds().v) { // if (broadcasts.type() == mtpc_feedBroadcasts) { // const auto &list = broadcasts.c_feedBroadcasts(); -// const auto feedId = list.vfeed_id.v; +// const auto feedId = list.vfeed_id().v; // const auto feed = _session->data().feed(feedId); // auto channels = std::vector>(); -// for (const auto &channelId : list.vchannels.v) { +// for (const auto &channelId : list.vchannels().v) { // channels.push_back(_session->data().channel(channelId.v)); // } // feed->setChannels(std::move(channels)); // } // } // -// _session->data().processUsers(data.vusers); -// _session->data().processChats(data.vchats); +// _session->data().processUsers(data.vusers()); +// _session->data().processChats(data.vchats()); // -// if (data.has_newly_joined_feed()) { -// _session->data().setDefaultFeedId( -// data.vnewly_joined_feed.v); +// if (const auto id = data.vnewly_joined_feed()) { +// _session->data().setDefaultFeedId(id->v); // } //} // @@ -4317,7 +4316,7 @@ void ApiWrap::userPhotosDone( // } // Assert(result.type() == mtpc_messages_feedMessages); // const auto &data = result.c_messages_feedMessages(); -// const auto &messages = data.vmessages.v; +// const auto &messages = data.vmessages().v; // const auto type = NewMessageExisting; // // auto ids = std::vector(); @@ -4338,8 +4337,8 @@ void ApiWrap::userPhotosDone( // const auto tooSmallPosition = [&](const auto &position) { // return (slice == SliceType::After) && !(messageId < position); // }; -// _session->data().processUsers(data.vusers); -// _session->data().processChats(data.vchats); +// _session->data().processUsers(data.vusers()); +// _session->data().processChats(data.vchats()); // if (!messages.empty()) { // ids.reserve(messages.size()); // for (const auto &msg : messages) { @@ -4359,24 +4358,24 @@ void ApiWrap::userPhotosDone( // } // ranges::reverse(ids); // } -// if (data.has_min_position() && !ids.empty()) { +// if (data.vmin_position() && !ids.empty()) { // accumulateFrom( // noSkipRange.from, -// Data::FeedPositionFromMTP(data.vmin_position)); +// Data::FeedPositionFromMTP(*data.vmin_position())); // } else if (slice == SliceType::Before) { // noSkipRange.from = Data::MinMessagePosition; // } -// if (data.has_max_position() && !ids.empty()) { +// if (data.vmax_position() && !ids.empty()) { // accumulateTill( // noSkipRange.till, -// Data::FeedPositionFromMTP(data.vmax_position)); +// Data::FeedPositionFromMTP(*data.vmax_position())); // } else if (slice == SliceType::After) { // noSkipRange.till = Data::MaxMessagePosition; // } // // const auto unreadPosition = [&] { -// if (data.has_read_max_position()) { -// return Data::FeedPositionFromMTP(data.vread_max_position); +// if (data.vread_max_position()) { +// return Data::FeedPositionFromMTP(*data.vread_max_position()); // } else if (!messageId) { // const auto result = ids.empty() // ? noSkipRange.till @@ -4601,7 +4600,7 @@ void ApiWrap::sendSharedContact( MTPint(), MTP_int(options.replyTo), MTP_int(unixtime()), - MTP_string(""), + MTP_string(), MTP_messageMediaContact( MTP_string(phone), MTP_string(firstName), @@ -4609,7 +4608,7 @@ void ApiWrap::sendSharedContact( MTP_string(vcard), MTP_int(userId)), MTPReplyMarkup(), - MTPnullEntities, + MTPVector(), MTP_int(views), MTPint(), MTP_string(messagePostAuthor), @@ -5268,43 +5267,45 @@ void ApiWrap::uploadAlbumMedia( switch (result.type()) { case mtpc_messageMediaPhoto: { const auto &data = result.c_messageMediaPhoto(); - if (data.vphoto.type() != mtpc_photo) { + const auto photo = data.vphoto(); + if (!photo || photo->type() != mtpc_photo) { failed(); return; } - const auto &photo = data.vphoto.c_photo(); + const auto &fields = photo->c_photo(); const auto flags = MTPDinputMediaPhoto::Flags(0) - | (data.has_ttl_seconds() + | (data.vttl_seconds() ? MTPDinputMediaPhoto::Flag::f_ttl_seconds : MTPDinputMediaPhoto::Flag(0)); const auto media = MTP_inputMediaPhoto( MTP_flags(flags), MTP_inputPhoto( - photo.vid, - photo.vaccess_hash, - photo.vfile_reference), - data.has_ttl_seconds() ? data.vttl_seconds : MTPint()); + fields.vid(), + fields.vaccess_hash(), + fields.vfile_reference()), + MTP_int(data.vttl_seconds().value_or_empty())); sendAlbumWithUploaded(item, groupId, media); } break; case mtpc_messageMediaDocument: { const auto &data = result.c_messageMediaDocument(); - if (data.vdocument.type() != mtpc_document) { + const auto document = data.vdocument(); + if (!document || document->type() != mtpc_document) { failed(); return; } - const auto &document = data.vdocument.c_document(); + const auto &fields = document->c_document(); const auto flags = MTPDinputMediaDocument::Flags(0) - | (data.has_ttl_seconds() + | (data.vttl_seconds() ? MTPDinputMediaDocument::Flag::f_ttl_seconds : MTPDinputMediaDocument::Flag(0)); const auto media = MTP_inputMediaDocument( MTP_flags(flags), MTP_inputDocument( - document.vid, - document.vaccess_hash, - document.vfile_reference), - data.has_ttl_seconds() ? data.vttl_seconds : MTPint()); + fields.vid(), + fields.vaccess_hash(), + fields.vfile_reference()), + MTP_int(data.vttl_seconds().value_or_empty())); sendAlbumWithUploaded(item, groupId, media); } break; } @@ -5420,9 +5421,9 @@ void ApiWrap::sendAlbumIfReady(not_null album) { const auto &single = medias.front().c_inputSingleMedia(); sendMediaWithRandomId( sample, - single.vmedia, + single.vmedia(), album->silent, - single.vrandom_id.v); + single.vrandom_id().v); _sendingAlbums.remove(groupId); return; } @@ -5467,7 +5468,7 @@ void ApiWrap::requestSupportContact(FnMut callback) { )).done([=](const MTPhelp_Support &result) { result.match([&](const MTPDhelp_support &data) { for (auto &handler : base::take(_supportContactCallbacks)) { - handler(data.vuser); + handler(data.vuser()); } }); }).fail([=](const RPCError &error) { @@ -5505,8 +5506,8 @@ void ApiWrap::photoUploadReady( file )).done([=](const MTPphotos_Photo &result) { result.match([&](const MTPDphotos_photo &data) { - _session->data().processPhoto(data.vphoto); - _session->data().processUsers(data.vusers); + _session->data().processPhoto(data.vphoto()); + _session->data().processUsers(data.vusers()); }); }).send(); } else if (const auto chat = peer->asChat()) { @@ -5566,7 +5567,7 @@ void ApiWrap::reloadPasswordState() { )).done([=](const MTPaccount_Password &result) { _passwordRequestId = 0; result.match([&](const MTPDaccount_password &data) { - openssl::AddRandomSeed(bytes::make_span(data.vsecure_random.v)); + openssl::AddRandomSeed(bytes::make_span(data.vsecure_random().v)); if (_passwordState) { *_passwordState = Core::ParseCloudPasswordState(data); } else { @@ -5686,9 +5687,9 @@ void ApiWrap::reloadPrivacy(Privacy::Key key) { )).done([=](const MTPaccount_PrivacyRules &result) { _privacyRequestIds.erase(key); result.match([&](const MTPDaccount_privacyRules &data) { - _session->data().processUsers(data.vusers); - _session->data().processChats(data.vchats); - pushPrivacy(key, data.vrules.v); + _session->data().processUsers(data.vusers()); + _session->data().processChats(data.vchats()); + pushPrivacy(key, data.vrules().v); }); }).fail([=](const RPCError &error) { _privacyRequestIds.erase(key); @@ -5718,7 +5719,7 @@ auto ApiWrap::parsePrivacy(const QVector &rules) }, [&](const MTPDprivacyValueAllowContacts &) { SetOption(Option::Contacts); }, [&](const MTPDprivacyValueAllowUsers &data) { - const auto &users = data.vusers.v; + const auto &users = data.vusers().v; always.reserve(always.size() + users.size()); for (const auto userId : users) { const auto user = _session->data().user(UserId(userId.v)); @@ -5728,7 +5729,7 @@ auto ApiWrap::parsePrivacy(const QVector &rules) } } }, [&](const MTPDprivacyValueAllowChatParticipants &data) { - const auto &chats = data.vchats.v; + const auto &chats = data.vchats().v; always.reserve(always.size() + chats.size()); for (const auto chatId : chats) { const auto chat = _session->data().chatLoaded(chatId.v); @@ -5746,7 +5747,7 @@ auto ApiWrap::parsePrivacy(const QVector &rules) }, [&](const MTPDprivacyValueDisallowAll &) { SetOption(Option::Nobody); }, [&](const MTPDprivacyValueDisallowUsers &data) { - const auto &users = data.vusers.v; + const auto &users = data.vusers().v; never.reserve(never.size() + users.size()); for (const auto userId : users) { const auto user = _session->data().user(UserId(userId.v)); @@ -5756,7 +5757,7 @@ auto ApiWrap::parsePrivacy(const QVector &rules) } } }, [&](const MTPDprivacyValueDisallowChatParticipants &data) { - const auto &chats = data.vchats.v; + const auto &chats = data.vchats().v; never.reserve(never.size() + chats.size()); for (const auto chatId : chats) { const auto chat = _session->data().chatLoaded(chatId.v); @@ -5814,10 +5815,10 @@ void ApiWrap::reloadBlockedUsers() { for (const auto &contact : list) { contact.match([&](const MTPDcontactBlocked &data) { const auto user = _session->data().userLoaded( - data.vuser_id.v); + data.vuser_id().v); if (user) { user->setIsBlocked(true); - slice.list.push_back({ user, data.vdate.v }); + slice.list.push_back({ user, data.vdate().v }); } }); } @@ -5827,11 +5828,11 @@ void ApiWrap::reloadBlockedUsers() { } }; result.match([&](const MTPDcontacts_blockedSlice &data) { - _session->data().processUsers(data.vusers); - push(data.vcount.v, data.vblocked.v); + _session->data().processUsers(data.vusers()); + push(data.vcount().v, data.vblocked().v); }, [&](const MTPDcontacts_blocked &data) { - _session->data().processUsers(data.vusers); - push(0, data.vblocked.v); + _session->data().processUsers(data.vusers()); + push(0, data.vblocked().v); }); }).fail([=](const RPCError &error) { _blockedUsersRequestId = 0; @@ -5855,7 +5856,7 @@ void ApiWrap::reloadSelfDestruct() { )).done([=](const MTPAccountDaysTTL &result) { _selfDestructRequestId = 0; result.match([&](const MTPDaccountDaysTTL &data) { - setSelfDestructDays(data.vdays.v); + setSelfDestructDays(data.vdays().v); }); }).fail([=](const RPCError &error) { _selfDestructRequestId = 0; @@ -5916,7 +5917,7 @@ void ApiWrap::createPoll( peer->input, MTP_int(replyTo), MTP_inputMediaPoll(PollDataToMTP(&data)), - MTP_string(QString()), + MTP_string(), MTP_long(rand_value()), MTPReplyMarkup(), MTPVector() diff --git a/Telegram/SourceFiles/auth_session.cpp b/Telegram/SourceFiles/auth_session.cpp index 70b67faec..3054dbbe6 100644 --- a/Telegram/SourceFiles/auth_session.cpp +++ b/Telegram/SourceFiles/auth_session.cpp @@ -532,7 +532,7 @@ bool AuthSession::validateSelf(const MTPUser &user) { if (user.type() != mtpc_user || !user.c_user().is_self()) { LOG(("API Error: bad self user received.")); return false; - } else if (user.c_user().vid.v != userId()) { + } else if (user.c_user().vid().v != userId()) { LOG(("Auth Error: wrong self user received.")); crl::on_main(this, [] { Core::App().logOut(); }); return false; diff --git a/Telegram/SourceFiles/boxes/add_contact_box.cpp b/Telegram/SourceFiles/boxes/add_contact_box.cpp index 82d037174..6072abffa 100644 --- a/Telegram/SourceFiles/boxes/add_contact_box.cpp +++ b/Telegram/SourceFiles/boxes/add_contact_box.cpp @@ -353,14 +353,14 @@ void AddContactBox::onImportDone(const MTPcontacts_ImportedContacts &res) { if (!isBoxShown() || !App::main()) return; const auto &d = res.c_contacts_importedContacts(); - Auth().data().processUsers(d.vusers); + Auth().data().processUsers(d.vusers()); - const auto &v = d.vimported.v; + const auto &v = d.vimported().v; const auto user = [&]() -> UserData* { if (!v.isEmpty()) { auto &c = v.front().c_importedContact(); - if (c.vclient_id.v == _contactId) { - return Auth().data().userLoaded(c.vuser_id.v); + if (c.vclient_id().v == _contactId) { + return Auth().data().userLoaded(c.vuser_id().v); } } return nullptr; @@ -380,7 +380,7 @@ void AddContactBox::onImportDone(const MTPcontacts_ImportedContacts &res) { void AddContactBox::onSaveUserDone(const MTPcontacts_ImportedContacts &res) { auto &d = res.c_contacts_importedContacts(); - Auth().data().processUsers(d.vusers); + Auth().data().processUsers(d.vusers()); closeBox(); } @@ -544,9 +544,9 @@ void GroupInfoBox::createGroup( | [](auto updates) -> std::optional*> { switch (updates->type()) { case mtpc_updates: - return &updates->c_updates().vchats.v; + return &updates->c_updates().vchats().v; case mtpc_updatesCombined: - return &updates->c_updatesCombined().vchats.v; + return &updates->c_updatesCombined().vchats().v; } LOG(("API Error: unexpected update cons %1 " "(GroupInfoBox::creationDone)").arg(updates->type())); @@ -559,7 +559,7 @@ void GroupInfoBox::createGroup( : std::nullopt; } | [](auto chats) { - return Auth().data().chat(chats->front().c_chat().vid.v); + return Auth().data().chat(chats->front().c_chat().vid().v); } | [&](not_null chat) { if (!image.isNull()) { @@ -653,9 +653,9 @@ void GroupInfoBox::createChannel(const QString &title, const QString &descriptio | [](auto updates) -> std::optional*> { switch (updates->type()) { case mtpc_updates: - return &updates->c_updates().vchats.v; + return &updates->c_updates().vchats().v; case mtpc_updatesCombined: - return &updates->c_updatesCombined().vchats.v; + return &updates->c_updatesCombined().vchats().v; } LOG(("API Error: unexpected update cons %1 (GroupInfoBox::createChannel)").arg(updates->type())); return std::nullopt; @@ -666,7 +666,7 @@ void GroupInfoBox::createChannel(const QString &title, const QString &descriptio : std::nullopt; } | [](auto chats) { - return Auth().data().channel(chats->front().c_channel().vid.v); + return Auth().data().channel(chats->front().c_channel().vid().v); } | [&](not_null channel) { auto image = _photo->takeResultImage(); @@ -681,7 +681,7 @@ void GroupInfoBox::createChannel(const QString &title, const QString &descriptio )).done([=](const MTPExportedChatInvite &result) { _creationRequestId = 0; if (result.type() == mtpc_chatInviteExported) { - auto link = qs(result.c_chatInviteExported().vlink); + auto link = qs(result.c_chatInviteExported().vlink()); _createdChannel->setInviteLink(link); } if (_channelDone) { @@ -1261,7 +1261,7 @@ RevokePublicLinkBox::Inner::Inner(QWidget *parent, Fn revokeCallback) : MTP_flags(0) )).done([=](const MTPmessages_Chats &result) { const auto &chats = result.match([](const auto &data) { - return data.vchats.v; + return data.vchats().v; }); for (const auto &chat : chats) { if (const auto peer = Auth().data().processChat(chat)) { @@ -1364,7 +1364,7 @@ void RevokePublicLinkBox::Inner::mouseReleaseEvent(QMouseEvent *e) { if (_revokeRequestId) return; _revokeRequestId = request(MTPchannels_UpdateUsername( pressed->asChannel()->inputChannel, - MTP_string("") + MTP_string() )).done([=](const MTPBool &result) { const auto callback = _revokeCallback; if (_weakRevokeConfirmBox) { diff --git a/Telegram/SourceFiles/boxes/change_phone_box.cpp b/Telegram/SourceFiles/boxes/change_phone_box.cpp index 40ebc2c34..9e80bc64f 100644 --- a/Telegram/SourceFiles/boxes/change_phone_box.cpp +++ b/Telegram/SourceFiles/boxes/change_phone_box.cpp @@ -167,22 +167,24 @@ void ChangePhoneBox::EnterPhone::sendPhoneDone(const QString &phoneNumber, const auto codeLength = 0; auto &data = result.c_auth_sentCode(); - switch (data.vtype.type()) { + switch (data.vtype().type()) { case mtpc_auth_sentCodeTypeApp: LOG(("Error: should not be in-app code!")); showError(Lang::Hard::ServerError()); return; - case mtpc_auth_sentCodeTypeSms: codeLength = data.vtype.c_auth_sentCodeTypeSms().vlength.v; break; - case mtpc_auth_sentCodeTypeCall: codeLength = data.vtype.c_auth_sentCodeTypeCall().vlength.v; break; + case mtpc_auth_sentCodeTypeSms: codeLength = data.vtype().c_auth_sentCodeTypeSms().vlength().v; break; + case mtpc_auth_sentCodeTypeCall: codeLength = data.vtype().c_auth_sentCodeTypeCall().vlength().v; break; case mtpc_auth_sentCodeTypeFlashCall: LOG(("Error: should not be flashcall!")); showError(Lang::Hard::ServerError()); return; } - auto phoneCodeHash = qs(data.vphone_code_hash); + auto phoneCodeHash = qs(data.vphone_code_hash()); auto callTimeout = 0; - if (data.has_next_type() && data.vnext_type.type() == mtpc_auth_codeTypeCall) { - callTimeout = data.has_timeout() ? data.vtimeout.v : 60; + if (const auto nextType = data.vnext_type()) { + if (nextType->type() == mtpc_auth_codeTypeCall) { + callTimeout = data.vtimeout().value_or(60); + } } Ui::show( Box( diff --git a/Telegram/SourceFiles/boxes/confirm_box.cpp b/Telegram/SourceFiles/boxes/confirm_box.cpp index c80aea98b..4a407ecfb 100644 --- a/Telegram/SourceFiles/boxes/confirm_box.cpp +++ b/Telegram/SourceFiles/boxes/confirm_box.cpp @@ -792,8 +792,8 @@ ConfirmInviteBox::ConfirmInviteBox( , _status(this, st::confirmInviteStatus) , _participants(GetParticipants(data)) , _isChannel(data.is_channel() && !data.is_megagroup()) { - const auto title = qs(data.vtitle); - const auto count = data.vparticipants_count.v; + const auto title = qs(data.vtitle()); + const auto count = data.vparticipants_count().v; const auto status = [&] { return (!_participants.empty() && _participants.size() < count) ? tr::lng_group_invite_members(tr::now, lt_count, count) @@ -806,7 +806,7 @@ ConfirmInviteBox::ConfirmInviteBox( _title->setText(title); _status->setText(status); - const auto photo = Auth().data().processPhoto(data.vphoto); + const auto photo = Auth().data().processPhoto(data.vphoto()); if (!photo->isNull()) { _photo = photo->thumbnail(); if (!_photo->loaded()) { @@ -824,10 +824,11 @@ ConfirmInviteBox::ConfirmInviteBox( std::vector> ConfirmInviteBox::GetParticipants( const MTPDchatInvite &data) { - if (!data.has_participants()) { + const auto participants = data.vparticipants(); + if (!participants) { return {}; } - const auto &v = data.vparticipants.v; + const auto &v = participants->v; auto result = std::vector>(); result.reserve(v.size()); for (const auto &participant : v) { diff --git a/Telegram/SourceFiles/boxes/confirm_phone_box.cpp b/Telegram/SourceFiles/boxes/confirm_phone_box.cpp index 642910fd9..5c633abe7 100644 --- a/Telegram/SourceFiles/boxes/confirm_phone_box.cpp +++ b/Telegram/SourceFiles/boxes/confirm_phone_box.cpp @@ -227,21 +227,27 @@ void ConfirmPhoneBox::checkPhoneAndHash() { } void ConfirmPhoneBox::sendCodeDone(const MTPauth_SentCode &result) { - Expects(result.type() == mtpc_auth_sentCode); - _sendCodeRequestId = 0; - - auto &resultInner = result.c_auth_sentCode(); - switch (resultInner.vtype.type()) { - case mtpc_auth_sentCodeTypeApp: LOG(("Error: should not be in-app code!")); break; - case mtpc_auth_sentCodeTypeSms: _sentCodeLength = resultInner.vtype.c_auth_sentCodeTypeSms().vlength.v; break; - case mtpc_auth_sentCodeTypeCall: _sentCodeLength = resultInner.vtype.c_auth_sentCodeTypeCall().vlength.v; break; - case mtpc_auth_sentCodeTypeFlashCall: LOG(("Error: should not be flashcall!")); break; - } - _phoneHash = qs(resultInner.vphone_code_hash); - if (resultInner.has_next_type() && resultInner.vnext_type.type() == mtpc_auth_codeTypeCall) { - _call.setStatus({ SentCodeCall::State::Waiting, resultInner.has_timeout() ? resultInner.vtimeout.v : 60 }); - } - launch(); + result.match([&](const MTPDauth_sentCode &data) { + _sendCodeRequestId = 0; + _sentCodeLength = data.vtype().match([&](const MTPDauth_sentCodeTypeApp &data) { + LOG(("Error: should not be in-app code!")); + return 0; + }, [&](const MTPDauth_sentCodeTypeSms &data) { + return data.vlength().v; + }, [&](const MTPDauth_sentCodeTypeCall &data) { + return data.vlength().v; + }, [&](const MTPDauth_sentCodeTypeFlashCall &data) { + LOG(("Error: should not be flashcall!")); + return 0; + }); + _phoneHash = qs(data.vphone_code_hash()); + if (const auto nextType = data.vnext_type()) { + if (nextType->type() == mtpc_auth_codeTypeCall) { + _call.setStatus({ SentCodeCall::State::Waiting, data.vtimeout().value_or(60) }); + } + } + launch(); + }); } bool ConfirmPhoneBox::sendCodeFail(const RPCError &error) { diff --git a/Telegram/SourceFiles/boxes/passcode_box.cpp b/Telegram/SourceFiles/boxes/passcode_box.cpp index 002f51a0a..60419f24e 100644 --- a/Telegram/SourceFiles/boxes/passcode_box.cpp +++ b/Telegram/SourceFiles/boxes/passcode_box.cpp @@ -631,7 +631,7 @@ void PasscodeBox::sendClearCloudPassword( MTP_account_passwordInputSettings( MTP_flags(flags), Core::PrepareCloudPasswordAlgo(_cloudFields.newAlgo), - MTP_bytes(QByteArray()), // new_password_hash + MTP_bytes(), // new_password_hash MTP_string(hint), MTP_string(email), MTPSecureSecretSettings()) @@ -693,26 +693,26 @@ void PasscodeBox::changeCloudPassword( Expects(result.type() == mtpc_account_passwordSettings); const auto &data = result.c_account_passwordSettings(); - if (!data.has_secure_settings()) { + const auto wrapped = data.vsecure_settings(); + if (!wrapped) { checkPasswordHash([=](const Core::CloudPasswordResult &check) { const auto empty = QByteArray(); sendChangeCloudPassword(check, newPassword, empty); }); return; } - const auto &wrapped = data.vsecure_settings; - const auto &settings = wrapped.c_secureSecretSettings(); + const auto &settings = wrapped->c_secureSecretSettings(); const auto passwordUtf = oldPassword.toUtf8(); const auto secret = Passport::DecryptSecureSecret( - bytes::make_span(settings.vsecure_secret.v), + bytes::make_span(settings.vsecure_secret().v), Core::ComputeSecureSecretHash( - Core::ParseSecureSecretAlgo(settings.vsecure_algo), + Core::ParseSecureSecretAlgo(settings.vsecure_algo()), bytes::make_span(passwordUtf))); if (secret.empty()) { LOG(("API Error: Failed to decrypt secure secret.")); suggestSecretReset(newPassword); } else if (Passport::CountSecureSecretId(secret) - != settings.vsecure_secret_id.v) { + != settings.vsecure_secret_id().v) { LOG(("API Error: Wrong secure secret id.")); suggestSecretReset(newPassword); } else { @@ -760,7 +760,7 @@ void PasscodeBox::resetSecret( MTPstring(), // email MTP_secureSecretSettings( MTP_securePasswordKdfAlgoUnknown(), // secure_algo - MTP_bytes(QByteArray()), // secure_secret + MTP_bytes(), // secure_secret MTP_long(0))) // secure_secret_id )).done([=](const MTPBool &result) { _setRequest = 0; @@ -899,7 +899,7 @@ void PasscodeBox::recover() { } void PasscodeBox::recoverStarted(const MTPauth_PasswordRecovery &result) { - _pattern = qs(result.c_auth_passwordRecovery().vemail_pattern); + _pattern = qs(result.c_auth_passwordRecovery().vemail_pattern()); recover(); } diff --git a/Telegram/SourceFiles/boxes/peer_list_controllers.cpp b/Telegram/SourceFiles/boxes/peer_list_controllers.cpp index 17920ec5c..e9652cb72 100644 --- a/Telegram/SourceFiles/boxes/peer_list_controllers.cpp +++ b/Telegram/SourceFiles/boxes/peer_list_controllers.cpp @@ -38,10 +38,10 @@ void ShareBotGame(not_null bot, not_null chat) { MTP_inputGameShortName( bot->inputUser, MTP_string(bot->botInfo->shareGameShortName))), - MTP_string(""), + MTP_string(), MTP_long(randomId), MTPReplyMarkup(), - MTPnullEntities), + MTPVector()), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::sendMessageFail), 0, @@ -182,8 +182,8 @@ void PeerListGlobalSearchController::searchDone( auto &contacts = result.c_contacts_found(); auto query = _query; if (requestId) { - Auth().data().processUsers(contacts.vusers); - Auth().data().processChats(contacts.vchats); + Auth().data().processUsers(contacts.vusers()); + Auth().data().processChats(contacts.vchats()); auto it = _queries.find(requestId); if (it != _queries.cend()) { query = it->second; @@ -200,8 +200,8 @@ void PeerListGlobalSearchController::searchDone( }; if (_requestId == requestId) { _requestId = 0; - feedList(contacts.vmy_results); - feedList(contacts.vresults); + feedList(contacts.vmy_results()); + feedList(contacts.vresults()); delegate()->peerListSearchRefreshRows(); } } diff --git a/Telegram/SourceFiles/boxes/peers/add_participants_box.cpp b/Telegram/SourceFiles/boxes/peers/add_participants_box.cpp index 5120b0c0c..193ae0921 100644 --- a/Telegram/SourceFiles/boxes/peers/add_participants_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/add_participants_box.cpp @@ -444,8 +444,8 @@ bool AddSpecialBoxController::checkInfoLoaded( Expects(result.type() == mtpc_channels_channelParticipant); const auto &participant = result.c_channels_channelParticipant(); - channel->owner().processUsers(participant.vusers); - _additional.applyParticipant(participant.vparticipant); + channel->owner().processUsers(participant.vusers()); + _additional.applyParticipant(participant.vparticipant()); callback(); }).fail([=](const RPCError &error) { _additional.setExternal(user); @@ -576,7 +576,7 @@ void AddSpecialBoxController::editAdminDone( } const auto date = unixtime(); // Incorrect, but ignored. - if (rights.c_chatAdminRights().vflags.v == 0) { + if (rights.c_chatAdminRights().vflags().v == 0) { _additional.applyParticipant(MTP_channelParticipant( MTP_int(user->bareId()), MTP_int(date))); @@ -673,7 +673,7 @@ void AddSpecialBoxController::editRestrictedDone( } const auto date = unixtime(); // Incorrect, but ignored. - if (rights.c_chatBannedRights().vflags.v == 0) { + if (rights.c_chatBannedRights().vflags().v == 0) { _additional.applyParticipant(MTP_channelParticipant( MTP_int(user->bareId()), MTP_int(date))); @@ -938,7 +938,7 @@ void AddSpecialBoxSearchController::searchParticipantsDone( } _requestId = 0; result.match([&](const MTPDchannels_channelParticipants &data) { - const auto &list = data.vparticipants.v; + const auto &list = data.vparticipants().v; if (list.size() < requestedCount) { // We want cache to have full information about a query with // small results count (that we don't need the second request). @@ -992,8 +992,8 @@ void AddSpecialBoxSearchController::searchGlobalDone( auto &found = result.c_contacts_found(); auto query = _query; if (requestId) { - _peer->owner().processUsers(found.vusers); - _peer->owner().processChats(found.vchats); + _peer->owner().processUsers(found.vusers()); + _peer->owner().processChats(found.vchats()); auto it = _globalQueries.find(requestId); if (it != _globalQueries.cend()) { query = it->second; @@ -1016,8 +1016,8 @@ void AddSpecialBoxSearchController::searchGlobalDone( if (_requestId == requestId) { _requestId = 0; _globalLoaded = true; - feedList(found.vmy_results); - feedList(found.vresults); + feedList(found.vmy_results()); + feedList(found.vresults()); delegate()->peerListSearchRefreshRows(); } } diff --git a/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp index e1b3458df..ec7164b37 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp @@ -251,7 +251,7 @@ EditAdminBox::EditAdminBox( nullptr, peer, user, - (rights.c_chatAdminRights().vflags.v != 0)) + (rights.c_chatAdminRights().vflags().v != 0)) , _oldRights(rights) { } @@ -277,7 +277,7 @@ void EditAdminBox::prepare() { EditParticipantBox::prepare(); - auto hadRights = _oldRights.c_chatAdminRights().vflags.v; + auto hadRights = _oldRights.c_chatAdminRights().vflags().v; setTitle(hadRights ? tr::lng_rights_edit_admin() : tr::lng_channel_add_admin()); @@ -297,7 +297,7 @@ void EditAdminBox::prepare() { && channel && !channel->amCreator(); const auto prepareFlags = disabledByDefaults - | (prepareRights.c_chatAdminRights().vflags.v + | (prepareRights.c_chatAdminRights().vflags().v & (filterByMyRights ? channel->adminRights() : ~Flag(0))); const auto disabledMessages = [&] { @@ -601,11 +601,11 @@ void EditRestrictedBox::prepare() { const auto defaultRestrictions = chat ? chat->defaultRestrictions() : channel->defaultRestrictions(); - const auto prepareRights = (_oldRights.c_chatBannedRights().vflags.v + const auto prepareRights = (_oldRights.c_chatBannedRights().vflags().v ? _oldRights : Defaults(peer())); const auto prepareFlags = FixDependentRestrictions( - prepareRights.c_chatBannedRights().vflags.v + prepareRights.c_chatBannedRights().vflags().v | defaultRestrictions | ((channel && channel->isPublic()) ? (Flag::f_change_info | Flag::f_pin_messages) @@ -636,7 +636,7 @@ void EditRestrictedBox::prepare() { disabledMessages); addControl(std::move(checkboxes), QMargins()); - _until = prepareRights.c_chatBannedRights().vuntil_date.v; + _until = prepareRights.c_chatBannedRights().vuntil_date().v; addControl(object_ptr(this), st::rightsUntilMargin); addControl( object_ptr( @@ -755,7 +755,7 @@ void EditRestrictedBox::createUntilVariants() { } }; auto addCurrentVariant = [&](TimeId from, TimeId to) { - auto oldUntil = _oldRights.c_chatBannedRights().vuntil_date.v; + auto oldUntil = _oldRights.c_chatBannedRights().vuntil_date().v; if (oldUntil < _until) { addCustomVariant(oldUntil, from, to); } diff --git a/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp index 84f73ce51..4bc65faee 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp @@ -210,7 +210,7 @@ FnasChatNotMigrated()) { const auto flags = newRights.match([]( const MTPDchatBannedRights &data) { - return data.vflags.v; + return data.vflags().v; }); if (flags & MTPDchatBannedRights::Flag::f_view_messages) { SaveChatParticipantKick(chat, user, done, onFail); @@ -510,13 +510,13 @@ UserData *ParticipantsAdditionalData::applyParticipant( && overrideRole != Role::Members) { return logBad(); } - return applyRegular(data.vuser_id); + return applyRegular(data.vuser_id()); }, [&](const MTPDchannelParticipant &data) { if (overrideRole != Role::Profile && overrideRole != Role::Members) { return logBad(); } - return applyRegular(data.vuser_id); + return applyRegular(data.vuser_id()); }, [&](const MTPDchannelParticipantBanned &data) { if (overrideRole != Role::Profile && overrideRole != Role::Members @@ -530,7 +530,7 @@ UserData *ParticipantsAdditionalData::applyParticipant( UserData *ParticipantsAdditionalData::applyCreator( const MTPDchannelParticipantCreator &data) { - if (const auto user = applyRegular(data.vuser_id)) { + if (const auto user = applyRegular(data.vuser_id())) { _creator = user; return user; } @@ -539,7 +539,7 @@ UserData *ParticipantsAdditionalData::applyCreator( UserData *ParticipantsAdditionalData::applyAdmin( const MTPDchannelParticipantAdmin &data) { - const auto user = _peer->owner().userLoaded(data.vuser_id.v); + const auto user = _peer->owner().userLoaded(data.vuser_id().v); if (!user) { return nullptr; } else if (const auto chat = _peer->asChat()) { @@ -552,13 +552,13 @@ UserData *ParticipantsAdditionalData::applyAdmin( _restrictedRights.erase(user); _kicked.erase(user); _restrictedBy.erase(user); - _adminRights[user] = data.vadmin_rights; + _adminRights[user] = data.vadmin_rights(); if (data.is_can_edit()) { _adminCanEdit.emplace(user); } else { _adminCanEdit.erase(user); } - if (const auto by = _peer->owner().userLoaded(data.vpromoted_by.v)) { + if (const auto by = _peer->owner().userLoaded(data.vpromoted_by().v)) { const auto i = _adminPromotedBy.find(user); if (i == _adminPromotedBy.end()) { _adminPromotedBy.emplace(user, by); @@ -567,7 +567,7 @@ UserData *ParticipantsAdditionalData::applyAdmin( } } else { LOG(("API Error: No user %1 for admin promoted by." - ).arg(data.vpromoted_by.v)); + ).arg(data.vpromoted_by().v)); } return user; } @@ -594,7 +594,7 @@ UserData *ParticipantsAdditionalData::applyRegular(MTPint userId) { UserData *ParticipantsAdditionalData::applyBanned( const MTPDchannelParticipantBanned &data) { - const auto user = _peer->owner().userLoaded(data.vuser_id.v); + const auto user = _peer->owner().userLoaded(data.vuser_id().v); if (!user) { return nullptr; } @@ -608,8 +608,8 @@ UserData *ParticipantsAdditionalData::applyBanned( } else { _kicked.erase(user); } - _restrictedRights[user] = data.vbanned_rights; - if (const auto by = _peer->owner().userLoaded(data.vkicked_by.v)) { + _restrictedRights[user] = data.vbanned_rights(); + if (const auto by = _peer->owner().userLoaded(data.vkicked_by().v)) { const auto i = _restrictedBy.find(user); if (i == _restrictedBy.end()) { _restrictedBy.emplace(user, by); @@ -1201,9 +1201,9 @@ void ParticipantsBoxController::loadMoreRows() { } else if (_role == Role::Admins) { return MTP_channelParticipantsAdmins(); } else if (_role == Role::Restricted) { - return MTP_channelParticipantsBanned(MTP_string(QString())); + return MTP_channelParticipantsBanned(MTP_string()); } - return MTP_channelParticipantsKicked(MTP_string(QString())); + return MTP_channelParticipantsKicked(MTP_string()); }(); // First query is small and fast, next loads a lot of rows. @@ -1442,7 +1442,7 @@ void ParticipantsBoxController::editAdminDone( } const auto date = unixtime(); // Incorrect, but ignored. - if (rights.c_chatAdminRights().vflags.v == 0) { + if (rights.c_chatAdminRights().vflags().v == 0) { _additional.applyParticipant(MTP_channelParticipant( MTP_int(user->bareId()), MTP_int(date))); @@ -1510,7 +1510,7 @@ void ParticipantsBoxController::editRestrictedDone( } const auto date = unixtime(); // Incorrect, but ignored. - if (rights.c_chatBannedRights().vflags.v == 0) { + if (rights.c_chatBannedRights().vflags().v == 0) { _additional.applyParticipant(MTP_channelParticipant( MTP_int(user->bareId()), MTP_int(date))); @@ -1996,7 +1996,7 @@ void ParticipantsBoxSearchController::searchDone( _requestId = 0; result.match([&](const MTPDchannels_channelParticipants &data) { - const auto &list = data.vparticipants.v; + const auto &list = data.vparticipants().v; if (list.size() < requestedCount) { // We want cache to have full information about a query with // small results count (that we don't need the second request). diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp index 9e04bbea2..b4afc728b 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp @@ -553,7 +553,7 @@ void Controller::showEditLinkedChatBox() { ).done([=](const MTPmessages_Chats &result) { _linkedChatsRequestId = 0; const auto list = result.match([&](const auto &data) { - return data.vchats.v; + return data.vchats().v; }); auto chats = std::vector>(); chats.reserve(list.size()); diff --git a/Telegram/SourceFiles/boxes/sessions_box.cpp b/Telegram/SourceFiles/boxes/sessions_box.cpp index ea74e7b6b..787572896 100644 --- a/Telegram/SourceFiles/boxes/sessions_box.cpp +++ b/Telegram/SourceFiles/boxes/sessions_box.cpp @@ -141,7 +141,7 @@ void SessionsBox::got(const MTPaccount_Authorizations &result) { _data = Full(); result.match([&](const MTPDaccount_authorizations &data) { - const auto &list = data.vauthorizations.v; + const auto &list = data.vauthorizations().v; for (const auto &auth : list) { auth.match([&](const MTPDauthorization &data) { auto entry = ParseEntry(data); @@ -170,14 +170,14 @@ void SessionsBox::got(const MTPaccount_Authorizations &result) { SessionsBox::Entry SessionsBox::ParseEntry(const MTPDauthorization &data) { auto result = Entry(); - result.hash = data.is_current() ? 0 : data.vhash.v; + result.hash = data.is_current() ? 0 : data.vhash().v; result.incomplete = data.is_password_pending(); auto appName = QString(); - auto appVer = qs(data.vapp_version); - const auto systemVer = qs(data.vsystem_version); - const auto deviceModel = qs(data.vdevice_model); - const auto apiId = data.vapi_id.v; + auto appVer = qs(data.vapp_version()); + const auto systemVer = qs(data.vsystem_version()); + const auto deviceModel = qs(data.vdevice_model()); + const auto apiId = data.vapi_id().v; if (apiId == 2040 || apiId == 17349) { appName = (apiId == 2040) ? qstr("Telegram Desktop") @@ -201,7 +201,7 @@ SessionsBox::Entry SessionsBox::ParseEntry(const MTPDauthorization &data) { // appVer = QString(); } } else { - appName = qs(data.vapp_name);// +qsl(" for ") + qs(d.vplatform); + appName = qs(data.vapp_name());// +qsl(" for ") + qs(d.vplatform()); if (appVer.indexOf('(') >= 0) { appVer = appVer.mid(appVer.indexOf('(')); } @@ -211,19 +211,19 @@ SessionsBox::Entry SessionsBox::ParseEntry(const MTPDauthorization &data) { result.name += ' ' + appVer; } - const auto country = qs(data.vcountry); - const auto platform = qs(data.vplatform); + const auto country = qs(data.vcountry()); + const auto platform = qs(data.vplatform()); //const auto &countries = countriesByISO2(); //const auto j = countries.constFind(country); //if (j != countries.cend()) { // country = QString::fromUtf8(j.value()->name); //} - result.activeTime = data.vdate_active.v - ? data.vdate_active.v - : data.vdate_created.v; - result.info = qs(data.vdevice_model) + qstr(", ") + (platform.isEmpty() ? QString() : platform + ' ') + qs(data.vsystem_version); - result.ip = qs(data.vip) + (country.isEmpty() ? QString() : QString::fromUtf8(" \xe2\x80\x93 ") + country); + result.activeTime = data.vdate_active().v + ? data.vdate_active().v + : data.vdate_created().v; + result.info = qs(data.vdevice_model()) + qstr(", ") + (platform.isEmpty() ? QString() : platform + ' ') + qs(data.vsystem_version()); + result.ip = qs(data.vip()) + (country.isEmpty() ? QString() : QString::fromUtf8(" \xe2\x80\x93 ") + country); if (!result.hash) { result.active = tr::lng_status_online(tr::now); result.activeWidth = st::sessionWhenFont->width(tr::lng_status_online(tr::now)); diff --git a/Telegram/SourceFiles/boxes/share_box.cpp b/Telegram/SourceFiles/boxes/share_box.cpp index dbb18f181..4b06fd643 100644 --- a/Telegram/SourceFiles/boxes/share_box.cpp +++ b/Telegram/SourceFiles/boxes/share_box.cpp @@ -336,12 +336,12 @@ void ShareBox::peopleReceived( switch (result.type()) { case mtpc_contacts_found: { auto &found = result.c_contacts_found(); - Auth().data().processUsers(found.vusers); - Auth().data().processChats(found.vchats); + Auth().data().processUsers(found.vusers()); + Auth().data().processChats(found.vchats()); _inner->peopleReceived( query, - found.vmy_results.v, - found.vresults.v); + found.vmy_results().v, + found.vresults().v); } break; } @@ -1151,7 +1151,7 @@ void ShareGameScoreByHash(const QString &hash) { auto requestChannel = MTPchannels_GetChannels(requestChannelIds); MTP::send(requestChannel, rpcDone([=](const MTPmessages_Chats &result) { result.match([](const auto &data) { - Auth().data().processChats(data.vchats); + Auth().data().processChats(data.vchats()); }); if (const auto channel = Auth().data().channelLoaded(channelId)) { resolveMessageAndShareScore(channel); diff --git a/Telegram/SourceFiles/boxes/sticker_set_box.cpp b/Telegram/SourceFiles/boxes/sticker_set_box.cpp index 1b16d850d..fc4cb05fb 100644 --- a/Telegram/SourceFiles/boxes/sticker_set_box.cpp +++ b/Telegram/SourceFiles/boxes/sticker_set_box.cpp @@ -217,10 +217,10 @@ StickerSetBox::Inner::Inner( , _input(set) , _previewTimer([=] { showPreview(); }) { set.match([&](const MTPDinputStickerSetID &data) { - _setId = data.vid.v; - _setAccess = data.vaccess_hash.v; + _setId = data.vid().v; + _setAccess = data.vaccess_hash().v; }, [&](const MTPDinputStickerSetShortName &data) { - _setShortName = qs(data.vshort_name); + _setShortName = qs(data.vshort_name()); }, [&](const MTPDinputStickerSetEmpty &) { }); @@ -247,7 +247,7 @@ void StickerSetBox::Inner::gotSet(const MTPmessages_StickerSet &set) { _selected = -1; setCursor(style::cur_default); set.match([&](const MTPDmessages_stickerSet &data) { - const auto &v = data.vdocuments.v; + const auto &v = data.vdocuments().v; _pack.reserve(v.size()); _elements.reserve(v.size()); for (const auto &item : v) { @@ -259,11 +259,11 @@ void StickerSetBox::Inner::gotSet(const MTPmessages_StickerSet &set) { _pack.push_back(document); _elements.push_back({ document }); } - for (const auto &pack : data.vpacks.v) { + for (const auto &pack : data.vpacks().v) { pack.match([&](const MTPDstickerPack &pack) { - if (const auto emoji = Ui::Emoji::Find(qs(pack.vemoticon))) { + if (const auto emoji = Ui::Emoji::Find(qs(pack.vemoticon()))) { const auto original = emoji->original(); - auto &stickers = pack.vdocuments.v; + auto &stickers = pack.vdocuments().v; auto p = Stickers::Pack(); p.reserve(stickers.size()); @@ -277,20 +277,20 @@ void StickerSetBox::Inner::gotSet(const MTPmessages_StickerSet &set) { } }); } - data.vset.match([&](const MTPDstickerSet &set) { + data.vset().match([&](const MTPDstickerSet &set) { _setTitle = Stickers::GetSetTitle(set); - _setShortName = qs(set.vshort_name); - _setId = set.vid.v; - _setAccess = set.vaccess_hash.v; - _setCount = set.vcount.v; - _setHash = set.vhash.v; - _setFlags = set.vflags.v; - _setInstallDate = set.has_installed_date() - ? set.vinstalled_date.v - : TimeId(0); - _setThumbnail = set.has_thumb() - ? Images::Create(set, set.vthumb) - : ImagePtr(); + _setShortName = qs(set.vshort_name()); + _setId = set.vid().v; + _setAccess = set.vaccess_hash().v; + _setCount = set.vcount().v; + _setHash = set.vhash().v; + _setFlags = set.vflags().v; + _setInstallDate = set.vinstalled_date().value_or(0); + if (const auto thumb = set.vthumb()) { + _setThumbnail = Images::Create(set, *thumb); + } else { + _setThumbnail = ImagePtr(); + } auto &sets = Auth().data().stickerSetsRef(); const auto it = sets.find(_setId); if (it != sets.cend()) { diff --git a/Telegram/SourceFiles/boxes/stickers_box.cpp b/Telegram/SourceFiles/boxes/stickers_box.cpp index 715072d53..39d600c39 100644 --- a/Telegram/SourceFiles/boxes/stickers_box.cpp +++ b/Telegram/SourceFiles/boxes/stickers_box.cpp @@ -158,7 +158,7 @@ void StickersBox::showAttachedStickers() { auto addedSet = false; for (const auto &stickerSet : _attachedSets.v) { const auto setData = stickerSet.match([&](const auto &data) { - return data.vset.match([&](const MTPDstickerSet &data) { + return data.vset().match([&](const MTPDstickerSet &data) { return &data; }); }); @@ -201,19 +201,19 @@ void StickersBox::getArchivedDone(uint64 offsetId, const MTPmessages_ArchivedSti auto addedSet = false; auto changedSets = false; - for_const (const auto &stickerSet, stickers.vsets.v) { + for_const (const auto &stickerSet, stickers.vsets().v) { const MTPDstickerSet *setData = nullptr; switch (stickerSet.type()) { case mtpc_stickerSetCovered: { auto &d = stickerSet.c_stickerSetCovered(); - if (d.vset.type() == mtpc_stickerSet) { - setData = &d.vset.c_stickerSet(); + if (d.vset().type() == mtpc_stickerSet) { + setData = &d.vset().c_stickerSet(); } } break; case mtpc_stickerSetMultiCovered: { auto &d = stickerSet.c_stickerSetMultiCovered(); - if (d.vset.type() == mtpc_stickerSet) { - setData = &d.vset.c_stickerSet(); + if (d.vset().type() == mtpc_stickerSet) { + setData = &d.vset().c_stickerSet(); } } break; } @@ -239,7 +239,7 @@ void StickersBox::getArchivedDone(uint64 offsetId, const MTPmessages_ArchivedSti if (addedSet) { _archived.widget()->updateSize(); } else { - _allArchivedLoaded = stickers.vsets.v.isEmpty() + _allArchivedLoaded = stickers.vsets().v.isEmpty() || (!changedSets && offsetId != 0); if (changedSets) { loadMoreArchived(); @@ -1324,8 +1324,8 @@ void StickersBox::Inner::mouseReleaseEvent(QMouseEvent *e) { void StickersBox::Inner::saveGroupSet() { Expects(_megagroupSet != nullptr); - auto oldId = (_megagroupSet->mgInfo->stickerSet.type() == mtpc_inputStickerSetID) ? _megagroupSet->mgInfo->stickerSet.c_inputStickerSetID().vid.v : 0; - auto newId = (_megagroupSetInput.type() == mtpc_inputStickerSetID) ? _megagroupSetInput.c_inputStickerSetID().vid.v : 0; + auto oldId = (_megagroupSet->mgInfo->stickerSet.type() == mtpc_inputStickerSetID) ? _megagroupSet->mgInfo->stickerSet.c_inputStickerSetID().vid().v : 0; + auto newId = (_megagroupSetInput.type() == mtpc_inputStickerSetID) ? _megagroupSetInput.c_inputStickerSetID().vid().v : 0; if (newId != oldId) { Auth().api().setGroupStickerSet(_megagroupSet, _megagroupSetInput); Auth().api().stickerSetInstalled(Stickers::MegagroupSetId); @@ -1492,11 +1492,11 @@ void StickersBox::Inner::rebuildMegagroupSet() { return; } auto &set = _megagroupSetInput.c_inputStickerSetID(); - auto setId = set.vid.v; + auto setId = set.vid().v; auto &sets = Auth().data().stickerSets(); auto it = sets.find(setId); if (it == sets.cend() || (it->flags & MTPDstickerSet_ClientFlag::f_not_loaded)) { - Auth().api().scheduleStickerSetRequest(set.vid.v, set.vaccess_hash.v); + Auth().api().scheduleStickerSetRequest(set.vid().v, set.vaccess_hash().v); return; } diff --git a/Telegram/SourceFiles/boxes/url_auth_box.cpp b/Telegram/SourceFiles/boxes/url_auth_box.cpp index 24efa3c25..9febe29a0 100644 --- a/Telegram/SourceFiles/boxes/url_auth_box.cpp +++ b/Telegram/SourceFiles/boxes/url_auth_box.cpp @@ -48,7 +48,7 @@ void UrlAuthBox::Activate( button->requestId = 0; result.match([&](const MTPDurlAuthResultAccepted &data) { - UrlClickHandler::Open(qs(data.vurl)); + UrlClickHandler::Open(qs(data.vurl())); }, [&](const MTPDurlAuthResultDefault &data) { HiddenUrlClickHandler::Open(url); }, [&](const MTPDurlAuthResultRequest &data) { @@ -82,7 +82,7 @@ void UrlAuthBox::Request( const auto url = QString::fromUtf8(button->data); const auto bot = request.is_request_write_access() - ? session->data().processUser(request.vbot).get() + ? session->data().processUser(request.vbot()).get() : nullptr; const auto box = std::make_shared>(); const auto finishWithUrl = [=](const QString &url) { @@ -105,7 +105,7 @@ void UrlAuthBox::Request( )).done([=](const MTPUrlAuthResult &result) { const auto to = result.match( [&](const MTPDurlAuthResultAccepted &data) { - return qs(data.vurl); + return qs(data.vurl()); }, [&](const MTPDurlAuthResultDefault &data) { return url; }, [&](const MTPDurlAuthResultRequest &data) { @@ -120,7 +120,7 @@ void UrlAuthBox::Request( } }; *box = Ui::show( - Box(url, qs(request.vdomain), bot, callback), + Box(url, qs(request.vdomain()), bot, callback), LayerOption::KeepOther); } diff --git a/Telegram/SourceFiles/calls/calls_box_controller.cpp b/Telegram/SourceFiles/calls/calls_box_controller.cpp index 9f93fb326..a902bd883 100644 --- a/Telegram/SourceFiles/calls/calls_box_controller.cpp +++ b/Telegram/SourceFiles/calls/calls_box_controller.cpp @@ -246,7 +246,7 @@ void BoxController::loadMoreRows() { _loadRequestId = request(MTPmessages_Search( MTP_flags(0), MTP_inputPeerEmpty(), - MTP_string(QString()), + MTP_string(), MTP_inputUserEmpty(), MTP_inputMessagesFilterPhoneCalls(MTP_flags(0)), MTP_int(0), @@ -261,9 +261,9 @@ void BoxController::loadMoreRows() { _loadRequestId = 0; auto handleResult = [&](auto &data) { - Auth().data().processUsers(data.vusers); - Auth().data().processChats(data.vchats); - receivedCalls(data.vmessages.v); + Auth().data().processUsers(data.vusers()); + Auth().data().processChats(data.vchats()); + receivedCalls(data.vmessages().v); }; switch (result.type()) { diff --git a/Telegram/SourceFiles/calls/calls_call.cpp b/Telegram/SourceFiles/calls/calls_call.cpp index 12cfc94b5..cb3ebeab7 100644 --- a/Telegram/SourceFiles/calls/calls_call.cpp +++ b/Telegram/SourceFiles/calls/calls_call.cpp @@ -45,22 +45,22 @@ void AppendEndpoint( std::vector &list, const MTPPhoneConnection &connection) { connection.match([&](const MTPDphoneConnection &data) { - if (data.vpeer_tag.v.length() != 16) { + if (data.vpeer_tag().v.length() != 16) { return; } const auto ipv4 = tgvoip::IPv4Address(std::string( - data.vip.v.constData(), - data.vip.v.size())); + data.vip().v.constData(), + data.vip().v.size())); const auto ipv6 = tgvoip::IPv6Address(std::string( - data.vipv6.v.constData(), - data.vipv6.v.size())); + data.vipv6().v.constData(), + data.vipv6().v.size())); list.emplace_back( - (int64_t)data.vid.v, - (uint16_t)data.vport.v, + (int64_t)data.vid().v, + (uint16_t)data.vport().v, ipv4, ipv6, tgvoip::Endpoint::Type::UDP_RELAY, - (unsigned char*)data.vpeer_tag.v.data()); + (unsigned char*)data.vpeer_tag().v.data()); }); } @@ -204,17 +204,17 @@ void Call::startOutgoing() { setState(State::Waiting); auto &call = result.c_phone_phoneCall(); - Auth().data().processUsers(call.vusers); - if (call.vphone_call.type() != mtpc_phoneCallWaiting) { + Auth().data().processUsers(call.vusers()); + if (call.vphone_call().type() != mtpc_phoneCallWaiting) { LOG(("Call Error: Expected phoneCallWaiting in response to phone.requestCall()")); finish(FinishType::Failed); return; } - auto &phoneCall = call.vphone_call; + auto &phoneCall = call.vphone_call(); auto &waitingCall = phoneCall.c_phoneCallWaiting(); - _id = waitingCall.vid.v; - _accessHash = waitingCall.vaccess_hash.v; + _id = waitingCall.vid().v; + _accessHash = waitingCall.vaccess_hash().v; if (_finishAfterRequestingCall != FinishType::None) { if (_finishAfterRequestingCall == FinishType::Failed) { finish(_finishAfterRequestingCall); @@ -277,15 +277,15 @@ void Call::actuallyAnswer() { )).done([=](const MTPphone_PhoneCall &result) { Expects(result.type() == mtpc_phone_phoneCall); auto &call = result.c_phone_phoneCall(); - Auth().data().processUsers(call.vusers); - if (call.vphone_call.type() != mtpc_phoneCallWaiting) { + Auth().data().processUsers(call.vusers()); + if (call.vphone_call().type() != mtpc_phoneCallWaiting) { LOG(("Call Error: " "Not phoneCallWaiting in response to phone.acceptCall.")); finish(FinishType::Failed); return; } - handleUpdate(call.vphone_call); + handleUpdate(call.vphone_call()); }).fail([=](const RPCError &error) { handleRequestError(error); }).send(); @@ -371,19 +371,19 @@ bool Call::handleUpdate(const MTPPhoneCall &call) { auto &data = call.c_phoneCallRequested(); if (_type != Type::Incoming || _id != 0 - || peerToUser(_user->id) != data.vadmin_id.v) { + || peerToUser(_user->id) != data.vadmin_id().v) { Unexpected("phoneCallRequested call inside an existing call handleUpdate()"); } - if (Auth().userId() != data.vparticipant_id.v) { + if (Auth().userId() != data.vparticipant_id().v) { LOG(("Call Error: Wrong call participant_id %1, expected %2." - ).arg(data.vparticipant_id.v + ).arg(data.vparticipant_id().v ).arg(Auth().userId())); finish(FinishType::Failed); return true; } - _id = data.vid.v; - _accessHash = data.vaccess_hash.v; - auto gaHashBytes = bytes::make_span(data.vg_a_hash.v); + _id = data.vid().v; + _accessHash = data.vaccess_hash().v; + auto gaHashBytes = bytes::make_span(data.vg_a_hash().v); if (gaHashBytes.size() != kSha256Size) { LOG(("Call Error: Wrong g_a_hash size %1, expected %2." ).arg(gaHashBytes.size() @@ -396,7 +396,7 @@ bool Call::handleUpdate(const MTPPhoneCall &call) { case mtpc_phoneCallEmpty: { auto &data = call.c_phoneCallEmpty(); - if (data.vid.v != _id) { + if (data.vid().v != _id) { return false; } LOG(("Call Error: phoneCallEmpty received.")); @@ -405,12 +405,12 @@ bool Call::handleUpdate(const MTPPhoneCall &call) { case mtpc_phoneCallWaiting: { auto &data = call.c_phoneCallWaiting(); - if (data.vid.v != _id) { + if (data.vid().v != _id) { return false; } if (_type == Type::Outgoing && _state == State::Waiting - && data.vreceive_date.v != 0) { + && data.vreceive_date().value_or_empty() != 0) { _discardByTimeoutTimer.callOnce(Global::CallRingTimeoutMs()); setState(State::Ringing); startWaitingTrack(); @@ -419,7 +419,7 @@ bool Call::handleUpdate(const MTPPhoneCall &call) { case mtpc_phoneCall: { auto &data = call.c_phoneCall(); - if (data.vid.v != _id) { + if (data.vid().v != _id) { return false; } if (_type == Type::Incoming @@ -431,7 +431,7 @@ bool Call::handleUpdate(const MTPPhoneCall &call) { case mtpc_phoneCallDiscarded: { auto &data = call.c_phoneCallDiscarded(); - if (data.vid.v != _id) { + if (data.vid().v != _id) { return false; } if (data.is_need_debug()) { @@ -448,12 +448,11 @@ bool Call::handleUpdate(const MTPPhoneCall &call) { if (data.is_need_rating() && _id && _accessHash) { Ui::show(Box(_id, _accessHash)); } - if (data.has_reason() - && data.vreason.type() == mtpc_phoneCallDiscardReasonDisconnect) { + const auto reason = data.vreason(); + if (reason && reason->type() == mtpc_phoneCallDiscardReasonDisconnect) { LOG(("Call Info: Discarded with DISCONNECT reason.")); } - if (data.has_reason() - && data.vreason.type() == mtpc_phoneCallDiscardReasonBusy) { + if (reason && reason->type() == mtpc_phoneCallDiscardReasonBusy) { setState(State::Busy); } else if (_type == Type::Outgoing || _state == State::HangingUp) { setState(State::Ended); @@ -464,7 +463,7 @@ bool Call::handleUpdate(const MTPPhoneCall &call) { case mtpc_phoneCallAccepted: { auto &data = call.c_phoneCallAccepted(); - if (data.vid.v != _id) { + if (data.vid().v != _id) { return false; } if (_type != Type::Outgoing) { @@ -489,7 +488,7 @@ void Call::confirmAcceptedCall(const MTPDphoneCallAccepted &call) { return; } - const auto firstBytes = bytes::make_span(call.vg_b.v); + const auto firstBytes = bytes::make_span(call.vg_b().v); const auto computedAuthKey = MTP::CreateAuthKey( firstBytes, _randomPower, @@ -517,14 +516,14 @@ void Call::confirmAcceptedCall(const MTPDphoneCallAccepted &call) { Expects(result.type() == mtpc_phone_phoneCall); auto &call = result.c_phone_phoneCall(); - Auth().data().processUsers(call.vusers); - if (call.vphone_call.type() != mtpc_phoneCall) { + Auth().data().processUsers(call.vusers()); + if (call.vphone_call().type() != mtpc_phoneCall) { LOG(("Call Error: Expected phoneCall in response to phone.confirmCall()")); finish(FinishType::Failed); return; } - createAndStartController(call.vphone_call.c_phoneCall()); + createAndStartController(call.vphone_call().c_phoneCall()); }).fail([this](const RPCError &error) { handleRequestError(error); }).send(); @@ -533,7 +532,7 @@ void Call::confirmAcceptedCall(const MTPDphoneCallAccepted &call) { void Call::startConfirmedCall(const MTPDphoneCall &call) { Expects(_type == Type::Incoming); - auto firstBytes = bytes::make_span(call.vg_a_or_b.v); + auto firstBytes = bytes::make_span(call.vg_a_or_b().v); if (_gaHash != openssl::Sha256(firstBytes)) { LOG(("Call Error: Wrong g_a hash received.")); finish(FinishType::Failed); @@ -583,9 +582,9 @@ void Call::createAndStartController(const MTPDphoneCall &call) { QDir().mkpath(callLogFolder); } - const auto &protocol = call.vprotocol.c_phoneCallProtocol(); + const auto &protocol = call.vprotocol().c_phoneCallProtocol(); auto endpoints = std::vector(); - for (const auto &connection : call.vconnections.v) { + for (const auto &connection : call.vconnections().v) { AppendEndpoint(endpoints, connection); } @@ -611,7 +610,7 @@ void Call::createAndStartController(const MTPDphoneCall &call) { _controller->SetRemoteEndpoints( endpoints, call.is_p2p_allowed(), - protocol.vmax_layer.v); + protocol.vmax_layer().v); _controller->SetConfig(config); _controller->SetCurrentAudioOutput(Global::CallOutputDeviceID().toStdString()); _controller->SetCurrentAudioInput(Global::CallInputDeviceID().toStdString()); @@ -699,18 +698,18 @@ bool Call::checkCallCommonFields(const T &call) { finish(FinishType::Failed); return false; }; - if (call.vaccess_hash.v != _accessHash) { + if (call.vaccess_hash().v != _accessHash) { LOG(("Call Error: Wrong call access_hash.")); return checkFailed(); } auto adminId = (_type == Type::Outgoing) ? Auth().userId() : peerToUser(_user->id); auto participantId = (_type == Type::Outgoing) ? peerToUser(_user->id) : Auth().userId(); - if (call.vadmin_id.v != adminId) { - LOG(("Call Error: Wrong call admin_id %1, expected %2.").arg(call.vadmin_id.v).arg(adminId)); + if (call.vadmin_id().v != adminId) { + LOG(("Call Error: Wrong call admin_id %1, expected %2.").arg(call.vadmin_id().v).arg(adminId)); return checkFailed(); } - if (call.vparticipant_id.v != participantId) { - LOG(("Call Error: Wrong call participant_id %1, expected %2.").arg(call.vparticipant_id.v).arg(participantId)); + if (call.vparticipant_id().v != participantId) { + LOG(("Call Error: Wrong call participant_id %1, expected %2.").arg(call.vparticipant_id().v).arg(participantId)); return checkFailed(); } return true; @@ -720,7 +719,7 @@ bool Call::checkCallFields(const MTPDphoneCall &call) { if (!checkCallCommonFields(call)) { return false; } - if (call.vkey_fingerprint.v != _keyFingerprint) { + if (call.vkey_fingerprint().v != _keyFingerprint) { LOG(("Call Error: Wrong call fingerprint.")); finish(FinishType::Failed); return false; diff --git a/Telegram/SourceFiles/calls/calls_instance.cpp b/Telegram/SourceFiles/calls/calls_instance.cpp index 24f6f5655..1577dec08 100644 --- a/Telegram/SourceFiles/calls/calls_instance.cpp +++ b/Telegram/SourceFiles/calls/calls_instance.cpp @@ -169,26 +169,26 @@ bytes::const_span Instance::updateDhConfig( }; return data.match([&](const MTPDmessages_dhConfig &data) -> bytes::const_span { - auto primeBytes = bytes::make_vector(data.vp.v); - if (!MTP::IsPrimeAndGood(primeBytes, data.vg.v)) { + auto primeBytes = bytes::make_vector(data.vp().v); + if (!MTP::IsPrimeAndGood(primeBytes, data.vg().v)) { LOG(("API Error: bad p/g received in dhConfig.")); return {}; - } else if (!validRandom(data.vrandom.v)) { + } else if (!validRandom(data.vrandom().v)) { return {}; } - _dhConfig.g = data.vg.v; + _dhConfig.g = data.vg().v; _dhConfig.p = std::move(primeBytes); - _dhConfig.version = data.vversion.v; - return bytes::make_span(data.vrandom.v); + _dhConfig.version = data.vversion().v; + return bytes::make_span(data.vrandom().v); }, [&](const MTPDmessages_dhConfigNotModified &data) -> bytes::const_span { if (!_dhConfig.g || _dhConfig.p.empty()) { LOG(("API Error: dhConfigNotModified on zero version.")); return {}; - } else if (!validRandom(data.vrandom.v)) { + } else if (!validRandom(data.vrandom().v)) { return {}; } - return bytes::make_span(data.vrandom.v); + return bytes::make_span(data.vrandom().v); }); } @@ -203,7 +203,7 @@ void Instance::refreshServerConfig() { _serverConfigRequestId = 0; _lastServerConfigUpdateTime = crl::now(); - const auto &json = result.c_dataJSON().vdata.v; + const auto &json = result.c_dataJSON().vdata().v; UpdateConfig(std::string(json.data(), json.size())); }).fail([this](const RPCError &error) { _serverConfigRequestId = 0; @@ -211,7 +211,7 @@ void Instance::refreshServerConfig() { } void Instance::handleUpdate(const MTPDupdatePhoneCall& update) { - handleCallUpdate(update.vphone_call); + handleCallUpdate(update.vphone_call()); } void Instance::showInfoPanel(not_null call) { @@ -235,7 +235,7 @@ bool Instance::isQuitPrevent() { void Instance::handleCallUpdate(const MTPPhoneCall &call) { if (call.type() == mtpc_phoneCallRequested) { auto &phoneCall = call.c_phoneCallRequested(); - auto user = Auth().data().userLoaded(phoneCall.vadmin_id.v); + auto user = Auth().data().userLoaded(phoneCall.vadmin_id().v); if (!user) { LOG(("API Error: User not loaded for phoneCallRequested.")); } else if (user->isSelf()) { @@ -244,12 +244,12 @@ void Instance::handleCallUpdate(const MTPPhoneCall &call) { if (alreadyInCall() || !user || user->isSelf()) { request(MTPphone_DiscardCall( MTP_flags(0), - MTP_inputPhoneCall(phoneCall.vid, phoneCall.vaccess_hash), + MTP_inputPhoneCall(phoneCall.vid(), phoneCall.vaccess_hash()), MTP_int(0), MTP_phoneCallDiscardReasonBusy(), MTP_long(0) )).send(); - } else if (phoneCall.vdate.v + (Global::CallRingTimeoutMs() / 1000) < unixtime()) { + } else if (phoneCall.vdate().v + (Global::CallRingTimeoutMs() / 1000) < unixtime()) { LOG(("Ignoring too old call.")); } else { createCall(user, Call::Type::Incoming); diff --git a/Telegram/SourceFiles/chat_helpers/emoji_keywords.cpp b/Telegram/SourceFiles/chat_helpers/emoji_keywords.cpp index 3d673ca18..d50c297cd 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_keywords.cpp +++ b/Telegram/SourceFiles/chat_helpers/emoji_keywords.cpp @@ -218,13 +218,13 @@ void ApplyDifference( data.version = version; for (const auto &keyword : keywords) { keyword.match([&](const MTPDemojiKeyword &keyword) { - const auto word = NormalizeKey(qs(keyword.vkeyword)); + const auto word = NormalizeKey(qs(keyword.vkeyword())); if (word.isEmpty()) { return; } auto &list = data.emoji[word]; auto &&emoji = ranges::view::all( - keyword.vemoticons.v + keyword.vemoticons().v ) | ranges::view::transform([](const MTPstring &string) { const auto text = qs(string); const auto emoji = MustAddPostfix(text) @@ -241,7 +241,7 @@ void ApplyDifference( }); list.insert(end(list), emoji.begin(), emoji.end()); }, [&](const MTPDemojiKeywordDeleted &keyword) { - const auto word = NormalizeKey(qs(keyword.vkeyword)); + const auto word = NormalizeKey(qs(keyword.vkeyword())); if (word.isEmpty()) { return; } @@ -250,7 +250,7 @@ void ApplyDifference( return; } auto &list = i->second; - for (const auto &emoji : keyword.vemoticons.v) { + for (const auto &emoji : keyword.vemoticons().v) { list.erase( ranges::remove(list, qs(emoji), &LangPackEmoji::text), end(list)); @@ -388,9 +388,9 @@ void EmojiKeywords::LangPack::refresh() { void EmojiKeywords::LangPack::applyDifference( const MTPEmojiKeywordsDifference &result) { result.match([&](const MTPDemojiKeywordsDifference &data) { - const auto code = qs(data.vlang_code); - const auto version = data.vversion.v; - const auto &keywords = data.vkeywords.v; + const auto code = qs(data.vlang_code()); + const auto version = data.vversion().v; + const auto &keywords = data.vkeywords().v; if (code != _id) { LOG(("API Error: Bad lang_code for emoji keywords %1 -> %2" ).arg(_id @@ -634,7 +634,7 @@ void EmojiKeywords::refreshRemoteList() { result.v ) | ranges::view::transform([](const MTPEmojiLanguage &language) { return language.match([&](const MTPDemojiLanguage &language) { - return qs(language.vlang_code); + return qs(language.vlang_code()); }); }) | ranges::to_vector); _langsRequestId = 0; diff --git a/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp index f286d79e8..7942cfd6e 100644 --- a/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp @@ -228,16 +228,18 @@ void GifsListWidget::inlineResultsDone(const MTPmessages_BotResults &result) { auto adding = (it != _inlineCache.cend()); if (result.type() == mtpc_messages_botResults) { auto &d = result.c_messages_botResults(); - Auth().data().processUsers(d.vusers); + Auth().data().processUsers(d.vusers()); - auto &v = d.vresults.v; - auto queryId = d.vquery_id.v; + auto &v = d.vresults().v; + auto queryId = d.vquery_id().v; if (it == _inlineCache.cend()) { - it = _inlineCache.emplace(_inlineQuery, std::make_unique()).first; + it = _inlineCache.emplace( + _inlineQuery, + std::make_unique()).first; } auto entry = it->second.get(); - entry->nextOffset = qs(d.vnext_offset); + entry->nextOffset = qs(d.vnext_offset().value_or_empty()); if (auto count = v.size()) { entry->results.reserve(entry->results.size() + count); } @@ -853,9 +855,9 @@ void GifsListWidget::searchForGifs(const QString &query) { Expects(result.type() == mtpc_contacts_resolvedPeer); auto &data = result.c_contacts_resolvedPeer(); - Auth().data().processUsers(data.vusers); - Auth().data().processChats(data.vchats); - if (auto peer = Auth().data().peerLoaded(peerFromMTP(data.vpeer))) { + Auth().data().processUsers(data.vusers()); + Auth().data().processChats(data.vchats()); + if (auto peer = Auth().data().peerLoaded(peerFromMTP(data.vpeer()))) { if (auto user = peer->asUser()) { _searchBot = user; } diff --git a/Telegram/SourceFiles/chat_helpers/stickers.cpp b/Telegram/SourceFiles/chat_helpers/stickers.cpp index 9b40bff5f..e35d6643a 100644 --- a/Telegram/SourceFiles/chat_helpers/stickers.cpp +++ b/Telegram/SourceFiles/chat_helpers/stickers.cpp @@ -31,7 +31,7 @@ constexpr auto kDontCacheLottieAfterArea = 512 * 512; } // namespace void ApplyArchivedResult(const MTPDmessages_stickerSetInstallResultArchive &d) { - auto &v = d.vsets.v; + auto &v = d.vsets().v; auto &order = Auth().data().stickerSetsOrderRef(); Order archived; archived.reserve(v.size()); @@ -41,14 +41,14 @@ void ApplyArchivedResult(const MTPDmessages_stickerSetInstallResultArchive &d) { switch (stickerSet.type()) { case mtpc_stickerSetCovered: { auto &d = stickerSet.c_stickerSetCovered(); - if (d.vset.type() == mtpc_stickerSet) { - setData = &d.vset.c_stickerSet(); + if (d.vset().type() == mtpc_stickerSet) { + setData = &d.vset().c_stickerSet(); } } break; case mtpc_stickerSetMultiCovered: { auto &d = stickerSet.c_stickerSetMultiCovered(); - if (d.vset.type() == mtpc_stickerSet) { - setData = &d.vset.c_stickerSet(); + if (d.vset().type() == mtpc_stickerSet) { + setData = &d.vset().c_stickerSet(); } } break; } @@ -97,7 +97,7 @@ bool ApplyArchivedResultFake() { MTP_long(set.access), MTP_string(set.title), MTP_string(set.shortName), - MTP_photoSizeEmpty(MTP_string(QString())), + MTP_photoSizeEmpty(MTP_string()), MTP_int(0), MTP_int(set.count), MTP_int(set.hash)); @@ -298,13 +298,13 @@ void RequestSetToPushFaved(not_null document) { Expects(result.type() == mtpc_messages_stickerSet); auto list = std::vector>(); auto &d = result.c_messages_stickerSet(); - list.reserve(d.vpacks.v.size()); - for_const (auto &mtpPack, d.vpacks.v) { + list.reserve(d.vpacks().v.size()); + for_const (auto &mtpPack, d.vpacks().v) { auto &pack = mtpPack.c_stickerPack(); - for_const (auto &documentId, pack.vdocuments.v) { + for_const (auto &documentId, pack.vdocuments().v) { if (documentId.v == document->id) { - if (auto emoji = Ui::Emoji::Find(qs(mtpPack.c_stickerPack().vemoticon))) { - list.push_back(emoji); + if (const auto emoji = Ui::Emoji::Find(qs(mtpPack.c_stickerPack().vemoticon()))) { + list.emplace_back(emoji); } break; } @@ -435,9 +435,9 @@ void SetPackAndEmoji( for_const (auto &mtpPack, packs) { Assert(mtpPack.type() == mtpc_stickerPack); auto &pack = mtpPack.c_stickerPack(); - if (auto emoji = Ui::Emoji::Find(qs(pack.vemoticon))) { + if (auto emoji = Ui::Emoji::Find(qs(pack.vemoticon()))) { emoji = emoji->original(); - auto &stickers = pack.vdocuments.v; + auto &stickers = pack.vdocuments().v; auto p = Pack(); p.reserve(stickers.size()); @@ -584,49 +584,48 @@ void FeaturedSetsReceived( switch (setData.type()) { case mtpc_stickerSetCovered: { auto &d = setData.c_stickerSetCovered(); - if (d.vset.type() == mtpc_stickerSet) { - set = &d.vset.c_stickerSet(); + if (d.vset().type() == mtpc_stickerSet) { + set = &d.vset().c_stickerSet(); } } break; case mtpc_stickerSetMultiCovered: { auto &d = setData.c_stickerSetMultiCovered(); - if (d.vset.type() == mtpc_stickerSet) { - set = &d.vset.c_stickerSet(); + if (d.vset().type() == mtpc_stickerSet) { + set = &d.vset().c_stickerSet(); } } break; } if (set) { - auto it = sets.find(set->vid.v); + auto it = sets.find(set->vid().v); const auto title = GetSetTitle(*set); - const auto installDate = set->has_installed_date() - ? set->vinstalled_date.v - : TimeId(0); - const auto thumbnail = set->has_thumb() - ? Images::Create(*set, set->vthumb) + const auto installDate = set->vinstalled_date().value_or_empty(); + const auto thumb = set->vthumb(); + const auto thumbnail = thumb + ? Images::Create(*set, *thumb) : ImagePtr(); if (it == sets.cend()) { auto setClientFlags = MTPDstickerSet_ClientFlag::f_featured | MTPDstickerSet_ClientFlag::f_not_loaded; - if (unreadMap.contains(set->vid.v)) { + if (unreadMap.contains(set->vid().v)) { setClientFlags |= MTPDstickerSet_ClientFlag::f_unread; } - it = sets.insert(set->vid.v, Set( - set->vid.v, - set->vaccess_hash.v, + it = sets.insert(set->vid().v, Set( + set->vid().v, + set->vaccess_hash().v, title, - qs(set->vshort_name), - set->vcount.v, - set->vhash.v, - set->vflags.v | setClientFlags, + qs(set->vshort_name()), + set->vcount().v, + set->vhash().v, + set->vflags().v | setClientFlags, installDate, thumbnail)); } else { - it->access = set->vaccess_hash.v; + it->access = set->vaccess_hash().v; it->title = title; - it->shortName = qs(set->vshort_name); + it->shortName = qs(set->vshort_name()); auto clientFlags = it->flags & (MTPDstickerSet_ClientFlag::f_featured | MTPDstickerSet_ClientFlag::f_unread | MTPDstickerSet_ClientFlag::f_not_loaded | MTPDstickerSet_ClientFlag::f_special); - it->flags = set->vflags.v | clientFlags; + it->flags = set->vflags().v | clientFlags; it->flags |= MTPDstickerSet_ClientFlag::f_featured; it->installDate = installDate; it->thumbnail = thumbnail; @@ -635,15 +634,15 @@ void FeaturedSetsReceived( } else { it->flags &= ~MTPDstickerSet_ClientFlag::f_unread; } - if (it->count != set->vcount.v || it->hash != set->vhash.v || it->emoji.isEmpty()) { - it->count = set->vcount.v; - it->hash = set->vhash.v; + if (it->count != set->vcount().v || it->hash != set->vhash().v || it->emoji.isEmpty()) { + it->count = set->vcount().v; + it->hash = set->vhash().v; it->flags |= MTPDstickerSet_ClientFlag::f_not_loaded; // need to request this set } } - setsOrder.push_back(set->vid.v); + setsOrder.push_back(set->vid().v); if (it->stickers.isEmpty() || (it->flags & MTPDstickerSet_ClientFlag::f_not_loaded)) { - setsToRequest.emplace(set->vid.v, set->vaccess_hash.v); + setsToRequest.emplace(set->vid().v, set->vaccess_hash().v); } } } @@ -765,7 +764,7 @@ std::vector> GetListByEmoji( const auto sticker = document->sticker(); if (sticker->set.type() == mtpc_inputStickerSetID) { - const auto setId = sticker->set.c_inputStickerSetID().vid.v; + const auto setId = sticker->set.c_inputStickerSetID().vid().v; const auto setIt = sets.find(setId); if (setIt != sets.end()) { return InstallDateAdjusted(setIt->installDate, document); @@ -874,7 +873,7 @@ std::optional>> GetEmojiListFromSet( return std::nullopt; } auto &sets = Auth().data().stickerSets(); - auto it = sets.constFind(inputSet.c_inputStickerSetID().vid.v); + auto it = sets.constFind(inputSet.c_inputStickerSetID().vid().v); if (it == sets.cend()) { return std::nullopt; } @@ -894,43 +893,45 @@ std::optional>> GetEmojiListFromSet( Set *FeedSet(const MTPDstickerSet &set) { auto &sets = Auth().data().stickerSetsRef(); - auto it = sets.find(set.vid.v); + auto it = sets.find(set.vid().v); auto title = GetSetTitle(set); auto flags = MTPDstickerSet::Flags(0); + const auto thumb = set.vthumb(); + const auto thumbnail = thumb ? Images::Create(set, *thumb) : ImagePtr(); if (it == sets.cend()) { - it = sets.insert(set.vid.v, Stickers::Set( - set.vid.v, - set.vaccess_hash.v, + it = sets.insert(set.vid().v, Stickers::Set( + set.vid().v, + set.vaccess_hash().v, title, - qs(set.vshort_name), - set.vcount.v, - set.vhash.v, - set.vflags.v | MTPDstickerSet_ClientFlag::f_not_loaded, - set.has_installed_date() ? set.vinstalled_date.v : TimeId(0), - set.has_thumb() ? Images::Create(set, set.vthumb) : ImagePtr())); + qs(set.vshort_name()), + set.vcount().v, + set.vhash().v, + set.vflags().v | MTPDstickerSet_ClientFlag::f_not_loaded, + set.vinstalled_date().value_or_empty(), + thumbnail)); } else { - it->access = set.vaccess_hash.v; + it->access = set.vaccess_hash().v; it->title = title; - it->shortName = qs(set.vshort_name); + it->shortName = qs(set.vshort_name()); flags = it->flags; auto clientFlags = it->flags & (MTPDstickerSet_ClientFlag::f_featured | MTPDstickerSet_ClientFlag::f_unread | MTPDstickerSet_ClientFlag::f_not_loaded | MTPDstickerSet_ClientFlag::f_special); - it->flags = set.vflags.v | clientFlags; - it->installDate = set.has_installed_date() - ? (set.vinstalled_date.v ? set.vinstalled_date.v : unixtime()) + it->flags = set.vflags().v | clientFlags; + const auto installDate = set.vinstalled_date(); + it->installDate = installDate + ? (installDate->v ? installDate->v : unixtime()) : TimeId(0); - it->thumbnail = set.has_thumb() - ? Images::Create(set, set.vthumb) - : ImagePtr(); - if (it->count != set.vcount.v - || it->hash != set.vhash.v + it->thumbnail = thumbnail; + if (it->count != set.vcount().v + || it->hash != set.vhash().v || it->emoji.isEmpty()) { - it->count = set.vcount.v; - it->hash = set.vhash.v; - it->flags |= MTPDstickerSet_ClientFlag::f_not_loaded; // need to request this set + // Need to request this set. + it->count = set.vcount().v; + it->hash = set.vhash().v; + it->flags |= MTPDstickerSet_ClientFlag::f_not_loaded; } } auto changedFlags = (flags ^ it->flags); @@ -949,20 +950,20 @@ Set *FeedSet(const MTPDstickerSet &set) { Set *FeedSetFull(const MTPmessages_StickerSet &data) { Expects(data.type() == mtpc_messages_stickerSet); - Expects(data.c_messages_stickerSet().vset.type() == mtpc_stickerSet); + Expects(data.c_messages_stickerSet().vset().type() == mtpc_stickerSet); const auto &d = data.c_messages_stickerSet(); - const auto &s = d.vset.c_stickerSet(); + const auto &s = d.vset().c_stickerSet(); auto &sets = Auth().data().stickerSetsRef(); - auto it = sets.find(s.vid.v); + auto it = sets.find(s.vid().v); const auto wasArchived = (it->flags & MTPDstickerSet::Flag::f_archived); auto set = FeedSet(s); set->flags &= ~MTPDstickerSet_ClientFlag::f_not_loaded; - auto &d_docs = d.vdocuments.v; + auto &d_docs = d.vdocuments().v; auto custom = sets.find(Stickers::CustomSetId); auto inputSet = MTP_inputStickerSetID( MTP_long(set->id), @@ -1009,14 +1010,14 @@ Set *FeedSetFull(const MTPmessages_StickerSet &data) { } else { set->stickers = pack; set->emoji.clear(); - auto &v = d.vpacks.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))) { + if (auto emoji = Ui::Emoji::Find(qs(pack.vemoticon()))) { emoji = emoji->original(); - auto &stickers = pack.vdocuments.v; + auto &stickers = pack.vdocuments().v; Pack p; p.reserve(stickers.size()); @@ -1058,8 +1059,8 @@ Set *FeedSetFull(const MTPmessages_StickerSet &data) { void NewSetReceived(const MTPmessages_StickerSet &data) { bool writeArchived = false; const auto &set = data.c_messages_stickerSet(); - const auto &s = set.vset.c_stickerSet(); - if (!s.has_installed_date()) { + const auto &s = set.vset().c_stickerSet(); + if (!s.vinstalled_date()) { LOG(("API Error: " "updateNewStickerSet without install_date flag.")); return; @@ -1071,20 +1072,20 @@ void NewSetReceived(const MTPmessages_StickerSet &data) { return; } auto &order = Auth().data().stickerSetsOrderRef(); - int32 insertAtIndex = 0, currentIndex = order.indexOf(s.vid.v); + int32 insertAtIndex = 0, currentIndex = order.indexOf(s.vid().v); if (currentIndex != insertAtIndex) { if (currentIndex > 0) { order.removeAt(currentIndex); } - order.insert(insertAtIndex, s.vid.v); + order.insert(insertAtIndex, s.vid().v); } FeedSetFull(data); } QString GetSetTitle(const MTPDstickerSet &s) { - auto title = qs(s.vtitle); - if ((s.vflags.v & MTPDstickerSet::Flag::f_official) && !title.compare(qstr("Great Minds"), Qt::CaseInsensitive)) { + auto title = qs(s.vtitle()); + if ((s.vflags().v & MTPDstickerSet::Flag::f_official) && !title.compare(qstr("Great Minds"), Qt::CaseInsensitive)) { return tr::lng_stickers_default_set(tr::now); } return title; diff --git a/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp index b8784d827..7bff8b309 100644 --- a/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp @@ -1250,22 +1250,22 @@ void StickersListWidget::searchResultsDone( std::vector()).first; } auto &d = result.c_messages_foundStickerSets(); - for (const auto &stickerSet : d.vsets.v) { + for (const auto &stickerSet : d.vsets().v) { const MTPDstickerSet *setData = nullptr; Stickers::Pack covers; switch (stickerSet.type()) { case mtpc_stickerSetCovered: { auto &d = stickerSet.c_stickerSetCovered(); - if (d.vset.type() == mtpc_stickerSet) { - setData = &d.vset.c_stickerSet(); + if (d.vset().type() == mtpc_stickerSet) { + setData = &d.vset().c_stickerSet(); } } break; case mtpc_stickerSetMultiCovered: { auto &d = stickerSet.c_stickerSetMultiCovered(); - if (d.vset.type() == mtpc_stickerSet) { - setData = &d.vset.c_stickerSet(); + if (d.vset().type() == mtpc_stickerSet) { + setData = &d.vset().c_stickerSet(); } - for (const auto &cover : d.vcovers.v) { + for (const auto &cover : d.vcovers().v) { const auto document = Auth().data().processDocument(cover); if (document->sticker()) { covers.push_back(document); @@ -2408,7 +2408,7 @@ void StickersListWidget::refreshMegagroupStickers(GroupStickersPlace place) { } auto &set = _megagroupSet->mgInfo->stickerSet.c_inputStickerSetID(); auto &sets = Auth().data().stickerSets(); - auto it = sets.constFind(set.vid.v); + auto it = sets.constFind(set.vid().v); if (it != sets.cend()) { auto isInstalled = (it->flags & MTPDstickerSet::Flag::f_installed_date) && !(it->flags & MTPDstickerSet::Flag::f_archived); @@ -2430,10 +2430,10 @@ void StickersListWidget::refreshMegagroupStickers(GroupStickersPlace place) { } return; } else if (!isShownHere(hidden) - || _megagroupSetIdRequested == set.vid.v) { + || _megagroupSetIdRequested == set.vid().v) { return; } - _megagroupSetIdRequested = set.vid.v; + _megagroupSetIdRequested = set.vid().v; request(MTPmessages_GetStickerSet( _megagroupSet->mgInfo->stickerSet )).done([=](const MTPmessages_StickerSet &result) { @@ -2746,7 +2746,7 @@ void StickersListWidget::displaySet(uint64 setId) { }); return; } else if (_megagroupSet->mgInfo->stickerSet.type() == mtpc_inputStickerSetID) { - setId = _megagroupSet->mgInfo->stickerSet.c_inputStickerSetID().vid.v; + setId = _megagroupSet->mgInfo->stickerSet.c_inputStickerSetID().vid().v; } else { return; } diff --git a/Telegram/SourceFiles/codegen/scheme/codegen_scheme.py b/Telegram/SourceFiles/codegen/scheme/codegen_scheme.py index f5533327b..bd4b8f3e9 100644 --- a/Telegram/SourceFiles/codegen/scheme/codegen_scheme.py +++ b/Telegram/SourceFiles/codegen/scheme/codegen_scheme.py @@ -97,7 +97,7 @@ with open(input_file) as f: layerline = re.match(r'// LAYER (\d+)', line) if (layerline): layerIndex = int(layerline.group(1)); - layer = 'constexpr auto CurrentLayer = mtpPrime(' + str(layerIndex) + ');'; + layer = 'inline constexpr mtpPrime CurrentLayer = mtpPrime(' + str(layerIndex) + ');'; else: lines.append(line); @@ -336,37 +336,38 @@ for line in lines: funcsText += '\t\tMAX_FIELD = (1U << ' + str(maxbit) + '),\n'; funcsText += '\t};\n'; funcsText += '\tusing Flags = base::flags;\n'; - funcsText += '\tfriend inline constexpr auto is_flag_type(Flag) { return true; };\n'; + funcsText += '\tfriend inline constexpr bool is_flag_type(Flag) { return true; };\n'; funcsText += '\n'; - if (len(conditions)): - for paramName in conditionsList: - if (paramName in trivialConditions): - funcsText += '\tbool is_' + paramName + '() const { return v' + hasFlags + '.v & Flag::f_' + paramName + '; }\n'; - else: - funcsText += '\tbool has_' + paramName + '() const { return v' + hasFlags + '.v & Flag::f_' + paramName + '; }\n'; - funcsText += '\n'; if (len(prms) > len(trivialConditions)): for paramName in prmsList: if (paramName in trivialConditions): continue; paramType = prms[paramName]; - prmsInit.append('v' + paramName + '(_' + paramName + ')'); - prmsNames.append('_' + paramName); + prmsInit.append('_' + paramName + '(' + paramName + '_)'); + prmsNames.append(paramName + '_'); if (paramName == isTemplate): ptypeFull = paramType; else: ptypeFull = 'MTP' + paramType; - funcsText += '\t' + ptypeFull + ' v' + paramName + ';\n'; if (paramType in ['int', 'Int', 'bool', 'Bool', 'flags']): - prmsStr.append(ptypeFull + ' _' + paramName); + prmsStr.append(ptypeFull + ' ' + paramName + '_'); else: - prmsStr.append('const ' + ptypeFull + ' &_' + paramName); - funcsText += '\n'; + prmsStr.append('const ' + ptypeFull + ' &' + paramName + '_'); - funcsText += '\tMTP' + name + '() = default;\n'; # constructor + funcsText += '\tMTP' + name + '();\n';# = default; # constructor + if (isTemplate != ''): + methodBodies += 'template \n' + methodBodies += 'MTP' + name + '::MTP' + name + '() = default;\n'; + else: + methodBodies += 'MTP' + name + '::MTP' + name + '() = default;\n'; if (len(prms) > len(trivialConditions)): - funcsText += '\tMTP' + name + '(' + ', '.join(prmsStr) + ') : ' + ', '.join(prmsInit) + ' {\n\t}\n'; + funcsText += '\tMTP' + name + '(' + ', '.join(prmsStr) + ');\n'; + if (isTemplate != ''): + methodBodies += 'template \n' + methodBodies += 'MTP' + name + '::MTP' + name + '(' + ', '.join(prmsStr) + ') : ' + ', '.join(prmsInit) + ' {\n}\n'; + else: + methodBodies += 'MTP' + name + '::MTP' + name + '(' + ', '.join(prmsStr) + ') : ' + ', '.join(prmsInit) + ' {\n}\n'; funcsText += '\n'; funcsText += '\tuint32 innerLength() const;\n'; # count size @@ -380,9 +381,9 @@ for line in lines: v = prms[k]; if (k in conditionsList): if (not k in trivialConditions): - size.append('(has_' + k + '() ? v' + k + '.innerLength() : 0)'); + size.append('((_' + hasFlags + '.v & Flag::f_' + k + ') ? _' + k + '.innerLength() : 0)'); else: - size.append('v' + k + '.innerLength()'); + size.append('_' + k + '.innerLength()'); if (not len(size)): size.append('0'); methodBodies += '\treturn ' + ' + '.join(size) + ';\n'; @@ -400,9 +401,9 @@ for line in lines: v = prms[k]; if (k in conditionsList): if (not k in trivialConditions): - methodBodies += '\tif (has_' + k + '()) { v' + k + '.read(from, end); } else { v' + k + ' = MTP' + v + '(); }\n'; + methodBodies += '\tif (_' + hasFlags + '.v & Flag::f_' + k + ') { _' + k + '.read(from, end); } else { _' + k + ' = MTP' + v + '(); }\n'; else: - methodBodies += '\tv' + k + '.read(from, end);\n'; + methodBodies += '\t_' + k + '.read(from, end);\n'; methodBodies += '}\n'; funcsText += '\tvoid write(mtpBuffer &to) const;\n'; # write method @@ -415,18 +416,31 @@ for line in lines: v = prms[k]; if (k in conditionsList): if (not k in trivialConditions): - methodBodies += '\tif (has_' + k + '()) v' + k + '.write(to);\n'; + methodBodies += '\tif (_' + hasFlags + '.v & Flag::f_' + k + ') _' + k + '.write(to);\n'; else: - methodBodies += '\tv' + k + '.write(to);\n'; + methodBodies += '\t_' + k + '.write(to);\n'; methodBodies += '}\n'; if (isTemplate != ''): - funcsText += '\n\tusing ResponseType = typename TQueryType::ResponseType;\n'; + funcsText += '\n\tusing ResponseType = typename TQueryType::ResponseType;\n\n'; inlineMethods += methodBodies; else: - funcsText += '\n\tusing ResponseType = MTP' + resType + ';\n'; # method return type + funcsText += '\n\tusing ResponseType = MTP' + resType + ';\n\n'; # method return type methods += methodBodies; + if (len(prms) > len(trivialConditions)): + funcsText += 'private:\n'; + for paramName in prmsList: + if (paramName in trivialConditions): + continue; + paramType = prms[paramName]; + if (paramName == isTemplate): + ptypeFull = paramType; + else: + ptypeFull = 'MTP' + paramType; + funcsText += '\t' + ptypeFull + ' _' + paramName + ';\n'; + funcsText += '\n'; + funcsText += '};\n'; # class ending if (isTemplate != ''): funcsText += 'template \n'; @@ -630,25 +644,27 @@ for restype in typesList: dataText += '\t\tMAX_FIELD = (1U << ' + str(maxbit) + '),\n'; dataText += '\t};\n'; dataText += '\tusing Flags = base::flags;\n'; - dataText += '\tfriend inline constexpr auto is_flag_type(Flag) { return true; };\n'; + dataText += '\tfriend inline constexpr bool is_flag_type(Flag) { return true; };\n'; dataText += '\n'; if (len(conditions)): for paramName in conditionsList: if (paramName in trivialConditions): - dataText += '\tbool is_' + paramName + '() const { return v' + hasFlags + '.v & Flag::f_' + paramName + '; }\n'; - else: - dataText += '\tbool has_' + paramName + '() const { return v' + hasFlags + '.v & Flag::f_' + paramName + '; }\n'; + dataText += '\t[[nodiscard]] bool is_' + paramName + '() const;\n'; + constructsBodies += 'bool MTPD' + name + '::is_' + paramName + '() const {\n'; + constructsBodies += '\treturn _' + hasFlags + '.v & Flag::f_' + paramName + ';\n'; + constructsBodies += '}\n'; dataText += '\n'; switchLines += '\tcase mtpc_' + name + ': '; # for by-type-id type constructor - getters += '\tconst MTPD' + name + ' &c_' + name + '() const;\n'; # const getter + getters += '\t[[nodiscard]] const MTPD' + name + ' &c_' + name + '() const;\n'; # const getter visitor += '\tcase mtpc_' + name + ': return base::match_method(c_' + name + '(), std::forward(method), std::forward(methods)...);\n'; forwards += 'class MTPD' + name + ';\n'; # data class forward declaration if (len(prms) > len(trivialConditions)): - dataText += '\tMTPD' + name + '() = default;\n'; # default constructor + dataText += '\tMTPD' + name + '();\n'; # default constructor switchLines += 'setData(new MTPD' + name + '()); '; + constructsBodies += 'MTPD' + name + '::MTPD' + name + '() = default;\n'; constructsBodies += 'const MTPD' + name + ' &MTP' + restype + '::c_' + name + '() const {\n'; if (withType): constructsBodies += '\tExpects(_type == mtpc_' + name + ');\n\n'; @@ -670,35 +686,59 @@ for restype in typesList: paramType = prms[paramName]; if (paramType in ['int', 'Int', 'bool', 'Bool']): - prmsStr.append('MTP' + paramType + ' _' + paramName); - creatorParams.append('MTP' + paramType + ' _' + paramName); + prmsStr.append('MTP' + paramType + ' ' + paramName + '_'); + creatorParams.append('MTP' + paramType + ' ' + paramName + '_'); else: - prmsStr.append('const MTP' + paramType + ' &_' + paramName); - creatorParams.append('const MTP' + paramType + ' &_' + paramName); - creatorParamsList.append('_' + paramName); - prmsInit.append('v' + paramName + '(_' + paramName + ')'); + prmsStr.append('const MTP' + paramType + ' &' + paramName + '_'); + creatorParams.append('const MTP' + paramType + ' &' + paramName + '_'); + creatorParamsList.append(paramName + '_'); + prmsInit.append('_' + paramName + '(' + paramName + '_)'); if (withType): readText += '\t'; writeText += '\t'; if (paramName in conditions): - readText += '\tif (v->has_' + paramName + '()) { v->v' + paramName + '.read(from, end); } else { v->v' + paramName + ' = MTP' + paramType + '(); }\n'; - writeText += '\tif (v.has_' + paramName + '()) v.v' + paramName + '.write(to);\n'; - sizeList.append('(v.has_' + paramName + '() ? v.v' + paramName + '.innerLength() : 0)'); + readText += '\tif (v' + paramName + '()) { _' + paramName + '.read(from, end); } else { _' + paramName + ' = MTP' + paramType + '(); }\n'; + writeText += '\tif (const auto v' + paramName + ' = v.v' + paramName + '()) v' + paramName + '->write(to);\n'; + sizeList.append('(v.v' + paramName + '() ? v.v' + paramName + '()->innerLength() : 0)'); else: - readText += '\tv->v' + paramName + '.read(from, end);\n'; - writeText += '\tv.v' + paramName + '.write(to);\n'; - sizeList.append('v.v' + paramName + '.innerLength()'); + readText += '\t_' + paramName + '.read(from, end);\n'; + writeText += '\tv.v' + paramName + '().write(to);\n'; + sizeList.append('v.v' + paramName + '().innerLength()'); dataText += ', '.join(prmsStr) + ');\n'; constructsBodies += 'MTPD' + name + '::MTPD' + name + '(' + ', '.join(prmsStr) + ') : ' + ', '.join(prmsInit) + ' {\n}\n'; + dataText += '\tMTPD' + name + '(const mtpPrime *&from, const mtpPrime *end);\n'; # reading constructor + + constructsBodies += 'MTPD' + name + '::MTPD' + name + '(const mtpPrime *&from, const mtpPrime *end) {\n'; + constructsBodies += readText; + constructsBodies += '}\n'; + dataText += '\n'; - for paramName in prmsList: # fields declaration - if (paramName in trivialConditions): - continue; - paramType = prms[paramName]; - dataText += '\tMTP' + paramType + ' v' + paramName + ';\n'; + if len(prmsList) > 0: + for paramName in prmsList: # getters + if (paramName in trivialConditions): + continue; + paramType = prms[paramName]; + if (paramName in conditions): + dataText += '\t[[nodiscard]] MTP::conditional v' + paramName + '() const;\n'; + constructsBodies += 'MTP::conditional MTPD' + name + '::v' + paramName + '() const {\n'; + constructsBodies += '\treturn (_' + hasFlags + '.v & Flag::f_' + paramName + ') ? &_' + paramName + ' : nullptr;\n'; + constructsBodies += '}\n'; + else: + dataText += '\t[[nodiscard]] const MTP' + paramType + ' &v' + paramName + '() const;\n'; + constructsBodies += 'const MTP' + paramType + ' &MTPD' + name + '::v' + paramName + '() const {\n'; + constructsBodies += '\treturn _' + paramName + ';\n'; + constructsBodies += '}\n'; + dataText += '\n'; + dataText += 'private:\n'; + for paramName in prmsList: # fields declaration + if (paramName in trivialConditions): + continue; + paramType = prms[paramName]; + dataText += '\tMTP' + paramType + ' _' + paramName + ';\n'; + dataText += '\n'; sizeCases += '\tcase mtpc_' + name + ': {\n'; sizeCases += '\t\tconst MTPD' + name + ' &v(c_' + name + '());\n'; sizeCases += '\t\treturn ' + ' + '.join(sizeList) + ';\n'; @@ -740,24 +780,20 @@ for restype in typesList: reader += '\tcase mtpc_' + name + ': _type = cons; '; # read switch line if (len(prms) > len(trivialConditions)): reader += '{\n'; - reader += '\t\tauto v = new MTPD' + name + '();\n'; - reader += '\t\tsetData(v);\n'; - reader += readText; + reader += '\t\tsetData(new MTPD' + name + '(from, end));\n'; reader += '\t} break;\n'; writer += '\tcase mtpc_' + name + ': {\n'; # write switch line - writer += '\t\tauto &v = c_' + name + '();\n'; + writer += '\t\tconst MTPD' + name + ' &v = c_' + name + '();\n'; writer += writeText; writer += '\t} break;\n'; else: reader += 'break;\n'; else: if (len(prms) > len(trivialConditions)): - reader += '\n\tauto v = new MTPD' + name + '();\n'; - reader += '\tsetData(v);\n'; - reader += readText; + reader += '\tsetData(new MTPD' + name + '(from, end));\n'; - writer += '\tconst auto &v = c_' + name + '();\n'; + writer += '\tconst MTPD' + name + ' &v = c_' + name + '();\n'; writer += writeText; forwards += '\n'; @@ -767,12 +803,11 @@ for restype in typesList: typesText += ' : private MTP::internal::TypeDataOwner'; # if has data fields typesText += ' {\n'; typesText += 'public:\n'; - typesText += '\tMTP' + restype + '()'; # default constructor + typesText += '\tMTP' + restype + '();\n'; # default constructor if (withData and not withType): - typesText += ';\n'; methods += '\nMTP' + restype + '::MTP' + restype + '() : TypeDataOwner(' + newFast + ') {\n}\n'; else: - typesText += ' = default;\n'; + methods += '\nMTP' + restype + '::MTP' + restype + '() = default;\n'; typesText += getters; typesText += '\n'; diff --git a/Telegram/SourceFiles/core/changelogs.cpp b/Telegram/SourceFiles/core/changelogs.cpp index b23c43860..dd3adc156 100644 --- a/Telegram/SourceFiles/core/changelogs.cpp +++ b/Telegram/SourceFiles/core/changelogs.cpp @@ -104,10 +104,10 @@ void Changelogs::requestCloudLogs() { resultEmpty = false; break; case mtpc_updatesCombined: - resultEmpty = result.c_updatesCombined().vupdates.v.isEmpty(); + resultEmpty = result.c_updatesCombined().vupdates().v.isEmpty(); break; case mtpc_updates: - resultEmpty = result.c_updates().vupdates.v.isEmpty(); + resultEmpty = result.c_updates().vupdates().v.isEmpty(); break; case mtpc_updatesTooLong: case mtpc_updateShortSentMessage: diff --git a/Telegram/SourceFiles/core/core_cloud_password.cpp b/Telegram/SourceFiles/core/core_cloud_password.cpp index 97f71ada0..982154a96 100644 --- a/Telegram/SourceFiles/core/core_cloud_password.cpp +++ b/Telegram/SourceFiles/core/core_cloud_password.cpp @@ -179,10 +179,10 @@ bytes::vector ComputeHash( CloudPasswordAlgo ParseCloudPasswordAlgo(const MTPPasswordKdfAlgo &data) { return data.match([](const MTPDpasswordKdfAlgoModPow &data) { return CloudPasswordAlgo(CloudPasswordAlgoModPow{ - bytes::make_vector(data.vsalt1.v), - bytes::make_vector(data.vsalt2.v), - data.vg.v, - bytes::make_vector(data.vp.v) }); + bytes::make_vector(data.vsalt1().v), + bytes::make_vector(data.vsalt2().v), + data.vg().v, + bytes::make_vector(data.vp().v) }); }, [](const MTPDpasswordKdfAlgoUnknown &data) { return CloudPasswordAlgo(); }); @@ -190,14 +190,11 @@ CloudPasswordAlgo ParseCloudPasswordAlgo(const MTPPasswordKdfAlgo &data) { CloudPasswordCheckRequest ParseCloudPasswordCheckRequest( const MTPDaccount_password &data) { + const auto algo = data.vcurrent_algo(); return CloudPasswordCheckRequest{ - (data.has_srp_id() ? data.vsrp_id.v : uint64()), - (data.has_srp_B() - ? bytes::make_vector(data.vsrp_B.v) - : bytes::vector()), - (data.has_current_algo() - ? ParseCloudPasswordAlgo(data.vcurrent_algo) - : CloudPasswordAlgo()) + data.vsrp_id().value_or_empty(), + bytes::make_vector(data.vsrp_B().value_or_empty()), + (algo ? ParseCloudPasswordAlgo(*algo) : CloudPasswordAlgo()) }; } @@ -263,10 +260,10 @@ SecureSecretAlgo ParseSecureSecretAlgo( return data.match([]( const MTPDsecurePasswordKdfAlgoPBKDF2HMACSHA512iter100000 &data) { return SecureSecretAlgo(SecureSecretAlgoPBKDF2{ - bytes::make_vector(data.vsalt.v) }); + bytes::make_vector(data.vsalt().v) }); }, [](const MTPDsecurePasswordKdfAlgoSHA512 &data) { return SecureSecretAlgo(SecureSecretAlgoSHA512{ - bytes::make_vector(data.vsalt.v) }); + bytes::make_vector(data.vsalt().v) }); }, [](const MTPDsecurePasswordKdfAlgoUnknown &data) { return SecureSecretAlgo(); }); @@ -307,17 +304,16 @@ CloudPasswordState ParseCloudPasswordState( const MTPDaccount_password &data) { auto result = CloudPasswordState(); result.request = ParseCloudPasswordCheckRequest(data); - result.unknownAlgorithm = data.has_current_algo() && !result.request; + result.unknownAlgorithm = data.vcurrent_algo() && !result.request; result.hasRecovery = data.is_has_recovery(); result.notEmptyPassport = data.is_has_secure_values(); - result.hint = data.has_hint() ? qs(data.vhint) : QString(); + result.hint = qs(data.vhint().value_or_empty()); result.newPassword = ValidateNewCloudPasswordAlgo( - ParseCloudPasswordAlgo(data.vnew_algo)); + ParseCloudPasswordAlgo(data.vnew_algo())); result.newSecureSecret = ValidateNewSecureSecretAlgo( - ParseSecureSecretAlgo(data.vnew_secure_algo)); - result.unconfirmedPattern = data.has_email_unconfirmed_pattern() - ? qs(data.vemail_unconfirmed_pattern) - : QString(); + ParseSecureSecretAlgo(data.vnew_secure_algo())); + result.unconfirmedPattern = + qs(data.vemail_unconfirmed_pattern().value_or_empty()); return result; } diff --git a/Telegram/SourceFiles/core/local_url_handlers.cpp b/Telegram/SourceFiles/core/local_url_handlers.cpp index 3dc82e01c..60e4627ff 100644 --- a/Telegram/SourceFiles/core/local_url_handlers.cpp +++ b/Telegram/SourceFiles/core/local_url_handlers.cpp @@ -45,7 +45,7 @@ bool JoinGroupByHash(const Match &match, const QVariant &context) { Auth().api().importChatInvite(hash); })); }, [=](const MTPDchatInviteAlready &data) { - if (const auto chat = Auth().data().processChat(data.vchat)) { + if (const auto chat = Auth().data().processChat(data.vchat())) { App::wnd()->sessionController()->showPeerHistory( chat, Window::SectionShow::Way::Forward); @@ -260,7 +260,7 @@ bool ResolvePrivatePost(const Match &match, const QVariant &context) { MTP_inputChannel(MTP_int(channelId), MTP_long(0))) )).done([=](const MTPmessages_Chats &result) { result.match([&](const auto &data) { - const auto peer = auth->data().processChats(data.vchats); + const auto peer = auth->data().processChats(data.vchats()); if (peer && peer->id == peerFromChannel(channelId)) { done(peer); } else { @@ -280,10 +280,9 @@ bool HandleUnknown(const Match &match, const QVariant &context) { const auto request = match->captured(1); const auto callback = [=](const MTPDhelp_deepLinkInfo &result) { const auto text = TextWithEntities{ - qs(result.vmessage), - (result.has_entities() - ? TextUtilities::EntitiesFromMTP(result.ventities.v) - : EntitiesInText()) + qs(result.vmessage()), + TextUtilities::EntitiesFromMTP( + result.ventities().value_or_empty()) }; if (result.is_update_app()) { const auto box = std::make_shared>(); diff --git a/Telegram/SourceFiles/core/update_checker.cpp b/Telegram/SourceFiles/core/update_checker.cpp index 6916e0b71..fe025f0cd 100644 --- a/Telegram/SourceFiles/core/update_checker.cpp +++ b/Telegram/SourceFiles/core/update_checker.cpp @@ -896,8 +896,8 @@ void MtpChecker::start() { _mtp.send( MTPmessages_GetHistory( MTP_inputPeerChannel( - channel.c_inputChannel().vchannel_id, - channel.c_inputChannel().vaccess_hash), + channel.c_inputChannel().vchannel_id(), + channel.c_inputChannel().vaccess_hash()), MTP_int(0), // offset_id MTP_int(0), // offset_date MTP_int(0), // add_offset @@ -936,7 +936,7 @@ auto MtpChecker::parseMessage(const MTPmessages_Messages &result) const LOG(("Update Error: MTP feed message not found.")); return std::nullopt; } - return parseText(message->c_message().vmessage.v); + return parseText(message->c_message().vmessage().v); } auto MtpChecker::parseText(const QByteArray &text) const diff --git a/Telegram/SourceFiles/data/data_channel.cpp b/Telegram/SourceFiles/data/data_channel.cpp index d8e56e11f..b13f80ace 100644 --- a/Telegram/SourceFiles/data/data_channel.cpp +++ b/Telegram/SourceFiles/data/data_channel.cpp @@ -75,7 +75,7 @@ void ChannelData::setPhoto(const MTPChatPhoto &photo) { void ChannelData::setPhoto(PhotoId photoId, const MTPChatPhoto &photo) { photo.match([&](const MTPDchatPhoto & data) { - updateUserpic(photoId, data.vdc_id.v, data.vphoto_small); + updateUserpic(photoId, data.vdc_id().v, data.vphoto_small()); }, [&](const MTPDchatPhotoEmpty &) { clearUserpic(); }); @@ -108,9 +108,9 @@ void ChannelData::setLocation(const MTPChannelLocation &data) { const auto was = mgInfo->getLocation(); const auto wasValue = was ? *was : ChannelLocation(); data.match([&](const MTPDchannelLocation &data) { - data.vgeo_point.match([&](const MTPDgeoPoint &point) { + data.vgeo_point().match([&](const MTPDgeoPoint &point) { mgInfo->setLocation({ - qs(data.vaddress), + qs(data.vaddress()), Data::LocationPoint(point) }); }, [&](const MTPDgeoPointEmpty &) { @@ -216,7 +216,7 @@ void ChannelData::applyEditAdmin( auto userId = peerToUser(user->id); auto it = mgInfo->lastAdmins.find(user); - if (newRights.c_chatAdminRights().vflags.v != 0) { + if (newRights.c_chatAdminRights().vflags().v != 0) { auto lastAdmin = MegagroupInfo::Admin { newRights }; lastAdmin.canEdit = true; if (it == mgInfo->lastAdmins.cend()) { @@ -236,7 +236,7 @@ void ChannelData::applyEditAdmin( Data::ChannelAdminChanges(this).feed(userId, false); } } - if (oldRights.c_chatAdminRights().vflags.v && !newRights.c_chatAdminRights().vflags.v) { + if (oldRights.c_chatAdminRights().vflags().v && !newRights.c_chatAdminRights().vflags().v) { // We removed an admin. if (adminsCount() > 1) { setAdminsCount(adminsCount() - 1); @@ -245,7 +245,7 @@ void ChannelData::applyEditAdmin( // Removing bot admin removes it from channel. setMembersCount(membersCount() - 1); } - } else if (!oldRights.c_chatAdminRights().vflags.v && newRights.c_chatAdminRights().vflags.v) { + } else if (!oldRights.c_chatAdminRights().vflags().v && newRights.c_chatAdminRights().vflags().v) { // We added an admin. setAdminsCount(adminsCount() + 1); updateFullForced(); @@ -257,8 +257,8 @@ void ChannelData::applyEditAdmin( void ChannelData::applyEditBanned(not_null user, const MTPChatBannedRights &oldRights, const MTPChatBannedRights &newRights) { auto flags = Notify::PeerUpdate::Flag::BannedUsersChanged | Notify::PeerUpdate::Flag::None; - auto isKicked = (newRights.c_chatBannedRights().vflags.v & MTPDchatBannedRights::Flag::f_view_messages); - auto isRestricted = !isKicked && (newRights.c_chatBannedRights().vflags.v != 0); + auto isKicked = (newRights.c_chatBannedRights().vflags().v & MTPDchatBannedRights::Flag::f_view_messages); + auto isRestricted = !isKicked && (newRights.c_chatBannedRights().vflags().v != 0); if (mgInfo) { // If rights are empty - still remove admin? TODO check if (mgInfo->lastAdmins.contains(user)) { @@ -496,10 +496,10 @@ bool ChannelData::canRestrictUser(not_null user) const { } void ChannelData::setAdminRights(const MTPChatAdminRights &rights) { - if (rights.c_chatAdminRights().vflags.v == adminRights()) { + if (rights.c_chatAdminRights().vflags().v == adminRights()) { return; } - _adminRights.set(rights.c_chatAdminRights().vflags.v); + _adminRights.set(rights.c_chatAdminRights().vflags().v); if (isMegagroup()) { const auto self = session().user(); if (hasAdminRights()) { @@ -520,12 +520,12 @@ void ChannelData::setAdminRights(const MTPChatAdminRights &rights) { } void ChannelData::setRestrictions(const MTPChatBannedRights &rights) { - if (rights.c_chatBannedRights().vflags.v == restrictions() - && rights.c_chatBannedRights().vuntil_date.v == _restrictedUntil) { + if (rights.c_chatBannedRights().vflags().v == restrictions() + && rights.c_chatBannedRights().vuntil_date().v == _restrictedUntil) { return; } - _restrictedUntil = rights.c_chatBannedRights().vuntil_date.v; - _restrictions.set(rights.c_chatBannedRights().vflags.v); + _restrictedUntil = rights.c_chatBannedRights().vuntil_date().v; + _restrictions.set(rights.c_chatBannedRights().vflags().v); if (isMegagroup()) { const auto self = session().user(); if (hasRestrictions()) { @@ -543,10 +543,10 @@ void ChannelData::setRestrictions(const MTPChatBannedRights &rights) { } void ChannelData::setDefaultRestrictions(const MTPChatBannedRights &rights) { - if (rights.c_chatBannedRights().vflags.v == defaultRestrictions()) { + if (rights.c_chatBannedRights().vflags().v == defaultRestrictions()) { return; } - _defaultRestrictions.set(rights.c_chatBannedRights().vflags.v); + _defaultRestrictions.set(rights.c_chatBannedRights().vflags().v); Notify::peerUpdatedDelayed(this, UpdateFlag::RightsChanged); } @@ -594,69 +594,63 @@ void ApplyMigration( void ApplyChannelUpdate( not_null channel, const MTPDupdateChatDefaultBannedRights &update) { - if (channel->applyUpdateVersion(update.vversion.v) + if (channel->applyUpdateVersion(update.vversion().v) != ChannelData::UpdateStatus::Good) { return; } - channel->setDefaultRestrictions(update.vdefault_banned_rights); + channel->setDefaultRestrictions(update.vdefault_banned_rights()); } void ApplyChannelUpdate( not_null channel, const MTPDchannelFull &update) { - channel->setAvailableMinId(update.vavailable_min_id.v); + channel->setAvailableMinId(update.vavailable_min_id().value_or_empty()); auto canViewAdmins = channel->canViewAdmins(); auto canViewMembers = channel->canViewMembers(); auto canEditStickers = channel->canEditStickers(); - channel->setFullFlags(update.vflags.v); - channel->setUserpicPhoto(update.vchat_photo); - if (update.has_migrated_from_chat_id()) { + channel->setFullFlags(update.vflags().v); + channel->setUserpicPhoto(update.vchat_photo()); + if (const auto migratedFrom = update.vmigrated_from_chat_id()) { channel->addFlags(MTPDchannel::Flag::f_megagroup); - const auto chat = channel->owner().chat( - update.vmigrated_from_chat_id.v); + const auto chat = channel->owner().chat(migratedFrom->v); Data::ApplyMigration(chat, channel); } - for (const auto &item : update.vbot_info.v) { + for (const auto &item : update.vbot_info().v) { auto &owner = channel->owner(); item.match([&](const MTPDbotInfo &info) { - if (const auto user = owner.userLoaded(info.vuser_id.v)) { + if (const auto user = owner.userLoaded(info.vuser_id().v)) { user->setBotInfo(item); channel->session().api().fullPeerUpdated().notify(user); } }); } - channel->setAbout(qs(update.vabout)); - channel->setMembersCount(update.has_participants_count() - ? update.vparticipants_count.v - : 0); - channel->setAdminsCount(update.has_admins_count() - ? update.vadmins_count.v - : 0); - channel->setRestrictedCount(update.has_banned_count() - ? update.vbanned_count.v - : 0); - channel->setKickedCount(update.has_kicked_count() - ? update.vkicked_count.v - : 0); - channel->setInviteLink(update.vexported_invite.match([&]( + channel->setAbout(qs(update.vabout())); + channel->setMembersCount(update.vparticipants_count().value_or_empty()); + channel->setAdminsCount(update.vadmins_count().value_or_empty()); + channel->setRestrictedCount(update.vbanned_count().value_or_empty()); + channel->setKickedCount(update.vkicked_count().value_or_empty()); + channel->setInviteLink(update.vexported_invite().match([&]( const MTPDchatInviteExported &data) { - return qs(data.vlink); + return qs(data.vlink()); }, [&](const MTPDchatInviteEmpty &) { return QString(); })); - channel->setLocation(update.has_location() - ? update.vlocation - : MTPChannelLocation(MTP_channelLocationEmpty())); - channel->setLinkedChat(update.has_linked_chat_id() - ? channel->owner().channelLoaded(update.vlinked_chat_id.v) - : nullptr); + if (const auto location = update.vlocation()) { + channel->setLocation(*location); + } else { + channel->setLocation(MTP_channelLocationEmpty()); + } + if (const auto chat = update.vlinked_chat_id()) { + channel->setLinkedChat(channel->owner().channelLoaded(chat->v)); + } else { + channel->setLinkedChat(nullptr); + } if (const auto history = channel->owner().historyLoaded(channel)) { - history->clearUpTill(update.vavailable_min_id.v); - - const auto folderId = update.has_folder_id() - ? update.vfolder_id.v - : 0; + if (const auto available = update.vavailable_min_id()) { + history->clearUpTill(available->v); + } + const auto folderId = update.vfolder_id().value_or_empty(); const auto folder = folderId ? channel->owner().folderLoaded(folderId) : nullptr; @@ -665,34 +659,33 @@ void ApplyChannelUpdate( channel->session().api().requestDialogEntry(history); channel->session().api().requestDialogEntry(folder); } else if (!history->folderKnown() - || channel->pts() != update.vpts.v) { + || channel->pts() != update.vpts().v) { channel->session().api().requestDialogEntry(history); } else { history->applyDialogFields( history->folder(), - update.vunread_count.v, - update.vread_inbox_max_id.v, - update.vread_outbox_max_id.v); + update.vunread_count().v, + update.vread_inbox_max_id().v, + update.vread_outbox_max_id().v); } } - if (update.has_pinned_msg_id()) { - channel->setPinnedMessageId(update.vpinned_msg_id.v); + if (const auto pinned = update.vpinned_msg_id()) { + channel->setPinnedMessageId(pinned->v); } else { channel->clearPinnedMessage(); } if (channel->isMegagroup()) { - const auto stickerSet = update.has_stickerset() - ? &update.vstickerset.c_stickerSet() - : nullptr; - const auto newSetId = (stickerSet ? stickerSet->vid.v : 0); + const auto stickerSet = update.vstickerset(); + const auto set = stickerSet ? &stickerSet->c_stickerSet() : nullptr; + const auto newSetId = (set ? set->vid().v : 0); const auto oldSetId = (channel->mgInfo->stickerSet.type() == mtpc_inputStickerSetID) - ? channel->mgInfo->stickerSet.c_inputStickerSetID().vid.v + ? channel->mgInfo->stickerSet.c_inputStickerSetID().vid().v : 0; const auto stickersChanged = (canEditStickers != channel->canEditStickers()) || (oldSetId != newSetId); if (oldSetId != newSetId) { - channel->mgInfo->stickerSet = stickerSet - ? MTP_inputStickerSetID(stickerSet->vid, stickerSet->vaccess_hash) + channel->mgInfo->stickerSet = set + ? MTP_inputStickerSetID(set->vid(), set->vaccess_hash()) : MTP_inputStickerSetEmpty(); } if (stickersChanged) { @@ -712,7 +705,7 @@ void ApplyChannelUpdate( channel->session().api().applyNotifySettings( MTP_inputNotifyPeer(channel->input), - update.vnotify_settings); + update.vnotify_settings()); } } // namespace Data diff --git a/Telegram/SourceFiles/data/data_chat.cpp b/Telegram/SourceFiles/data/data_chat.cpp index d4259b322..4b3dbfa2c 100644 --- a/Telegram/SourceFiles/data/data_chat.cpp +++ b/Telegram/SourceFiles/data/data_chat.cpp @@ -32,7 +32,7 @@ void ChatData::setPhoto(const MTPChatPhoto &photo) { void ChatData::setPhoto(PhotoId photoId, const MTPChatPhoto &photo) { photo.match([&](const MTPDchatPhoto &data) { - updateUserpic(photoId, data.vdc_id.v, data.vphoto_small); + updateUserpic(photoId, data.vdc_id().v, data.vphoto_small()); }, [&](const MTPDchatPhotoEmpty &) { clearUserpic(); }); @@ -128,10 +128,10 @@ void ChatData::setInviteLink(const QString &newInviteLink) { } void ChatData::setAdminRights(const MTPChatAdminRights &rights) { - if (rights.c_chatAdminRights().vflags.v == adminRights()) { + if (rights.c_chatAdminRights().vflags().v == adminRights()) { return; } - _adminRights.set(rights.c_chatAdminRights().vflags.v); + _adminRights.set(rights.c_chatAdminRights().vflags().v); Notify::peerUpdatedDelayed( this, (UpdateFlag::RightsChanged @@ -140,10 +140,10 @@ void ChatData::setAdminRights(const MTPChatAdminRights &rights) { } void ChatData::setDefaultRestrictions(const MTPChatBannedRights &rights) { - if (rights.c_chatBannedRights().vflags.v == defaultRestrictions()) { + if (rights.c_chatBannedRights().vflags().v == defaultRestrictions()) { return; } - _defaultRestrictions.set(rights.c_chatBannedRights().vflags.v); + _defaultRestrictions.set(rights.c_chatBannedRights().vflags().v); Notify::peerUpdatedDelayed(this, UpdateFlag::RightsChanged); } @@ -186,19 +186,19 @@ namespace Data { void ApplyChatUpdate( not_null chat, const MTPDupdateChatParticipants &update) { - ApplyChatUpdate(chat, update.vparticipants); + ApplyChatUpdate(chat, update.vparticipants()); } void ApplyChatUpdate( not_null chat, const MTPDupdateChatParticipantAdd &update) { - if (chat->applyUpdateVersion(update.vversion.v) + if (chat->applyUpdateVersion(update.vversion().v) != ChatData::UpdateStatus::Good) { return; } else if (chat->count < 0) { return; } - const auto user = chat->owner().userLoaded(update.vuser_id.v); + const auto user = chat->owner().userLoaded(update.vuser_id().v); if (!user || (!chat->participants.empty() && chat->participants.contains(user))) { @@ -213,7 +213,7 @@ void ApplyChatUpdate( chat->botStatus = 0; } else { chat->participants.emplace(user); - if (update.vinviter_id.v == chat->session().userId()) { + if (update.vinviter_id().v == chat->session().userId()) { chat->invitedByMe.insert(user); } else { chat->invitedByMe.remove(user); @@ -234,13 +234,13 @@ void ApplyChatUpdate( void ApplyChatUpdate( not_null chat, const MTPDupdateChatParticipantDelete &update) { - if (chat->applyUpdateVersion(update.vversion.v) + if (chat->applyUpdateVersion(update.vversion().v) != ChatData::UpdateStatus::Good) { return; } else if (chat->count <= 0) { return; } - const auto user = chat->owner().userLoaded(update.vuser_id.v); + const auto user = chat->owner().userLoaded(update.vuser_id().v); if (!user || (!chat->participants.empty() && !chat->participants.contains(user))) { @@ -278,22 +278,22 @@ void ApplyChatUpdate( void ApplyChatUpdate( not_null chat, const MTPDupdateChatParticipantAdmin &update) { - if (chat->applyUpdateVersion(update.vversion.v) + if (chat->applyUpdateVersion(update.vversion().v) != ChatData::UpdateStatus::Good) { return; } - const auto user = chat->owner().userLoaded(update.vuser_id.v); + const auto user = chat->owner().userLoaded(update.vuser_id().v); if (!user) { chat->invalidateParticipants(); return; } if (user->isSelf()) { - chat->setAdminRights(MTP_chatAdminRights(mtpIsTrue(update.vis_admin) + chat->setAdminRights(MTP_chatAdminRights(mtpIsTrue(update.vis_admin()) ? MTP_flags(ChatData::DefaultAdminRights()) : MTP_flags(0))); } - if (mtpIsTrue(update.vis_admin)) { + if (mtpIsTrue(update.vis_admin())) { if (chat->noParticipantInfo()) { chat->session().api().requestFullPeer(chat); } else { @@ -310,20 +310,20 @@ void ApplyChatUpdate( void ApplyChatUpdate( not_null chat, const MTPDupdateChatDefaultBannedRights &update) { - if (chat->applyUpdateVersion(update.vversion.v) + if (chat->applyUpdateVersion(update.vversion().v) != ChatData::UpdateStatus::Good) { return; } - chat->setDefaultRestrictions(update.vdefault_banned_rights); + chat->setDefaultRestrictions(update.vdefault_banned_rights()); } void ApplyChatUpdate(not_null chat, const MTPDchatFull &update) { - ApplyChatUpdate(chat, update.vparticipants); + ApplyChatUpdate(chat, update.vparticipants()); - if (update.has_bot_info()) { - for (const auto &item : update.vbot_info.v) { + if (const auto info = update.vbot_info()) { + for (const auto &item : info->v) { item.match([&](const MTPDbotInfo &data) { - const auto userId = data.vuser_id.v; + const auto userId = data.vuser_id().v; if (const auto bot = chat->owner().userLoaded(userId)) { bot->setBotInfo(item); chat->session().api().fullPeerUpdated().notify(bot); @@ -331,48 +331,50 @@ void ApplyChatUpdate(not_null chat, const MTPDchatFull &update) { }); } } - chat->setFullFlags(update.vflags.v); - chat->setUserpicPhoto(update.has_chat_photo() - ? update.vchat_photo - : MTPPhoto(MTP_photoEmpty(MTP_long(0)))); - chat->setInviteLink(update.vexported_invite.match([&]( + chat->setFullFlags(update.vflags().v); + if (const auto photo = update.vchat_photo()) { + chat->setUserpicPhoto(*photo); + } else { + chat->setUserpicPhoto(MTP_photoEmpty(MTP_long(0))); + } + chat->setInviteLink(update.vexported_invite().match([&]( const MTPDchatInviteExported &data) { - return qs(data.vlink); + return qs(data.vlink()); }, [&](const MTPDchatInviteEmpty &) { return QString(); })); - if (update.has_pinned_msg_id()) { - chat->setPinnedMessageId(update.vpinned_msg_id.v); + if (const auto pinned = update.vpinned_msg_id()) { + chat->setPinnedMessageId(pinned->v); } else { chat->clearPinnedMessage(); } - chat->checkFolder(update.has_folder_id() ? update.vfolder_id.v : 0); + chat->checkFolder(update.vfolder_id().value_or_empty()); chat->fullUpdated(); chat->session().api().applyNotifySettings( MTP_inputNotifyPeer(chat->input), - update.vnotify_settings); + update.vnotify_settings()); } void ApplyChatUpdate( not_null chat, const MTPChatParticipants &participants) { participants.match([&](const MTPDchatParticipantsForbidden &data) { - if (data.has_self_participant()) { - // data.vself_participant. + if (const auto self = data.vself_participant()) { + // self-> } chat->count = -1; chat->invalidateParticipants(); }, [&](const MTPDchatParticipants &data) { - const auto status = chat->applyUpdateVersion(data.vversion.v); + const auto status = chat->applyUpdateVersion(data.vversion().v); if (status == ChatData::UpdateStatus::TooOld) { return; } // Even if we skipped some updates, we got current participants // and we've requested peer from API to have current rights. - chat->setVersion(data.vversion.v); + chat->setVersion(data.vversion().v); - const auto &list = data.vparticipants.v; + const auto &list = data.vparticipants().v; chat->count = list.size(); chat->participants.clear(); chat->invitedByMe.clear(); @@ -381,7 +383,7 @@ void ApplyChatUpdate( const auto selfUserId = chat->session().userId(); for (const auto &participant : list) { const auto userId = participant.match([&](const auto &data) { - return data.vuser_id.v; + return data.vuser_id().v; }); const auto user = chat->owner().userLoaded(userId); if (!user) { @@ -395,7 +397,7 @@ void ApplyChatUpdate( const MTPDchatParticipantCreator &data) { return 0; }, [&](const auto &data) { - return data.vinviter_id.v; + return data.vinviter_id().v; }); if (inviterId == selfUserId) { chat->invitedByMe.insert(user); diff --git a/Telegram/SourceFiles/data/data_document.cpp b/Telegram/SourceFiles/data/data_document.cpp index f2df8d7db..f87d45e52 100644 --- a/Telegram/SourceFiles/data/data_document.cpp +++ b/Telegram/SourceFiles/data/data_document.cpp @@ -428,7 +428,7 @@ void DocumentOpenWithClickHandler::onClickImpl() const { Data::FileOrigin StickerData::setOrigin() const { return set.match([&](const MTPDinputStickerSetID &data) { return Data::FileOrigin( - Data::FileOriginStickerSet(data.vid.v, data.vaccess_hash.v)); + Data::FileOriginStickerSet(data.vid().v, data.vaccess_hash().v)); }, [&](const auto &) { return Data::FileOrigin(); }); @@ -466,7 +466,7 @@ void DocumentData::setattributes( for (const auto &attribute : attributes) { attribute.match([&](const MTPDdocumentAttributeImageSize &data) { - dimensions = QSize(data.vw.v, data.vh.v); + dimensions = QSize(data.vw().v, data.vh().v); }, [&](const MTPDdocumentAttributeAnimated &data) { if (type == FileDocument || type == StickerDocument @@ -480,10 +480,10 @@ void DocumentData::setattributes( _additional = std::make_unique(); } if (sticker()) { - sticker()->alt = qs(data.valt); + sticker()->alt = qs(data.valt()); if (sticker()->set.type() != mtpc_inputStickerSetID - || data.vstickerset.type() == mtpc_inputStickerSetID) { - sticker()->set = data.vstickerset; + || data.vstickerset().type() == mtpc_inputStickerSetID) { + sticker()->set = data.vstickerset(); } } }, [&](const MTPDdocumentAttributeVideo &data) { @@ -492,9 +492,9 @@ void DocumentData::setattributes( ? RoundVideoDocument : VideoDocument; } - _duration = data.vduration.v; + _duration = data.vduration().v; setMaybeSupportsStreaming(data.is_supports_streaming()); - dimensions = QSize(data.vw.v, data.vh.v); + dimensions = QSize(data.vw().v, data.vh().v); }, [&](const MTPDdocumentAttributeAudio &data) { if (type == FileDocument) { if (data.is_voice()) { @@ -506,19 +506,19 @@ void DocumentData::setattributes( } } if (const auto voiceData = voice()) { - voiceData->duration = data.vduration.v; + voiceData->duration = data.vduration().v; voiceData->waveform = documentWaveformDecode( - qba(data.vwaveform)); + data.vwaveform().value_or_empty()); voiceData->wavemax = voiceData->waveform.empty() ? uchar(0) : *ranges::max_element(voiceData->waveform); } else if (const auto songData = song()) { - songData->duration = data.vduration.v; - songData->title = qs(data.vtitle); - songData->performer = qs(data.vperformer); + songData->duration = data.vduration().v; + songData->title = qs(data.vtitle().value_or_empty()); + songData->performer = qs(data.vperformer().value_or_empty()); } }, [&](const MTPDdocumentAttributeFilename &data) { - _filename = qs(data.vfile_name); + _filename = qs(data.vfile_name()); // We don't want LTR/RTL mark/embedding/override/isolate chars // in filenames, because they introduce a security issue, when @@ -684,7 +684,7 @@ auto DocumentData::bigFileBaseCacheKey() const MTP_long(id), MTP_long(_access), MTP_bytes(_fileReference), - MTP_string(QString()))).bigFileBaseCacheKey(); + MTP_string())).bigFileBaseCacheKey(); } return std::nullopt; } @@ -961,7 +961,7 @@ void DocumentData::save( MTP_long(id), MTP_long(_access), MTP_bytes(_fileReference), - MTP_string(QString()))), + MTP_string())), origin, locationType(), toFile, @@ -1119,12 +1119,12 @@ bool DocumentData::isStickerSetInstalled() const { const auto &sets = _owner->stickerSets(); return sticker()->set.match([&](const MTPDinputStickerSetID &data) { - const auto i = sets.constFind(data.vid.v); + const auto i = sets.constFind(data.vid().v); return (i != sets.cend()) && !(i->flags & MTPDstickerSet::Flag::f_archived) && (i->flags & MTPDstickerSet::Flag::f_installed_date); }, [&](const MTPDinputStickerSetShortName &data) { - const auto name = qs(data.vshort_name).toLower(); + const auto name = qs(data.vshort_name()).toLower(); for (const auto &set : sets) { if (set.shortName.toLower() == name) { return !(set.flags & MTPDstickerSet::Flag::f_archived) @@ -1326,7 +1326,7 @@ auto DocumentData::createStreamingLoader( MTP_long(id), MTP_long(_access), MTP_bytes(_fileReference), - MTP_string(QString()))), + MTP_string())), size, origin) : nullptr; diff --git a/Telegram/SourceFiles/data/data_drafts.cpp b/Telegram/SourceFiles/data/data_drafts.cpp index c8374023c..f6139b859 100644 --- a/Telegram/SourceFiles/data/data_drafts.cpp +++ b/Telegram/SourceFiles/data/data_drafts.cpp @@ -47,14 +47,13 @@ Draft::Draft( void applyPeerCloudDraft(PeerId peerId, const MTPDdraftMessage &draft) { const auto history = Auth().data().history(peerId); const auto textWithTags = TextWithTags { - qs(draft.vmessage), + qs(draft.vmessage()), ConvertEntitiesToTextTags( - draft.has_entities() - ? TextUtilities::EntitiesFromMTP(draft.ventities.v) - : EntitiesInText()) + TextUtilities::EntitiesFromMTP( + draft.ventities().value_or_empty())) }; - auto replyTo = draft.has_reply_to_msg_id() ? draft.vreply_to_msg_id.v : MsgId(0); - if (history->skipCloudDraft(textWithTags.text, replyTo, draft.vdate.v)) { + auto replyTo = draft.vreply_to_msg_id().value_or_empty(); + if (history->skipCloudDraft(textWithTags.text, replyTo, draft.vdate().v)) { return; } auto cloudDraft = std::make_unique( @@ -62,7 +61,7 @@ void applyPeerCloudDraft(PeerId peerId, const MTPDdraftMessage &draft) { replyTo, MessageCursor(QFIXED_MAX, QFIXED_MAX, QFIXED_MAX), draft.is_no_webpage()); - cloudDraft->date = draft.vdate.v; + cloudDraft->date = draft.vdate().v; history->setCloudDraft(std::move(cloudDraft)); history->applyCloudDraft(); diff --git a/Telegram/SourceFiles/data/data_file_origin.cpp b/Telegram/SourceFiles/data/data_file_origin.cpp index 8c4efad51..93ddb6f2b 100644 --- a/Telegram/SourceFiles/data/data_file_origin.cpp +++ b/Telegram/SourceFiles/data/data_file_origin.cpp @@ -20,68 +20,68 @@ struct FileReferenceAccumulator { void push(const MTPPhoto &data) { data.match([&](const MTPDphoto &data) { result.data.emplace( - PhotoFileLocationId{ data.vid.v }, - data.vfile_reference.v); + PhotoFileLocationId{ data.vid().v }, + data.vfile_reference().v); }, [](const MTPDphotoEmpty &data) { }); } void push(const MTPDocument &data) { data.match([&](const MTPDdocument &data) { result.data.emplace( - DocumentFileLocationId{ data.vid.v }, - data.vfile_reference.v); + DocumentFileLocationId{ data.vid().v }, + data.vfile_reference().v); }, [](const MTPDdocumentEmpty &data) { }); } void push(const MTPWallPaper &data) { data.match([&](const MTPDwallPaper &data) { - push(data.vdocument); + push(data.vdocument()); }); } void push(const MTPWebPage &data) { data.match([&](const MTPDwebPage &data) { - if (data.has_document()) { - push(data.vdocument); + if (const auto document = data.vdocument()) { + push(*document); } - if (data.has_photo()) { - push(data.vphoto); + if (const auto photo = data.vphoto()) { + push(*photo); } }, [](const auto &data) { }); } void push(const MTPGame &data) { data.match([&](const MTPDgame &data) { - if (data.has_document()) { - push(data.vdocument); + if (const auto document = data.vdocument()) { + push(*document); } }, [](const auto &data) { }); } void push(const MTPMessageMedia &data) { data.match([&](const MTPDmessageMediaPhoto &data) { - if (data.has_photo()) { - push(data.vphoto); + if (const auto photo = data.vphoto()) { + push(*photo); } }, [&](const MTPDmessageMediaDocument &data) { - if (data.has_document()) { - push(data.vdocument); + if (const auto document = data.vdocument()) { + push(*document); } }, [&](const MTPDmessageMediaWebPage &data) { - push(data.vwebpage); + push(data.vwebpage()); }, [&](const MTPDmessageMediaGame &data) { - push(data.vgame); + push(data.vgame()); }, [](const auto &data) { }); } void push(const MTPMessage &data) { data.match([&](const MTPDmessage &data) { - if (data.has_media()) { - push(data.vmedia); + if (const auto media = data.vmedia()) { + push(*media); } }, [&](const MTPDmessageService &data) { - data.vaction.match( + data.vaction().match( [&](const MTPDmessageActionChatEditPhoto &data) { - push(data.vphoto); + push(data.vphoto()); }, [](const auto &data) { }); }, [](const MTPDmessageEmpty &data) { @@ -90,34 +90,34 @@ struct FileReferenceAccumulator { void push(const MTPmessages_Messages &data) { data.match([](const MTPDmessages_messagesNotModified &) { }, [&](const auto &data) { - push(data.vmessages); + push(data.vmessages()); }); } void push(const MTPphotos_Photos &data) { data.match([&](const auto &data) { - push(data.vphotos); + push(data.vphotos()); }); } void push(const MTPmessages_RecentStickers &data) { data.match([&](const MTPDmessages_recentStickers &data) { - push(data.vstickers); + push(data.vstickers()); }, [](const MTPDmessages_recentStickersNotModified &data) { }); } void push(const MTPmessages_FavedStickers &data) { data.match([&](const MTPDmessages_favedStickers &data) { - push(data.vstickers); + push(data.vstickers()); }, [](const MTPDmessages_favedStickersNotModified &data) { }); } void push(const MTPmessages_StickerSet &data) { data.match([&](const MTPDmessages_stickerSet &data) { - push(data.vdocuments); + push(data.vdocuments()); }); } void push(const MTPmessages_SavedGifs &data) { data.match([&](const MTPDmessages_savedGifs &data) { - push(data.vgifs); + push(data.vgifs()); }, [](const MTPDmessages_savedGifsNotModified &data) { }); } diff --git a/Telegram/SourceFiles/data/data_folder.cpp b/Telegram/SourceFiles/data/data_folder.cpp index 1b08b5a67..5916cb2c6 100644 --- a/Telegram/SourceFiles/data/data_folder.cpp +++ b/Telegram/SourceFiles/data/data_folder.cpp @@ -45,9 +45,9 @@ rpl::producer PinnedDialogsInFolderMaxValue() { // Expects(position.type() == mtpc_feedPosition); // // const auto &data = position.c_feedPosition(); -// return MessagePosition(data.vdate.v, FullMsgId( -// peerToChannel(peerFromMTP(data.vpeer)), -// data.vid.v)); +// return MessagePosition(data.vdate().v, FullMsgId( +// peerToChannel(peerFromMTP(data.vpeer())), +// data.vid().v)); //} Folder::Folder(not_null owner, FolderId id) @@ -330,11 +330,11 @@ TimeId Folder::adjustedChatListTimeId() const { void Folder::applyDialog(const MTPDdialogFolder &data) { updateCloudUnread(data); - if (const auto peerId = peerFromMTP(data.vpeer)) { + if (const auto peerId = peerFromMTP(data.vpeer())) { const auto history = owner().history(peerId); const auto fullId = FullMsgId( peerToChannel(peerId), - data.vtop_message.v); + data.vtop_message().v); history->setFolder(this, owner().message(fullId)); } else { _chatsList.clear(); @@ -348,10 +348,10 @@ void Folder::applyDialog(const MTPDdialogFolder &data) { void Folder::updateCloudUnread(const MTPDdialogFolder &data) { const auto notifier = unreadStateChangeNotifier(!_chatsList.loaded()); - _cloudUnread.messages = data.vunread_muted_messages_count.v - + data.vunread_unmuted_messages_count.v; - _cloudUnread.chats = data.vunread_muted_peers_count.v - + data.vunread_unmuted_peers_count.v; + _cloudUnread.messages = data.vunread_muted_messages_count().v + + data.vunread_unmuted_messages_count().v; + _cloudUnread.chats = data.vunread_muted_peers_count().v + + data.vunread_unmuted_peers_count().v; finalizeCloudUnread(); _cloudUnread.known = true; @@ -379,7 +379,7 @@ Dialogs::UnreadState Folder::chatListUnreadState() const { } void Folder::applyPinnedUpdate(const MTPDupdateDialogPinned &data) { - const auto folderId = data.has_folder_id() ? data.vfolder_id.v : 0; + const auto folderId = data.vfolder_id().value_or_empty(); if (folderId != 0) { LOG(("API Error: Nested folders detected.")); } diff --git a/Telegram/SourceFiles/data/data_location.h b/Telegram/SourceFiles/data/data_location.h index d98fcbc57..00350af3e 100644 --- a/Telegram/SourceFiles/data/data_location.h +++ b/Telegram/SourceFiles/data/data_location.h @@ -15,9 +15,9 @@ class LocationPoint { public: LocationPoint() = default; explicit LocationPoint(const MTPDgeoPoint &point) - : _lat(point.vlat.v) - , _lon(point.vlong.v) - , _access(point.vaccess_hash.v) { + : _lat(point.vlat().v) + , _lon(point.vlong().v) + , _access(point.vaccess_hash().v) { } QString latAsString() const { diff --git a/Telegram/SourceFiles/data/data_media_types.cpp b/Telegram/SourceFiles/data/data_media_types.cpp index 7a30f0e57..825144f63 100644 --- a/Telegram/SourceFiles/data/data_media_types.cpp +++ b/Telegram/SourceFiles/data/data_media_types.cpp @@ -46,8 +46,8 @@ namespace { Call ComputeCallData(const MTPDmessageActionPhoneCall &call) { auto result = Call(); result.finishReason = [&] { - if (call.has_reason()) { - switch (call.vreason.type()) { + if (const auto reason = call.vreason()) { + switch (reason->type()) { case mtpc_phoneCallDiscardReasonBusy: return CallFinishReason::Busy; case mtpc_phoneCallDiscardReasonDisconnect: @@ -61,7 +61,7 @@ Call ComputeCallData(const MTPDmessageActionPhoneCall &call) { } return CallFinishReason::Hangup; }(); - result.duration = call.has_duration() ? call.vduration.v : 0;; + result.duration = call.vduration().value_or_empty(); return result; } @@ -70,15 +70,13 @@ Invoice ComputeInvoiceData( const MTPDmessageMediaInvoice &data) { auto result = Invoice(); result.isTest = data.is_test(); - result.amount = data.vtotal_amount.v; - result.currency = qs(data.vcurrency); - result.description = qs(data.vdescription); - result.title = TextUtilities::SingleLine(qs(data.vtitle)); - if (data.has_receipt_msg_id()) { - result.receiptMsgId = data.vreceipt_msg_id.v; - } - if (data.has_photo()) { - result.photo = item->history()->owner().photoFromWeb(data.vphoto); + result.amount = data.vtotal_amount().v; + result.currency = qs(data.vcurrency()); + result.description = qs(data.vdescription()); + result.title = TextUtilities::SingleLine(qs(data.vtitle())); + result.receiptMsgId = data.vreceipt_msg_id().value_or_empty(); + if (const auto photo = data.vphoto()) { + result.photo = item->history()->owner().photoFromWeb(*photo); } return result; } @@ -346,10 +344,11 @@ bool MediaPhoto::updateInlineResultMedia(const MTPMessageMedia &media) { if (media.type() != mtpc_messageMediaPhoto) { return false; } - auto &data = media.c_messageMediaPhoto(); - if (data.has_photo() && !data.has_ttl_seconds()) { + const auto &data = media.c_messageMediaPhoto(); + const auto content = data.vphoto(); + if (content && !data.vttl_seconds()) { const auto photo = parent()->history()->owner().processPhoto( - data.vphoto); + *content); if (photo == _photo) { return true; } else { @@ -367,22 +366,23 @@ bool MediaPhoto::updateSentMedia(const MTPMessageMedia &media) { if (media.type() != mtpc_messageMediaPhoto) { return false; } - auto &mediaPhoto = media.c_messageMediaPhoto(); - if (!mediaPhoto.has_photo() || mediaPhoto.has_ttl_seconds()) { + const auto &mediaPhoto = media.c_messageMediaPhoto(); + const auto content = mediaPhoto.vphoto(); + if (!content || mediaPhoto.vttl_seconds()) { LOG(("Api Error: " "Got MTPMessageMediaPhoto without photo " "or with ttl_seconds in updateSentMedia()")); return false; } - parent()->history()->owner().photoConvert(_photo, mediaPhoto.vphoto); + parent()->history()->owner().photoConvert(_photo, *content); - if (mediaPhoto.vphoto.type() != mtpc_photo) { + if (content->type() != mtpc_photo) { return false; } - const auto &photo = mediaPhoto.vphoto.c_photo(); + const auto &photo = content->c_photo(); struct SizeData { - MTPstring type = MTP_string(QString()); + MTPstring type = MTP_string(); int width = 0; int height = 0; QByteArray bytes; @@ -394,12 +394,12 @@ bool MediaPhoto::updateSentMedia(const MTPMessageMedia &media) { const auto key = StorageImageLocation( StorageFileLocation( - photo.vdc_id.v, + photo.vdc_id().v, _photo->session().userId(), MTP_inputPhotoFileLocation( - photo.vid, - photo.vaccess_hash, - photo.vfile_reference, + photo.vid(), + photo.vaccess_hash(), + photo.vfile_reference(), size.type)), size.width, size.height); @@ -422,23 +422,23 @@ bool MediaPhoto::updateSentMedia(const MTPMessageMedia &media) { image->replaceSource( std::make_unique(key, length)); }; - auto &sizes = photo.vsizes.v; + auto &sizes = photo.vsizes().v; auto max = 0; auto maxSize = SizeData(); for (const auto &data : sizes) { const auto size = data.match([](const MTPDphotoSize &data) { return SizeData{ - data.vtype, - data.vw.v, - data.vh.v, + data.vtype(), + data.vw().v, + data.vh().v, QByteArray() }; }, [](const MTPDphotoCachedSize &data) { return SizeData{ - data.vtype, - data.vw.v, - data.vh.v, - qba(data.vbytes) + data.vtype(), + data.vw().v, + data.vh().v, + qba(data.vbytes()) }; }, [](const MTPDphotoSizeEmpty &) { return SizeData(); @@ -708,10 +708,11 @@ bool MediaFile::updateInlineResultMedia(const MTPMessageMedia &media) { if (media.type() != mtpc_messageMediaDocument) { return false; } - auto &data = media.c_messageMediaDocument(); - if (data.has_document() && !data.has_ttl_seconds()) { + const auto &data = media.c_messageMediaDocument(); + const auto content = data.vdocument(); + if (content && !data.vttl_seconds()) { const auto document = parent()->history()->owner().processDocument( - data.vdocument); + *content); if (document == _document) { return false; } else { @@ -729,14 +730,15 @@ bool MediaFile::updateSentMedia(const MTPMessageMedia &media) { if (media.type() != mtpc_messageMediaDocument) { return false; } - auto &data = media.c_messageMediaDocument(); - if (!data.has_document() || data.has_ttl_seconds()) { + const auto &data = media.c_messageMediaDocument(); + const auto content = data.vdocument(); + if (!content || data.vttl_seconds()) { LOG(("Api Error: " "Got MTPMessageMediaDocument without document " "or with ttl_seconds in updateSentMedia()")); return false; } - parent()->history()->owner().documentConvert(_document, data.vdocument); + parent()->history()->owner().documentConvert(_document, *content); if (const auto good = _document->goodThumbnail()) { auto bytes = good->bytesForCache(); @@ -836,11 +838,11 @@ bool MediaContact::updateSentMedia(const MTPMessageMedia &media) { if (media.type() != mtpc_messageMediaContact) { return false; } - if (_contact.userId != media.c_messageMediaContact().vuser_id.v) { + if (_contact.userId != media.c_messageMediaContact().vuser_id().v) { parent()->history()->owner().unregisterContactItem( _contact.userId, parent()); - _contact.userId = media.c_messageMediaContact().vuser_id.v; + _contact.userId = media.c_messageMediaContact().vuser_id().v; parent()->history()->owner().registerContactItem( _contact.userId, parent()); @@ -1168,7 +1170,7 @@ bool MediaGame::updateSentMedia(const MTPMessageMedia &media) { return false; } parent()->history()->owner().gameConvert( - _game, media.c_messageMediaGame().vgame); + _game, media.c_messageMediaGame().vgame()); return true; } diff --git a/Telegram/SourceFiles/data/data_notify_settings.cpp b/Telegram/SourceFiles/data/data_notify_settings.cpp index dd950472e..695109068 100644 --- a/Telegram/SourceFiles/data/data_notify_settings.cpp +++ b/Telegram/SourceFiles/data/data_notify_settings.cpp @@ -55,15 +55,17 @@ NotifySettingsValue::NotifySettingsValue( } bool NotifySettingsValue::change(const MTPDpeerNotifySettings &data) { - return change(data.has_mute_until() - ? base::make_optional(data.vmute_until.v) - : std::nullopt, data.has_sound() - ? base::make_optional(qs(data.vsound)) - : std::nullopt, data.has_show_previews() - ? base::make_optional(mtpIsTrue(data.vshow_previews)) - : std::nullopt, data.has_silent() - ? base::make_optional(mtpIsTrue(data.vsilent)) - : std::nullopt); + const auto mute = data.vmute_until(); + const auto sound = data.vsound(); + const auto showPreviews = data.vshow_previews(); + const auto silent = data.vsilent(); + return change( + mute ? std::make_optional(mute->v) : std::nullopt, + sound ? std::make_optional(qs(*sound)) : std::nullopt, + (showPreviews + ? std::make_optional(mtpIsTrue(*showPreviews)) + : std::nullopt), + silent ? std::make_optional(mtpIsTrue(*silent)) : std::nullopt); } bool NotifySettingsValue::change( @@ -139,7 +141,7 @@ bool NotifySettings::change(const MTPPeerNotifySettings &settings) { Expects(settings.type() == mtpc_peerNotifySettings); auto &data = settings.c_peerNotifySettings(); - const auto empty = !data.vflags.v; + const auto empty = !data.vflags().v; if (empty) { if (!_known || _value) { _known = true; diff --git a/Telegram/SourceFiles/data/data_peer.cpp b/Telegram/SourceFiles/data/data_peer.cpp index 20a9b7ee5..fc65245d8 100644 --- a/Telegram/SourceFiles/data/data_peer.cpp +++ b/Telegram/SourceFiles/data/data_peer.cpp @@ -327,8 +327,8 @@ void PeerData::updateUserpic( MTP_inputPeerPhotoFileLocation( MTP_flags(0), input, - deprecated.vvolume_id, - deprecated.vlocal_id)), + deprecated.vvolume_id(), + deprecated.vlocal_id())), size, size); }); diff --git a/Telegram/SourceFiles/data/data_poll.cpp b/Telegram/SourceFiles/data/data_poll.cpp index 1507a7b9c..6489a309d 100644 --- a/Telegram/SourceFiles/data/data_poll.cpp +++ b/Telegram/SourceFiles/data/data_poll.cpp @@ -38,17 +38,17 @@ PollData::PollData(PollId id) : id(id) { } bool PollData::applyChanges(const MTPDpoll &poll) { - Expects(poll.vid.v == id); + Expects(poll.vid().v == id); - const auto newQuestion = qs(poll.vquestion); + const auto newQuestion = qs(poll.vquestion()); const auto newClosed = poll.is_closed(); auto newAnswers = ranges::view::all( - poll.vanswers.v + poll.vanswers().v ) | ranges::view::transform([](const MTPPollAnswer &data) { return data.match([](const MTPDpollAnswer &answer) { auto result = PollAnswer(); - result.option = answer.voption.v; - result.text = qs(answer.vtext); + result.option = answer.voption().v; + result.text = qs(answer.vtext()); return result; }); }) | ranges::view::take( @@ -82,12 +82,11 @@ bool PollData::applyResults(const MTPPollResults &results) { return results.match([&](const MTPDpollResults &results) { lastResultsUpdate = crl::now(); - const auto newTotalVoters = results.has_total_voters() - ? results.vtotal_voters.v - : totalVoters; + const auto newTotalVoters = + results.vtotal_voters().value_or(totalVoters); auto changed = (newTotalVoters != totalVoters); - if (results.has_results()) { - for (const auto &result : results.vresults.v) { + if (const auto list = results.vresults()) { + for (const auto &result : list->v) { if (applyResultToAnswers(result, results.is_min())) { changed = true; } @@ -124,14 +123,14 @@ bool PollData::applyResultToAnswers( const MTPPollAnswerVoters &result, bool isMinResults) { return result.match([&](const MTPDpollAnswerVoters &voters) { - const auto &option = voters.voption.v; + const auto &option = voters.voption().v; const auto answer = answerByOption(option); if (!answer) { return false; } - auto changed = (answer->votes != voters.vvoters.v); + auto changed = (answer->votes != voters.vvoters().v); if (changed) { - answer->votes = voters.vvoters.v; + answer->votes = voters.vvoters().v; } if (!isMinResults) { if (answer->chosen != voters.is_chosen()) { diff --git a/Telegram/SourceFiles/data/data_search_controller.cpp b/Telegram/SourceFiles/data/data_search_controller.cpp index dd2b973fd..d78b1c5b4 100644 --- a/Telegram/SourceFiles/data/data_search_controller.cpp +++ b/Telegram/SourceFiles/data/data_search_controller.cpp @@ -22,7 +22,7 @@ constexpr auto kDefaultSearchTimeoutMs = crl::time(200); } // namespace -MTPmessages_Search PrepareSearchRequest( +std::optional PrepareSearchRequest( not_null peer, Storage::SharedMediaType type, const QString &query, @@ -56,6 +56,9 @@ MTPmessages_Search PrepareSearchRequest( } return MTP_inputMessagesFilterEmpty(); }(); + if (query.isEmpty() && filter.type() == mtpc_inputMessagesFilterEmpty) { + return std::nullopt; + } const auto minId = 0; const auto maxId = 0; @@ -107,32 +110,32 @@ SearchResult ParseSearchResult( switch (data.type()) { case mtpc_messages_messages: { auto &d = data.c_messages_messages(); - peer->owner().processUsers(d.vusers); - peer->owner().processChats(d.vchats); - result.fullCount = d.vmessages.v.size(); - return &d.vmessages.v; + peer->owner().processUsers(d.vusers()); + peer->owner().processChats(d.vchats()); + result.fullCount = d.vmessages().v.size(); + return &d.vmessages().v; } break; case mtpc_messages_messagesSlice: { auto &d = data.c_messages_messagesSlice(); - peer->owner().processUsers(d.vusers); - peer->owner().processChats(d.vchats); - result.fullCount = d.vcount.v; - return &d.vmessages.v; + peer->owner().processUsers(d.vusers()); + peer->owner().processChats(d.vchats()); + result.fullCount = d.vcount().v; + return &d.vmessages().v; } break; case mtpc_messages_channelMessages: { auto &d = data.c_messages_channelMessages(); if (auto channel = peer->asChannel()) { - channel->ptsReceived(d.vpts.v); + channel->ptsReceived(d.vpts().v); } else { LOG(("API Error: received messages.channelMessages when " "no channel was passed! (ParseSearchResult)")); } - peer->owner().processUsers(d.vusers); - peer->owner().processChats(d.vchats); - result.fullCount = d.vcount.v; - return &d.vmessages.v; + peer->owner().processUsers(d.vusers()); + peer->owner().processChats(d.vchats()); + result.fullCount = d.vcount().v; + return &d.vmessages().v; } break; case mtpc_messages_messagesNotModified: { @@ -345,12 +348,17 @@ void SearchController::requestMore( if (listData->requests.contains(key)) { return; } - auto requestId = request(PrepareSearchRequest( + auto prepared = PrepareSearchRequest( listData->peer, query.type, query.query, key.aroundId, - key.direction) + key.direction); + if (!prepared) { + return; + } + auto requestId = request( + std::move(*prepared) ).done([=](const MTPmessages_Messages &result) { listData->requests.remove(key); auto parsed = ParseSearchResult( diff --git a/Telegram/SourceFiles/data/data_search_controller.h b/Telegram/SourceFiles/data/data_search_controller.h index 625c42778..c166d59f3 100644 --- a/Telegram/SourceFiles/data/data_search_controller.h +++ b/Telegram/SourceFiles/data/data_search_controller.h @@ -26,7 +26,7 @@ struct SearchResult { int fullCount = 0; }; -MTPmessages_Search PrepareSearchRequest( +std::optional PrepareSearchRequest( not_null peer, Storage::SharedMediaType type, const QString &query, diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index c0bf619ac..193d587e3 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -117,14 +117,18 @@ QString ExtractUnavailableReason(const QString &restriction) { } MTPPhotoSize FindDocumentInlineThumbnail(const MTPDdocument &data) { - const auto &thumbs = data.vthumbs.v; + const auto thumbs = data.vthumbs(); + if (!thumbs) { + return MTP_photoSizeEmpty(MTP_string()); + } + const auto &list = thumbs->v; const auto i = ranges::find( - thumbs, + list, mtpc_photoStrippedSize, &MTPPhotoSize::type); - return (i != thumbs.end()) + return (i != list.end()) ? (*i) - : MTPPhotoSize(MTP_photoSizeEmpty(MTP_string(""))); + : MTPPhotoSize(MTP_photoSizeEmpty(MTP_string())); } MTPPhotoSize FindDocumentThumbnail(const MTPDdocument &data) { @@ -135,14 +139,18 @@ MTPPhotoSize FindDocumentThumbnail(const MTPDdocument &data) { }, [](const MTPDphotoStrippedSize &) { return kInvalid; }, [](const auto &data) { - return (data.vw.v * data.vh.v); + return (data.vw().v * data.vh().v); }); }; - const auto &thumbs = data.vthumbs.v; - const auto i = ranges::max_element(thumbs, std::less<>(), area); - return (i != thumbs.end() && area(*i) > 0) + const auto thumbs = data.vthumbs(); + if (!thumbs) { + return MTP_photoSizeEmpty(MTP_string()); + } + const auto &list = thumbs->v; + const auto i = ranges::max_element(list, std::less<>(), area); + return (i != list.end() && area(*i) > 0) ? (*i) - : MTPPhotoSize(MTP_photoSizeEmpty(MTP_string(""))); + : MTPPhotoSize(MTP_photoSizeEmpty(MTP_string())); } rpl::producer PinnedDialogsCountMaxValue() { @@ -285,7 +293,7 @@ ChannelData *Session::channelLoaded(ChannelId id) const { not_null Session::processUser(const MTPUser &data) { const auto result = user(data.match([](const auto &data) { - return data.vid.v; + return data.vid().v; })); auto minimal = false; const MTPUserStatus *status = nullptr; @@ -296,8 +304,8 @@ not_null Session::processUser(const MTPUser &data) { data.match([&](const MTPDuserEmpty &data) { const auto canShareThisContact = result->canShareThisContactFast(); - result->input = MTP_inputPeerUser(data.vid, MTP_long(0)); - result->inputUser = MTP_inputUser(data.vid, MTP_long(0)); + result->input = MTP_inputPeerUser(data.vid(), MTP_long(0)); + result->inputUser = MTP_inputUser(data.vid(), MTP_long(0)); result->setName(tr::lng_deleted(tr::now), QString(), QString(), QString()); result->setPhoto(MTP_userProfilePhotoEmpty()); //result->setFlags(MTPDuser_ClientFlag::f_inaccessible | 0); @@ -320,22 +328,25 @@ not_null Session::processUser(const MTPUser &data) { const auto mask = 0 //| MTPDuser_ClientFlag::f_inaccessible | MTPDuser::Flag::f_deleted; - result->setFlags((result->flags() & ~mask) | (data.vflags.v & mask)); + result->setFlags((result->flags() & ~mask) | (data.vflags().v & mask)); } else { - result->setFlags(data.vflags.v); + result->setFlags(data.vflags().v); if (data.is_self()) { result->input = MTP_inputPeerSelf(); result->inputUser = MTP_inputUserSelf(); - } else if (!data.has_access_hash()) { - result->input = MTP_inputPeerUser(data.vid, MTP_long(result->accessHash())); - result->inputUser = MTP_inputUser(data.vid, MTP_long(result->accessHash())); + } else if (const auto accessHash = data.vaccess_hash()) { + result->input = MTP_inputPeerUser(data.vid(), *accessHash); + result->inputUser = MTP_inputUser(data.vid(), *accessHash); } else { - result->input = MTP_inputPeerUser(data.vid, data.vaccess_hash); - result->inputUser = MTP_inputUser(data.vid, data.vaccess_hash); + result->input = MTP_inputPeerUser(data.vid(), MTP_long(result->accessHash())); + result->inputUser = MTP_inputUser(data.vid(), MTP_long(result->accessHash())); + } + if (const auto restriction = data.vrestriction_reason()) { + result->setUnavailableReason( + ExtractUnavailableReason(qs(*restriction))); + } else { + result->setUnavailableReason(QString()); } - result->setUnavailableReason(data.is_restricted() - ? ExtractUnavailableReason(qs(data.vrestriction_reason)) - : QString()); } if (data.is_deleted()) { if (!result->phone().isEmpty()) { @@ -349,11 +360,11 @@ not_null Session::processUser(const MTPUser &data) { // apply first_name and last_name from minimal user only if we don't have // local values for first name and last name already, otherwise skip bool noLocalName = result->firstName.isEmpty() && result->lastName.isEmpty(); - QString fname = (!minimal || noLocalName) ? (data.has_first_name() ? TextUtilities::SingleLine(qs(data.vfirst_name)) : QString()) : result->firstName; - QString lname = (!minimal || noLocalName) ? (data.has_last_name() ? TextUtilities::SingleLine(qs(data.vlast_name)) : QString()) : result->lastName; + QString fname = (!minimal || noLocalName) ? TextUtilities::SingleLine(qs(data.vfirst_name().value_or_empty())) : result->firstName; + QString lname = (!minimal || noLocalName) ? TextUtilities::SingleLine(qs(data.vlast_name().value_or_empty())) : result->lastName; - QString phone = minimal ? result->phone() : (data.has_phone() ? qs(data.vphone) : QString()); - QString uname = minimal ? result->username : (data.has_username() ? TextUtilities::SingleLine(qs(data.vusername)) : QString()); + QString phone = minimal ? result->phone() : qs(data.vphone().value_or_empty()); + QString uname = minimal ? result->username : TextUtilities::SingleLine(qs(data.vusername().value_or_empty())); const auto phoneChanged = (result->phone() != phone); if (phoneChanged) { @@ -394,25 +405,29 @@ not_null Session::processUser(const MTPUser &data) { CrashReports::SetAnnotation("Username", uname); } result->setName(fname, lname, pname, uname); - if (data.has_photo()) { - result->setPhoto(data.vphoto); + if (const auto photo = data.vphoto()) { + result->setPhoto(*photo); } else { result->setPhoto(MTP_userProfilePhotoEmpty()); } - if (data.has_access_hash()) { - result->setAccessHash(data.vaccess_hash.v); + if (const auto accessHash = data.vaccess_hash()) { + result->setAccessHash(accessHash->v); } - status = data.has_status() ? &data.vstatus : &emptyStatus; + status = data.vstatus(); } if (!minimal) { - if (data.has_bot_info_version()) { - result->setBotInfoVersion(data.vbot_info_version.v); + if (const auto botInfoVersion = data.vbot_info_version()) { + result->setBotInfoVersion(botInfoVersion->v); result->botInfo->readsAllHistory = data.is_bot_chat_history(); if (result->botInfo->cantJoinGroups != data.is_bot_nochats()) { result->botInfo->cantJoinGroups = data.is_bot_nochats(); update.flags |= UpdateFlag::BotCanAddToGroups; } - result->botInfo->inlinePlaceholder = data.has_bot_inline_placeholder() ? '_' + qs(data.vbot_inline_placeholder) : QString(); + if (const auto placeholder = data.vbot_inline_placeholder()) { + result->botInfo->inlinePlaceholder = '_' + qs(*placeholder); + } else { + result->botInfo->inlinePlaceholder = QString(); + } } else { result->setBotInfoVersion(-1); } @@ -456,15 +471,15 @@ not_null Session::processUser(const MTPUser &data) { not_null Session::processChat(const MTPChat &data) { const auto result = data.match([&](const MTPDchat &data) { - return peer(peerFromChat(data.vid.v)); + return peer(peerFromChat(data.vid().v)); }, [&](const MTPDchatForbidden &data) { - return peer(peerFromChat(data.vid.v)); + return peer(peerFromChat(data.vid().v)); }, [&](const MTPDchatEmpty &data) { - return peer(peerFromChat(data.vid.v)); + return peer(peerFromChat(data.vid().v)); }, [&](const MTPDchannel &data) { - return peer(peerFromChannel(data.vid.v)); + return peer(peerFromChannel(data.vid().v)); }, [&](const MTPDchannelForbidden &data) { - return peer(peerFromChannel(data.vid.v)); + return peer(peerFromChannel(data.vid().v)); }); auto minimal = false; @@ -475,45 +490,49 @@ not_null Session::processChat(const MTPChat &data) { const auto chat = result->asChat(); const auto canAddMembers = chat->canAddMembers(); - if (chat->version() < data.vversion.v) { - chat->setVersion(data.vversion.v); + if (chat->version() < data.vversion().v) { + chat->setVersion(data.vversion().v); chat->invalidateParticipants(); } - chat->input = MTP_inputPeerChat(data.vid); - chat->setName(qs(data.vtitle)); - chat->setPhoto(data.vphoto); - chat->date = data.vdate.v; + chat->input = MTP_inputPeerChat(data.vid()); + chat->setName(qs(data.vtitle())); + chat->setPhoto(data.vphoto()); + chat->date = data.vdate().v; - chat->setAdminRights(data.has_admin_rights() - ? data.vadmin_rights - : MTPChatAdminRights(MTP_chatAdminRights(MTP_flags(0)))); - chat->setDefaultRestrictions(data.has_default_banned_rights() - ? data.vdefault_banned_rights - : MTPChatBannedRights( - MTP_chatBannedRights(MTP_flags(0), MTP_int(0)))); + if (const auto rights = data.vadmin_rights()) { + chat->setAdminRights(*rights); + } else { + chat->setAdminRights(MTP_chatAdminRights(MTP_flags(0))); + } + if (const auto rights = data.vdefault_banned_rights()) { + chat->setDefaultRestrictions(*rights); + } else { + chat->setDefaultRestrictions( + MTP_chatBannedRights(MTP_flags(0), MTP_int(0))); + } - const auto &migratedTo = data.has_migrated_to() - ? data.vmigrated_to - : MTPInputChannel(MTP_inputChannelEmpty()); - migratedTo.match([&](const MTPDinputChannel & input) { - const auto channel = this->channel(input.vchannel_id.v); - channel->addFlags(MTPDchannel::Flag::f_megagroup); - if (!channel->access) { - channel->input = MTP_inputPeerChannel( - input.vchannel_id, - input.vaccess_hash); - channel->inputChannel = migratedTo; - channel->access = input.vaccess_hash.v; - } - ApplyMigration(chat, channel); - }, [](const MTPDinputChannelFromMessage &) { - LOG(("API Error: migrated_to contains channel from message.")); - }, [](const MTPDinputChannelEmpty &) { - }); + if (const auto migratedTo = data.vmigrated_to()) { + migratedTo->match([&](const MTPDinputChannel &input) { + const auto channel = this->channel(input.vchannel_id().v); + channel->addFlags(MTPDchannel::Flag::f_megagroup); + if (!channel->access) { + channel->input = MTP_inputPeerChannel( + input.vchannel_id(), + input.vaccess_hash()); + channel->inputChannel = *migratedTo; + channel->access = input.vaccess_hash().v; + } + ApplyMigration(chat, channel); + }, [](const MTPDinputChannelFromMessage &) { + LOG(("API Error: " + "migrated_to contains channel from message.")); + }, [](const MTPDinputChannelEmpty &) { + }); + } - chat->setFlags(data.vflags.v); - chat->count = data.vparticipants_count.v; + chat->setFlags(data.vflags().v); + chat->count = data.vparticipants_count().v; if (canAddMembers != chat->canAddMembers()) { update.flags |= UpdateFlag::RightsChanged; @@ -523,8 +542,8 @@ not_null Session::processChat(const MTPChat &data) { const auto canAddMembers = chat->canAddMembers(); - chat->input = MTP_inputPeerChat(data.vid); - chat->setName(qs(data.vtitle)); + chat->input = MTP_inputPeerChat(data.vid()); + chat->setName(qs(data.vtitle())); chat->setPhoto(MTP_chatPhotoEmpty()); chat->date = 0; chat->count = -1; @@ -546,10 +565,9 @@ not_null Session::processChat(const MTPChat &data) { LOG(("API Warning: not loaded minimal channel applied.")); } } else { - const auto accessHash = data.has_access_hash() - ? data.vaccess_hash - : MTP_long(0); - channel->input = MTP_inputPeerChannel(data.vid, accessHash); + channel->input = MTP_inputPeerChannel( + data.vid(), + MTP_long(data.vaccess_hash().value_or_empty())); } const auto wasInChannel = channel->amIn(); @@ -557,52 +575,61 @@ not_null Session::processChat(const MTPChat &data) { const auto canViewMembers = channel->canViewMembers(); const auto canAddMembers = channel->canAddMembers(); - if (data.has_participants_count()) { - channel->setMembersCount(data.vparticipants_count.v); + if (const auto count = data.vparticipants_count()) { + channel->setMembersCount(count->v); + } + if (const auto rights = data.vdefault_banned_rights()) { + channel->setDefaultRestrictions(*rights); + } else { + channel->setDefaultRestrictions( + MTP_chatBannedRights(MTP_flags(0), MTP_int(0))); } - channel->setDefaultRestrictions(data.has_default_banned_rights() - ? data.vdefault_banned_rights - : MTPChatBannedRights( - MTP_chatBannedRights(MTP_flags(0), MTP_int(0)))); if (minimal) { auto mask = 0 | MTPDchannel::Flag::f_broadcast | MTPDchannel::Flag::f_verified | MTPDchannel::Flag::f_megagroup | MTPDchannel_ClientFlag::f_forbidden; - channel->setFlags((channel->flags() & ~mask) | (data.vflags.v & mask)); + channel->setFlags((channel->flags() & ~mask) | (data.vflags().v & mask)); } else { - if (data.has_admin_rights()) { - channel->setAdminRights(data.vadmin_rights); + if (const auto rights = data.vadmin_rights()) { + channel->setAdminRights(*rights); } else if (channel->hasAdminRights()) { channel->setAdminRights(MTP_chatAdminRights(MTP_flags(0))); } - if (data.has_banned_rights()) { - channel->setRestrictions(data.vbanned_rights); + if (const auto rights = data.vbanned_rights()) { + channel->setRestrictions(*rights); } else if (channel->hasRestrictions()) { - channel->setRestrictions(MTP_chatBannedRights(MTP_flags(0), MTP_int(0))); + channel->setRestrictions( + MTP_chatBannedRights(MTP_flags(0), MTP_int(0))); } - channel->inputChannel = MTP_inputChannel(data.vid, data.vaccess_hash); - channel->access = data.vaccess_hash.v; - channel->date = data.vdate.v; - if (channel->version() < data.vversion.v) { - channel->setVersion(data.vversion.v); + const auto hash = data.vaccess_hash().value_or(channel->access); + channel->inputChannel = MTP_inputChannel( + data.vid(), + MTP_long(hash)); + channel->access = hash; + channel->date = data.vdate().v; + if (channel->version() < data.vversion().v) { + channel->setVersion(data.vversion().v); } - channel->setUnavailableReason(data.is_restricted() - ? ExtractUnavailableReason(qs(data.vrestriction_reason)) - : QString()); - channel->setFlags(data.vflags.v); - //if (data.has_feed_id()) { // #feed - // channel->setFeed(feed(data.vfeed_id.v)); + if (const auto restriction = data.vrestriction_reason()) { + channel->setUnavailableReason(qs(*restriction)); + } else { + channel->setUnavailableReason(QString()); + } + channel->setFlags(data.vflags().v); + //if (const auto feedId = data.vfeed_id()) { // #feed + // channel->setFeed(feed(feedId->v)); //} else { // channel->clearFeed(); //} } - QString uname = data.has_username() ? TextUtilities::SingleLine(qs(data.vusername)) : QString(); - channel->setName(qs(data.vtitle), uname); + channel->setName( + qs(data.vtitle()), + TextUtilities::SingleLine(qs(data.vusername().value_or_empty()))); - channel->setPhoto(data.vphoto); + channel->setPhoto(data.vphoto()); if (wasInChannel != channel->amIn()) { update.flags |= UpdateFlag::ChannelAmIn; @@ -614,17 +641,17 @@ not_null Session::processChat(const MTPChat &data) { } }, [&](const MTPDchannelForbidden &data) { const auto channel = result->asChannel(); - channel->input = MTP_inputPeerChannel(data.vid, data.vaccess_hash); + channel->input = MTP_inputPeerChannel(data.vid(), data.vaccess_hash()); auto wasInChannel = channel->amIn(); auto canViewAdmins = channel->canViewAdmins(); auto canViewMembers = channel->canViewMembers(); auto canAddMembers = channel->canAddMembers(); - channel->inputChannel = MTP_inputChannel(data.vid, data.vaccess_hash); + channel->inputChannel = MTP_inputChannel(data.vid(), data.vaccess_hash()); auto mask = mtpCastFlags(MTPDchannelForbidden::Flag::f_broadcast | MTPDchannelForbidden::Flag::f_megagroup); - channel->setFlags((channel->flags() & ~mask) | (mtpCastFlags(data.vflags) & mask) | MTPDchannel_ClientFlag::f_forbidden); + channel->setFlags((channel->flags() & ~mask) | (mtpCastFlags(data.vflags()) & mask) | MTPDchannel_ClientFlag::f_forbidden); if (channel->hasAdminRights()) { channel->setAdminRights(MTP_chatAdminRights(MTP_flags(0))); @@ -633,9 +660,9 @@ not_null Session::processChat(const MTPChat &data) { channel->setRestrictions(MTP_chatBannedRights(MTP_flags(0), MTP_int(0))); } - channel->setName(qs(data.vtitle), QString()); + channel->setName(qs(data.vtitle()), QString()); - channel->access = data.vaccess_hash.v; + channel->access = data.vaccess_hash().v; channel->setPhoto(MTP_chatPhotoEmpty()); channel->date = 0; channel->setMembersCount(0); @@ -684,15 +711,15 @@ PeerData *Session::processChats(const MTPVector &data) { void Session::applyMaximumChatVersions(const MTPVector &data) { for (const auto &chat : data.v) { chat.match([&](const MTPDchat &data) { - if (const auto chat = chatLoaded(data.vid.v)) { - if (data.vversion.v < chat->version()) { - chat->setVersion(data.vversion.v); + if (const auto chat = chatLoaded(data.vid().v)) { + if (data.vversion().v < chat->version()) { + chat->setVersion(data.vversion().v); } } }, [&](const MTPDchannel &data) { - if (const auto channel = channelLoaded(data.vid.v)) { - if (data.vversion.v < channel->version()) { - channel->setVersion(data.vversion.v); + if (const auto channel = channelLoaded(data.vid().v)) { + if (data.vversion().v < channel->version()) { + channel->setVersion(data.vversion().v); } } }, [](const auto &) { @@ -1483,7 +1510,7 @@ void Session::applyPinnedChats( const QVector &list) { for (const auto &peer : list) { peer.match([&](const MTPDdialogPeer &data) { - const auto history = this->history(peerFromMTP(data.vpeer)); + const auto history = this->history(peerFromMTP(data.vpeer())); if (folder) { history->setFolder(folder); } else { @@ -1518,7 +1545,7 @@ void Session::applyDialogs( void Session::applyDialog( Data::Folder *requestFolder, const MTPDdialog &data) { - const auto peerId = peerFromMTP(data.vpeer); + const auto peerId = peerFromMTP(data.vpeer()); if (!peerId) { return; } @@ -1544,7 +1571,7 @@ void Session::applyDialog( if (requestFolder) { LOG(("API Error: requestFolder != nullptr for dialogFolder.")); } - const auto folder = processFolder(data.vfolder); + const auto folder = processFolder(data.vfolder()); folder->applyDialog(data); setPinnedFromDialog(folder, data.is_pinned()); } @@ -1580,27 +1607,23 @@ void Session::reorderTwoPinnedChats( bool Session::checkEntitiesAndViewsUpdate(const MTPDmessage &data) { const auto peer = [&] { - const auto result = peerFromMTP(data.vto_id); - return (data.has_from_id() && result == session().userPeerId()) - ? peerFromUser(data.vfrom_id) - : result; - }(); - if (const auto existing = message(peerToChannel(peer), data.vid.v)) { - { - auto text = qs(data.vmessage); - auto entities = data.has_entities() - ? TextUtilities::EntitiesFromMTP(data.ventities.v) - : EntitiesInText(); - existing->setText({ std::move(text), std::move(entities) }); + const auto result = peerFromMTP(data.vto_id()); + if (const auto fromId = data.vfrom_id()) { + if (result == session().userPeerId()) { + return peerFromUser(*fromId); + } } - existing->updateSentMedia(data.has_media() ? &data.vmedia : nullptr); - existing->updateReplyMarkup(data.has_reply_markup() - ? &data.vreply_markup - : nullptr); - existing->updateForwardedInfo(data.has_fwd_from() - ? &data.vfwd_from - : nullptr); - existing->setViewsCount(data.has_views() ? data.vviews.v : -1); + return result; + }(); + if (const auto existing = message(peerToChannel(peer), data.vid().v)) { + existing->setText({ + qs(data.vmessage()), + TextUtilities::EntitiesFromMTP(data.ventities().value_or_empty()) + }); + existing->updateSentMedia(data.vmedia()); + existing->updateReplyMarkup(data.vreply_markup()); + existing->updateForwardedInfo(data.vfwd_from()); + existing->setViewsCount(data.vviews().value_or(-1)); existing->indexAsNewItem(); requestItemTextRefresh(existing); if (existing->mainView()) { @@ -1618,12 +1641,15 @@ void Session::updateEditedMessage(const MTPMessage &data) { return nullptr; }, [&](const auto &data) { const auto peer = [&] { - const auto result = peerFromMTP(data.vto_id); - return (data.has_from_id() && result == session().userPeerId()) - ? peerFromUser(data.vfrom_id) - : result; + const auto result = peerFromMTP(data.vto_id()); + if (const auto fromId = data.vfrom_id()) { + if (result == session().userPeerId()) { + return peerFromUser(*fromId); + } + } + return result; }(); - return message(peerToChannel(peer), data.vid.v); + return message(peerToChannel(peer), data.vid().v); }); if (!existing) { return; @@ -2071,12 +2097,12 @@ not_null Session::processPhoto(const MTPPhoto &data) { return data.match([&](const MTPDphoto &data) { return processPhoto(data); }, [&](const MTPDphotoEmpty &data) { - return photo(data.vid.v); + return photo(data.vid().v); }); } not_null Session::processPhoto(const MTPDphoto &data) { - const auto result = photo(data.vid.v); + const auto result = photo(data.vid().v); photoApplyFields(result, data); return result; } @@ -2111,18 +2137,18 @@ not_null Session::processPhoto( const auto large = image(LargeLevels); return data.match([&](const MTPDphoto &data) { return photo( - data.vid.v, - data.vaccess_hash.v, - data.vfile_reference.v, - data.vdate.v, - data.vdc_id.v, + data.vid().v, + data.vaccess_hash().v, + data.vfile_reference().v, + data.vdate().v, + data.vdc_id().v, data.is_has_stickers(), thumbnailInline, thumbnailSmall, thumbnail, large); }, [&](const MTPDphotoEmpty &data) { - return photo(data.vid.v); + return photo(data.vid().v); }); } @@ -2156,7 +2182,7 @@ void Session::photoConvert( not_null original, const MTPPhoto &data) { const auto id = data.match([](const auto &data) { - return data.vid.v; + return data.vid().v; }); if (original->id != id) { auto i = _photos.find(id); @@ -2227,14 +2253,14 @@ void Session::photoApplyFields( void Session::photoApplyFields( not_null photo, const MTPDphoto &data) { - const auto &sizes = data.vsizes.v; + const auto &sizes = data.vsizes().v; const auto find = [&](const QByteArray &levels) { const auto kInvalidIndex = int(levels.size()); const auto level = [&](const MTPPhotoSize &size) { const auto letter = size.match([](const MTPDphotoSizeEmpty &) { return char(0); }, [](const auto &size) { - return size.vtype.v.isEmpty() ? char(0) : size.vtype.v[0]; + return size.vtype().v.isEmpty() ? char(0) : size.vtype().v[0]; }); const auto index = levels.indexOf(letter); return (index >= 0) ? index : kInvalidIndex; @@ -2256,10 +2282,10 @@ void Session::photoApplyFields( if (thumbnailSmall && thumbnail && large) { photoApplyFields( photo, - data.vaccess_hash.v, - data.vfile_reference.v, - data.vdate.v, - data.vdc_id.v, + data.vaccess_hash().v, + data.vfile_reference().v, + data.vdate().v, + data.vdc_id().v, data.is_has_stickers(), thumbnailInline, thumbnailSmall, @@ -2308,13 +2334,13 @@ not_null Session::processDocument(const MTPDocument &data) { return processDocument(data.c_document()); case mtpc_documentEmpty: - return document(data.c_documentEmpty().vid.v); + return document(data.c_documentEmpty().vid().v); } Unexpected("Type in Session::document()."); } not_null Session::processDocument(const MTPDdocument &data) { - const auto result = document(data.vid.v); + const auto result = document(data.vid().v); documentApplyFields(result, data); return result; } @@ -2324,26 +2350,26 @@ not_null Session::processDocument( QImage &&thumb) { switch (data.type()) { case mtpc_documentEmpty: - return document(data.c_documentEmpty().vid.v); + return document(data.c_documentEmpty().vid().v); case mtpc_document: { const auto &fields = data.c_document(); - const auto mime = qs(fields.vmime_type); + const auto mime = qs(fields.vmime_type()); const auto format = (mime == qstr("image/webp") || mime == qstr("application/x-tgsticker")) ? "WEBP" : "JPG"; return document( - fields.vid.v, - fields.vaccess_hash.v, - fields.vfile_reference.v, - fields.vdate.v, - fields.vattributes.v, + fields.vid().v, + fields.vaccess_hash().v, + fields.vfile_reference().v, + fields.vdate().v, + fields.vattributes().v, mime, ImagePtr(), Images::Create(std::move(thumb), format), - fields.vdc_id.v, - fields.vsize.v, + fields.vdc_id().v, + fields.vsize().v, StorageImageLocation()); } break; } @@ -2383,8 +2409,8 @@ void Session::documentConvert( const MTPDocument &data) { const auto id = [&] { switch (data.type()) { - case mtpc_document: return data.c_document().vid.v; - case mtpc_documentEmpty: return data.c_documentEmpty().vid.v; + case mtpc_document: return data.c_document().vid().v; + case mtpc_documentEmpty: return data.c_documentEmpty().vid().v; } Unexpected("Type in Session::documentConvert()."); }(); @@ -2441,16 +2467,16 @@ DocumentData *Session::documentFromWeb( uint64(0), QByteArray(), unixtime(), - data.vattributes.v, - data.vmime_type.v, + data.vattributes().v, + data.vmime_type().v, ImagePtr(), thumb, MTP::maindc(), - int32(0), // data.vsize.v + int32(0), // data.vsize().v StorageImageLocation()); result->setWebLocation(WebFileLocation( - data.vurl.v, - data.vaccess_hash.v)); + data.vurl().v, + data.vaccess_hash().v)); return result; } @@ -2462,14 +2488,14 @@ DocumentData *Session::documentFromWeb( uint64(0), QByteArray(), unixtime(), - data.vattributes.v, - data.vmime_type.v, + data.vattributes().v, + data.vmime_type().v, ImagePtr(), thumb, MTP::maindc(), - int32(0), // data.vsize.v + int32(0), // data.vsize().v StorageImageLocation()); - result->setContentUrl(qs(data.vurl)); + result->setContentUrl(qs(data.vurl())); return result; } @@ -2489,15 +2515,15 @@ void Session::documentApplyFields( const auto thumbnail = Images::Create(data, thumbnailSize); documentApplyFields( document, - data.vaccess_hash.v, - data.vfile_reference.v, - data.vdate.v, - data.vattributes.v, - qs(data.vmime_type), + data.vaccess_hash().v, + data.vfile_reference().v, + data.vdate().v, + data.vattributes().v, + qs(data.vmime_type()), Images::Create(data, thumbnailInline), thumbnail, - data.vdc_id.v, - data.vsize.v, + data.vdc_id().v, + data.vsize().v, thumbnail->location()); } @@ -2548,7 +2574,7 @@ not_null Session::processWebpage(const MTPWebPage &data) { case mtpc_webPage: return processWebpage(data.c_webPage()); case mtpc_webPageEmpty: { - const auto result = webpage(data.c_webPageEmpty().vid.v); + const auto result = webpage(data.c_webPageEmpty().vid().v); if (result->pendingTill > 0) { result->pendingTill = -1; // failed } @@ -2565,14 +2591,14 @@ not_null Session::processWebpage(const MTPWebPage &data) { } not_null Session::processWebpage(const MTPDwebPage &data) { - const auto result = webpage(data.vid.v); + const auto result = webpage(data.vid().v); webpageApplyFields(result, data); return result; } not_null Session::processWebpage(const MTPDwebPagePending &data) { constexpr auto kDefaultPendingTimeout = 60; - const auto result = webpage(data.vid.v); + const auto result = webpage(data.vid().v); webpageApplyFields( result, WebPageType::Article, @@ -2586,8 +2612,8 @@ not_null Session::processWebpage(const MTPDwebPagePending &data) { WebPageCollage(), 0, QString(), - data.vdate.v - ? data.vdate.v + data.vdate().v + ? data.vdate().v : (unixtime() + kDefaultPendingTimeout)); return result; } @@ -2648,34 +2674,30 @@ void Session::webpageApplyFields( not_null page, const MTPDwebPage &data) { auto description = TextWithEntities { - data.has_description() - ? TextUtilities::Clean(qs(data.vdescription)) - : QString() + TextUtilities::Clean(qs(data.vdescription().value_or_empty())) }; - const auto siteName = data.has_site_name() - ? qs(data.vsite_name) - : QString(); + const auto siteName = qs(data.vsite_name().value_or_empty()); auto parseFlags = TextParseLinks | TextParseMultiline | TextParseRichText; if (siteName == qstr("Twitter") || siteName == qstr("Instagram")) { parseFlags |= TextParseHashtags | TextParseMentions; } TextUtilities::ParseEntities(description, parseFlags); const auto pendingTill = TimeId(0); + const auto photo = data.vphoto(); + const auto document = data.vdocument(); webpageApplyFields( page, ParseWebPageType(data), - qs(data.vurl), - qs(data.vdisplay_url), + qs(data.vurl()), + qs(data.vdisplay_url()), siteName, - data.has_title() ? qs(data.vtitle) : QString(), + qs(data.vtitle().value_or_empty()), description, - data.has_photo() ? processPhoto(data.vphoto).get() : nullptr, - (data.has_document() - ? processDocument(data.vdocument).get() - : nullptr), + photo ? processPhoto(*photo).get() : nullptr, + document ? processDocument(*document).get() : nullptr, WebPageCollage(data), - data.has_duration() ? data.vduration.v : 0, - data.has_author() ? qs(data.vauthor) : QString(), + data.vduration().value_or_empty(), + qs(data.vauthor().value_or_empty()), pendingTill); } @@ -2724,7 +2746,7 @@ not_null Session::game(GameId id) { } not_null Session::processGame(const MTPDgame &data) { - const auto result = game(data.vid.v); + const auto result = game(data.vid().v); gameApplyFields(result, data); return result; } @@ -2754,7 +2776,7 @@ void Session::gameConvert( const MTPGame &data) { Expects(data.type() == mtpc_game); - const auto id = data.c_game().vid.v; + const auto id = data.c_game().vid().v; if (original->id != id) { auto i = _games.find(id); if (i == _games.end()) { @@ -2778,16 +2800,15 @@ void Session::gameConvert( void Session::gameApplyFields( not_null game, const MTPDgame &data) { + const auto document = data.vdocument(); gameApplyFields( game, - data.vaccess_hash.v, - qs(data.vshort_name), - qs(data.vtitle), - qs(data.vdescription), - processPhoto(data.vphoto), - (data.has_document() - ? processDocument(data.vdocument).get() - : nullptr)); + data.vaccess_hash().v, + qs(data.vshort_name()), + qs(data.vtitle()), + qs(data.vdescription()), + processPhoto(data.vphoto()), + document ? processDocument(*document).get() : nullptr); } void Session::gameApplyFields( @@ -2820,7 +2841,7 @@ not_null Session::poll(PollId id) { not_null Session::processPoll(const MTPPoll &data) { return data.match([&](const MTPDpoll &data) { - const auto id = data.vid.v; + const auto id = data.vid().v; const auto result = poll(id); const auto changed = result->applyChanges(data); if (changed) { @@ -2831,8 +2852,8 @@ not_null Session::processPoll(const MTPPoll &data) { } not_null Session::processPoll(const MTPDmessageMediaPoll &data) { - const auto result = processPoll(data.vpoll); - const auto changed = result->applyResults(data.vresults); + const auto result = processPoll(data.vpoll()); + const auto changed = result->applyResults(data.vresults()); if (changed) { notifyPollUpdateDelayed(result); } @@ -2841,21 +2862,22 @@ not_null Session::processPoll(const MTPDmessageMediaPoll &data) { void Session::applyUpdate(const MTPDupdateMessagePoll &update) { const auto updated = [&] { - const auto i = _polls.find(update.vpoll_id.v); + const auto poll = update.vpoll(); + const auto i = _polls.find(update.vpoll_id().v); return (i == end(_polls)) ? nullptr - : update.has_poll() - ? processPoll(update.vpoll).get() + : poll + ? processPoll(*poll).get() : i->second.get(); }(); - if (updated && updated->applyResults(update.vresults)) { + if (updated && updated->applyResults(update.vresults())) { notifyPollUpdateDelayed(updated); } } void Session::applyUpdate(const MTPDupdateChatParticipants &update) { - const auto chatId = update.vparticipants.match([](const auto &update) { - return update.vchat_id.v; + const auto chatId = update.vparticipants().match([](const auto &update) { + return update.vchat_id().v; }); if (const auto chat = chatLoaded(chatId)) { ApplyChatUpdate(chat, update); @@ -2868,25 +2890,25 @@ void Session::applyUpdate(const MTPDupdateChatParticipants &update) { } void Session::applyUpdate(const MTPDupdateChatParticipantAdd &update) { - if (const auto chat = chatLoaded(update.vchat_id.v)) { + if (const auto chat = chatLoaded(update.vchat_id().v)) { ApplyChatUpdate(chat, update); } } void Session::applyUpdate(const MTPDupdateChatParticipantDelete &update) { - if (const auto chat = chatLoaded(update.vchat_id.v)) { + if (const auto chat = chatLoaded(update.vchat_id().v)) { ApplyChatUpdate(chat, update); } } void Session::applyUpdate(const MTPDupdateChatParticipantAdmin &update) { - if (const auto chat = chatLoaded(update.vchat_id.v)) { + if (const auto chat = chatLoaded(update.vchat_id().v)) { ApplyChatUpdate(chat, update); } } void Session::applyUpdate(const MTPDupdateChatDefaultBannedRights &update) { - if (const auto peer = peerLoaded(peerFromMTP(update.vpeer))) { + if (const auto peer = peerLoaded(peerFromMTP(update.vpeer()))) { if (const auto chat = peer->asChat()) { ApplyChatUpdate(chat, update); } else if (const auto channel = peer->asChannel()) { @@ -3246,11 +3268,9 @@ not_null Session::processFolder(const MTPFolder &data) { } not_null Session::processFolder(const MTPDfolder &data) { - const auto result = folder(data.vid.v); - //if (data.has_photo()) { - // data.vphoto; - //} - //data.vtitle; + const auto result = folder(data.vid().v); + //data.vphoto(); + //data.vtitle(); return result; } // // #feed @@ -3402,7 +3422,7 @@ void Session::applyNotifySetting( } break; case mtpc_notifyPeer: { const auto &data = notifyPeer.c_notifyPeer(); - if (const auto peer = peerLoaded(peerFromMTP(data.vpeer))) { + if (const auto peer = peerLoaded(peerFromMTP(data.vpeer()))) { if (peer->notifyChange(settings)) { updateNotifySettingsLocal(peer); } @@ -3611,7 +3631,7 @@ PeerData *Session::proxyPromoted() const { bool Session::updateWallpapers(const MTPaccount_WallPapers &data) { return data.match([&](const MTPDaccount_wallPapers &data) { - setWallpapers(data.vwallpapers.v, data.vhash.v); + setWallpapers(data.vwallpapers().v, data.vhash().v); return true; }, [&](const MTPDaccount_wallPapersNotModified &) { return false; diff --git a/Telegram/SourceFiles/data/data_types.cpp b/Telegram/SourceFiles/data/data_types.cpp index 7261da286..b9529ed48 100644 --- a/Telegram/SourceFiles/data/data_types.cpp +++ b/Telegram/SourceFiles/data/data_types.cpp @@ -216,10 +216,12 @@ PeerId PeerFromMessage(const MTPmessage &message) { return message.match([](const MTPDmessageEmpty &) { return PeerId(0); }, [](const auto &message) { - auto from_id = message.has_from_id() ? peerFromUser(message.vfrom_id) : 0; - auto to_id = peerFromMTP(message.vto_id); - auto out = message.is_out(); - return (out || !peerIsUser(to_id)) ? to_id : from_id; + const auto fromId = message.vfrom_id(); + const auto toId = peerFromMTP(message.vto_id()); + const auto out = message.is_out(); + return (out || !fromId || !peerIsUser(toId)) + ? toId + : peerFromUser(*fromId); }); } @@ -227,15 +229,15 @@ MTPDmessage::Flags FlagsFromMessage(const MTPmessage &message) { return message.match([](const MTPDmessageEmpty &) { return MTPDmessage::Flags(0); }, [](const MTPDmessage &message) { - return message.vflags.v; + return message.vflags().v; }, [](const MTPDmessageService &message) { - return mtpCastFlags(message.vflags.v); + return mtpCastFlags(message.vflags().v); }); } MsgId IdFromMessage(const MTPmessage &message) { return message.match([](const auto &message) { - return message.vid.v; + return message.vid().v; }); } @@ -243,6 +245,6 @@ TimeId DateFromMessage(const MTPmessage &message) { return message.match([](const MTPDmessageEmpty &) { return TimeId(0); }, [](const auto &message) { - return message.vdate.v; + return message.vdate().v; }); } diff --git a/Telegram/SourceFiles/data/data_types.h b/Telegram/SourceFiles/data/data_types.h index 6bf06ac45..04f5e887c 100644 --- a/Telegram/SourceFiles/data/data_types.h +++ b/Telegram/SourceFiles/data/data_types.h @@ -183,9 +183,9 @@ inline MTPint peerToBareMTPInt(const PeerId &id) { } inline PeerId peerFromMTP(const MTPPeer &peer) { switch (peer.type()) { - case mtpc_peerUser: return peerFromUser(peer.c_peerUser().vuser_id); - case mtpc_peerChat: return peerFromChat(peer.c_peerChat().vchat_id); - case mtpc_peerChannel: return peerFromChannel(peer.c_peerChannel().vchannel_id); + case mtpc_peerUser: return peerFromUser(peer.c_peerUser().vuser_id()); + case mtpc_peerChat: return peerFromChat(peer.c_peerChat().vchat_id()); + case mtpc_peerChannel: return peerFromChannel(peer.c_peerChannel().vchannel_id()); } return 0; } diff --git a/Telegram/SourceFiles/data/data_user.cpp b/Telegram/SourceFiles/data/data_user.cpp index b1f798733..4377b738a 100644 --- a/Telegram/SourceFiles/data/data_user.cpp +++ b/Telegram/SourceFiles/data/data_user.cpp @@ -74,7 +74,7 @@ void UserData::setIsContact(bool is) { void UserData::setPhoto(const MTPUserProfilePhoto &photo) { if (photo.type() == mtpc_userProfilePhoto) { const auto &data = photo.c_userProfilePhoto(); - updateUserpic(data.vphoto_id.v, data.vdc_id.v, data.vphoto_small); + updateUserpic(data.vphoto_id().v, data.vdc_id().v, data.vphoto_small()); } else { clearUserpic(); } @@ -153,22 +153,22 @@ void UserData::setBotInfo(const MTPBotInfo &info) { switch (info.type()) { case mtpc_botInfo: { const auto &d(info.c_botInfo()); - if (peerFromUser(d.vuser_id.v) != id || !botInfo) return; + if (peerFromUser(d.vuser_id().v) != id || !botInfo) return; - QString desc = qs(d.vdescription); + QString desc = qs(d.vdescription()); if (botInfo->description != desc) { botInfo->description = desc; botInfo->text = Ui::Text::String(st::msgMinWidth); } - auto &v = d.vcommands.v; + auto &v = d.vcommands().v; botInfo->commands.reserve(v.size()); auto changedCommands = false; int32 j = 0; for (const auto &command : v) { command.match([&](const MTPDbotCommand &data) { - const auto cmd = qs(data.vcommand); - const auto desc = qs(data.vdescription); + const auto cmd = qs(data.vcommand()); + const auto desc = qs(data.vdescription()); if (botInfo->commands.size() <= j) { botInfo->commands.push_back(BotCommand(cmd, desc)); changedCommands = true; @@ -260,39 +260,39 @@ bool UserData::hasCalls() const { namespace Data { void ApplyUserUpdate(not_null user, const MTPDuserFull &update) { - user->owner().processUser(update.vuser); - if (update.has_profile_photo()) { - user->owner().processPhoto(update.vprofile_photo); + user->owner().processUser(update.vuser()); + if (const auto photo = update.vprofile_photo()) { + user->owner().processPhoto(*photo); } - const auto settings = update.vsettings.match([&]( + const auto settings = update.vsettings().match([&]( const MTPDpeerSettings &data) { - return data.vflags.v; + return data.vflags().v; }); user->setSettings(settings); user->session().api().applyNotifySettings( MTP_inputNotifyPeer(user->input), - update.vnotify_settings); + update.vnotify_settings()); - if (update.has_bot_info()) { - user->setBotInfo(update.vbot_info); + if (const auto info = update.vbot_info()) { + user->setBotInfo(*info); } else { user->setBotInfoVersion(-1); } - if (update.has_pinned_msg_id()) { - user->setPinnedMessageId(update.vpinned_msg_id.v); + if (const auto pinned = update.vpinned_msg_id()) { + user->setPinnedMessageId(pinned->v); } else { user->clearPinnedMessage(); } - user->setFullFlags(update.vflags.v); + user->setFullFlags(update.vflags().v); user->setIsBlocked(update.is_blocked()); user->setCallsStatus(update.is_phone_calls_private() ? UserData::CallsStatus::Private : update.is_phone_calls_available() ? UserData::CallsStatus::Enabled : UserData::CallsStatus::Disabled); - user->setAbout(update.has_about() ? qs(update.vabout) : QString()); - user->setCommonChatsCount(update.vcommon_chats_count.v); - user->checkFolder(update.has_folder_id() ? update.vfolder_id.v : 0); + user->setAbout(qs(update.vabout().value_or_empty())); + user->setCommonChatsCount(update.vcommon_chats_count().v); + user->checkFolder(update.vfolder_id().value_or_empty()); user->fullUpdated(); } diff --git a/Telegram/SourceFiles/data/data_wall_paper.cpp b/Telegram/SourceFiles/data/data_wall_paper.cpp index c7c420739..5510d88bb 100644 --- a/Telegram/SourceFiles/data/data_wall_paper.cpp +++ b/Telegram/SourceFiles/data/data_wall_paper.cpp @@ -316,29 +316,31 @@ std::optional WallPaper::Create(const MTPDwallPaper &data) { using Flag = MTPDwallPaper::Flag; const auto document = Auth().data().processDocument( - data.vdocument); + data.vdocument()); if (!document->checkWallPaperProperties()) { return std::nullopt; } - auto result = WallPaper(data.vid.v); - result._accessHash = data.vaccess_hash.v; - result._flags = data.vflags.v; - result._slug = qs(data.vslug); + auto result = WallPaper(data.vid().v); + result._accessHash = data.vaccess_hash().v; + result._flags = data.vflags().v; + result._slug = qs(data.vslug()); result._document = document; - if (data.has_settings()) { + if (const auto settings = data.vsettings()) { const auto isPattern = ((result._flags & Flag::f_pattern) != 0); - data.vsettings.match([&](const MTPDwallPaperSettings &data) { + settings->match([&](const MTPDwallPaperSettings &data) { using Flag = MTPDwallPaperSettings::Flag; - result._settings = data.vflags.v; - if (isPattern && data.has_background_color()) { + result._settings = data.vflags().v; + const auto backgroundColor = data.vbackground_color(); + if (isPattern && backgroundColor) { result._backgroundColor = MaybeColorFromSerialized( - data.vbackground_color.v); + backgroundColor->v); } else { result._settings &= ~Flag::f_background_color; } - if (isPattern && data.has_intensity()) { - result._intensity = data.vintensity.v; + const auto intensity = data.vintensity(); + if (isPattern && intensity) { + result._intensity = intensity->v; } else { result._settings &= ~Flag::f_intensity; } diff --git a/Telegram/SourceFiles/data/data_web_page.cpp b/Telegram/SourceFiles/data/data_web_page.cpp index 25f043d9c..de36516ce 100644 --- a/Telegram/SourceFiles/data/data_web_page.cpp +++ b/Telegram/SourceFiles/data/data_web_page.cpp @@ -62,18 +62,18 @@ WebPageCollage ExtractCollage( result.items.reserve(count); for (const auto &item : items) { const auto good = item.match([&](const MTPDpageBlockPhoto &data) { - const auto photo = storage.photo(data.vphoto_id.v); + const auto photo = storage.photo(data.vphoto_id().v); if (photo->isNull()) { return false; } - result.items.push_back(photo); + result.items.emplace_back(photo); return true; }, [&](const MTPDpageBlockVideo &data) { - const auto document = storage.document(data.vvideo_id.v); + const auto document = storage.document(data.vvideo_id().v); if (!document->isVideoFile()) { return false; } - result.items.push_back(document); + result.items.emplace_back(document); return true; }, [](const auto &) -> bool { Unexpected("Type of block in Collage."); @@ -86,19 +86,20 @@ WebPageCollage ExtractCollage( } WebPageCollage ExtractCollage(const MTPDwebPage &data) { - if (!data.has_cached_page()) { + const auto page = data.vcached_page(); + if (!page) { return {}; } const auto processMedia = [&] { - if (data.has_photo()) { - Auth().data().processPhoto(data.vphoto); + if (const auto photo = data.vphoto()) { + Auth().data().processPhoto(*photo); } - if (data.has_document()) { - Auth().data().processDocument(data.vdocument); + if (const auto document = data.vdocument()) { + Auth().data().processDocument(*document); } }; - return data.vcached_page.match([&](const auto &page) { - for (const auto &block : page.vblocks.v) { + return page->match([&](const auto &page) { + for (const auto &block : page.vblocks().v) { switch (block.type()) { case mtpc_pageBlockPhoto: case mtpc_pageBlockVideo: @@ -110,15 +111,15 @@ WebPageCollage ExtractCollage(const MTPDwebPage &data) { case mtpc_pageBlockSlideshow: processMedia(); return ExtractCollage( - block.c_pageBlockSlideshow().vitems.v, - page.vphotos.v, - page.vdocuments.v); + block.c_pageBlockSlideshow().vitems().v, + page.vphotos().v, + page.vdocuments().v); case mtpc_pageBlockCollage: processMedia(); return ExtractCollage( - block.c_pageBlockCollage().vitems.v, - page.vphotos.v, - page.vdocuments.v); + block.c_pageBlockCollage().vitems().v, + page.vphotos().v, + page.vdocuments().v); default: break; } } @@ -129,8 +130,8 @@ WebPageCollage ExtractCollage(const MTPDwebPage &data) { } // namespace WebPageType ParseWebPageType(const MTPDwebPage &page) { - const auto type = page.has_type() ? qs(page.vtype) : QString(); - if (type == qstr("video") || page.has_embed_url()) { + const auto type = qs(page.vtype().value_or_empty()); + if (type == qstr("video") || page.vembed_url()) { return WebPageType::Video; } else if (type == qstr("photo")) { return WebPageType::Photo; @@ -138,7 +139,7 @@ WebPageType ParseWebPageType(const MTPDwebPage &page) { return WebPageType::Profile; } else if (type == qstr("telegram_background")) { return WebPageType::WallPaper; - } else if (page.has_cached_page()) { + } else if (page.vcached_page()) { return WebPageType::ArticleWithIV; } else { return WebPageType::Article; diff --git a/Telegram/SourceFiles/dialogs/dialogs_pinned_list.cpp b/Telegram/SourceFiles/dialogs/dialogs_pinned_list.cpp index 5338bab76..6b6e1bdd7 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_pinned_list.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_pinned_list.cpp @@ -85,11 +85,11 @@ void PinnedList::applyList( clear(); for (const auto &peer : ranges::view::reverse(list)) { peer.match([&](const MTPDdialogPeer &data) { - if (const auto peerId = peerFromMTP(data.vpeer)) { + if (const auto peerId = peerFromMTP(data.vpeer())) { setPinned(owner->history(peerId), true); } }, [&](const MTPDdialogPeerFolder &data) { - const auto folderId = data.vfolder_id.v; + const auto folderId = data.vfolder_id().v; setPinned(owner->folder(folderId), true); }); } diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index 9be9921e9..296d63026 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -999,10 +999,10 @@ void Widget::searchReceived( auto &d = result.c_messages_messages(); if (_searchRequest != 0) { // Don't apply cached data! - session().data().processUsers(d.vusers); - session().data().processChats(d.vchats); + session().data().processUsers(d.vusers()); + session().data().processChats(d.vchats()); } - auto &msgs = d.vmessages.v; + auto &msgs = d.vmessages().v; _inner->searchReceived(msgs, type, msgs.size()); if (type == SearchRequestType::MigratedFromStart || type == SearchRequestType::MigratedFromOffset) { _searchFullMigrated = true; @@ -1015,17 +1015,18 @@ void Widget::searchReceived( auto &d = result.c_messages_messagesSlice(); if (_searchRequest != 0) { // Don't apply cached data! - session().data().processUsers(d.vusers); - session().data().processChats(d.vchats); + session().data().processUsers(d.vusers()); + session().data().processChats(d.vchats()); } - auto &msgs = d.vmessages.v; - const auto someAdded = _inner->searchReceived(msgs, type, d.vcount.v); - const auto rateUpdated = d.has_next_rate() && (d.vnext_rate.v != _searchNextRate); + auto &msgs = d.vmessages().v; + const auto someAdded = _inner->searchReceived(msgs, type, d.vcount().v); + const auto nextRate = d.vnext_rate(); + const auto rateUpdated = nextRate && (nextRate->v != _searchNextRate); const auto finished = (type == SearchRequestType::FromStart || type == SearchRequestType::FromOffset) ? !rateUpdated : !someAdded; if (rateUpdated) { - _searchNextRate = d.vnext_rate.v; + _searchNextRate = nextRate->v; } if (finished) { if (type == SearchRequestType::MigratedFromStart || type == SearchRequestType::MigratedFromOffset) { @@ -1040,7 +1041,7 @@ void Widget::searchReceived( auto &d = result.c_messages_channelMessages(); if (const auto peer = _searchInChat.peer()) { if (const auto channel = peer->asChannel()) { - channel->ptsReceived(d.vpts.v); + channel->ptsReceived(d.vpts().v); } else { LOG(("API Error: " "received messages.channelMessages when no channel " @@ -1053,11 +1054,11 @@ void Widget::searchReceived( } if (_searchRequest != 0) { // Don't apply cached data! - session().data().processUsers(d.vusers); - session().data().processChats(d.vchats); + session().data().processUsers(d.vusers()); + session().data().processChats(d.vchats()); } - auto &msgs = d.vmessages.v; - if (!_inner->searchReceived(msgs, type, d.vcount.v)) { + auto &msgs = d.vmessages().v; + if (!_inner->searchReceived(msgs, type, d.vcount().v)) { if (type == SearchRequestType::MigratedFromStart || type == SearchRequestType::MigratedFromOffset) { _searchFullMigrated = true; } else { @@ -1099,9 +1100,9 @@ void Widget::peerSearchReceived( switch (result.type()) { case mtpc_contacts_found: { auto &d = result.c_contacts_found(); - session().data().processUsers(d.vusers); - session().data().processChats(d.vchats); - _inner->peerSearchReceived(q, d.vmy_results.v, d.vresults.v); + session().data().processUsers(d.vusers()); + session().data().processChats(d.vchats()); + _inner->peerSearchReceived(q, d.vmy_results().v, d.vresults().v); } break; } diff --git a/Telegram/SourceFiles/export/data/export_data_types.cpp b/Telegram/SourceFiles/export/data/export_data_types.cpp index 5572473da..aa63c5f3c 100644 --- a/Telegram/SourceFiles/export/data/export_data_types.cpp +++ b/Telegram/SourceFiles/export/data/export_data_types.cpp @@ -108,11 +108,11 @@ bool IsUserPeerId(PeerId peerId) { PeerId ParsePeerId(const MTPPeer &data) { return data.match([](const MTPDpeerUser &data) { - return UserPeerId(data.vuser_id.v); + return UserPeerId(data.vuser_id().v); }, [](const MTPDpeerChat &data) { - return ChatPeerId(data.vchat_id.v); + return ChatPeerId(data.vchat_id().v); }, [](const MTPDpeerChannel &data) { - return ChatPeerId(data.vchannel_id.v); + return ChatPeerId(data.vchannel_id().v); }); } @@ -141,10 +141,10 @@ std::vector ParseText( }; for (const auto &entity : entities) { const auto start = entity.match([](const auto &data) { - return data.voffset.v; + return data.voffset().v; }); const auto length = entity.match([](const auto &data) { - return data.vlength.v; + return data.vlength().v; }); if (start < offset || length <= 0 || start + length > size) { @@ -179,11 +179,11 @@ std::vector ParseText( part.text = mid(start, length); part.additional = entity.match( [](const MTPDmessageEntityPre &data) { - return ParseString(data.vlanguage); + return ParseString(data.vlanguage()); }, [](const MTPDmessageEntityTextUrl &data) { - return ParseString(data.vurl); + return ParseString(data.vurl()); }, [](const MTPDmessageEntityMentionName &data) { - return NumberToString(data.vuser_id.v); + return NumberToString(data.vuser_id().v); }, [](const auto &) { return Utf8String(); }); result.push_back(std::move(part)); @@ -213,28 +213,28 @@ Image ParseMaxImage( result.file.suggestedPath = suggestedPath; auto maxArea = int64(0); - for (const auto &size : photo.vsizes.v) { + for (const auto &size : photo.vsizes().v) { size.match([](const MTPDphotoSizeEmpty &) { }, [](const MTPDphotoStrippedSize &) { // Max image size should not be a stripped image. }, [&](const auto &data) { - const auto area = data.vw.v * int64(data.vh.v); + const auto area = data.vw().v * int64(data.vh().v); if (area > maxArea) { - result.width = data.vw.v; - result.height = data.vh.v; + result.width = data.vw().v; + result.height = data.vh().v; result.file.location = FileLocation{ - photo.vdc_id.v, + photo.vdc_id().v, MTP_inputPhotoFileLocation( - photo.vid, - photo.vaccess_hash, - photo.vfile_reference, - data.vtype) }; + photo.vid(), + photo.vaccess_hash(), + photo.vfile_reference(), + data.vtype()) }; if constexpr (MTPDphotoCachedSize::Is()) { - result.file.content = data.vbytes.v; + result.file.content = data.vbytes().v; result.file.size = result.file.content.size(); } else { result.file.content = QByteArray(); - result.file.size = data.vsize.v; + result.file.size = data.vsize().v; } maxArea = area; } @@ -246,11 +246,11 @@ Image ParseMaxImage( Photo ParsePhoto(const MTPPhoto &data, const QString &suggestedPath) { auto result = Photo(); data.match([&](const MTPDphoto &data) { - result.id = data.vid.v; - result.date = data.vdate.v; + result.id = data.vid().v; + result.date = data.vdate().v; result.image = ParseMaxImage(data, suggestedPath); }, [&](const MTPDphotoEmpty &data) { - result.id = data.vid.v; + result.id = data.vid().v; }); return result; } @@ -260,33 +260,37 @@ void ParseAttributes( const MTPVector &attributes) { for (const auto &value : attributes.v) { value.match([&](const MTPDdocumentAttributeImageSize &data) { - result.width = data.vw.v; - result.height = data.vh.v; + result.width = data.vw().v; + result.height = data.vh().v; }, [&](const MTPDdocumentAttributeAnimated &data) { result.isAnimated = true; }, [&](const MTPDdocumentAttributeSticker &data) { result.isSticker = true; - result.stickerEmoji = ParseString(data.valt); + result.stickerEmoji = ParseString(data.valt()); }, [&](const MTPDdocumentAttributeVideo &data) { if (data.is_round_message()) { result.isVideoMessage = true; } else { result.isVideoFile = true; } - result.width = data.vw.v; - result.height = data.vh.v; - result.duration = data.vduration.v; + result.width = data.vw().v; + result.height = data.vh().v; + result.duration = data.vduration().v; }, [&](const MTPDdocumentAttributeAudio &data) { if (data.is_voice()) { result.isVoiceMessage = true; } else { result.isAudioFile = true; } - result.songPerformer = ParseString(data.vperformer); - result.songTitle = ParseString(data.vtitle); - result.duration = data.vduration.v; + if (const auto performer = data.vperformer()) { + result.songPerformer = ParseString(*performer); + } + if (const auto title = data.vtitle()) { + result.songTitle = ParseString(*title); + } + result.duration = data.vduration().v; }, [&](const MTPDdocumentAttributeFilename &data) { - result.name = ParseString(data.vfile_name); + result.name = ParseString(data.vfile_name()); }, [&](const MTPDdocumentAttributeHasStickers &data) { }); } @@ -396,18 +400,23 @@ QString DocumentFolder(const Document &data) { Image ParseDocumentThumb( const MTPDdocument &document, const QString &documentPath) { + const auto thumbs = document.vthumbs(); + if (!thumbs) { + return Image(); + } + const auto area = [](const MTPPhotoSize &size) { return size.match([](const MTPDphotoSizeEmpty &) { return 0; }, [](const MTPDphotoStrippedSize &) { return 0; }, [](const auto &data) { - return data.vw.v * data.vh.v; + return data.vw().v * data.vh().v; }); }; - const auto &thumbs = document.vthumbs.v; - const auto i = ranges::max_element(thumbs, ranges::less(), area); - if (i == thumbs.end()) { + const auto &list = thumbs->v; + const auto i = ranges::max_element(list, ranges::less(), area); + if (i == list.end()) { return Image(); } return i->match([](const MTPDphotoSizeEmpty &) { @@ -416,21 +425,21 @@ Image ParseDocumentThumb( return Image(); }, [&](const auto &data) { auto result = Image(); - result.width = data.vw.v; - result.height = data.vh.v; + result.width = data.vw().v; + result.height = data.vh().v; result.file.location = FileLocation{ - document.vdc_id.v, + document.vdc_id().v, MTP_inputDocumentFileLocation( - document.vid, - document.vaccess_hash, - document.vfile_reference, - data.vtype) }; + document.vid(), + document.vaccess_hash(), + document.vfile_reference(), + data.vtype()) }; if constexpr (MTPDphotoCachedSize::Is()) { - result.file.content = data.vbytes.v; + result.file.content = data.vbytes().v; result.file.size = result.file.content.size(); } else { result.file.content = QByteArray(); - result.file.size = data.vsize.v; + result.file.size = data.vsize().v; } result.file.suggestedPath = documentPath + "_thumb.jpg"; return result; @@ -444,18 +453,18 @@ Document ParseDocument( TimeId date) { auto result = Document(); data.match([&](const MTPDdocument &data) { - result.id = data.vid.v; - result.date = data.vdate.v; - result.mime = ParseString(data.vmime_type); - ParseAttributes(result, data.vattributes); + result.id = data.vid().v; + result.date = data.vdate().v; + result.mime = ParseString(data.vmime_type()); + ParseAttributes(result, data.vattributes()); - result.file.size = data.vsize.v; - result.file.location.dcId = data.vdc_id.v; + result.file.size = data.vsize().v; + result.file.location.dcId = data.vdc_id().v; result.file.location.data = MTP_inputDocumentFileLocation( - data.vid, - data.vaccess_hash, - data.vfile_reference, - MTP_string(QString())); + data.vid(), + data.vaccess_hash(), + data.vfile_reference(), + MTP_string()); result.file.suggestedPath = suggestedFolder + DocumentFolder(result) + '/' + CleanDocumentName(ComputeDocumentName(context, result, date)); @@ -464,7 +473,7 @@ Document ParseDocument( data, result.file.suggestedPath); }, [&](const MTPDdocumentEmpty &data) { - result.id = data.vid.v; + result.id = data.vid().v; }); return result; } @@ -474,13 +483,13 @@ SharedContact ParseSharedContact( const MTPDmessageMediaContact &data, const QString &suggestedFolder) { auto result = SharedContact(); - result.info.userId = data.vuser_id.v; - result.info.firstName = ParseString(data.vfirst_name); - result.info.lastName = ParseString(data.vlast_name); - result.info.phoneNumber = ParseString(data.vphone_number); - if (!data.vvcard.v.isEmpty()) { - result.vcard.content = data.vvcard.v; - result.vcard.size = data.vvcard.v.size(); + result.info.userId = data.vuser_id().v; + result.info.firstName = ParseString(data.vfirst_name()); + result.info.lastName = ParseString(data.vlast_name()); + result.info.phoneNumber = ParseString(data.vphone_number()); + if (!data.vvcard().v.isEmpty()) { + result.vcard.content = data.vvcard().v; + result.vcard.size = data.vvcard().v.size(); result.vcard.suggestedPath = suggestedFolder + "contacts/contact_" + QString::number(++context.contacts) @@ -492,8 +501,8 @@ SharedContact ParseSharedContact( GeoPoint ParseGeoPoint(const MTPGeoPoint &data) { auto result = GeoPoint(); data.match([&](const MTPDgeoPoint &data) { - result.latitude = data.vlat.v; - result.longitude = data.vlong.v; + result.latitude = data.vlat().v; + result.longitude = data.vlong().v; result.valid = true; }, [](const MTPDgeoPointEmpty &data) {}); return result; @@ -501,19 +510,19 @@ GeoPoint ParseGeoPoint(const MTPGeoPoint &data) { Venue ParseVenue(const MTPDmessageMediaVenue &data) { auto result = Venue(); - result.point = ParseGeoPoint(data.vgeo); - result.title = ParseString(data.vtitle); - result.address = ParseString(data.vaddress); + result.point = ParseGeoPoint(data.vgeo()); + result.title = ParseString(data.vtitle()); + result.address = ParseString(data.vaddress()); return result; } Game ParseGame(const MTPGame &data, int32 botId) { return data.match([&](const MTPDgame &data) { auto result = Game(); - result.id = data.vid.v; - result.title = ParseString(data.vtitle); - result.description = ParseString(data.vdescription); - result.shortName = ParseString(data.vshort_name); + result.id = data.vid().v; + result.title = ParseString(data.vtitle()); + result.description = ParseString(data.vdescription()); + result.shortName = ParseString(data.vshort_name()); result.botId = botId; return result; }); @@ -521,49 +530,49 @@ Game ParseGame(const MTPGame &data, int32 botId) { Invoice ParseInvoice(const MTPDmessageMediaInvoice &data) { auto result = Invoice(); - result.title = ParseString(data.vtitle); - result.description = ParseString(data.vdescription); - result.currency = ParseString(data.vcurrency); - result.amount = data.vtotal_amount.v; - if (data.has_receipt_msg_id()) { - result.receiptMsgId = data.vreceipt_msg_id.v; + result.title = ParseString(data.vtitle()); + result.description = ParseString(data.vdescription()); + result.currency = ParseString(data.vcurrency()); + result.amount = data.vtotal_amount().v; + if (const auto receiptMsgId = data.vreceipt_msg_id()) { + result.receiptMsgId = receiptMsgId->v; } return result; } Poll ParsePoll(const MTPDmessageMediaPoll &data) { auto result = Poll(); - data.vpoll.match([&](const MTPDpoll &poll) { - result.id = poll.vid.v; - result.question = ParseString(poll.vquestion); + data.vpoll().match([&](const MTPDpoll &poll) { + result.id = poll.vid().v; + result.question = ParseString(poll.vquestion()); result.closed = poll.is_closed(); result.answers = ranges::view::all( - poll.vanswers.v + poll.vanswers().v ) | ranges::view::transform([](const MTPPollAnswer &answer) { return answer.match([](const MTPDpollAnswer &answer) { auto result = Poll::Answer(); - result.text = ParseString(answer.vtext); - result.option = answer.voption.v; + result.text = ParseString(answer.vtext()); + result.option = answer.voption().v; return result; }); }) | ranges::to_vector; }); - data.vresults.match([&](const MTPDpollResults &results) { - if (results.has_total_voters()) { - result.totalVotes = results.vtotal_voters.v; + data.vresults().match([&](const MTPDpollResults &results) { + if (const auto totalVotes = results.vtotal_voters()) { + result.totalVotes = totalVotes->v; } - if (results.has_results()) { - for (const auto &single : results.vresults.v) { + if (const auto resultsList = results.vresults()) { + for (const auto &single : resultsList->v) { single.match([&](const MTPDpollAnswerVoters &voters) { - const auto &option = voters.voption.v; + const auto &option = voters.voption().v; const auto i = ranges::find( result.answers, - voters.voption.v, + voters.voption().v, &Poll::Answer::option); if (i == end(result.answers)) { return; } - i->votes = voters.vvoters.v; + i->votes = voters.vvoters().v; if (voters.is_chosen()) { i->my = true; } @@ -585,7 +594,7 @@ UserpicsSlice ParseUserpicsSlice( + PreparePhotoFileName( ++baseIndex, (photo.type() == mtpc_photo - ? photo.c_photo().vdate.v + ? photo.c_photo().vdate().v : TimeId(0))); result.list.push_back(ParsePhoto(photo, suggestedPath)); } @@ -657,18 +666,18 @@ QString WriteImageThumb( ContactInfo ParseContactInfo(const MTPUser &data) { auto result = ContactInfo(); data.match([&](const MTPDuser &data) { - result.userId = data.vid.v; - if (data.has_first_name()) { - result.firstName = ParseString(data.vfirst_name); + result.userId = data.vid().v; + if (const auto firstName = data.vfirst_name()) { + result.firstName = ParseString(*firstName); } - if (data.has_last_name()) { - result.lastName = ParseString(data.vlast_name); + if (const auto lastName = data.vlast_name()) { + result.lastName = ParseString(*lastName); } - if (data.has_phone()) { - result.phoneNumber = ParseString(data.vphone); + if (const auto phone = data.vphone()) { + result.phoneNumber = ParseString(*phone); } }, [&](const MTPDuserEmpty &data) { - result.userId = data.vid.v; + result.userId = data.vid().v; }); return result; } @@ -684,22 +693,21 @@ User ParseUser(const MTPUser &data) { auto result = User(); result.info = ParseContactInfo(data); data.match([&](const MTPDuser &data) { - result.id = data.vid.v; - if (data.has_username()) { - result.username = ParseString(data.vusername); + result.id = data.vid().v; + if (const auto username = data.vusername()) { + result.username = ParseString(*username); } - if (data.has_bot_info_version()) { + if (data.vbot_info_version()) { result.isBot = true; } if (data.is_self()) { result.isSelf = true; } - const auto access_hash = data.has_access_hash() - ? data.vaccess_hash - : MTP_long(0); - result.input = MTP_inputUser(data.vid, access_hash); + result.input = MTP_inputUser( + data.vid(), + MTP_long(data.vaccess_hash().value_or_empty())); }, [&](const MTPDuserEmpty &data) { - result.input = MTP_inputUser(data.vid, MTP_long(0)); + result.input = MTP_inputUser(data.vid(), MTP_long(0)); }); return result; } @@ -716,35 +724,35 @@ std::map ParseUsersList(const MTPVector &data) { Chat ParseChat(const MTPChat &data) { auto result = Chat(); data.match([&](const MTPDchat &data) { - result.id = data.vid.v; - result.title = ParseString(data.vtitle); + result.id = data.vid().v; + result.title = ParseString(data.vtitle()); result.input = MTP_inputPeerChat(MTP_int(result.id)); }, [&](const MTPDchatEmpty &data) { - result.id = data.vid.v; + result.id = data.vid().v; result.input = MTP_inputPeerChat(MTP_int(result.id)); }, [&](const MTPDchatForbidden &data) { - result.id = data.vid.v; - result.title = ParseString(data.vtitle); + result.id = data.vid().v; + result.title = ParseString(data.vtitle()); result.input = MTP_inputPeerChat(MTP_int(result.id)); }, [&](const MTPDchannel &data) { - result.id = data.vid.v; + result.id = data.vid().v; result.isBroadcast = data.is_broadcast(); result.isSupergroup = data.is_megagroup(); - result.title = ParseString(data.vtitle); - if (data.has_username()) { - result.username = ParseString(data.vusername); + result.title = ParseString(data.vtitle()); + if (const auto username = data.vusername()) { + result.username = ParseString(*username); } result.input = MTP_inputPeerChannel( MTP_int(result.id), - data.vaccess_hash); + MTP_long(data.vaccess_hash().value_or_empty())); }, [&](const MTPDchannelForbidden &data) { - result.id = data.vid.v; + result.id = data.vid().v; result.isBroadcast = data.is_broadcast(); result.isSupergroup = data.is_megagroup(); - result.title = ParseString(data.vtitle); + result.title = ParseString(data.vtitle()); result.input = MTP_inputPeerChannel( MTP_int(result.id), - data.vaccess_hash); + data.vaccess_hash()); }); return result; } @@ -802,7 +810,7 @@ MTPInputPeer Peer::input() const { if (const auto user = this->user()) { if (user->input.type() == mtpc_inputUser) { const auto &input = user->input.c_inputUser(); - return MTP_inputPeerUser(input.vuser_id, input.vaccess_hash); + return MTP_inputPeerUser(input.vuser_id(), input.vaccess_hash()); } return MTP_inputPeerEmpty(); } else if (const auto chat = this->chat()) { @@ -898,44 +906,46 @@ Media ParseMedia( auto result = Media(); data.match([&](const MTPDmessageMediaPhoto &data) { - auto photo = data.has_photo() + const auto photo = data.vphoto(); + auto content = photo ? ParsePhoto( - data.vphoto, + *photo, folder + "photos/" + PreparePhotoFileName(++context.photos, date)) : Photo(); - if (data.has_ttl_seconds()) { - result.ttl = data.vttl_seconds.v; - photo.image.file = File(); + if (const auto ttl = data.vttl_seconds()) { + result.ttl = ttl->v; + content.image.file = File(); } - result.content = photo; + result.content = content; }, [&](const MTPDmessageMediaGeo &data) { - result.content = ParseGeoPoint(data.vgeo); + result.content = ParseGeoPoint(data.vgeo()); }, [&](const MTPDmessageMediaContact &data) { result.content = ParseSharedContact(context, data, folder); }, [&](const MTPDmessageMediaUnsupported &data) { result.content = UnsupportedMedia(); }, [&](const MTPDmessageMediaDocument &data) { - auto document = data.has_document() - ? ParseDocument(context, data.vdocument, folder, date) + const auto document = data.vdocument(); + auto content = document + ? ParseDocument(context, *document, folder, date) : Document(); - if (data.has_ttl_seconds()) { - result.ttl = data.vttl_seconds.v; - document.file = File(); + if (const auto ttl = data.vttl_seconds()) { + result.ttl = ttl->v; + content.file = File(); } - result.content = document; + result.content = content; }, [&](const MTPDmessageMediaWebPage &data) { // Ignore web pages. }, [&](const MTPDmessageMediaVenue &data) { result.content = ParseVenue(data); }, [&](const MTPDmessageMediaGame &data) { - result.content = ParseGame(data.vgame, context.botId); + result.content = ParseGame(data.vgame(), context.botId); }, [&](const MTPDmessageMediaInvoice &data) { result.content = ParseInvoice(data); }, [&](const MTPDmessageMediaGeoLive &data) { - result.content = ParseGeoPoint(data.vgeo); - result.ttl = data.vperiod.v; + result.content = ParseGeoPoint(data.vgeo()); + result.ttl = data.vperiod().v; }, [&](const MTPDmessageMediaPoll &data) { result.content = ParsePoll(data); }, [](const MTPDmessageMediaEmpty &data) {}); @@ -950,20 +960,20 @@ ServiceAction ParseServiceAction( auto result = ServiceAction(); data.match([&](const MTPDmessageActionChatCreate &data) { auto content = ActionChatCreate(); - content.title = ParseString(data.vtitle); - content.userIds.reserve(data.vusers.v.size()); - for (const auto &userId : data.vusers.v) { + content.title = ParseString(data.vtitle()); + content.userIds.reserve(data.vusers().v.size()); + for (const auto &userId : data.vusers().v) { content.userIds.push_back(userId.v); } result.content = content; }, [&](const MTPDmessageActionChatEditTitle &data) { auto content = ActionChatEditTitle(); - content.title = ParseString(data.vtitle); + content.title = ParseString(data.vtitle()); result.content = content; }, [&](const MTPDmessageActionChatEditPhoto &data) { auto content = ActionChatEditPhoto(); content.photo = ParsePhoto( - data.vphoto, + data.vphoto(), mediaFolder + "photos/" + PreparePhotoFileName(++context.photos, date)); @@ -972,31 +982,31 @@ ServiceAction ParseServiceAction( result.content = ActionChatDeletePhoto(); }, [&](const MTPDmessageActionChatAddUser &data) { auto content = ActionChatAddUser(); - content.userIds.reserve(data.vusers.v.size()); - for (const auto &user : data.vusers.v) { + content.userIds.reserve(data.vusers().v.size()); + for (const auto &user : data.vusers().v) { content.userIds.push_back(user.v); } result.content = content; }, [&](const MTPDmessageActionChatDeleteUser &data) { auto content = ActionChatDeleteUser(); - content.userId = data.vuser_id.v; + content.userId = data.vuser_id().v; result.content = content; }, [&](const MTPDmessageActionChatJoinedByLink &data) { auto content = ActionChatJoinedByLink(); - content.inviterId = data.vinviter_id.v; + content.inviterId = data.vinviter_id().v; result.content = content; }, [&](const MTPDmessageActionChannelCreate &data) { auto content = ActionChannelCreate(); - content.title = ParseString(data.vtitle); + content.title = ParseString(data.vtitle()); result.content = content; }, [&](const MTPDmessageActionChatMigrateTo &data) { auto content = ActionChatMigrateTo(); - content.channelId = data.vchannel_id.v; + content.channelId = data.vchannel_id().v; result.content = content; }, [&](const MTPDmessageActionChannelMigrateFrom &data) { auto content = ActionChannelMigrateFrom(); - content.title = ParseString(data.vtitle); - content.chatId = data.vchat_id.v; + content.title = ParseString(data.vtitle()); + content.chatId = data.vchat_id().v; result.content = content; }, [&](const MTPDmessageActionPinMessage &data) { result.content = ActionPinMessage(); @@ -1004,24 +1014,24 @@ ServiceAction ParseServiceAction( result.content = ActionHistoryClear(); }, [&](const MTPDmessageActionGameScore &data) { auto content = ActionGameScore(); - content.gameId = data.vgame_id.v; - content.score = data.vscore.v; + content.gameId = data.vgame_id().v; + content.score = data.vscore().v; result.content = content; }, [&](const MTPDmessageActionPaymentSentMe &data) { // Should not be in user inbox. }, [&](const MTPDmessageActionPaymentSent &data) { auto content = ActionPaymentSent(); - content.currency = ParseString(data.vcurrency); - content.amount = data.vtotal_amount.v; + content.currency = ParseString(data.vcurrency()); + content.amount = data.vtotal_amount().v; result.content = content; }, [&](const MTPDmessageActionPhoneCall &data) { auto content = ActionPhoneCall(); - if (data.has_duration()) { - content.duration = data.vduration.v; + if (const auto duration = data.vduration()) { + content.duration = duration->v; } - if (data.has_reason()) { + if (const auto reason = data.vreason()) { using Reason = ActionPhoneCall::DiscardReason; - content.discardReason = data.vreason.match( + content.discardReason = reason->match( [](const MTPDphoneCallDiscardReasonMissed &data) { return Reason::Missed; }, [](const MTPDphoneCallDiscardReasonDisconnect &data) { @@ -1037,19 +1047,19 @@ ServiceAction ParseServiceAction( result.content = ActionScreenshotTaken(); }, [&](const MTPDmessageActionCustomAction &data) { auto content = ActionCustomAction(); - content.message = ParseString(data.vmessage); + content.message = ParseString(data.vmessage()); result.content = content; }, [&](const MTPDmessageActionBotAllowed &data) { auto content = ActionBotAllowed(); - content.domain = ParseString(data.vdomain); + content.domain = ParseString(data.vdomain()); result.content = content; }, [&](const MTPDmessageActionSecureValuesSentMe &data) { // Should not be in user inbox. }, [&](const MTPDmessageActionSecureValuesSent &data) { auto content = ActionSecureValuesSent(); - content.types.reserve(data.vtypes.v.size()); + content.types.reserve(data.vtypes().v.size()); using Type = ActionSecureValuesSent::Type; - for (const auto &type : data.vtypes.v) { + for (const auto &type : data.vtypes().v) { content.types.push_back(type.match( [](const MTPDsecureValueTypePersonalDetails &data) { return Type::PersonalDetails; @@ -1116,71 +1126,73 @@ Message ParseMessage( const QString &mediaFolder) { auto result = Message(); data.match([&](const auto &data) { - result.id = data.vid.v; + result.id = data.vid().v; if constexpr (!MTPDmessageEmpty::Is()) { - result.toId = ParsePeerId(data.vto_id); + result.toId = ParsePeerId(data.vto_id()); + const auto fromId = data.vfrom_id(); const auto peerId = (!data.is_out() - && data.has_from_id() - && data.vto_id.type() == mtpc_peerUser) - ? UserPeerId(data.vfrom_id.v) + && fromId + && data.vto_id().type() == mtpc_peerUser) + ? UserPeerId(fromId->v) : result.toId; if (IsChatPeerId(peerId)) { result.chatId = BarePeerId(peerId); } - if (data.has_from_id()) { - result.fromId = data.vfrom_id.v; + if (fromId) { + result.fromId = fromId->v; } - if (data.has_reply_to_msg_id()) { - result.replyToMsgId = data.vreply_to_msg_id.v; + if (const auto replyToMsgId = data.vreply_to_msg_id()) { + result.replyToMsgId = replyToMsgId->v; } - result.date = data.vdate.v; + result.date = data.vdate().v; result.out = data.is_out(); } }); data.match([&](const MTPDmessage &data) { - if (data.has_edit_date()) { - result.edited = data.vedit_date.v; + if (const auto editDate = data.vedit_date()) { + result.edited = editDate->v; } - if (data.has_fwd_from()) { - result.forwardedFromId = data.vfwd_from.match( + if (const auto fwdFrom = data.vfwd_from()) { + result.forwardedFromId = fwdFrom->match( [](const MTPDmessageFwdHeader &data) { - if (data.has_channel_id()) { - return ChatPeerId(data.vchannel_id.v); - } else if (data.has_from_id()) { - return UserPeerId(data.vfrom_id.v); + if (const auto channelId = data.vchannel_id()) { + return ChatPeerId(channelId->v); + } else if (const auto fromId = data.vfrom_id()) { + return UserPeerId(fromId->v); } return PeerId(0); }); - result.forwardedFromName = data.vfwd_from.match( + result.forwardedFromName = fwdFrom->match( [](const MTPDmessageFwdHeader &data) { - return data.has_from_name() - ? data.vfrom_name.v - : QByteArray(); + if (const auto fromName = data.vfrom_name()) { + return fromName->v; + } + return QByteArray(); }); - result.forwardedDate = data.vfwd_from.match( + result.forwardedDate = fwdFrom->match( [](const MTPDmessageFwdHeader &data) { - return data.vdate.v; + return data.vdate().v; }); - result.savedFromChatId = data.vfwd_from.match( + result.savedFromChatId = fwdFrom->match( [](const MTPDmessageFwdHeader &data) { - if (data.has_saved_from_peer()) { - return ParsePeerId(data.vsaved_from_peer); + if (const auto savedFromPeer = data.vsaved_from_peer()) { + return ParsePeerId(*savedFromPeer); } return PeerId(0); }); result.forwarded = result.forwardedFromId || !result.forwardedFromName.isEmpty(); } - if (data.has_post_author()) { - result.signature = ParseString(data.vpost_author); + if (const auto postAuthor = data.vpost_author()) { + result.signature = ParseString(*postAuthor); } - if (data.has_reply_to_msg_id()) { - result.replyToMsgId = data.vreply_to_msg_id.v; + if (const auto replyToMsgId = data.vreply_to_msg_id()) { + result.replyToMsgId = replyToMsgId->v; } - if (data.has_via_bot_id()) { - result.viaBotId = data.vvia_bot_id.v; + if (const auto viaBotId = data.vvia_bot_id()) { + result.viaBotId = viaBotId->v; } - if (data.has_media()) { + if (const auto media = data.vmedia()) { context.botId = (result.viaBotId ? result.viaBotId : IsUserPeerId(result.forwardedFromId) @@ -1188,7 +1200,7 @@ Message ParseMessage( : result.fromId); result.media = ParseMedia( context, - data.vmedia, + *media, mediaFolder, result.date); if (result.media.ttl && !data.is_out()) { @@ -1198,18 +1210,16 @@ Message ParseMessage( context.botId = 0; } result.text = ParseText( - data.vmessage, - (data.has_entities() - ? data.ventities.v - : QVector{})); + data.vmessage(), + data.ventities().value_or_empty()); }, [&](const MTPDmessageService &data) { result.action = ParseServiceAction( context, - data.vaction, + data.vaction(), mediaFolder, result.date); }, [&](const MTPDmessageEmpty &data) { - result.id = data.vid.v; + result.id = data.vid().v; }); return result; } @@ -1232,9 +1242,9 @@ PersonalInfo ParsePersonalInfo(const MTPUserFull &data) { const auto &fields = data.c_userFull(); auto result = PersonalInfo(); - result.user = ParseUser(fields.vuser); - if (fields.has_about()) { - result.bio = ParseString(fields.vabout); + result.user = ParseUser(fields.vuser()); + if (const auto about = fields.vabout()) { + result.bio = ParseString(*about); } return result; } @@ -1244,10 +1254,10 @@ ContactsList ParseContactsList(const MTPcontacts_Contacts &data) { auto result = ContactsList(); const auto &contacts = data.c_contacts_contacts(); - const auto map = ParseUsersList(contacts.vusers); - result.list.reserve(contacts.vcontacts.v.size()); - for (const auto &contact : contacts.vcontacts.v) { - const auto userId = contact.c_contact().vuser_id.v; + const auto map = ParseUsersList(contacts.vusers()); + result.list.reserve(contacts.vcontacts().v.size()); + for (const auto &contact : contacts.vcontacts().v) { + const auto userId = contact.c_contact().vuser_id().v; if (const auto i = map.find(userId); i != end(map)) { result.list.push_back(i->second.info); } else { @@ -1263,10 +1273,10 @@ ContactsList ParseContactsList(const MTPVector &data) { for (const auto &contact : data.v) { auto info = contact.match([](const MTPDsavedPhoneContact &data) { auto info = ContactInfo(); - info.firstName = ParseString(data.vfirst_name); - info.lastName = ParseString(data.vlast_name); - info.phoneNumber = ParseString(data.vphone); - info.date = data.vdate.v; + info.firstName = ParseString(data.vfirst_name()); + info.lastName = ParseString(data.vlast_name()); + info.phoneNumber = ParseString(data.vphone()); + info.date = data.vdate().v; return info; }); result.list.push_back(std::move(info)); @@ -1297,13 +1307,13 @@ bool AppendTopPeers(ContactsList &to, const MTPcontacts_TopPeers &data) { }, [](const MTPDcontacts_topPeersDisabled &data) { return true; }, [&](const MTPDcontacts_topPeers &data) { - const auto peers = ParsePeersLists(data.vusers, data.vchats); + const auto peers = ParsePeersLists(data.vusers(), data.vchats()); const auto append = [&]( std::vector &to, const MTPVector &list) { for (const auto &topPeer : list.v) { to.push_back(topPeer.match([&](const MTPDtopPeer &data) { - const auto peerId = ParsePeerId(data.vpeer); + const auto peerId = ParsePeerId(data.vpeer()); auto peer = [&] { const auto i = peers.find(peerId); return (i != peers.end()) @@ -1312,23 +1322,23 @@ bool AppendTopPeers(ContactsList &to, const MTPcontacts_TopPeers &data) { }(); return TopPeer{ Peer{ std::move(peer) }, - data.vrating.v + data.vrating().v }; })); } }; - for (const auto &list : data.vcategories.v) { + for (const auto &list : data.vcategories().v) { const auto appended = list.match( [&](const MTPDtopPeerCategoryPeers &data) { - const auto category = data.vcategory.type(); + const auto category = data.vcategory().type(); if (category == mtpc_topPeerCategoryCorrespondents) { - append(to.correspondents, data.vpeers); + append(to.correspondents, data.vpeers()); return true; } else if (category == mtpc_topPeerCategoryBotsInline) { - append(to.inlineBots, data.vpeers); + append(to.inlineBots, data.vpeers()); return true; } else if (category == mtpc_topPeerCategoryPhoneCalls) { - append(to.phoneCalls, data.vpeers); + append(to.phoneCalls, data.vpeers()); return true; } else { return false; @@ -1345,17 +1355,17 @@ bool AppendTopPeers(ContactsList &to, const MTPcontacts_TopPeers &data) { Session ParseSession(const MTPAuthorization &data) { return data.match([&](const MTPDauthorization &data) { auto result = Session(); - result.applicationId = data.vapi_id.v; - result.platform = ParseString(data.vplatform); - result.deviceModel = ParseString(data.vdevice_model); - result.systemVersion = ParseString(data.vsystem_version); - result.applicationName = ParseString(data.vapp_name); - result.applicationVersion = ParseString(data.vapp_version); - result.created = data.vdate_created.v; - result.lastActive = data.vdate_active.v; - result.ip = ParseString(data.vip); - result.country = ParseString(data.vcountry); - result.region = ParseString(data.vregion); + result.applicationId = data.vapi_id().v; + result.platform = ParseString(data.vplatform()); + result.deviceModel = ParseString(data.vdevice_model()); + result.systemVersion = ParseString(data.vsystem_version()); + result.applicationName = ParseString(data.vapp_name()); + result.applicationVersion = ParseString(data.vapp_version()); + result.created = data.vdate_created().v; + result.lastActive = data.vdate_active().v; + result.ip = ParseString(data.vip()); + result.country = ParseString(data.vcountry()); + result.region = ParseString(data.vregion()); return result; }); } @@ -1363,7 +1373,7 @@ Session ParseSession(const MTPAuthorization &data) { SessionsList ParseSessionsList(const MTPaccount_Authorizations &data) { return data.match([](const MTPDaccount_authorizations &data) { auto result = SessionsList(); - const auto &list = data.vauthorizations.v; + const auto &list = data.vauthorizations().v; result.list.reserve(list.size()); for (const auto &session : list) { result.list.push_back(ParseSession(session)); @@ -1377,17 +1387,17 @@ WebSession ParseWebSession( const std::map &users) { return data.match([&](const MTPDwebAuthorization &data) { auto result = WebSession(); - const auto i = users.find(data.vbot_id.v); + const auto i = users.find(data.vbot_id().v); if (i != users.end() && i->second.isBot) { result.botUsername = i->second.username; } - result.domain = ParseString(data.vdomain); - result.platform = ParseString(data.vplatform); - result.browser = ParseString(data.vbrowser); - result.created = data.vdate_created.v; - result.lastActive = data.vdate_active.v; - result.ip = ParseString(data.vip); - result.region = ParseString(data.vregion); + result.domain = ParseString(data.vdomain()); + result.platform = ParseString(data.vplatform()); + result.browser = ParseString(data.vbrowser()); + result.created = data.vdate_created().v; + result.lastActive = data.vdate_active().v; + result.ip = ParseString(data.vip()); + result.region = ParseString(data.vregion()); return result; }); } @@ -1396,8 +1406,8 @@ SessionsList ParseWebSessionsList( const MTPaccount_WebAuthorizations &data) { return data.match([&](const MTPDaccount_webAuthorizations &data) { auto result = SessionsList(); - const auto users = ParseUsersList(data.vusers); - const auto &list = data.vauthorizations.v; + const auto users = ParseUsersList(data.vusers()); + const auto &list = data.vauthorizations().v; result.webList.reserve(list.size()); for (const auto &session : list) { result.webList.push_back(ParseWebSession(session, users)); @@ -1455,10 +1465,10 @@ DialogsInfo ParseDialogsInfo(const MTPmessages_Dialogs &data) { data.match([](const MTPDmessages_dialogsNotModified &data) { Unexpected("dialogsNotModified in ParseDialogsInfo."); }, [&](const auto &data) { // MTPDmessages_dialogs &data) { - const auto peers = ParsePeersLists(data.vusers, data.vchats); - const auto messages = ParseMessagesList(data.vmessages, folder); - result.chats.reserve(result.chats.size() + data.vdialogs.v.size()); - for (const auto &dialog : data.vdialogs.v) { + const auto peers = ParsePeersLists(data.vusers(), data.vchats()); + const auto messages = ParseMessagesList(data.vmessages(), folder); + result.chats.reserve(result.chats.size() + data.vdialogs().v.size()); + for (const auto &dialog : data.vdialogs().v) { if (dialog.type() != mtpc_dialog) { LOG(("API Error: Unexpected dialog type in chats export.")); continue; @@ -1466,7 +1476,7 @@ DialogsInfo ParseDialogsInfo(const MTPmessages_Dialogs &data) { const auto &fields = dialog.c_dialog(); auto info = DialogInfo(); - info.peerId = ParsePeerId(fields.vpeer); + info.peerId = ParsePeerId(fields.vpeer()); const auto peerIt = peers.find(info.peerId); if (peerIt != end(peers)) { const auto &peer = peerIt->second; @@ -1481,7 +1491,7 @@ DialogsInfo ParseDialogsInfo(const MTPmessages_Dialogs &data) { : Utf8String(); info.input = peer.input(); } - info.topMessageId = fields.vtop_message.v; + info.topMessageId = fields.vtop_message().v; const auto shift = IsChatPeerId(info.peerId) ? (uint64(uint32(BarePeerId(info.peerId))) << 32) : 0; @@ -1524,8 +1534,8 @@ DialogInfo DialogInfoFromChat(const Chat &data) { DialogsInfo ParseLeftChannelsInfo(const MTPmessages_Chats &data) { auto result = DialogsInfo(); data.match([&](const auto &data) { //MTPDmessages_chats &data) { - result.left.reserve(data.vchats.v.size()); - for (const auto &single : data.vchats.v) { + result.left.reserve(data.vchats().v.size()); + for (const auto &single : data.vchats().v) { auto info = DialogInfoFromChat(ParseChat(single)); info.isLeftChannel = true; result.left.push_back(std::move(info)); @@ -1539,7 +1549,7 @@ DialogsInfo ParseDialogsInfo( const MTPVector &data) { const auto singleId = singlePeer.match( [](const MTPDinputPeerUser &data) { - return data.vuser_id.v; + return data.vuser_id().v; }, [](const MTPDinputPeerSelf &data) { return 0; }, [](const auto &data) -> int { @@ -1549,7 +1559,7 @@ DialogsInfo ParseDialogsInfo( result.chats.reserve(data.v.size()); for (const auto &single : data.v) { const auto userId = single.match([&](const auto &data) { - return data.vid.v; + return data.vid().v; }); if (userId != singleId && (singleId != 0 @@ -1568,18 +1578,18 @@ DialogsInfo ParseDialogsInfo( const MTPmessages_Chats &data) { const auto singleId = singlePeer.match( [](const MTPDinputPeerChat &data) { - return data.vchat_id.v; + return data.vchat_id().v; }, [](const MTPDinputPeerChannel &data) { - return data.vchannel_id.v; + return data.vchannel_id().v; }, [](const auto &data) -> int { Unexpected("Single peer type in ParseDialogsInfo(chats)."); }); auto result = DialogsInfo(); data.match([&](const auto &data) { //MTPDmessages_chats &data) { - result.chats.reserve(data.vchats.v.size()); - for (const auto &single : data.vchats.v) { + result.chats.reserve(data.vchats().v.size()); + for (const auto &single : data.vchats().v) { const auto chatId = single.match([&](const auto &data) { - return data.vid.v; + return data.vid().v; }); if (chatId != singleId) { continue; @@ -1654,14 +1664,14 @@ TimeId SingleMessageDate(const MTPmessages_Messages &data) { return data.match([&](const MTPDmessages_messagesNotModified &data) { return 0; }, [&](const auto &data) { - const auto &list = data.vmessages.v; + const auto &list = data.vmessages().v; if (list.isEmpty()) { return 0; } return list[0].match([](const MTPDmessageEmpty &data) { return 0; }, [](const auto &data) { - return data.vdate.v; + return data.vdate().v; }); }); } diff --git a/Telegram/SourceFiles/export/export_api_wrap.cpp b/Telegram/SourceFiles/export/export_api_wrap.cpp index dc649a264..dc2b91b40 100644 --- a/Telegram/SourceFiles/export/export_api_wrap.cpp +++ b/Telegram/SourceFiles/export/export_api_wrap.cpp @@ -50,40 +50,40 @@ LocationKey ComputeLocationKey(const Data::FileLocation &value) { result.type = value.dcId; value.data.match([&](const MTPDinputFileLocation &data) { result.type |= (1ULL << 24); - result.type |= (uint64(uint32(data.vlocal_id.v)) << 32); - result.id = data.vvolume_id.v; + result.type |= (uint64(uint32(data.vlocal_id().v)) << 32); + result.id = data.vvolume_id().v; }, [&](const MTPDinputDocumentFileLocation &data) { - const auto letter = data.vthumb_size.v.isEmpty() + const auto letter = data.vthumb_size().v.isEmpty() ? char(0) - : data.vthumb_size.v[0]; + : data.vthumb_size().v[0]; result.type |= (2ULL << 24); result.type |= (uint64(uint32(letter)) << 16); - result.id = data.vid.v; + result.id = data.vid().v; }, [&](const MTPDinputSecureFileLocation &data) { result.type |= (3ULL << 24); - result.id = data.vid.v; + result.id = data.vid().v; }, [&](const MTPDinputEncryptedFileLocation &data) { result.type |= (4ULL << 24); - result.id = data.vid.v; + result.id = data.vid().v; }, [&](const MTPDinputTakeoutFileLocation &data) { result.type |= (5ULL << 24); }, [&](const MTPDinputPhotoFileLocation &data) { - const auto letter = data.vthumb_size.v.isEmpty() + const auto letter = data.vthumb_size().v.isEmpty() ? char(0) - : data.vthumb_size.v[0]; + : data.vthumb_size().v[0]; result.type |= (6ULL << 24); result.type |= (uint64(uint32(letter)) << 16); - result.id = data.vid.v; + result.id = data.vid().v; }, [&](const MTPDinputPeerPhotoFileLocation &data) { const auto letter = data.is_big() ? char(1) : char(0); result.type |= (7ULL << 24); - result.type |= (uint64(uint32(data.vlocal_id.v)) << 32); + result.type |= (uint64(uint32(data.vlocal_id().v)) << 32); result.type |= (uint64(uint32(letter)) << 16); - result.id = data.vvolume_id.v; + result.id = data.vvolume_id().v; }, [&](const MTPDinputStickerSetThumb &data) { result.type |= (8ULL << 24); - result.type |= (uint64(uint32(data.vlocal_id.v)) << 32); - result.id = data.vvolume_id.v; + result.type |= (uint64(uint32(data.vlocal_id().v)) << 32); + result.id = data.vvolume_id().v; }); return result; } @@ -386,9 +386,12 @@ auto ApiWrap::fileRequest(const Data::FileLocation &location, int offset) { )).fail([=](RPCError &&result) { if (result.type() == qstr("TAKEOUT_FILE_EMPTY") && _otherDataProcess != nullptr) { - filePartDone(0, MTP_upload_file(MTP_storage_filePartial(), - MTP_int(0), - MTP_bytes(QByteArray()))); + filePartDone( + 0, + MTP_upload_file( + MTP_storage_filePartial(), + MTP_int(0), + MTP_bytes())); } else if (result.type() == qstr("LOCATION_INVALID") || result.type() == qstr("VERSION_INVALID")) { filePartUnavailable(); @@ -481,9 +484,9 @@ void ApiWrap::requestUserpicsCount() { _startProcess->info.userpicsCount = result.match( [](const MTPDphotos_photos &data) { - return int(data.vphotos.v.size()); + return int(data.vphotos().v.size()); }, [](const MTPDphotos_photosSlice &data) { - return data.vcount.v; + return data.vcount().v; }); sendNextStartRequest(); @@ -540,9 +543,9 @@ void ApiWrap::requestDialogsCount() { const auto count = result.match( [](const MTPDmessages_dialogs &data) { - return int(data.vdialogs.v.size()); + return int(data.vdialogs().v.size()); }, [](const MTPDmessages_dialogsSlice &data) { - return data.vcount.v; + return data.vcount().v; }, [](const MTPDmessages_dialogsNotModified &data) { return -1; }); @@ -654,7 +657,7 @@ void ApiWrap::startMainSession(FnMut done) { )).done([=, done = std::move(done)]( const MTPaccount_Takeout &result) mutable { _takeoutId = result.match([](const MTPDaccount_takeout &data) { - return data.vid.v; + return data.vid().v; }); done(); }).fail([=](RPCError &&result) { @@ -669,7 +672,7 @@ void ApiWrap::requestPersonalInfo(FnMut done) { Expects(result.type() == mtpc_userFull); const auto &full = result.c_userFull(); - if (full.vuser.type() == mtpc_user) { + if (full.vuser().type() == mtpc_user) { done(Data::ParsePersonalInfo(result)); } else { error("Bad user type."); @@ -726,9 +729,9 @@ void ApiWrap::requestUserpics( auto startInfo = result.match( [](const MTPDphotos_photos &data) { - return Data::UserpicsInfo{ data.vphotos.v.size() }; + return Data::UserpicsInfo{ data.vphotos().v.size() }; }, [](const MTPDphotos_photosSlice &data) { - return Data::UserpicsInfo{ data.vcount.v }; + return Data::UserpicsInfo{ data.vcount().v }; }); if (!_userpicsProcess->start(std::move(startInfo))) { return; @@ -746,7 +749,7 @@ void ApiWrap::handleUserpicsSlice(const MTPphotos_Photos &result) { _userpicsProcess->lastSlice = true; } loadUserpicsFiles(Data::ParseUserpicsSlice( - data.vphotos, + data.vphotos(), _userpicsProcess->processed)); }); } @@ -883,10 +886,10 @@ void ApiWrap::requestTopPeersSlice() { }, [](const MTPDcontacts_topPeersDisabled &data) { return true; }, [&](const MTPDcontacts_topPeers &data) { - for (const auto &category : data.vcategories.v) { + for (const auto &category : data.vcategories().v) { const auto loaded = category.match( [&](const MTPDtopPeerCategoryPeers &data) { - return offset + data.vpeers.v.size() >= data.vcount.v; + return offset + data.vpeers().v.size() >= data.vcount().v; }); if (!loaded) { return false; @@ -954,11 +957,11 @@ void ApiWrap::requestMessagesCount(int localSplitIndex) { const auto count = result.match( [](const MTPDmessages_messages &data) { - return data.vmessages.v.size(); + return data.vmessages().v.size(); }, [](const MTPDmessages_messagesSlice &data) { - return data.vcount.v; + return data.vcount().v; }, [](const MTPDmessages_channelMessages &data) { - return data.vcount.v; + return data.vcount().v; }, [](const MTPDmessages_messagesNotModified &data) { return -1; }); @@ -1068,16 +1071,16 @@ void ApiWrap::requestSinglePeerDialog() { )).done(std::move(doneSinglePeer)).send(); }; _settings->singlePeer.match([&](const MTPDinputPeerUser &data) { - requestUser(MTP_inputUser(data.vuser_id, data.vaccess_hash)); + requestUser(MTP_inputUser(data.vuser_id(), data.vaccess_hash())); }, [&](const MTPDinputPeerChat &data) { mainRequest(MTPmessages_GetChats( - MTP_vector(1, data.vchat_id) + MTP_vector(1, data.vchat_id()) )).done(std::move(doneSinglePeer)).send(); }, [&](const MTPDinputPeerChannel &data) { mainRequest(MTPchannels_GetChannels( MTP_vector( 1, - MTP_inputChannel(data.vchannel_id, data.vaccess_hash)) + MTP_inputChannel(data.vchannel_id(), data.vaccess_hash())) )).done(std::move(doneSinglePeer)).send(); }, [&](const MTPDinputPeerSelf &data) { requestUser(MTP_inputUserSelf()); @@ -1117,7 +1120,7 @@ void ApiWrap::requestDialogsSlice() { [](const MTPDmessages_dialogs &data) { return true; }, [](const MTPDmessages_dialogsSlice &data) { - return data.vdialogs.v.isEmpty(); + return data.vdialogs().v.isEmpty(); }, [](const MTPDmessages_dialogsNotModified &data) { return true; }); @@ -1201,21 +1204,21 @@ void ApiWrap::requestLeftChannelsSliceGeneric(FnMut done) { const auto process = _leftChannelsProcess.get(); process->offset += result.match( [](const auto &data) { - return int(data.vchats.v.size()); + return int(data.vchats().v.size()); }); process->fullCount = result.match( [](const MTPDmessages_chats &data) { - return int(data.vchats.v.size()); + return int(data.vchats().v.size()); }, [](const MTPDmessages_chatsSlice &data) { - return data.vcount.v; + return data.vcount().v; }); process->finished = result.match( [](const MTPDmessages_chats &data) { return true; }, [](const MTPDmessages_chatsSlice &data) { - return data.vchats.v.isEmpty(); + return data.vchats().v.isEmpty(); }); if (process->progress) { @@ -1289,9 +1292,9 @@ void ApiWrap::requestMessagesSlice() { } loadMessagesFiles(Data::ParseMessagesSlice( _chatProcess->context, - data.vmessages, - data.vusers, - data.vchats, + data.vmessages(), + data.vusers(), + data.vchats(), _chatProcess->info.relativePath)); }); }); @@ -1315,7 +1318,7 @@ void ApiWrap::requestChatMessages( splitRequest(splitIndex, MTPmessages_Search( MTP_flags(MTPmessages_Search::Flag::f_from_id), _chatProcess->info.input, - MTP_string(""), // query + MTP_string(), // query _user, MTP_inputMessagesFilterEmpty(), MTP_int(0), // min_date @@ -1646,7 +1649,7 @@ void ApiWrap::filePartDone(int offset, const MTPupload_File &result) { return; } const auto &data = result.c_upload_file(); - if (data.vbytes.v.isEmpty()) { + if (data.vbytes().v.isEmpty()) { if (_fileProcess->size > 0) { error("Empty bytes received in file part."); return; @@ -1665,7 +1668,7 @@ void ApiWrap::filePartDone(int offset, const MTPupload_File &result) { [](const Request &request) { return request.offset; }); Assert(i != end(requests)); - i->bytes = data.vbytes.v; + i->bytes = data.vbytes().v; auto &file = _fileProcess->file; while (!requests.empty() && !requests.front().bytes.isEmpty()) { diff --git a/Telegram/SourceFiles/export/view/export_view_settings.cpp b/Telegram/SourceFiles/export/view/export_view_settings.cpp index 5a798f4dd..5e01cd104 100644 --- a/Telegram/SourceFiles/export/view/export_view_settings.cpp +++ b/Telegram/SourceFiles/export/view/export_view_settings.cpp @@ -36,15 +36,15 @@ constexpr auto kMegabyte = 1024 * 1024; PeerId ReadPeerId(const MTPInputPeer &data) { return data.match([](const MTPDinputPeerUser &data) { - return peerFromUser(data.vuser_id.v); + return peerFromUser(data.vuser_id().v); }, [](const MTPDinputPeerUserFromMessage &data) { - return peerFromUser(data.vuser_id.v); + return peerFromUser(data.vuser_id().v); }, [](const MTPDinputPeerChat &data) { - return peerFromChat(data.vchat_id.v); + return peerFromChat(data.vchat_id().v); }, [](const MTPDinputPeerChannel &data) { - return peerFromChannel(data.vchannel_id.v); + return peerFromChannel(data.vchannel_id().v); }, [](const MTPDinputPeerChannelFromMessage &data) { - return peerFromChannel(data.vchannel_id.v); + return peerFromChannel(data.vchannel_id().v); }, [](const MTPDinputPeerSelf &data) { return Auth().userPeerId(); }, [](const MTPDinputPeerEmpty &data) { diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp index ec6752646..ab1104453 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp @@ -396,7 +396,7 @@ void InnerWidget::requestAdmins() { list ) | ranges::view::transform([&](const MTPChannelParticipant &p) { const auto userId = p.match([](const auto &data) { - return data.vuser_id.v; + return data.vuser_id().v; }); const auto canEdit = p.match([]( const MTPDchannelParticipantAdmin &data) { @@ -622,10 +622,10 @@ void InnerWidget::preloadMore(Direction direction) { requestId = 0; auto &results = result.c_channels_adminLogResults(); - _channel->owner().processUsers(results.vusers); - _channel->owner().processChats(results.vchats); + _channel->owner().processUsers(results.vusers()); + _channel->owner().processChats(results.vchats()); if (!loadedFlag) { - addEvents(direction, results.vevents.v); + addEvents(direction, results.vevents().v); } }).fail([this, &requestId, &loadedFlag](const RPCError &error) { requestId = 0; @@ -656,7 +656,7 @@ void InnerWidget::addEvents(Direction direction, const QVector user) { Expects(result.type() == mtpc_channels_channelParticipant); auto &participant = result.c_channels_channelParticipant(); - _channel->owner().processUsers(participant.vusers); - auto type = participant.vparticipant.type(); + _channel->owner().processUsers(participant.vusers()); + auto type = participant.vparticipant().type(); if (type == mtpc_channelParticipantBanned) { - auto &banned = participant.vparticipant.c_channelParticipantBanned(); - editRestrictions(false, banned.vbanned_rights); + auto &banned = participant.vparticipant().c_channelParticipantBanned(); + editRestrictions(false, banned.vbanned_rights()); } else { auto hasAdminRights = (type == mtpc_channelParticipantAdmin) || (type == mtpc_channelParticipantCreator); @@ -1239,7 +1239,7 @@ void InnerWidget::restrictUser( void InnerWidget::restrictUserDone(not_null user, const MTPChatBannedRights &rights) { Expects(rights.type() == mtpc_chatBannedRights); - if (rights.c_chatBannedRights().vflags.v) { + if (rights.c_chatBannedRights().vflags().v) { _admins.erase(std::remove(_admins.begin(), _admins.end(), user), _admins.end()); _adminsCanEdit.erase(std::remove(_adminsCanEdit.begin(), _adminsCanEdit.end(), user), _adminsCanEdit.end()); } diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_item.cpp b/Telegram/SourceFiles/history/admin_log/history_admin_log_item.cpp index 2ae54464d..8ecd796ad 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_item.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_item.cpp @@ -52,39 +52,44 @@ MTPMessage PrepareLogMessage( const auto removeFlags = MTPDmessageService::Flag::f_out | MTPDmessageService::Flag::f_post /* | MTPDmessageService::Flag::f_reply_to_msg_id*/; - const auto flags = message.vflags.v & ~removeFlags; + const auto flags = message.vflags().v & ~removeFlags; + const auto fromId = message.vfrom_id(); return MTP_messageService( MTP_flags(flags), MTP_int(newId), - message.vfrom_id, - message.vto_id, - message.vreply_to_msg_id, + MTP_int(message.vfrom_id().value_or_empty()), + message.vto_id(), + MTP_int(0), // reply_to_msg_id MTP_int(newDate), - message.vaction); + message.vaction()); }, [&](const MTPDmessage &message) { const auto removeFlags = MTPDmessage::Flag::f_out | MTPDmessage::Flag::f_post | MTPDmessage::Flag::f_reply_to_msg_id | MTPDmessage::Flag::f_edit_date | MTPDmessage::Flag::f_grouped_id; - const auto flags = message.vflags.v & ~removeFlags; + const auto flags = message.vflags().v & ~removeFlags; + const auto fwdFrom = message.vfwd_from(); + const auto media = message.vmedia(); + const auto markup = message.vreply_markup(); + const auto entities = message.ventities(); return MTP_message( MTP_flags(flags), MTP_int(newId), - message.vfrom_id, - message.vto_id, - message.vfwd_from, - message.vvia_bot_id, - message.vreply_to_msg_id, + MTP_int(message.vfrom_id().value_or_empty()), + message.vto_id(), + fwdFrom ? *fwdFrom : MTPMessageFwdHeader(), + MTP_int(message.vvia_bot_id().value_or_empty()), + MTP_int(0), // reply_to_msg_id MTP_int(newDate), - message.vmessage, - message.vmedia, - message.vreply_markup, - message.ventities, - message.vviews, - message.vedit_date, - MTP_string(""), - message.vgrouped_id); + message.vmessage(), + media ? *media : MTPMessageMedia(), + markup ? *markup : MTPReplyMarkup(), + entities ? *entities : MTPVector(), + MTP_int(message.vviews().value_or_empty()), + MTP_int(0), // edit_date + MTP_string(), + MTP_long(0)); // grouped_id }); } @@ -92,8 +97,9 @@ bool MediaCanHaveCaption(const MTPMessage &message) { if (message.type() != mtpc_message) { return false; } - auto &data = message.c_message(); - auto mediaType = data.has_media() ? data.vmedia.type() : mtpc_messageMediaEmpty; + const auto &data = message.c_message(); + const auto media = data.vmedia(); + const auto mediaType = media ? media->type() : mtpc_messageMediaEmpty; return (mediaType == mtpc_messageMediaDocument || mediaType == mtpc_messageMediaPhoto); } @@ -101,12 +107,11 @@ TextWithEntities ExtractEditedText(const MTPMessage &message) { if (message.type() != mtpc_message) { return TextWithEntities(); } - auto &data = message.c_message(); - auto text = TextUtilities::Clean(qs(data.vmessage)); - auto entities = data.has_entities() - ? TextUtilities::EntitiesFromMTP(data.ventities.v) - : EntitiesInText(); - return { text, entities }; + const auto &data = message.c_message(); + return { + TextUtilities::Clean(qs(data.vmessage())), + TextUtilities::EntitiesFromMTP(data.ventities().value_or_empty()) + }; } const auto CollectChanges = [](auto &phraseMap, auto plusFlags, auto minusFlags) { @@ -134,8 +139,8 @@ TextWithEntities GenerateAdminChangeText( using Flag = MTPDchatAdminRights::Flag; using Flags = MTPDchatAdminRights::Flags; - auto newFlags = newRights ? newRights->c_chatAdminRights().vflags.v : MTPDchatAdminRights::Flags(0); - auto prevFlags = prevRights ? prevRights->c_chatAdminRights().vflags.v : MTPDchatAdminRights::Flags(0); + auto newFlags = newRights ? newRights->c_chatAdminRights().vflags().v : MTPDchatAdminRights::Flags(0); + auto prevFlags = prevRights ? prevRights->c_chatAdminRights().vflags().v : MTPDchatAdminRights::Flags(0); auto result = tr::lng_admin_log_promoted(tr::now, lt_user, user, Ui::Text::WithEntities); auto useInviteLinkPhrase = channel->isMegagroup() && channel->anyoneCanAddMembers(); @@ -177,8 +182,8 @@ QString GenerateBannedChangeText( using Flag = MTPDchatBannedRights::Flag; using Flags = MTPDchatBannedRights::Flags; - auto newFlags = newRights ? newRights->c_chatBannedRights().vflags.v : Flags(0); - auto prevFlags = prevRights ? prevRights->c_chatBannedRights().vflags.v : Flags(0); + auto newFlags = newRights ? newRights->c_chatBannedRights().vflags().v : Flags(0); + auto prevFlags = prevRights ? prevRights->c_chatBannedRights().vflags().v : Flags(0); static auto phraseMap = std::map>{ { Flag::f_view_messages, tr::lng_admin_log_banned_view_messages }, { Flag::f_send_messages, tr::lng_admin_log_banned_send_messages }, @@ -202,8 +207,8 @@ TextWithEntities GenerateBannedChangeText( using Flag = MTPDchatBannedRights::Flag; using Flags = MTPDchatBannedRights::Flags; - auto newFlags = newRights ? newRights->c_chatBannedRights().vflags.v : Flags(0); - auto newUntil = newRights ? newRights->c_chatBannedRights().vuntil_date.v : TimeId(0); + auto newFlags = newRights ? newRights->c_chatBannedRights().vflags().v : Flags(0); + auto newUntil = newRights ? newRights->c_chatBannedRights().vuntil_date().v : TimeId(0); auto indefinitely = ChannelData::IsRestrictedForever(newUntil); if (newFlags & Flag::f_view_messages) { return tr::lng_admin_log_banned(tr::now, lt_user, user, Ui::Text::WithEntities); @@ -268,38 +273,38 @@ auto GenerateParticipantChangeTextInner( return tr::lng_admin_log_transferred( tr::now, lt_user, - GenerateUserString(data.vuser_id), + GenerateUserString(data.vuser_id()), Ui::Text::WithEntities); }, [&](const MTPDchannelParticipantAdmin &data) { - auto user = GenerateUserString(data.vuser_id); + auto user = GenerateUserString(data.vuser_id()); return GenerateAdminChangeText( channel, user, - &data.vadmin_rights, + &data.vadmin_rights(), (oldType == mtpc_channelParticipantAdmin) - ? &oldParticipant->c_channelParticipantAdmin().vadmin_rights + ? &oldParticipant->c_channelParticipantAdmin().vadmin_rights() : nullptr); }, [&](const MTPDchannelParticipantBanned &data) { - auto user = GenerateUserString(data.vuser_id); + auto user = GenerateUserString(data.vuser_id()); return GenerateBannedChangeText( user, - &data.vbanned_rights, + &data.vbanned_rights(), (oldType == mtpc_channelParticipantBanned) - ? &oldParticipant->c_channelParticipantBanned().vbanned_rights + ? &oldParticipant->c_channelParticipantBanned().vbanned_rights() : nullptr); }, [&](const auto &data) { - auto user = GenerateUserString(data.vuser_id); + auto user = GenerateUserString(data.vuser_id()); if (oldType == mtpc_channelParticipantAdmin) { return GenerateAdminChangeText( channel, user, nullptr, - &oldParticipant->c_channelParticipantAdmin().vadmin_rights); + &oldParticipant->c_channelParticipantAdmin().vadmin_rights()); } else if (oldType == mtpc_channelParticipantBanned) { return GenerateBannedChangeText( user, nullptr, - &oldParticipant->c_channelParticipantBanned().vbanned_rights); + &oldParticipant->c_channelParticipantBanned().vbanned_rights()); } return tr::lng_admin_log_invited(tr::now, lt_user, user, Ui::Text::WithEntities); }); @@ -364,11 +369,11 @@ void GenerateItems( Fn callback) { Expects(history->peer->isChannel()); - auto id = event.vid.v; - auto from = Auth().data().user(event.vuser_id.v); + auto id = event.vid().v; + auto from = Auth().data().user(event.vuser_id().v); auto channel = history->peer->asChannel(); - auto &action = event.vaction; - auto date = event.vdate.v; + auto &action = event.vaction(); + auto date = event.vdate().v; auto addPart = [&](not_null item) { return callback(OwnedItem(delegate, item)); }; @@ -392,13 +397,13 @@ void GenerateItems( lt_from, fromLinkText, lt_title, - qs(action.vnew_value)); + qs(action.vnew_value())); addSimpleServiceMessage(text); }; auto createChangeAbout = [&](const MTPDchannelAdminLogEventActionChangeAbout &action) { - auto newValue = qs(action.vnew_value); - auto oldValue = qs(action.vprev_value); + auto newValue = qs(action.vnew_value()); + auto oldValue = qs(action.vprev_value()); auto text = (channel->isMegagroup() ? (newValue.isEmpty() ? tr::lng_admin_log_removed_description_group @@ -422,8 +427,8 @@ void GenerateItems( }; auto createChangeUsername = [&](const MTPDchannelAdminLogEventActionChangeUsername &action) { - auto newValue = qs(action.vnew_value); - auto oldValue = qs(action.vprev_value); + auto newValue = qs(action.vnew_value()); + auto oldValue = qs(action.vprev_value()); auto text = (channel->isMegagroup() ? (newValue.isEmpty() ? tr::lng_admin_log_removed_link_group @@ -447,7 +452,7 @@ void GenerateItems( }; auto createChangePhoto = [&](const MTPDchannelAdminLogEventActionChangePhoto &action) { - action.vnew_photo.match([&](const MTPDphoto &data) { + action.vnew_photo().match([&](const MTPDphoto &data) { auto photo = Auth().data().processPhoto(data); auto text = (channel->isMegagroup() ? tr::lng_admin_log_changed_photo_group @@ -468,7 +473,7 @@ void GenerateItems( }; auto createToggleInvites = [&](const MTPDchannelAdminLogEventActionToggleInvites &action) { - auto enabled = (action.vnew_value.type() == mtpc_boolTrue); + auto enabled = (action.vnew_value().type() == mtpc_boolTrue); auto text = (enabled ? tr::lng_admin_log_invites_enabled : tr::lng_admin_log_invites_disabled); @@ -476,7 +481,7 @@ void GenerateItems( }; auto createToggleSignatures = [&](const MTPDchannelAdminLogEventActionToggleSignatures &action) { - auto enabled = (action.vnew_value.type() == mtpc_boolTrue); + auto enabled = (action.vnew_value().type() == mtpc_boolTrue); auto text = (enabled ? tr::lng_admin_log_signatures_enabled : tr::lng_admin_log_signatures_disabled); @@ -484,7 +489,7 @@ void GenerateItems( }; auto createUpdatePinned = [&](const MTPDchannelAdminLogEventActionUpdatePinned &action) { - if (action.vmessage.type() == mtpc_messageEmpty) { + if (action.vmessage().type() == mtpc_messageEmpty) { auto text = tr::lng_admin_log_unpinned_message(tr::now, lt_from, fromLinkText); addSimpleServiceMessage(text); } else { @@ -494,7 +499,7 @@ void GenerateItems( auto detachExistingItem = false; addPart(history->createItem( PrepareLogMessage( - action.vmessage, + action.vmessage(), idManager->next(), date), detachExistingItem)); @@ -502,8 +507,8 @@ void GenerateItems( }; auto createEditMessage = [&](const MTPDchannelAdminLogEventActionEditMessage &action) { - auto newValue = ExtractEditedText(action.vnew_message); - auto canHaveCaption = MediaCanHaveCaption(action.vnew_message); + auto newValue = ExtractEditedText(action.vnew_message()); + auto canHaveCaption = MediaCanHaveCaption(action.vnew_message()); auto text = (!canHaveCaption ? tr::lng_admin_log_edited_message : newValue.text.isEmpty() @@ -514,11 +519,11 @@ void GenerateItems( fromLinkText); addSimpleServiceMessage(text); - auto oldValue = ExtractEditedText(action.vprev_message); + auto oldValue = ExtractEditedText(action.vprev_message()); auto detachExistingItem = false; auto body = history->createItem( PrepareLogMessage( - action.vnew_message, + action.vnew_message(), idManager->next(), date), detachExistingItem); @@ -541,7 +546,7 @@ void GenerateItems( auto detachExistingItem = false; addPart(history->createItem( - PrepareLogMessage(action.vmessage, idManager->next(), date), + PrepareLogMessage(action.vmessage(), idManager->next(), date), detachExistingItem)); }; @@ -563,7 +568,7 @@ void GenerateItems( auto bodyFlags = Flag::f_entities | Flag::f_from_id; auto bodyReplyTo = 0; auto bodyViaBotId = 0; - auto bodyText = GenerateParticipantChangeText(channel, action.vparticipant); + auto bodyText = GenerateParticipantChangeText(channel, action.vparticipant()); addPart(history->owner().makeMessage(history, idManager->next(), bodyFlags, bodyReplyTo, bodyViaBotId, date, peerToUser(from->id), QString(), bodyText)); }; @@ -571,13 +576,13 @@ void GenerateItems( auto bodyFlags = Flag::f_entities | Flag::f_from_id; auto bodyReplyTo = 0; auto bodyViaBotId = 0; - auto bodyText = GenerateParticipantChangeText(channel, action.vnew_participant, &action.vprev_participant); + auto bodyText = GenerateParticipantChangeText(channel, action.vnew_participant(), &action.vprev_participant()); addPart(history->owner().makeMessage(history, idManager->next(), bodyFlags, bodyReplyTo, bodyViaBotId, date, peerToUser(from->id), QString(), bodyText)); }; auto createParticipantToggleAdmin = [&](const MTPDchannelAdminLogEventActionParticipantToggleAdmin &action) { - if (action.vnew_participant.type() == mtpc_channelParticipantAdmin - && action.vprev_participant.type() == mtpc_channelParticipantCreator) { + if (action.vnew_participant().type() == mtpc_channelParticipantAdmin + && action.vprev_participant().type() == mtpc_channelParticipantCreator) { // In case of ownership transfer we show that message in // the "User > Creator" part and skip the "Creator > Admin" part. return; @@ -585,12 +590,12 @@ void GenerateItems( auto bodyFlags = Flag::f_entities | Flag::f_from_id; auto bodyReplyTo = 0; auto bodyViaBotId = 0; - auto bodyText = GenerateParticipantChangeText(channel, action.vnew_participant, &action.vprev_participant); + auto bodyText = GenerateParticipantChangeText(channel, action.vnew_participant(), &action.vprev_participant()); addPart(history->owner().makeMessage(history, idManager->next(), bodyFlags, bodyReplyTo, bodyViaBotId, date, peerToUser(from->id), QString(), bodyText)); }; auto createChangeStickerSet = [&](const MTPDchannelAdminLogEventActionChangeStickerSet &action) { - auto set = action.vnew_stickerset; + auto set = action.vnew_stickerset(); auto removed = (set.type() == mtpc_inputStickerSetEmpty); if (removed) { auto text = tr::lng_admin_log_removed_stickers_group(tr::now, lt_from, fromLinkText); @@ -615,7 +620,7 @@ void GenerateItems( }; auto createTogglePreHistoryHidden = [&](const MTPDchannelAdminLogEventActionTogglePreHistoryHidden &action) { - auto hidden = (action.vnew_value.type() == mtpc_boolTrue); + auto hidden = (action.vnew_value().type() == mtpc_boolTrue); auto text = (hidden ? tr::lng_admin_log_history_made_hidden : tr::lng_admin_log_history_made_visible); @@ -626,7 +631,7 @@ void GenerateItems( auto bodyFlags = Flag::f_entities | Flag::f_from_id; auto bodyReplyTo = 0; auto bodyViaBotId = 0; - auto bodyText = GenerateDefaultBannedRightsChangeText(channel, action.vnew_banned_rights, action.vprev_banned_rights); + auto bodyText = GenerateDefaultBannedRightsChangeText(channel, action.vnew_banned_rights(), action.vprev_banned_rights()); addPart(history->owner().makeMessage(history, idManager->next(), bodyFlags, bodyReplyTo, bodyViaBotId, date, peerToUser(from->id), QString(), bodyText)); }; @@ -636,14 +641,14 @@ void GenerateItems( auto detachExistingItem = false; addPart(history->createItem( - PrepareLogMessage(action.vmessage, idManager->next(), date), + PrepareLogMessage(action.vmessage(), idManager->next(), date), detachExistingItem)); }; auto createChangeLinkedChat = [&](const MTPDchannelAdminLogEventActionChangeLinkedChat &action) { const auto broadcast = channel->isBroadcast(); - const auto was = history->owner().channelLoaded(action.vprev_value.v); - const auto now = history->owner().channelLoaded(action.vnew_value.v); + const auto was = history->owner().channelLoaded(action.vprev_value().v); + const auto now = history->owner().channelLoaded(action.vnew_value().v); if (!now) { auto text = (broadcast ? tr::lng_admin_log_removed_linked_chat @@ -672,9 +677,9 @@ void GenerateItems( }; auto createChangeLocation = [&](const MTPDchannelAdminLogEventActionChangeLocation &action) { - action.vnew_value.match([&](const MTPDchannelLocation &data) { - const auto address = qs(data.vaddress); - const auto link = data.vgeo_point.match([&](const MTPDgeoPoint &data) { + action.vnew_value().match([&](const MTPDchannelLocation &data) { + const auto address = qs(data.vaddress()); + const auto link = data.vgeo_point().match([&](const MTPDgeoPoint &data) { return textcmdLink( LocationClickHandler::Url(Data::LocationPoint(data)), address); diff --git a/Telegram/SourceFiles/history/history.cpp b/Telegram/SourceFiles/history/history.cpp index 75588506d..a2e7d74e8 100644 --- a/Telegram/SourceFiles/history/history.cpp +++ b/Telegram/SourceFiles/history/history.cpp @@ -374,27 +374,27 @@ bool History::updateSendActionNeedsAnimating( emplaceAction( Type::UploadVideo, kStatusShowClientsideUploadVideo, - data.vprogress.v); + data.vprogress().v); }, [&](const MTPDsendMessageUploadAudioAction &data) { emplaceAction( Type::UploadVoice, kStatusShowClientsideUploadVoice, - data.vprogress.v); + data.vprogress().v); }, [&](const MTPDsendMessageUploadRoundAction &data) { emplaceAction( Type::UploadRound, kStatusShowClientsideUploadRound, - data.vprogress.v); + data.vprogress().v); }, [&](const MTPDsendMessageUploadPhotoAction &data) { emplaceAction( Type::UploadPhoto, kStatusShowClientsideUploadPhoto, - data.vprogress.v); + data.vprogress().v); }, [&](const MTPDsendMessageUploadDocumentAction &data) { emplaceAction( Type::UploadFile, kStatusShowClientsideUploadFile, - data.vprogress.v); + data.vprogress().v); }, [&](const MTPDsendMessageGamePlayAction &) { const auto i = _sendActions.find(user); if ((i == end(_sendActions)) @@ -587,10 +587,7 @@ HistoryItem *History::createItem( result->removeMainView(); } if (message.type() == mtpc_message) { - const auto media = message.c_message().has_media() - ? &message.c_message().vmedia - : nullptr; - result->updateSentMedia(media); + result->updateSentMedia(message.c_message().vmedia()); } return result; } @@ -838,9 +835,9 @@ void History::addUnreadMentionsSlice(const MTPmessages_Messages &result) { auto count = 0; auto messages = (const QVector*)nullptr; auto getMessages = [&](auto &list) { - owner().processUsers(list.vusers); - owner().processChats(list.vchats); - return &list.vmessages.v; + owner().processUsers(list.vusers()); + owner().processChats(list.vchats()); + return &list.vmessages().v; }; switch (result.type()) { case mtpc_messages_messages: { @@ -852,14 +849,14 @@ void History::addUnreadMentionsSlice(const MTPmessages_Messages &result) { case mtpc_messages_messagesSlice: { auto &d = result.c_messages_messagesSlice(); messages = getMessages(d); - count = d.vcount.v; + count = d.vcount().v; } break; case mtpc_messages_channelMessages: { LOG(("API Error: unexpected messages.channelMessages! (History::addUnreadMentionsSlice)")); auto &d = result.c_messages_channelMessages(); messages = getMessages(d); - count = d.vcount.v; + count = d.vcount().v; } break; case mtpc_messages_messagesNotModified: { @@ -1019,14 +1016,14 @@ void History::applyMessageChanges( void History::applyServiceChanges( not_null item, const MTPDmessageService &data) { - auto &action = data.vaction; + auto &action = data.vaction(); switch (action.type()) { case mtpc_messageActionChatAddUser: { auto &d = action.c_messageActionChatAddUser(); if (const auto megagroup = peer->asMegagroup()) { const auto mgInfo = megagroup->mgInfo.get(); Assert(mgInfo != nullptr); - for (const auto &userId : d.vusers.v) { + for (const auto &userId : d.vusers().v) { if (const auto user = owner().userLoaded(userId.v)) { if (!base::contains(mgInfo->lastParticipants, user)) { mgInfo->lastParticipants.push_front(user); @@ -1073,7 +1070,7 @@ void History::applyServiceChanges( case mtpc_messageActionChatDeleteUser: { auto &d = action.c_messageActionChatDeleteUser(); - auto uid = d.vuser_id.v; + auto uid = d.vuser_id().v; if (lastKeyboardFrom == peerFromUser(uid)) { clearLastKeyboard(); } @@ -1114,8 +1111,8 @@ void History::applyServiceChanges( case mtpc_messageActionChatEditPhoto: { auto &d = action.c_messageActionChatEditPhoto(); - d.vphoto.match([&](const MTPDphoto &data) { - const auto &sizes = data.vsizes.v; + d.vphoto().match([&](const MTPDphoto &data) { + const auto &sizes = data.vsizes().v; if (!sizes.isEmpty()) { auto photo = owner().processPhoto(data); photo->peer = peer; @@ -1124,18 +1121,18 @@ void History::applyServiceChanges( const MTPFileLocation *smallLoc = nullptr; const MTPFileLocation *bigLoc = nullptr; switch (smallSize.type()) { - case mtpc_photoSize: smallLoc = &smallSize.c_photoSize().vlocation; break; - case mtpc_photoCachedSize: smallLoc = &smallSize.c_photoCachedSize().vlocation; break; + case mtpc_photoSize: smallLoc = &smallSize.c_photoSize().vlocation(); break; + case mtpc_photoCachedSize: smallLoc = &smallSize.c_photoCachedSize().vlocation(); break; } switch (bigSize.type()) { - case mtpc_photoSize: bigLoc = &bigSize.c_photoSize().vlocation; break; - case mtpc_photoCachedSize: bigLoc = &bigSize.c_photoCachedSize().vlocation; break; + case mtpc_photoSize: bigLoc = &bigSize.c_photoSize().vlocation(); break; + case mtpc_photoCachedSize: bigLoc = &bigSize.c_photoCachedSize().vlocation(); break; } if (smallLoc && bigLoc) { if (const auto chat = peer->asChat()) { - chat->setPhoto(photo->id, MTP_chatPhoto(*smallLoc, *bigLoc, data.vdc_id)); + chat->setPhoto(photo->id, MTP_chatPhoto(*smallLoc, *bigLoc, data.vdc_id())); } else if (const auto channel = peer->asChannel()) { - channel->setPhoto(photo->id, MTP_chatPhoto(*smallLoc, *bigLoc, data.vdc_id)); + channel->setPhoto(photo->id, MTP_chatPhoto(*smallLoc, *bigLoc, data.vdc_id())); } peer->loadUserpic(); } @@ -1152,7 +1149,7 @@ void History::applyServiceChanges( case mtpc_messageActionChatEditTitle: { auto &d = action.c_messageActionChatEditTitle(); if (auto chat = peer->asChat()) { - chat->setName(qs(d.vtitle)); + chat->setName(qs(d.vtitle())); } } break; @@ -1160,7 +1157,7 @@ void History::applyServiceChanges( if (const auto chat = peer->asChat()) { chat->addFlags(MTPDchat::Flag::f_deactivated); const auto &d = action.c_messageActionChatMigrateTo(); - if (const auto channel = owner().channelLoaded(d.vchannel_id.v)) { + if (const auto channel = owner().channelLoaded(d.vchannel_id().v)) { Data::ApplyMigration(chat, channel); } } @@ -1170,15 +1167,17 @@ void History::applyServiceChanges( if (const auto channel = peer->asChannel()) { channel->addFlags(MTPDchannel::Flag::f_megagroup); const auto &d = action.c_messageActionChannelMigrateFrom(); - if (const auto chat = owner().chatLoaded(d.vchat_id.v)) { + if (const auto chat = owner().chatLoaded(d.vchat_id().v)) { Data::ApplyMigration(chat, channel); } } } break; case mtpc_messageActionPinMessage: { - if (data.has_reply_to_msg_id() && item) { - item->history()->peer->setPinnedMessageId(data.vreply_to_msg_id.v); + if (const auto replyToMsgId = data.vreply_to_msg_id()) { + if (item) { + item->history()->peer->setPinnedMessageId(replyToMsgId->v); + } } } break; @@ -1848,7 +1847,7 @@ void History::setFolderPointer(Data::Folder *folder) { } void History::applyPinnedUpdate(const MTPDupdateDialogPinned &data) { - const auto folderId = data.has_folder_id() ? data.vfolder_id.v : 0; + const auto folderId = data.vfolder_id().value_or_empty(); if (!folderKnown()) { if (folderId) { setFolder(owner().folder(folderId)); @@ -2401,9 +2400,9 @@ void History::setFakeChatListMessageFrom(const MTPmessages_Messages &data) { const MTPDmessages_messagesNotModified &) { return static_cast(nullptr); }, [&](const auto &data) { - for (const auto &message : data.vmessages.v) { + for (const auto &message : data.vmessages().v) { const auto id = message.match([](const auto &data) { - return data.vid.v; + return data.vid().v; }); if (id != last->id) { return &message; @@ -2500,27 +2499,28 @@ bool History::isServerSideUnread(not_null item) const { void History::applyDialog( Data::Folder *requestFolder, const MTPDdialog &data) { - const auto folder = data.has_folder_id() - ? (data.vfolder_id.v - ? owner().folder(data.vfolder_id.v).get() - : nullptr) - : requestFolder; + const auto folderId = data.vfolder_id(); + const auto folder = !folderId + ? requestFolder + : folderId->v + ? owner().folder(folderId->v).get() + : nullptr; applyDialogFields( folder, - data.vunread_count.v, - data.vread_inbox_max_id.v, - data.vread_outbox_max_id.v); - applyDialogTopMessage(data.vtop_message.v); + data.vunread_count().v, + data.vread_inbox_max_id().v, + data.vread_outbox_max_id().v); + applyDialogTopMessage(data.vtop_message().v); setUnreadMark(data.is_unread_mark()); - setUnreadMentionsCount(data.vunread_mentions_count.v); + setUnreadMentionsCount(data.vunread_mentions_count().v); if (const auto channel = peer->asChannel()) { - if (data.has_pts()) { - channel->ptsReceived(data.vpts.v); + if (const auto pts = data.vpts()) { + channel->ptsReceived(pts->v); } if (!channel->amCreator()) { const auto topMessageId = FullMsgId( peerToChannel(channel->id), - data.vtop_message.v); + data.vtop_message().v); if (const auto item = owner().message(topMessageId)) { if (item->date() <= channel->date) { session().api().requestSelfParticipant(channel); @@ -2529,11 +2529,12 @@ void History::applyDialog( } } owner().applyNotifySetting( - MTP_notifyPeer(data.vpeer), - data.vnotify_settings); + MTP_notifyPeer(data.vpeer()), + data.vnotify_settings()); - if (data.has_draft() && data.vdraft.type() == mtpc_draftMessage) { - Data::applyPeerCloudDraft(peer->id, data.vdraft.c_draftMessage()); + const auto draft = data.vdraft(); + if (draft && draft->type() == mtpc_draftMessage) { + Data::applyPeerCloudDraft(peer->id, draft->c_draftMessage()); } session().api().dialogEntryApplied(this); } diff --git a/Telegram/SourceFiles/history/history_item.cpp b/Telegram/SourceFiles/history/history_item.cpp index f40647836..a93091d95 100644 --- a/Telegram/SourceFiles/history/history_item.cpp +++ b/Telegram/SourceFiles/history/history_item.cpp @@ -88,47 +88,49 @@ MediaCheckResult CheckMessageMedia(const MTPMessageMedia &media) { }, [](const MTPDmessageMediaContact &) { return Result::Good; }, [](const MTPDmessageMediaGeo &data) { - return data.vgeo.match([](const MTPDgeoPoint &) { + return data.vgeo().match([](const MTPDgeoPoint &) { return Result::Good; }, [](const MTPDgeoPointEmpty &) { return Result::Empty; }); }, [](const MTPDmessageMediaVenue &data) { - return data.vgeo.match([](const MTPDgeoPoint &) { + return data.vgeo().match([](const MTPDgeoPoint &) { return Result::Good; }, [](const MTPDgeoPointEmpty &) { return Result::Empty; }); }, [](const MTPDmessageMediaGeoLive &data) { - return data.vgeo.match([](const MTPDgeoPoint &) { + return data.vgeo().match([](const MTPDgeoPoint &) { return Result::Good; }, [](const MTPDgeoPointEmpty &) { return Result::Empty; }); }, [](const MTPDmessageMediaPhoto &data) { - if (data.has_ttl_seconds()) { + const auto photo = data.vphoto(); + if (data.vttl_seconds()) { return Result::HasTimeToLive; - } else if (!data.has_photo()) { + } else if (!photo) { return Result::Empty; } - return data.vphoto.match([](const MTPDphoto &) { + return photo->match([](const MTPDphoto &) { return Result::Good; }, [](const MTPDphotoEmpty &) { return Result::Empty; }); }, [](const MTPDmessageMediaDocument &data) { - if (data.has_ttl_seconds()) { + const auto document = data.vdocument(); + if (data.vttl_seconds()) { return Result::HasTimeToLive; - } else if (!data.has_document()) { + } else if (!document) { return Result::Empty; } - return data.vdocument.match([](const MTPDdocument &) { + return document->match([](const MTPDdocument &) { return Result::Good; }, [](const MTPDdocumentEmpty &) { return Result::Empty; }); }, [](const MTPDmessageMediaWebPage &data) { - return data.vwebpage.match([](const MTPDwebPage &) { + return data.vwebpage().match([](const MTPDwebPage &) { return Result::Good; }, [](const MTPDwebPageEmpty &) { return Result::Good; @@ -138,7 +140,7 @@ MediaCheckResult CheckMessageMedia(const MTPMessageMedia &media) { return Result::Unsupported; }); }, [](const MTPDmessageMediaGame &data) { - return data.vgame.match([](const MTPDgame &) { + return data.vgame().match([](const MTPDgame &) { return Result::Good; }); }, [](const MTPDmessageMediaInvoice &) { @@ -814,35 +816,36 @@ not_null HistoryItem::Create( not_null history, const MTPMessage &message) { return message.match([&](const MTPDmessage &data) -> HistoryItem* { - const auto checked = data.has_media() - ? CheckMessageMedia(data.vmedia) + const auto media = data.vmedia(); + const auto checked = media + ? CheckMessageMedia(*media) : MediaCheckResult::Good; if (checked == MediaCheckResult::Unsupported) { return CreateUnsupportedMessage( history, - data.vid.v, - data.vflags.v, - data.vreply_to_msg_id.v, - data.vvia_bot_id.v, - data.vdate.v, - data.vfrom_id.v); + data.vid().v, + data.vflags().v, + data.vreply_to_msg_id().value_or_empty(), + data.vvia_bot_id().value_or_empty(), + data.vdate().v, + data.vfrom_id().value_or_empty()); } else if (checked == MediaCheckResult::Empty) { const auto text = HistoryService::PreparedText { tr::lng_message_empty(tr::now) }; return history->owner().makeServiceMessage( history, - data.vid.v, - data.vdate.v, + data.vid().v, + data.vdate().v, text, - data.vflags.v, - data.has_from_id() ? data.vfrom_id.v : UserId(0)); + data.vflags().v, + data.vfrom_id().value_or_empty()); } else if (checked == MediaCheckResult::HasTimeToLive) { return history->owner().makeServiceMessage(history, data); } return history->owner().makeMessage(history, data); }, [&](const MTPDmessageService &data) -> HistoryItem* { - if (data.vaction.type() == mtpc_messageActionPhoneCall) { + if (data.vaction().type() == mtpc_messageActionPhoneCall) { return history->owner().makeMessage(history, data); } return history->owner().makeServiceMessage(history, data); @@ -850,6 +853,6 @@ not_null HistoryItem::Create( const auto text = HistoryService::PreparedText{ tr::lng_message_empty(tr::now) }; - return history->owner().makeServiceMessage(history, data.vid.v, TimeId(0), text); + return history->owner().makeServiceMessage(history, data.vid().v, TimeId(0), text); }); } diff --git a/Telegram/SourceFiles/history/history_item_components.cpp b/Telegram/SourceFiles/history/history_item_components.cpp index dc01a8d44..b198a25f5 100644 --- a/Telegram/SourceFiles/history/history_item_components.cpp +++ b/Telegram/SourceFiles/history/history_item_components.cpp @@ -777,46 +777,46 @@ void HistoryMessageReplyMarkup::createFromButtonRows( for (const auto &row : list) { row.match([&](const MTPDkeyboardButtonRow &data) { auto row = std::vector