| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /*
- This file is part of Telegram Desktop,
- the official desktop application for the Telegram messaging service.
- For license and copyright information please follow this link:
- https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
- */
- #include "data/data_peer_id.h"
- PeerId peerFromMTP(const MTPPeer &peer) {
- return peer.match([](const MTPDpeerUser &data) {
- return peerFromUser(data.vuser_id());
- }, [](const MTPDpeerChat &data) {
- return peerFromChat(data.vchat_id());
- }, [](const MTPDpeerChannel &data) {
- return peerFromChannel(data.vchannel_id());
- });
- }
- MTPpeer peerToMTP(PeerId id) {
- if (peerIsUser(id)) {
- return MTP_peerUser(peerToBareMTPInt(id));
- } else if (peerIsChat(id)) {
- return MTP_peerChat(peerToBareMTPInt(id));
- } else if (peerIsChannel(id)) {
- return MTP_peerChannel(peerToBareMTPInt(id));
- }
- return MTP_peerUser(MTP_long(0));
- }
- PeerId DeserializePeerId(quint64 serialized) {
- const auto flag = (UserId::kReservedBit << 48);
- const auto legacy = !(serialized & (UserId::kReservedBit << 48));
- if (!legacy) {
- return PeerId(serialized & (~flag));
- }
- constexpr auto PeerIdMask = uint64(0xFFFFFFFFULL);
- constexpr auto PeerIdTypeMask = uint64(0xF00000000ULL);
- constexpr auto PeerIdUserShift = uint64(0x000000000ULL);
- constexpr auto PeerIdChatShift = uint64(0x100000000ULL);
- constexpr auto PeerIdChannelShift = uint64(0x200000000ULL);
- constexpr auto PeerIdFakeShift = uint64(0xF00000000ULL);
- return ((serialized & PeerIdTypeMask) == PeerIdUserShift)
- ? peerFromUser(UserId(serialized & PeerIdMask))
- : ((serialized & PeerIdTypeMask) == PeerIdChatShift)
- ? peerFromChat(ChatId(serialized & PeerIdMask))
- : ((serialized & PeerIdTypeMask) == PeerIdChannelShift)
- ? peerFromChannel(ChannelId(serialized & PeerIdMask))
- : ((serialized & PeerIdTypeMask) == PeerIdFakeShift)
- ? PeerId(FakeChatId(serialized & PeerIdMask))
- : PeerId(0);
- }
- quint64 SerializePeerId(PeerId id) {
- Expects(!(id.value & (UserId::kReservedBit << 48)));
- return id.value | (UserId::kReservedBit << 48);
- }
|