init
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Close stale issues and PRs / stale (push) Successful in 13s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Close stale issues and PRs / stale (push) Successful in 13s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
This commit is contained in:
58
Telegram/SourceFiles/data/data_peer_id.cpp
Normal file
58
Telegram/SourceFiles/data/data_peer_id.cpp
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user