| 847 | } |
| 848 | |
| 849 | not_null<PeerData*> Session::processChat(const MTPChat &data) { |
| 850 | const auto result = data.match([&](const MTPDchat &data) { |
| 851 | return peer(peerFromChat(data.vid().v)); |
| 852 | }, [&](const MTPDchatForbidden &data) { |
| 853 | return peer(peerFromChat(data.vid().v)); |
| 854 | }, [&](const MTPDchatEmpty &data) { |
| 855 | return peer(peerFromChat(data.vid().v)); |
| 856 | }, [&](const MTPDchannel &data) { |
| 857 | return peer(peerFromChannel(data.vid().v)); |
| 858 | }, [&](const MTPDchannelForbidden &data) { |
| 859 | return peer(peerFromChannel(data.vid().v)); |
| 860 | }); |
| 861 | auto minimal = false; |
| 862 | |
| 863 | using UpdateFlag = Data::PeerUpdate::Flag; |
| 864 | auto flags = UpdateFlag::None | UpdateFlag::None; |
| 865 | data.match([&](const MTPDchat &data) { |
| 866 | const auto chat = result->asChat(); |
| 867 | |
| 868 | const auto canAddMembers = chat->canAddMembers(); |
| 869 | if (chat->version() < data.vversion().v) { |
| 870 | chat->setVersion(data.vversion().v); |
| 871 | chat->invalidateParticipants(); |
| 872 | } |
| 873 | |
| 874 | chat->setName(qs(data.vtitle())); |
| 875 | chat->setPhoto(data.vphoto()); |
| 876 | chat->date = data.vdate().v; |
| 877 | |
| 878 | if (const auto rights = data.vadmin_rights()) { |
| 879 | chat->setAdminRights(ChatAdminRightsInfo(*rights).flags); |
| 880 | } else { |
| 881 | chat->setAdminRights(ChatAdminRights()); |
| 882 | } |
| 883 | if (const auto rights = data.vdefault_banned_rights()) { |
| 884 | chat->setDefaultRestrictions(ChatRestrictionsInfo(*rights).flags); |
| 885 | } else { |
| 886 | chat->setDefaultRestrictions(ChatRestrictions()); |
| 887 | } |
| 888 | |
| 889 | if (const auto migratedTo = data.vmigrated_to()) { |
| 890 | migratedTo->match([&](const MTPDinputChannel &input) { |
| 891 | const auto channel = this->channel(input.vchannel_id().v); |
| 892 | channel->addFlags(ChannelDataFlag::Megagroup); |
| 893 | if (!channel->accessHash()) { |
| 894 | channel->setAccessHash(input.vaccess_hash().v); |
| 895 | } |
| 896 | ApplyMigration(chat, channel); |
| 897 | }, [](const MTPDinputChannelFromMessage &) { |
| 898 | LOG(("API Error: " |
| 899 | "migrated_to contains channel from message.")); |
| 900 | }, [](const MTPDinputChannelEmpty &) { |
| 901 | }); |
| 902 | } |
| 903 | |
| 904 | using Flag = ChatDataFlag; |
| 905 | const auto flagsMask = Flag::Left |
| 906 | | Flag::Creator |
no test coverage detected