TDLib 1.8.0: Headers and sender -> sender_id changes
This commit is contained in:
parent
3a8615dbe3
commit
fcbf9d65f1
16 changed files with 930 additions and 732 deletions
|
@ -37,7 +37,7 @@ Row {
|
||||||
|
|
||||||
onInReplyToMessageChanged: {
|
onInReplyToMessageChanged: {
|
||||||
if (inReplyToMessage) {
|
if (inReplyToMessage) {
|
||||||
inReplyToUserText.text = (inReplyToMessage.sender["@type"] === "messageSenderChat" ? page.chatInformation.title : (inReplyToRow.inReplyToMessage.sender.user_id !== inReplyToRow.myUserId) ? Emoji.emojify(Functions.getUserName(tdLibWrapper.getUserInformation(inReplyToRow.inReplyToMessage.sender.user_id)), inReplyToUserText.font.pixelSize) : qsTr("You"));
|
inReplyToUserText.text = (inReplyToMessage.sender_id["@type"] === "messageSenderChat" ? page.chatInformation.title : (inReplyToRow.inReplyToMessage.sender_id.user_id !== inReplyToRow.myUserId) ? Emoji.emojify(Functions.getUserName(tdLibWrapper.getUserInformation(inReplyToRow.inReplyToMessage.sender_id.user_id)), inReplyToUserText.font.pixelSize) : qsTr("You"));
|
||||||
inReplyToMessageText.text = Emoji.emojify(Functions.getMessageText(inReplyToRow.inReplyToMessage, true, inReplyToRow.myUserId, false), inReplyToMessageText.font.pixelSize);
|
inReplyToMessageText.text = Emoji.emojify(Functions.getMessageText(inReplyToRow.inReplyToMessage, true, inReplyToRow.myUserId, false), inReplyToMessageText.font.pixelSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,8 +32,8 @@ ListItem {
|
||||||
property int messageViewCount
|
property int messageViewCount
|
||||||
property var myMessage
|
property var myMessage
|
||||||
property bool canReplyToMessage
|
property bool canReplyToMessage
|
||||||
readonly property bool isAnonymous: myMessage.sender["@type"] === "messageSenderChat"
|
readonly property bool isAnonymous: myMessage.sender_id["@type"] === "messageSenderChat"
|
||||||
readonly property var userInformation: tdLibWrapper.getUserInformation(myMessage.sender.user_id)
|
readonly property var userInformation: tdLibWrapper.getUserInformation(myMessage.sender_id.user_id)
|
||||||
property QtObject precalculatedValues: ListView.view.precalculatedValues
|
property QtObject precalculatedValues: ListView.view.precalculatedValues
|
||||||
readonly property color textColor: isOwnMessage ? Theme.highlightColor : Theme.primaryColor
|
readonly property color textColor: isOwnMessage ? Theme.highlightColor : Theme.primaryColor
|
||||||
readonly property int textAlign: isOwnMessage ? Text.AlignRight : Text.AlignLeft
|
readonly property int textAlign: isOwnMessage ? Text.AlignRight : Text.AlignLeft
|
||||||
|
@ -41,7 +41,7 @@ ListItem {
|
||||||
readonly property bool isSelected: messageListItem.precalculatedValues.pageIsSelecting && page.selectedMessages.some(function(existingMessage) {
|
readonly property bool isSelected: messageListItem.precalculatedValues.pageIsSelecting && page.selectedMessages.some(function(existingMessage) {
|
||||||
return existingMessage.id === messageId
|
return existingMessage.id === messageId
|
||||||
});
|
});
|
||||||
readonly property bool isOwnMessage: page.myUserId === myMessage.sender.user_id
|
readonly property bool isOwnMessage: page.myUserId === myMessage.sender_id.user_id
|
||||||
readonly property bool canDeleteMessage: myMessage.can_be_deleted_for_all_users || (myMessage.can_be_deleted_only_for_self && myMessage.chat_id === page.myUserId)
|
readonly property bool canDeleteMessage: myMessage.can_be_deleted_for_all_users || (myMessage.can_be_deleted_only_for_self && myMessage.chat_id === page.myUserId)
|
||||||
property bool hasContentComponent
|
property bool hasContentComponent
|
||||||
property bool additionalOptionsOpened
|
property bool additionalOptionsOpened
|
||||||
|
|
|
@ -25,9 +25,9 @@ import "../js/debug.js" as Debug
|
||||||
Item {
|
Item {
|
||||||
id: messageListItem
|
id: messageListItem
|
||||||
property var myMessage: display
|
property var myMessage: display
|
||||||
property bool senderIsUser: myMessage.sender["@type"] === "messageSenderUser"
|
property bool senderIsUser: myMessage.sender_id["@type"] === "messageSenderUser"
|
||||||
property var userInformation: senderIsUser ? tdLibWrapper.getUserInformation(myMessage.sender.user_id) : null
|
property var userInformation: senderIsUser ? tdLibWrapper.getUserInformation(myMessage.sender_id.user_id) : null
|
||||||
property bool isOwnMessage: senderIsUser && chatPage.myUserId === myMessage.sender.user_id
|
property bool isOwnMessage: senderIsUser && chatPage.myUserId === myMessage.sender_id.user_id
|
||||||
property var linkedMessage
|
property var linkedMessage
|
||||||
height: backgroundRectangle.height + Theme.paddingMedium
|
height: backgroundRectangle.height + Theme.paddingMedium
|
||||||
|
|
||||||
|
|
|
@ -32,9 +32,9 @@ Flickable {
|
||||||
|
|
||||||
property var overlayMessage;
|
property var overlayMessage;
|
||||||
property bool showHeader: true
|
property bool showHeader: true
|
||||||
readonly property var userInformation: tdLibWrapper.getUserInformation(overlayMessage.sender.user_id);
|
readonly property var userInformation: tdLibWrapper.getUserInformation(overlayMessage.sender_id.user_id);
|
||||||
readonly property bool isOwnMessage: tdLibWrapper.getUserInformation().id === overlayMessage.sender.user_id;
|
readonly property bool isOwnMessage: tdLibWrapper.getUserInformation().id === overlayMessage.sender_id.user_id;
|
||||||
readonly property bool isAnonymous: overlayMessage.sender["@type"] === "messageSenderChat"
|
readonly property bool isAnonymous: overlayMessage.sender_id["@type"] === "messageSenderChat"
|
||||||
property bool hasContentComponent: overlayMessage.content && chatView.delegateMessagesContent.indexOf(overlayMessage.content['@type']) > -1
|
property bool hasContentComponent: overlayMessage.content && chatView.delegateMessagesContent.indexOf(overlayMessage.content['@type']) > -1
|
||||||
signal requestClose;
|
signal requestClose;
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ Flickable {
|
||||||
var otherChatInformation = tdLibWrapper.getChat(forwardInformation.origin.chat_id);
|
var otherChatInformation = tdLibWrapper.getChat(forwardInformation.origin.chat_id);
|
||||||
return Emoji.emojify(otherChatInformation.title, fontSize);
|
return Emoji.emojify(otherChatInformation.title, fontSize);
|
||||||
case "messageForwardOriginUser":
|
case "messageForwardOriginUser":
|
||||||
var otherUserInformation = tdLibWrapper.getUserInformation(forwardInformation.origin.sender.user_id);
|
var otherUserInformation = tdLibWrapper.getUserInformation(forwardInformation.origin.sender_id.user_id);
|
||||||
return Emoji.emojify(Functions.getUserName(otherUserInformation), fontSize);
|
return Emoji.emojify(Functions.getUserName(otherUserInformation), fontSize);
|
||||||
default:
|
default:
|
||||||
return Emoji.emojify(forwardInformation.origin.sender_name, fontSize);
|
return Emoji.emojify(forwardInformation.origin.sender_name, fontSize);
|
||||||
|
|
|
@ -33,7 +33,7 @@ Item {
|
||||||
onPinnedMessageChanged: {
|
onPinnedMessageChanged: {
|
||||||
if (pinnedMessage) {
|
if (pinnedMessage) {
|
||||||
Debug.log("[ChatPage] Activating pinned message");
|
Debug.log("[ChatPage] Activating pinned message");
|
||||||
var messageUserText = (pinnedMessage.sender.user_id !== chatPage.myUserId) ? Emoji.emojify(Functions.getUserName(tdLibWrapper.getUserInformation(pinnedMessage.sender.user_id)), pinnedMessageUserText.font.pixelSize) : qsTr("You");
|
var messageUserText = (pinnedMessage.sender_id.user_id !== chatPage.myUserId) ? Emoji.emojify(Functions.getUserName(tdLibWrapper.getUserInformation(pinnedMessage.sender_id.user_id)), pinnedMessageUserText.font.pixelSize) : qsTr("You");
|
||||||
pinnedMessageUserText.text = (messageUserText === "" ? qsTr("Pinned Message") : messageUserText );
|
pinnedMessageUserText.text = (messageUserText === "" ? qsTr("Pinned Message") : messageUserText );
|
||||||
pinnedMessageText.text = Emoji.emojify(Functions.getMessageText(pinnedMessage, true, chatPage.myUserId, false), pinnedMessageText.font.pixelSize);
|
pinnedMessageText.text = Emoji.emojify(Functions.getMessageText(pinnedMessage, true, chatPage.myUserId, false), pinnedMessageText.font.pixelSize);
|
||||||
pinnedMessageItem.visible = true;
|
pinnedMessageItem.visible = true;
|
||||||
|
|
|
@ -36,7 +36,7 @@ function getMessageText(message, simple, currentUserId, ignoreEntities) {
|
||||||
|
|
||||||
var myself = false;
|
var myself = false;
|
||||||
if ( message['@type'] !== "sponsoredMessage" ) {
|
if ( message['@type'] !== "sponsoredMessage" ) {
|
||||||
myself = ( message.sender['@type'] === "messageSenderUser" && message.sender.user_id.toString() === currentUserId.toString() );
|
myself = ( message.sender_id['@type'] === "messageSenderUser" && message.sender_id.user_id.toString() === currentUserId.toString() );
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(message.content['@type']) {
|
switch(message.content['@type']) {
|
||||||
|
@ -97,7 +97,7 @@ function getMessageText(message, simple, currentUserId, ignoreEntities) {
|
||||||
case 'messageChatJoinByLink':
|
case 'messageChatJoinByLink':
|
||||||
return myself ? qsTr("joined this chat", "myself") : qsTr("joined this chat");
|
return myself ? qsTr("joined this chat", "myself") : qsTr("joined this chat");
|
||||||
case 'messageChatAddMembers':
|
case 'messageChatAddMembers':
|
||||||
if (message.sender['@type'] === "messageSenderUser" && message.sender.user_id === message.content.member_user_ids[0]) {
|
if (message.sender_id['@type'] === "messageSenderUser" && message.sender_id.user_id === message.content.member_user_ids[0]) {
|
||||||
return myself ? qsTr("were added to this chat", "myself") : qsTr("was added to this chat");
|
return myself ? qsTr("were added to this chat", "myself") : qsTr("was added to this chat");
|
||||||
} else {
|
} else {
|
||||||
var addedUserNames = "";
|
var addedUserNames = "";
|
||||||
|
@ -110,7 +110,7 @@ function getMessageText(message, simple, currentUserId, ignoreEntities) {
|
||||||
return myself ? qsTr("have added %1 to the chat", "myself").arg(addedUserNames) : qsTr("has added %1 to the chat").arg(addedUserNames);
|
return myself ? qsTr("have added %1 to the chat", "myself").arg(addedUserNames) : qsTr("has added %1 to the chat").arg(addedUserNames);
|
||||||
}
|
}
|
||||||
case 'messageChatDeleteMember':
|
case 'messageChatDeleteMember':
|
||||||
if (message.sender['@type'] === "messageSenderUser" && message.sender.user_id === message.content.user_id) {
|
if (message.sender_id['@type'] === "messageSenderUser" && message.sender_id.user_id === message.content.user_id) {
|
||||||
return myself ? qsTr("left this chat", "myself") : qsTr("left this chat");
|
return myself ? qsTr("left this chat", "myself") : qsTr("left this chat");
|
||||||
} else {
|
} else {
|
||||||
return myself ? qsTr("have removed %1 from the chat", "myself").arg(getUserName(tdLibWrapper.getUserInformation(message.content.user_id))) : qsTr("has removed %1 from the chat").arg(getUserName(tdLibWrapper.getUserInformation(message.content.user_id)));
|
return myself ? qsTr("have removed %1 from the chat", "myself").arg(getUserName(tdLibWrapper.getUserInformation(message.content.user_id))) : qsTr("has removed %1 from the chat").arg(getUserName(tdLibWrapper.getUserInformation(message.content.user_id)));
|
||||||
|
@ -469,7 +469,7 @@ function getMessagesArrayText(messages) {
|
||||||
var lastSenderName = "";
|
var lastSenderName = "";
|
||||||
var lines = [];
|
var lines = [];
|
||||||
for(var i = 0; i < messages.length; i += 1) {
|
for(var i = 0; i < messages.length; i += 1) {
|
||||||
var senderName = getUserName(tdLibWrapper.getUserInformation(messages[i].sender.user_id));
|
var senderName = getUserName(tdLibWrapper.getUserInformation(messages[i].sender_id.user_id));
|
||||||
if(senderName !== lastSenderName) {
|
if(senderName !== lastSenderName) {
|
||||||
lines.push(senderName);
|
lines.push(senderName);
|
||||||
}
|
}
|
||||||
|
|
|
@ -203,7 +203,7 @@ Page {
|
||||||
messageStatusSuffix += " - " + qsTr("edited");
|
messageStatusSuffix += " - " + qsTr("edited");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chatPage.myUserId === message.sender.user_id) {
|
if (chatPage.myUserId === message.sender_id.user_id) {
|
||||||
messageStatusSuffix += " "
|
messageStatusSuffix += " "
|
||||||
if (listItemIndex <= lastReadSentIndex) {
|
if (listItemIndex <= lastReadSentIndex) {
|
||||||
// Read by other party
|
// Read by other party
|
||||||
|
@ -610,7 +610,7 @@ Page {
|
||||||
chatViewStartupReadTimer.restart();
|
chatViewStartupReadTimer.restart();
|
||||||
}
|
}
|
||||||
onNewMessageReceived: {
|
onNewMessageReceived: {
|
||||||
if (( chatView.manuallyScrolledToBottom && Qt.application.state === Qt.ApplicationActive ) || message.sender.user_id === chatPage.myUserId) {
|
if (( chatView.manuallyScrolledToBottom && Qt.application.state === Qt.ApplicationActive ) || message.sender_id.user_id === chatPage.myUserId) {
|
||||||
Debug.log("[ChatPage] Own message received or was scrolled to bottom, scrolling down to see it...");
|
Debug.log("[ChatPage] Own message received or was scrolled to bottom, scrolling down to see it...");
|
||||||
chatView.scrollToIndex(chatView.count - 1);
|
chatView.scrollToIndex(chatView.count - 1);
|
||||||
viewMessageTimer.queueViewMessage(chatView.count - 1);
|
viewMessageTimer.queueViewMessage(chatView.count - 1);
|
||||||
|
|
|
@ -33,7 +33,7 @@ Page {
|
||||||
|
|
||||||
property var pollData: message.content.poll
|
property var pollData: message.content.poll
|
||||||
|
|
||||||
property var userInformation: tdLibWrapper.getUserInformation(message.sender.user_id)
|
property var userInformation: tdLibWrapper.getUserInformation(message.sender_id.user_id)
|
||||||
|
|
||||||
property bool isQuiz: pollData.type['@type'] === "pollTypeQuiz"
|
property bool isQuiz: pollData.type['@type'] === "pollTypeQuiz"
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ namespace {
|
||||||
const QString CONTENT("content");
|
const QString CONTENT("content");
|
||||||
const QString LAST_MESSAGE("last_message");
|
const QString LAST_MESSAGE("last_message");
|
||||||
const QString DRAFT_MESSAGE("draft_message");
|
const QString DRAFT_MESSAGE("draft_message");
|
||||||
const QString SENDER("sender");
|
const QString SENDER_ID("sender_id");
|
||||||
const QString USER_ID("user_id");
|
const QString USER_ID("user_id");
|
||||||
const QString BASIC_GROUP_ID("basic_group_id");
|
const QString BASIC_GROUP_ID("basic_group_id");
|
||||||
const QString SUPERGROUP_ID("supergroup_id");
|
const QString SUPERGROUP_ID("supergroup_id");
|
||||||
|
@ -171,17 +171,17 @@ qlonglong ChatListModel::ChatData::lastReadInboxMessageId() const
|
||||||
|
|
||||||
qlonglong ChatListModel::ChatData::senderUserId() const
|
qlonglong ChatListModel::ChatData::senderUserId() const
|
||||||
{
|
{
|
||||||
return lastMessage(SENDER).toMap().value(USER_ID).toLongLong();
|
return lastMessage(SENDER_ID).toMap().value(USER_ID).toLongLong();
|
||||||
}
|
}
|
||||||
|
|
||||||
qlonglong ChatListModel::ChatData::senderChatId() const
|
qlonglong ChatListModel::ChatData::senderChatId() const
|
||||||
{
|
{
|
||||||
return lastMessage(SENDER).toMap().value(CHAT_ID).toLongLong();
|
return lastMessage(SENDER_ID).toMap().value(CHAT_ID).toLongLong();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChatListModel::ChatData::senderIsChat() const
|
bool ChatListModel::ChatData::senderIsChat() const
|
||||||
{
|
{
|
||||||
return lastMessage(SENDER).toMap().value(_TYPE).toString() == "messageSenderChat";
|
return lastMessage(SENDER_ID).toMap().value(_TYPE).toString() == "messageSenderChat";
|
||||||
}
|
}
|
||||||
|
|
||||||
qlonglong ChatListModel::ChatData::senderMessageDate() const
|
qlonglong ChatListModel::ChatData::senderMessageDate() const
|
||||||
|
@ -192,7 +192,7 @@ qlonglong ChatListModel::ChatData::senderMessageDate() const
|
||||||
QString ChatListModel::ChatData::senderMessageText() const
|
QString ChatListModel::ChatData::senderMessageText() const
|
||||||
{
|
{
|
||||||
qlonglong myUserId = tdLibWrapper->getUserInformation().value(ID).toLongLong();
|
qlonglong myUserId = tdLibWrapper->getUserInformation().value(ID).toLongLong();
|
||||||
return FernschreiberUtils::getMessageShortText(tdLibWrapper, lastMessage(CONTENT).toMap(), isChannel(), myUserId, lastMessage(SENDER).toMap() );
|
return FernschreiberUtils::getMessageShortText(tdLibWrapper, lastMessage(CONTENT).toMap(), isChannel(), myUserId, lastMessage(SENDER_ID).toMap() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ namespace {
|
||||||
const QString UNREAD_COUNT("unread_count");
|
const QString UNREAD_COUNT("unread_count");
|
||||||
const QString LAST_READ_INBOX_MESSAGE_ID("last_read_inbox_message_id");
|
const QString LAST_READ_INBOX_MESSAGE_ID("last_read_inbox_message_id");
|
||||||
const QString LAST_READ_OUTBOX_MESSAGE_ID("last_read_outbox_message_id");
|
const QString LAST_READ_OUTBOX_MESSAGE_ID("last_read_outbox_message_id");
|
||||||
const QString SENDER("sender");
|
const QString SENDER_ID("sender_id");
|
||||||
const QString USER_ID("user_id");
|
const QString USER_ID("user_id");
|
||||||
const QString PINNED_MESSAGE_ID("pinned_message_id");
|
const QString PINNED_MESSAGE_ID("pinned_message_id");
|
||||||
const QString REPLY_MARKUP("reply_markup");
|
const QString REPLY_MARKUP("reply_markup");
|
||||||
|
@ -129,17 +129,17 @@ QVector<int> ChatModel::MessageData::flagsToRoles(uint flags)
|
||||||
|
|
||||||
int ChatModel::MessageData::senderUserId() const
|
int ChatModel::MessageData::senderUserId() const
|
||||||
{
|
{
|
||||||
return messageData.value(SENDER).toMap().value(USER_ID).toInt();
|
return messageData.value(SENDER_ID).toMap().value(USER_ID).toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
qlonglong ChatModel::MessageData::senderChatId() const
|
qlonglong ChatModel::MessageData::senderChatId() const
|
||||||
{
|
{
|
||||||
return messageData.value(SENDER).toMap().value(CHAT_ID).toLongLong();
|
return messageData.value(SENDER_ID).toMap().value(CHAT_ID).toLongLong();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChatModel::MessageData::senderIsChat() const
|
bool ChatModel::MessageData::senderIsChat() const
|
||||||
{
|
{
|
||||||
return messageData.value(SENDER).toMap().value(_TYPE).toString() == "messageSenderChat";
|
return messageData.value(SENDER_ID).toMap().value(_TYPE).toString() == "messageSenderChat";
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<int> ChatModel::MessageData::diff(const MessageData *message) const
|
QVector<int> ChatModel::MessageData::diff(const MessageData *message) const
|
||||||
|
|
|
@ -43,7 +43,7 @@ namespace {
|
||||||
const QString MESSAGE("message");
|
const QString MESSAGE("message");
|
||||||
const QString FIRST_NAME("first_name");
|
const QString FIRST_NAME("first_name");
|
||||||
const QString LAST_NAME("last_name");
|
const QString LAST_NAME("last_name");
|
||||||
const QString SENDER("sender");
|
const QString SENDER_ID("sender_id");
|
||||||
const QString USER_ID("user_id");
|
const QString USER_ID("user_id");
|
||||||
const QString NOTIFICATIONS("notifications");
|
const QString NOTIFICATIONS("notifications");
|
||||||
const QString NOTIFICATION_GROUP_ID("notification_group_id");
|
const QString NOTIFICATION_GROUP_ID("notification_group_id");
|
||||||
|
@ -336,7 +336,7 @@ void NotificationManager::publishNotification(const NotificationGroup *notificat
|
||||||
}
|
}
|
||||||
|
|
||||||
QString notificationBody;
|
QString notificationBody;
|
||||||
const QVariantMap senderInformation = messageMap.value(SENDER).toMap();
|
const QVariantMap senderInformation = messageMap.value(SENDER_ID).toMap();
|
||||||
if (notificationGroup->totalCount == 1 && !messageMap.isEmpty()) {
|
if (notificationGroup->totalCount == 1 && !messageMap.isEmpty()) {
|
||||||
LOG("Group" << notificationGroup->notificationGroupId << "has 1 notification");
|
LOG("Group" << notificationGroup->notificationGroupId << "has 1 notification");
|
||||||
if (chatInformation && (chatInformation->type == TDLibWrapper::ChatTypeBasicGroup ||
|
if (chatInformation && (chatInformation->type == TDLibWrapper::ChatTypeBasicGroup ||
|
||||||
|
|
|
@ -17,122 +17,7 @@
|
||||||
namespace td {
|
namespace td {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Native C++ interface for interaction with TDLib.
|
* The native C++ interface for interaction with TDLib.
|
||||||
*
|
|
||||||
* The TDLib instance is created for the lifetime of the Client object.
|
|
||||||
* Requests to TDLib can be sent using the Client::send method from any thread.
|
|
||||||
* New updates and responses to requests can be received using the Client::receive method from any thread,
|
|
||||||
* this function must not be called simultaneously from two different threads. Also note that all updates and
|
|
||||||
* responses to requests should be applied in the same order as they were received, to ensure consistency.
|
|
||||||
* Given this information, it's advisable to call this function from a dedicated thread.
|
|
||||||
* Some service TDLib requests can be executed synchronously from any thread using the Client::execute method.
|
|
||||||
*
|
|
||||||
* General pattern of usage:
|
|
||||||
* \code
|
|
||||||
* std::shared_ptr<td::Client> client = std::make_shared<td::Client>();
|
|
||||||
* // somehow share the client with other threads, which will be able to send requests via client->send
|
|
||||||
*
|
|
||||||
* const double WAIT_TIMEOUT = 10.0; // seconds
|
|
||||||
* bool is_closed = false; // should be set to true, when updateAuthorizationState with
|
|
||||||
* // authorizationStateClosed is received
|
|
||||||
* while (!is_closed) {
|
|
||||||
* auto response = client->receive(WAIT_TIMEOUT);
|
|
||||||
* if (response.object == nullptr) {
|
|
||||||
* continue;
|
|
||||||
* }
|
|
||||||
*
|
|
||||||
* if (response.id == 0) {
|
|
||||||
* // process response.object as an incoming update of type td_api::Update
|
|
||||||
* } else {
|
|
||||||
* // process response.object as an answer to a sent request with id response.id
|
|
||||||
* }
|
|
||||||
* }
|
|
||||||
* \endcode
|
|
||||||
*/
|
|
||||||
class Client final {
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* Creates a new TDLib client.
|
|
||||||
*/
|
|
||||||
Client();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A request to the TDLib.
|
|
||||||
*/
|
|
||||||
struct Request {
|
|
||||||
/**
|
|
||||||
* Request identifier.
|
|
||||||
* Responses to TDLib requests will have the same id as the corresponding request.
|
|
||||||
* Updates from TDLib will have id == 0, incoming requests are thus disallowed to have id == 0.
|
|
||||||
*/
|
|
||||||
std::uint64_t id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TDLib API function representing a request to TDLib.
|
|
||||||
*/
|
|
||||||
td_api::object_ptr<td_api::Function> function;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends request to TDLib. May be called from any thread.
|
|
||||||
* \param[in] request Request to TDLib.
|
|
||||||
*/
|
|
||||||
void send(Request &&request);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A response to a request, or an incoming update from TDLib.
|
|
||||||
*/
|
|
||||||
struct Response {
|
|
||||||
/**
|
|
||||||
* TDLib request identifier, which corresponds to the response, or 0 for incoming updates from TDLib.
|
|
||||||
*/
|
|
||||||
std::uint64_t id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TDLib API object representing a response to a TDLib request or an incoming update.
|
|
||||||
*/
|
|
||||||
td_api::object_ptr<td_api::Object> object;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Receives incoming updates and request responses from TDLib. May be called from any thread, but shouldn't be
|
|
||||||
* called simultaneously from two different threads.
|
|
||||||
* \param[in] timeout The maximum number of seconds allowed for this function to wait for new data.
|
|
||||||
* \return An incoming update or request response. The object returned in the response may be a nullptr
|
|
||||||
* if the timeout expires.
|
|
||||||
*/
|
|
||||||
Response receive(double timeout);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Synchronously executes TDLib requests. Only a few requests can be executed synchronously.
|
|
||||||
* May be called from any thread.
|
|
||||||
* \param[in] request Request to the TDLib.
|
|
||||||
* \return The request response.
|
|
||||||
*/
|
|
||||||
static Response execute(Request &&request);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroys the client and TDLib instance.
|
|
||||||
*/
|
|
||||||
~Client();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Move constructor.
|
|
||||||
*/
|
|
||||||
Client(Client &&other) noexcept;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Move assignment operator.
|
|
||||||
*/
|
|
||||||
Client &operator=(Client &&other) noexcept;
|
|
||||||
|
|
||||||
private:
|
|
||||||
class Impl;
|
|
||||||
std::unique_ptr<Impl> impl_;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The future native C++ interface for interaction with TDLib.
|
|
||||||
*
|
*
|
||||||
* A TDLib client instance can be created through the method ClientManager::create_client_id.
|
* A TDLib client instance can be created through the method ClientManager::create_client_id.
|
||||||
* Requests can be sent using the method ClientManager::send from any thread.
|
* Requests can be sent using the method ClientManager::send from any thread.
|
||||||
|
@ -286,4 +171,119 @@ class ClientManager final {
|
||||||
std::unique_ptr<Impl> impl_;
|
std::unique_ptr<Impl> impl_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Old native C++ interface for interaction with TDLib to be removed in TDLib 2.0.0.
|
||||||
|
*
|
||||||
|
* The TDLib instance is created for the lifetime of the Client object.
|
||||||
|
* Requests to TDLib can be sent using the Client::send method from any thread.
|
||||||
|
* New updates and responses to requests can be received using the Client::receive method from any thread,
|
||||||
|
* this function must not be called simultaneously from two different threads. Also note that all updates and
|
||||||
|
* responses to requests should be applied in the same order as they were received, to ensure consistency.
|
||||||
|
* Given this information, it's advisable to call this function from a dedicated thread.
|
||||||
|
* Some service TDLib requests can be executed synchronously from any thread using the Client::execute method.
|
||||||
|
*
|
||||||
|
* General pattern of usage:
|
||||||
|
* \code
|
||||||
|
* std::shared_ptr<td::Client> client = std::make_shared<td::Client>();
|
||||||
|
* // somehow share the client with other threads, which will be able to send requests via client->send
|
||||||
|
*
|
||||||
|
* const double WAIT_TIMEOUT = 10.0; // seconds
|
||||||
|
* bool is_closed = false; // should be set to true, when updateAuthorizationState with
|
||||||
|
* // authorizationStateClosed is received
|
||||||
|
* while (!is_closed) {
|
||||||
|
* auto response = client->receive(WAIT_TIMEOUT);
|
||||||
|
* if (response.object == nullptr) {
|
||||||
|
* continue;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* if (response.id == 0) {
|
||||||
|
* // process response.object as an incoming update of type td_api::Update
|
||||||
|
* } else {
|
||||||
|
* // process response.object as an answer to a sent request with id response.id
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* \endcode
|
||||||
|
*/
|
||||||
|
class Client final {
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Creates a new TDLib client.
|
||||||
|
*/
|
||||||
|
Client();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A request to the TDLib.
|
||||||
|
*/
|
||||||
|
struct Request {
|
||||||
|
/**
|
||||||
|
* Request identifier.
|
||||||
|
* Responses to TDLib requests will have the same id as the corresponding request.
|
||||||
|
* Updates from TDLib will have id == 0, incoming requests are thus disallowed to have id == 0.
|
||||||
|
*/
|
||||||
|
std::uint64_t id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TDLib API function representing a request to TDLib.
|
||||||
|
*/
|
||||||
|
td_api::object_ptr<td_api::Function> function;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends request to TDLib. May be called from any thread.
|
||||||
|
* \param[in] request Request to TDLib.
|
||||||
|
*/
|
||||||
|
void send(Request &&request);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A response to a request, or an incoming update from TDLib.
|
||||||
|
*/
|
||||||
|
struct Response {
|
||||||
|
/**
|
||||||
|
* TDLib request identifier, which corresponds to the response, or 0 for incoming updates from TDLib.
|
||||||
|
*/
|
||||||
|
std::uint64_t id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TDLib API object representing a response to a TDLib request or an incoming update.
|
||||||
|
*/
|
||||||
|
td_api::object_ptr<td_api::Object> object;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Receives incoming updates and request responses from TDLib. May be called from any thread, but shouldn't be
|
||||||
|
* called simultaneously from two different threads.
|
||||||
|
* \param[in] timeout The maximum number of seconds allowed for this function to wait for new data.
|
||||||
|
* \return An incoming update or request response. The object returned in the response may be a nullptr
|
||||||
|
* if the timeout expires.
|
||||||
|
*/
|
||||||
|
Response receive(double timeout);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Synchronously executes TDLib requests. Only a few requests can be executed synchronously.
|
||||||
|
* May be called from any thread.
|
||||||
|
* \param[in] request Request to the TDLib.
|
||||||
|
* \return The request response.
|
||||||
|
*/
|
||||||
|
static Response execute(Request &&request);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroys the client and TDLib instance.
|
||||||
|
*/
|
||||||
|
~Client();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Move constructor.
|
||||||
|
*/
|
||||||
|
Client(Client &&other) noexcept;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Move assignment operator.
|
||||||
|
*/
|
||||||
|
Client &operator=(Client &&other) noexcept;
|
||||||
|
|
||||||
|
private:
|
||||||
|
class Impl;
|
||||||
|
std::unique_ptr<Impl> impl_;
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -55,6 +55,9 @@ bool downcast_call(Object &obj, const T &func) {
|
||||||
case authenticationCodeTypeFlashCall::ID:
|
case authenticationCodeTypeFlashCall::ID:
|
||||||
func(static_cast<authenticationCodeTypeFlashCall &>(obj));
|
func(static_cast<authenticationCodeTypeFlashCall &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case authenticationCodeTypeMissedCall::ID:
|
||||||
|
func(static_cast<authenticationCodeTypeMissedCall &>(obj));
|
||||||
|
return true;
|
||||||
case authorizationStateWaitTdlibParameters::ID:
|
case authorizationStateWaitTdlibParameters::ID:
|
||||||
func(static_cast<authorizationStateWaitTdlibParameters &>(obj));
|
func(static_cast<authorizationStateWaitTdlibParameters &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -325,6 +328,9 @@ bool downcast_call(Object &obj, const T &func) {
|
||||||
case chatActionBarSharePhoneNumber::ID:
|
case chatActionBarSharePhoneNumber::ID:
|
||||||
func(static_cast<chatActionBarSharePhoneNumber &>(obj));
|
func(static_cast<chatActionBarSharePhoneNumber &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case chatActionBarJoinRequest::ID:
|
||||||
|
func(static_cast<chatActionBarJoinRequest &>(obj));
|
||||||
|
return true;
|
||||||
case chatAdministrator::ID:
|
case chatAdministrator::ID:
|
||||||
func(static_cast<chatAdministrator &>(obj));
|
func(static_cast<chatAdministrator &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -394,12 +400,15 @@ bool downcast_call(Object &obj, const T &func) {
|
||||||
case chatEventSlowModeDelayChanged::ID:
|
case chatEventSlowModeDelayChanged::ID:
|
||||||
func(static_cast<chatEventSlowModeDelayChanged &>(obj));
|
func(static_cast<chatEventSlowModeDelayChanged &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case chatEventMessageTtlSettingChanged::ID:
|
case chatEventMessageTtlChanged::ID:
|
||||||
func(static_cast<chatEventMessageTtlSettingChanged &>(obj));
|
func(static_cast<chatEventMessageTtlChanged &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case chatEventSignMessagesToggled::ID:
|
case chatEventSignMessagesToggled::ID:
|
||||||
func(static_cast<chatEventSignMessagesToggled &>(obj));
|
func(static_cast<chatEventSignMessagesToggled &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case chatEventHasProtectedContentToggled::ID:
|
||||||
|
func(static_cast<chatEventHasProtectedContentToggled &>(obj));
|
||||||
|
return true;
|
||||||
case chatEventStickerSetChanged::ID:
|
case chatEventStickerSetChanged::ID:
|
||||||
func(static_cast<chatEventStickerSetChanged &>(obj));
|
func(static_cast<chatEventStickerSetChanged &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -421,8 +430,8 @@ bool downcast_call(Object &obj, const T &func) {
|
||||||
case chatEventVideoChatCreated::ID:
|
case chatEventVideoChatCreated::ID:
|
||||||
func(static_cast<chatEventVideoChatCreated &>(obj));
|
func(static_cast<chatEventVideoChatCreated &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case chatEventVideoChatDiscarded::ID:
|
case chatEventVideoChatEnded::ID:
|
||||||
func(static_cast<chatEventVideoChatDiscarded &>(obj));
|
func(static_cast<chatEventVideoChatEnded &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case chatEventVideoChatParticipantIsMutedToggled::ID:
|
case chatEventVideoChatParticipantIsMutedToggled::ID:
|
||||||
func(static_cast<chatEventVideoChatParticipantIsMutedToggled &>(obj));
|
func(static_cast<chatEventVideoChatParticipantIsMutedToggled &>(obj));
|
||||||
|
@ -652,9 +661,6 @@ bool downcast_call(Object &obj, const T &func) {
|
||||||
case closedVectorPath::ID:
|
case closedVectorPath::ID:
|
||||||
func(static_cast<closedVectorPath &>(obj));
|
func(static_cast<closedVectorPath &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case colorReplacement::ID:
|
|
||||||
func(static_cast<colorReplacement &>(obj));
|
|
||||||
return true;
|
|
||||||
case connectedWebsite::ID:
|
case connectedWebsite::ID:
|
||||||
func(static_cast<connectedWebsite &>(obj));
|
func(static_cast<connectedWebsite &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -898,6 +904,9 @@ bool downcast_call(Object &obj, const T &func) {
|
||||||
case inlineKeyboardButtonTypeBuy::ID:
|
case inlineKeyboardButtonTypeBuy::ID:
|
||||||
func(static_cast<inlineKeyboardButtonTypeBuy &>(obj));
|
func(static_cast<inlineKeyboardButtonTypeBuy &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case inlineKeyboardButtonTypeUser::ID:
|
||||||
|
func(static_cast<inlineKeyboardButtonTypeUser &>(obj));
|
||||||
|
return true;
|
||||||
case inlineQueryResultArticle::ID:
|
case inlineQueryResultArticle::ID:
|
||||||
func(static_cast<inlineQueryResultArticle &>(obj));
|
func(static_cast<inlineQueryResultArticle &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -2167,12 +2176,6 @@ bool downcast_call(Object &obj, const T &func) {
|
||||||
case searchMessagesFilterChatPhoto::ID:
|
case searchMessagesFilterChatPhoto::ID:
|
||||||
func(static_cast<searchMessagesFilterChatPhoto &>(obj));
|
func(static_cast<searchMessagesFilterChatPhoto &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case searchMessagesFilterCall::ID:
|
|
||||||
func(static_cast<searchMessagesFilterCall &>(obj));
|
|
||||||
return true;
|
|
||||||
case searchMessagesFilterMissedCall::ID:
|
|
||||||
func(static_cast<searchMessagesFilterMissedCall &>(obj));
|
|
||||||
return true;
|
|
||||||
case searchMessagesFilterVideoNote::ID:
|
case searchMessagesFilterVideoNote::ID:
|
||||||
func(static_cast<searchMessagesFilterVideoNote &>(obj));
|
func(static_cast<searchMessagesFilterVideoNote &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -2218,9 +2221,6 @@ bool downcast_call(Object &obj, const T &func) {
|
||||||
case sponsoredMessage::ID:
|
case sponsoredMessage::ID:
|
||||||
func(static_cast<sponsoredMessage &>(obj));
|
func(static_cast<sponsoredMessage &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case sponsoredMessages::ID:
|
|
||||||
func(static_cast<sponsoredMessages &>(obj));
|
|
||||||
return true;
|
|
||||||
case statisticalGraphData::ID:
|
case statisticalGraphData::ID:
|
||||||
func(static_cast<statisticalGraphData &>(obj));
|
func(static_cast<statisticalGraphData &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -2269,12 +2269,15 @@ bool downcast_call(Object &obj, const T &func) {
|
||||||
case suggestedActionCheckPhoneNumber::ID:
|
case suggestedActionCheckPhoneNumber::ID:
|
||||||
func(static_cast<suggestedActionCheckPhoneNumber &>(obj));
|
func(static_cast<suggestedActionCheckPhoneNumber &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case suggestedActionSeeTicksHint::ID:
|
case suggestedActionViewChecksHint::ID:
|
||||||
func(static_cast<suggestedActionSeeTicksHint &>(obj));
|
func(static_cast<suggestedActionViewChecksHint &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case suggestedActionConvertToBroadcastGroup::ID:
|
case suggestedActionConvertToBroadcastGroup::ID:
|
||||||
func(static_cast<suggestedActionConvertToBroadcastGroup &>(obj));
|
func(static_cast<suggestedActionConvertToBroadcastGroup &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case suggestedActionSetPassword::ID:
|
||||||
|
func(static_cast<suggestedActionSetPassword &>(obj));
|
||||||
|
return true;
|
||||||
case supergroup::ID:
|
case supergroup::ID:
|
||||||
func(static_cast<supergroup &>(obj));
|
func(static_cast<supergroup &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -2521,44 +2524,26 @@ bool downcast_call(Object &obj, const T &func) {
|
||||||
case updateChatPosition::ID:
|
case updateChatPosition::ID:
|
||||||
func(static_cast<updateChatPosition &>(obj));
|
func(static_cast<updateChatPosition &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateChatIsMarkedAsUnread::ID:
|
|
||||||
func(static_cast<updateChatIsMarkedAsUnread &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateChatIsBlocked::ID:
|
|
||||||
func(static_cast<updateChatIsBlocked &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateChatHasScheduledMessages::ID:
|
|
||||||
func(static_cast<updateChatHasScheduledMessages &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateChatVideoChat::ID:
|
|
||||||
func(static_cast<updateChatVideoChat &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateChatDefaultDisableNotification::ID:
|
|
||||||
func(static_cast<updateChatDefaultDisableNotification &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateChatReadInbox::ID:
|
case updateChatReadInbox::ID:
|
||||||
func(static_cast<updateChatReadInbox &>(obj));
|
func(static_cast<updateChatReadInbox &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateChatReadOutbox::ID:
|
case updateChatReadOutbox::ID:
|
||||||
func(static_cast<updateChatReadOutbox &>(obj));
|
func(static_cast<updateChatReadOutbox &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateChatUnreadMentionCount::ID:
|
|
||||||
func(static_cast<updateChatUnreadMentionCount &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateChatNotificationSettings::ID:
|
|
||||||
func(static_cast<updateChatNotificationSettings &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateScopeNotificationSettings::ID:
|
|
||||||
func(static_cast<updateScopeNotificationSettings &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateChatMessageTtlSetting::ID:
|
|
||||||
func(static_cast<updateChatMessageTtlSetting &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateChatActionBar::ID:
|
case updateChatActionBar::ID:
|
||||||
func(static_cast<updateChatActionBar &>(obj));
|
func(static_cast<updateChatActionBar &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateChatTheme::ID:
|
case updateChatDraftMessage::ID:
|
||||||
func(static_cast<updateChatTheme &>(obj));
|
func(static_cast<updateChatDraftMessage &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatMessageSender::ID:
|
||||||
|
func(static_cast<updateChatMessageSender &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatMessageTtl::ID:
|
||||||
|
func(static_cast<updateChatMessageTtl &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatNotificationSettings::ID:
|
||||||
|
func(static_cast<updateChatNotificationSettings &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateChatPendingJoinRequests::ID:
|
case updateChatPendingJoinRequests::ID:
|
||||||
func(static_cast<updateChatPendingJoinRequests &>(obj));
|
func(static_cast<updateChatPendingJoinRequests &>(obj));
|
||||||
|
@ -2566,8 +2551,29 @@ bool downcast_call(Object &obj, const T &func) {
|
||||||
case updateChatReplyMarkup::ID:
|
case updateChatReplyMarkup::ID:
|
||||||
func(static_cast<updateChatReplyMarkup &>(obj));
|
func(static_cast<updateChatReplyMarkup &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateChatDraftMessage::ID:
|
case updateChatTheme::ID:
|
||||||
func(static_cast<updateChatDraftMessage &>(obj));
|
func(static_cast<updateChatTheme &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatUnreadMentionCount::ID:
|
||||||
|
func(static_cast<updateChatUnreadMentionCount &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatVideoChat::ID:
|
||||||
|
func(static_cast<updateChatVideoChat &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatDefaultDisableNotification::ID:
|
||||||
|
func(static_cast<updateChatDefaultDisableNotification &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatHasProtectedContent::ID:
|
||||||
|
func(static_cast<updateChatHasProtectedContent &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatHasScheduledMessages::ID:
|
||||||
|
func(static_cast<updateChatHasScheduledMessages &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatIsBlocked::ID:
|
||||||
|
func(static_cast<updateChatIsBlocked &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatIsMarkedAsUnread::ID:
|
||||||
|
func(static_cast<updateChatIsMarkedAsUnread &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateChatFilters::ID:
|
case updateChatFilters::ID:
|
||||||
func(static_cast<updateChatFilters &>(obj));
|
func(static_cast<updateChatFilters &>(obj));
|
||||||
|
@ -2575,6 +2581,9 @@ bool downcast_call(Object &obj, const T &func) {
|
||||||
case updateChatOnlineMemberCount::ID:
|
case updateChatOnlineMemberCount::ID:
|
||||||
func(static_cast<updateChatOnlineMemberCount &>(obj));
|
func(static_cast<updateChatOnlineMemberCount &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case updateScopeNotificationSettings::ID:
|
||||||
|
func(static_cast<updateScopeNotificationSettings &>(obj));
|
||||||
|
return true;
|
||||||
case updateNotification::ID:
|
case updateNotification::ID:
|
||||||
func(static_cast<updateNotification &>(obj));
|
func(static_cast<updateNotification &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -2590,8 +2599,8 @@ bool downcast_call(Object &obj, const T &func) {
|
||||||
case updateDeleteMessages::ID:
|
case updateDeleteMessages::ID:
|
||||||
func(static_cast<updateDeleteMessages &>(obj));
|
func(static_cast<updateDeleteMessages &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateUserChatAction::ID:
|
case updateChatAction::ID:
|
||||||
func(static_cast<updateUserChatAction &>(obj));
|
func(static_cast<updateChatAction &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateUserStatus::ID:
|
case updateUserStatus::ID:
|
||||||
func(static_cast<updateUserStatus &>(obj));
|
func(static_cast<updateUserStatus &>(obj));
|
||||||
|
@ -2937,9 +2946,6 @@ bool downcast_call(Function &obj, const T &func) {
|
||||||
case answerShippingQuery::ID:
|
case answerShippingQuery::ID:
|
||||||
func(static_cast<answerShippingQuery &>(obj));
|
func(static_cast<answerShippingQuery &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case approveChatJoinRequest::ID:
|
|
||||||
func(static_cast<approveChatJoinRequest &>(obj));
|
|
||||||
return true;
|
|
||||||
case banChatMember::ID:
|
case banChatMember::ID:
|
||||||
func(static_cast<banChatMember &>(obj));
|
func(static_cast<banChatMember &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -3081,9 +3087,6 @@ bool downcast_call(Function &obj, const T &func) {
|
||||||
case createVideoChat::ID:
|
case createVideoChat::ID:
|
||||||
func(static_cast<createVideoChat &>(obj));
|
func(static_cast<createVideoChat &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case declineChatJoinRequest::ID:
|
|
||||||
func(static_cast<declineChatJoinRequest &>(obj));
|
|
||||||
return true;
|
|
||||||
case deleteAccount::ID:
|
case deleteAccount::ID:
|
||||||
func(static_cast<deleteAccount &>(obj));
|
func(static_cast<deleteAccount &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -3105,8 +3108,8 @@ bool downcast_call(Function &obj, const T &func) {
|
||||||
case deleteChatMessagesByDate::ID:
|
case deleteChatMessagesByDate::ID:
|
||||||
func(static_cast<deleteChatMessagesByDate &>(obj));
|
func(static_cast<deleteChatMessagesByDate &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case deleteChatMessagesFromUser::ID:
|
case deleteChatMessagesBySender::ID:
|
||||||
func(static_cast<deleteChatMessagesFromUser &>(obj));
|
func(static_cast<deleteChatMessagesBySender &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case deleteChatReplyMarkup::ID:
|
case deleteChatReplyMarkup::ID:
|
||||||
func(static_cast<deleteChatReplyMarkup &>(obj));
|
func(static_cast<deleteChatReplyMarkup &>(obj));
|
||||||
|
@ -3147,9 +3150,6 @@ bool downcast_call(Function &obj, const T &func) {
|
||||||
case discardCall::ID:
|
case discardCall::ID:
|
||||||
func(static_cast<discardCall &>(obj));
|
func(static_cast<discardCall &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case discardGroupCall::ID:
|
|
||||||
func(static_cast<discardGroupCall &>(obj));
|
|
||||||
return true;
|
|
||||||
case disconnectAllWebsites::ID:
|
case disconnectAllWebsites::ID:
|
||||||
func(static_cast<disconnectAllWebsites &>(obj));
|
func(static_cast<disconnectAllWebsites &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -3207,6 +3207,9 @@ bool downcast_call(Function &obj, const T &func) {
|
||||||
case enableProxy::ID:
|
case enableProxy::ID:
|
||||||
func(static_cast<enableProxy &>(obj));
|
func(static_cast<enableProxy &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case endGroupCall::ID:
|
||||||
|
func(static_cast<endGroupCall &>(obj));
|
||||||
|
return true;
|
||||||
case endGroupCallRecording::ID:
|
case endGroupCallRecording::ID:
|
||||||
func(static_cast<endGroupCallRecording &>(obj));
|
func(static_cast<endGroupCallRecording &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -3282,6 +3285,9 @@ bool downcast_call(Function &obj, const T &func) {
|
||||||
case getChatAdministrators::ID:
|
case getChatAdministrators::ID:
|
||||||
func(static_cast<getChatAdministrators &>(obj));
|
func(static_cast<getChatAdministrators &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case getChatAvailableMessageSenders::ID:
|
||||||
|
func(static_cast<getChatAvailableMessageSenders &>(obj));
|
||||||
|
return true;
|
||||||
case getChatEventLog::ID:
|
case getChatEventLog::ID:
|
||||||
func(static_cast<getChatEventLog &>(obj));
|
func(static_cast<getChatEventLog &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -3336,8 +3342,8 @@ bool downcast_call(Function &obj, const T &func) {
|
||||||
case getChatSparseMessagePositions::ID:
|
case getChatSparseMessagePositions::ID:
|
||||||
func(static_cast<getChatSparseMessagePositions &>(obj));
|
func(static_cast<getChatSparseMessagePositions &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case getChatSponsoredMessages::ID:
|
case getChatSponsoredMessage::ID:
|
||||||
func(static_cast<getChatSponsoredMessages &>(obj));
|
func(static_cast<getChatSponsoredMessage &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case getChatStatistics::ID:
|
case getChatStatistics::ID:
|
||||||
func(static_cast<getChatStatistics &>(obj));
|
func(static_cast<getChatStatistics &>(obj));
|
||||||
|
@ -3723,6 +3729,12 @@ bool downcast_call(Function &obj, const T &func) {
|
||||||
case pingProxy::ID:
|
case pingProxy::ID:
|
||||||
func(static_cast<pingProxy &>(obj));
|
func(static_cast<pingProxy &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case processChatJoinRequest::ID:
|
||||||
|
func(static_cast<processChatJoinRequest &>(obj));
|
||||||
|
return true;
|
||||||
|
case processChatJoinRequests::ID:
|
||||||
|
func(static_cast<processChatJoinRequests &>(obj));
|
||||||
|
return true;
|
||||||
case processPushNotification::ID:
|
case processPushNotification::ID:
|
||||||
func(static_cast<processPushNotification &>(obj));
|
func(static_cast<processPushNotification &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -3993,8 +4005,11 @@ bool downcast_call(Function &obj, const T &func) {
|
||||||
case setChatMemberStatus::ID:
|
case setChatMemberStatus::ID:
|
||||||
func(static_cast<setChatMemberStatus &>(obj));
|
func(static_cast<setChatMemberStatus &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case setChatMessageTtlSetting::ID:
|
case setChatMessageSender::ID:
|
||||||
func(static_cast<setChatMessageTtlSetting &>(obj));
|
func(static_cast<setChatMessageSender &>(obj));
|
||||||
|
return true;
|
||||||
|
case setChatMessageTtl::ID:
|
||||||
|
func(static_cast<setChatMessageTtl &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case setChatNotificationSettings::ID:
|
case setChatNotificationSettings::ID:
|
||||||
func(static_cast<setChatNotificationSettings &>(obj));
|
func(static_cast<setChatNotificationSettings &>(obj));
|
||||||
|
@ -4041,6 +4056,9 @@ bool downcast_call(Function &obj, const T &func) {
|
||||||
case setGroupCallTitle::ID:
|
case setGroupCallTitle::ID:
|
||||||
func(static_cast<setGroupCallTitle &>(obj));
|
func(static_cast<setGroupCallTitle &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case setInactiveSessionTtl::ID:
|
||||||
|
func(static_cast<setInactiveSessionTtl &>(obj));
|
||||||
|
return true;
|
||||||
case setInlineGameScore::ID:
|
case setInlineGameScore::ID:
|
||||||
func(static_cast<setInlineGameScore &>(obj));
|
func(static_cast<setInlineGameScore &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -4179,6 +4197,9 @@ bool downcast_call(Function &obj, const T &func) {
|
||||||
case toggleChatDefaultDisableNotification::ID:
|
case toggleChatDefaultDisableNotification::ID:
|
||||||
func(static_cast<toggleChatDefaultDisableNotification &>(obj));
|
func(static_cast<toggleChatDefaultDisableNotification &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case toggleChatHasProtectedContent::ID:
|
||||||
|
func(static_cast<toggleChatHasProtectedContent &>(obj));
|
||||||
|
return true;
|
||||||
case toggleChatIsMarkedAsUnread::ID:
|
case toggleChatIsMarkedAsUnread::ID:
|
||||||
func(static_cast<toggleChatIsMarkedAsUnread &>(obj));
|
func(static_cast<toggleChatIsMarkedAsUnread &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -4209,6 +4230,12 @@ bool downcast_call(Function &obj, const T &func) {
|
||||||
case toggleMessageSenderIsBlocked::ID:
|
case toggleMessageSenderIsBlocked::ID:
|
||||||
func(static_cast<toggleMessageSenderIsBlocked &>(obj));
|
func(static_cast<toggleMessageSenderIsBlocked &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case toggleSessionCanAcceptCalls::ID:
|
||||||
|
func(static_cast<toggleSessionCanAcceptCalls &>(obj));
|
||||||
|
return true;
|
||||||
|
case toggleSessionCanAcceptSecretChats::ID:
|
||||||
|
func(static_cast<toggleSessionCanAcceptSecretChats &>(obj));
|
||||||
|
return true;
|
||||||
case toggleSupergroupIsAllHistoryAvailable::ID:
|
case toggleSupergroupIsAllHistoryAvailable::ID:
|
||||||
func(static_cast<toggleSupergroupIsAllHistoryAvailable &>(obj));
|
func(static_cast<toggleSupergroupIsAllHistoryAvailable &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -4242,9 +4269,6 @@ bool downcast_call(Function &obj, const T &func) {
|
||||||
case viewMessages::ID:
|
case viewMessages::ID:
|
||||||
func(static_cast<viewMessages &>(obj));
|
func(static_cast<viewMessages &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case viewSponsoredMessage::ID:
|
|
||||||
func(static_cast<viewSponsoredMessage &>(obj));
|
|
||||||
return true;
|
|
||||||
case viewTrendingStickerSets::ID:
|
case viewTrendingStickerSets::ID:
|
||||||
func(static_cast<viewTrendingStickerSets &>(obj));
|
func(static_cast<viewTrendingStickerSets &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -4277,6 +4301,9 @@ bool downcast_call(AuthenticationCodeType &obj, const T &func) {
|
||||||
case authenticationCodeTypeFlashCall::ID:
|
case authenticationCodeTypeFlashCall::ID:
|
||||||
func(static_cast<authenticationCodeTypeFlashCall &>(obj));
|
func(static_cast<authenticationCodeTypeFlashCall &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case authenticationCodeTypeMissedCall::ID:
|
||||||
|
func(static_cast<authenticationCodeTypeMissedCall &>(obj));
|
||||||
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -4667,6 +4694,9 @@ bool downcast_call(ChatActionBar &obj, const T &func) {
|
||||||
case chatActionBarSharePhoneNumber::ID:
|
case chatActionBarSharePhoneNumber::ID:
|
||||||
func(static_cast<chatActionBarSharePhoneNumber &>(obj));
|
func(static_cast<chatActionBarSharePhoneNumber &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case chatActionBarJoinRequest::ID:
|
||||||
|
func(static_cast<chatActionBarJoinRequest &>(obj));
|
||||||
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -4741,12 +4771,15 @@ bool downcast_call(ChatEventAction &obj, const T &func) {
|
||||||
case chatEventSlowModeDelayChanged::ID:
|
case chatEventSlowModeDelayChanged::ID:
|
||||||
func(static_cast<chatEventSlowModeDelayChanged &>(obj));
|
func(static_cast<chatEventSlowModeDelayChanged &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case chatEventMessageTtlSettingChanged::ID:
|
case chatEventMessageTtlChanged::ID:
|
||||||
func(static_cast<chatEventMessageTtlSettingChanged &>(obj));
|
func(static_cast<chatEventMessageTtlChanged &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case chatEventSignMessagesToggled::ID:
|
case chatEventSignMessagesToggled::ID:
|
||||||
func(static_cast<chatEventSignMessagesToggled &>(obj));
|
func(static_cast<chatEventSignMessagesToggled &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case chatEventHasProtectedContentToggled::ID:
|
||||||
|
func(static_cast<chatEventHasProtectedContentToggled &>(obj));
|
||||||
|
return true;
|
||||||
case chatEventStickerSetChanged::ID:
|
case chatEventStickerSetChanged::ID:
|
||||||
func(static_cast<chatEventStickerSetChanged &>(obj));
|
func(static_cast<chatEventStickerSetChanged &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -4768,8 +4801,8 @@ bool downcast_call(ChatEventAction &obj, const T &func) {
|
||||||
case chatEventVideoChatCreated::ID:
|
case chatEventVideoChatCreated::ID:
|
||||||
func(static_cast<chatEventVideoChatCreated &>(obj));
|
func(static_cast<chatEventVideoChatCreated &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case chatEventVideoChatDiscarded::ID:
|
case chatEventVideoChatEnded::ID:
|
||||||
func(static_cast<chatEventVideoChatDiscarded &>(obj));
|
func(static_cast<chatEventVideoChatEnded &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case chatEventVideoChatParticipantIsMutedToggled::ID:
|
case chatEventVideoChatParticipantIsMutedToggled::ID:
|
||||||
func(static_cast<chatEventVideoChatParticipantIsMutedToggled &>(obj));
|
func(static_cast<chatEventVideoChatParticipantIsMutedToggled &>(obj));
|
||||||
|
@ -5242,6 +5275,9 @@ bool downcast_call(InlineKeyboardButtonType &obj, const T &func) {
|
||||||
case inlineKeyboardButtonTypeBuy::ID:
|
case inlineKeyboardButtonTypeBuy::ID:
|
||||||
func(static_cast<inlineKeyboardButtonTypeBuy &>(obj));
|
func(static_cast<inlineKeyboardButtonTypeBuy &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case inlineKeyboardButtonTypeUser::ID:
|
||||||
|
func(static_cast<inlineKeyboardButtonTypeUser &>(obj));
|
||||||
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -6888,12 +6924,6 @@ bool downcast_call(SearchMessagesFilter &obj, const T &func) {
|
||||||
case searchMessagesFilterChatPhoto::ID:
|
case searchMessagesFilterChatPhoto::ID:
|
||||||
func(static_cast<searchMessagesFilterChatPhoto &>(obj));
|
func(static_cast<searchMessagesFilterChatPhoto &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case searchMessagesFilterCall::ID:
|
|
||||||
func(static_cast<searchMessagesFilterCall &>(obj));
|
|
||||||
return true;
|
|
||||||
case searchMessagesFilterMissedCall::ID:
|
|
||||||
func(static_cast<searchMessagesFilterMissedCall &>(obj));
|
|
||||||
return true;
|
|
||||||
case searchMessagesFilterVideoNote::ID:
|
case searchMessagesFilterVideoNote::ID:
|
||||||
func(static_cast<searchMessagesFilterVideoNote &>(obj));
|
func(static_cast<searchMessagesFilterVideoNote &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -6981,12 +7011,15 @@ bool downcast_call(SuggestedAction &obj, const T &func) {
|
||||||
case suggestedActionCheckPhoneNumber::ID:
|
case suggestedActionCheckPhoneNumber::ID:
|
||||||
func(static_cast<suggestedActionCheckPhoneNumber &>(obj));
|
func(static_cast<suggestedActionCheckPhoneNumber &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case suggestedActionSeeTicksHint::ID:
|
case suggestedActionViewChecksHint::ID:
|
||||||
func(static_cast<suggestedActionSeeTicksHint &>(obj));
|
func(static_cast<suggestedActionViewChecksHint &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case suggestedActionConvertToBroadcastGroup::ID:
|
case suggestedActionConvertToBroadcastGroup::ID:
|
||||||
func(static_cast<suggestedActionConvertToBroadcastGroup &>(obj));
|
func(static_cast<suggestedActionConvertToBroadcastGroup &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case suggestedActionSetPassword::ID:
|
||||||
|
func(static_cast<suggestedActionSetPassword &>(obj));
|
||||||
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -7274,44 +7307,26 @@ bool downcast_call(Update &obj, const T &func) {
|
||||||
case updateChatPosition::ID:
|
case updateChatPosition::ID:
|
||||||
func(static_cast<updateChatPosition &>(obj));
|
func(static_cast<updateChatPosition &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateChatIsMarkedAsUnread::ID:
|
|
||||||
func(static_cast<updateChatIsMarkedAsUnread &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateChatIsBlocked::ID:
|
|
||||||
func(static_cast<updateChatIsBlocked &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateChatHasScheduledMessages::ID:
|
|
||||||
func(static_cast<updateChatHasScheduledMessages &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateChatVideoChat::ID:
|
|
||||||
func(static_cast<updateChatVideoChat &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateChatDefaultDisableNotification::ID:
|
|
||||||
func(static_cast<updateChatDefaultDisableNotification &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateChatReadInbox::ID:
|
case updateChatReadInbox::ID:
|
||||||
func(static_cast<updateChatReadInbox &>(obj));
|
func(static_cast<updateChatReadInbox &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateChatReadOutbox::ID:
|
case updateChatReadOutbox::ID:
|
||||||
func(static_cast<updateChatReadOutbox &>(obj));
|
func(static_cast<updateChatReadOutbox &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateChatUnreadMentionCount::ID:
|
|
||||||
func(static_cast<updateChatUnreadMentionCount &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateChatNotificationSettings::ID:
|
|
||||||
func(static_cast<updateChatNotificationSettings &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateScopeNotificationSettings::ID:
|
|
||||||
func(static_cast<updateScopeNotificationSettings &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateChatMessageTtlSetting::ID:
|
|
||||||
func(static_cast<updateChatMessageTtlSetting &>(obj));
|
|
||||||
return true;
|
|
||||||
case updateChatActionBar::ID:
|
case updateChatActionBar::ID:
|
||||||
func(static_cast<updateChatActionBar &>(obj));
|
func(static_cast<updateChatActionBar &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateChatTheme::ID:
|
case updateChatDraftMessage::ID:
|
||||||
func(static_cast<updateChatTheme &>(obj));
|
func(static_cast<updateChatDraftMessage &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatMessageSender::ID:
|
||||||
|
func(static_cast<updateChatMessageSender &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatMessageTtl::ID:
|
||||||
|
func(static_cast<updateChatMessageTtl &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatNotificationSettings::ID:
|
||||||
|
func(static_cast<updateChatNotificationSettings &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateChatPendingJoinRequests::ID:
|
case updateChatPendingJoinRequests::ID:
|
||||||
func(static_cast<updateChatPendingJoinRequests &>(obj));
|
func(static_cast<updateChatPendingJoinRequests &>(obj));
|
||||||
|
@ -7319,8 +7334,29 @@ bool downcast_call(Update &obj, const T &func) {
|
||||||
case updateChatReplyMarkup::ID:
|
case updateChatReplyMarkup::ID:
|
||||||
func(static_cast<updateChatReplyMarkup &>(obj));
|
func(static_cast<updateChatReplyMarkup &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateChatDraftMessage::ID:
|
case updateChatTheme::ID:
|
||||||
func(static_cast<updateChatDraftMessage &>(obj));
|
func(static_cast<updateChatTheme &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatUnreadMentionCount::ID:
|
||||||
|
func(static_cast<updateChatUnreadMentionCount &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatVideoChat::ID:
|
||||||
|
func(static_cast<updateChatVideoChat &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatDefaultDisableNotification::ID:
|
||||||
|
func(static_cast<updateChatDefaultDisableNotification &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatHasProtectedContent::ID:
|
||||||
|
func(static_cast<updateChatHasProtectedContent &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatHasScheduledMessages::ID:
|
||||||
|
func(static_cast<updateChatHasScheduledMessages &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatIsBlocked::ID:
|
||||||
|
func(static_cast<updateChatIsBlocked &>(obj));
|
||||||
|
return true;
|
||||||
|
case updateChatIsMarkedAsUnread::ID:
|
||||||
|
func(static_cast<updateChatIsMarkedAsUnread &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateChatFilters::ID:
|
case updateChatFilters::ID:
|
||||||
func(static_cast<updateChatFilters &>(obj));
|
func(static_cast<updateChatFilters &>(obj));
|
||||||
|
@ -7328,6 +7364,9 @@ bool downcast_call(Update &obj, const T &func) {
|
||||||
case updateChatOnlineMemberCount::ID:
|
case updateChatOnlineMemberCount::ID:
|
||||||
func(static_cast<updateChatOnlineMemberCount &>(obj));
|
func(static_cast<updateChatOnlineMemberCount &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
case updateScopeNotificationSettings::ID:
|
||||||
|
func(static_cast<updateScopeNotificationSettings &>(obj));
|
||||||
|
return true;
|
||||||
case updateNotification::ID:
|
case updateNotification::ID:
|
||||||
func(static_cast<updateNotification &>(obj));
|
func(static_cast<updateNotification &>(obj));
|
||||||
return true;
|
return true;
|
||||||
|
@ -7343,8 +7382,8 @@ bool downcast_call(Update &obj, const T &func) {
|
||||||
case updateDeleteMessages::ID:
|
case updateDeleteMessages::ID:
|
||||||
func(static_cast<updateDeleteMessages &>(obj));
|
func(static_cast<updateDeleteMessages &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateUserChatAction::ID:
|
case updateChatAction::ID:
|
||||||
func(static_cast<updateUserChatAction &>(obj));
|
func(static_cast<updateChatAction &>(obj));
|
||||||
return true;
|
return true;
|
||||||
case updateUserStatus::ID:
|
case updateUserStatus::ID:
|
||||||
func(static_cast<updateUserStatus &>(obj));
|
func(static_cast<updateUserStatus &>(obj));
|
||||||
|
|
|
@ -18,87 +18,6 @@
|
||||||
* Fields of Bool type are stored as Boolean, fields of int32, int53, and double types are stored as Number, fields of
|
* Fields of Bool type are stored as Boolean, fields of int32, int53, and double types are stored as Number, fields of
|
||||||
* int64 and string types are stored as String, fields of bytes type are base64 encoded and then stored as String,
|
* int64 and string types are stored as String, fields of bytes type are base64 encoded and then stored as String,
|
||||||
* fields of array type are stored as Array.
|
* fields of array type are stored as Array.
|
||||||
* The main TDLib interface is asynchronous. To match requests with a corresponding response a field "@extra" can
|
|
||||||
* be added to the request object. The corresponding response will have an "@extra" field with exactly the same value.
|
|
||||||
*
|
|
||||||
* A TDLib client instance can be created through td_json_client_create.
|
|
||||||
* Requests then can be sent using td_json_client_send from any thread.
|
|
||||||
* New updates and request responses can be received through td_json_client_receive from any thread. This function
|
|
||||||
* must not be called simultaneously from two different threads. Also note that all updates and request responses
|
|
||||||
* must be applied in the order they were received to ensure consistency.
|
|
||||||
* Given this information, it's advisable to call this function from a dedicated thread.
|
|
||||||
* Some service TDLib requests can be executed synchronously from any thread by using td_json_client_execute.
|
|
||||||
* The TDLib client instance can be destroyed via td_json_client_destroy.
|
|
||||||
*
|
|
||||||
* General pattern of usage:
|
|
||||||
* \code
|
|
||||||
* void *client = td_json_client_create();
|
|
||||||
* // somehow share the client with other threads, which will be able to send requests via td_json_client_send
|
|
||||||
*
|
|
||||||
* const double WAIT_TIMEOUT = 10.0; // seconds
|
|
||||||
* int is_closed = 0; // should be set to 1, when updateAuthorizationState with authorizationStateClosed is received
|
|
||||||
* while (!is_closed) {
|
|
||||||
* const char *result = td_json_client_receive(client, WAIT_TIMEOUT);
|
|
||||||
* if (result) {
|
|
||||||
* // parse the result as JSON object and process it as an incoming update or an answer to a previously sent request
|
|
||||||
* }
|
|
||||||
* }
|
|
||||||
* td_json_client_destroy(client);
|
|
||||||
* \endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "td/telegram/tdjson_export.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new instance of TDLib.
|
|
||||||
* \return Pointer to the created instance of TDLib.
|
|
||||||
*/
|
|
||||||
TDJSON_EXPORT void *td_json_client_create();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends request to the TDLib client. May be called from any thread.
|
|
||||||
* \param[in] client The client.
|
|
||||||
* \param[in] request JSON-serialized null-terminated request to TDLib.
|
|
||||||
*/
|
|
||||||
TDJSON_EXPORT void td_json_client_send(void *client, const char *request);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Receives incoming updates and request responses from the TDLib client. May be called from any thread, but
|
|
||||||
* must not be called simultaneously from two different threads.
|
|
||||||
* Returned pointer will be deallocated by TDLib during next call to td_json_client_receive or td_json_client_execute
|
|
||||||
* in the same thread, so it can't be used after that.
|
|
||||||
* \param[in] client The client.
|
|
||||||
* \param[in] timeout The maximum number of seconds allowed for this function to wait for new data.
|
|
||||||
* \return JSON-serialized null-terminated incoming update or request response. May be NULL if the timeout expires.
|
|
||||||
*/
|
|
||||||
TDJSON_EXPORT const char *td_json_client_receive(void *client, double timeout);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Synchronously executes TDLib request. May be called from any thread.
|
|
||||||
* Only a few requests can be executed synchronously.
|
|
||||||
* Returned pointer will be deallocated by TDLib during next call to td_json_client_receive or td_json_client_execute
|
|
||||||
* in the same thread, so it can't be used after that.
|
|
||||||
* \param[in] client The client. Currently ignored for all requests, so NULL can be passed.
|
|
||||||
* \param[in] request JSON-serialized null-terminated request to TDLib.
|
|
||||||
* \return JSON-serialized null-terminated request response.
|
|
||||||
*/
|
|
||||||
TDJSON_EXPORT const char *td_json_client_execute(void *client, const char *request);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroys the TDLib client instance. After this is called the client instance must not be used anymore.
|
|
||||||
* \param[in] client The client.
|
|
||||||
*/
|
|
||||||
TDJSON_EXPORT void td_json_client_destroy(void *client);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \file
|
|
||||||
* Alternatively, you can use new TDLib JSON interface, which will replace the current JSON interface in TDLib 2.0.0.
|
|
||||||
*
|
|
||||||
* Objects and functions serialization to JSON is the same for both JSON interfaces.
|
|
||||||
*
|
*
|
||||||
* The main TDLib interface is asynchronous. To match requests with a corresponding response, the field "@extra" can
|
* The main TDLib interface is asynchronous. To match requests with a corresponding response, the field "@extra" can
|
||||||
* be added to the request object. The corresponding response will have an "@extra" field with exactly the same value.
|
* be added to the request object. The corresponding response will have an "@extra" field with exactly the same value.
|
||||||
|
@ -129,6 +48,12 @@ TDJSON_EXPORT void td_json_client_destroy(void *client);
|
||||||
* \endcode
|
* \endcode
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "td/telegram/tdjson_export.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an opaque identifier of a new TDLib instance.
|
* Returns an opaque identifier of a new TDLib instance.
|
||||||
* The TDLib instance will not send updates until the first request is sent to it.
|
* The TDLib instance will not send updates until the first request is sent to it.
|
||||||
|
@ -181,6 +106,82 @@ typedef void (*td_log_message_callback_ptr)(int verbosity_level, const char *mes
|
||||||
*/
|
*/
|
||||||
TDJSON_EXPORT void td_set_log_message_callback(int max_verbosity_level, td_log_message_callback_ptr callback);
|
TDJSON_EXPORT void td_set_log_message_callback(int max_verbosity_level, td_log_message_callback_ptr callback);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file
|
||||||
|
* Alternatively, you can use old TDLib JSON interface, which will be removed in TDLib 2.0.0.
|
||||||
|
*
|
||||||
|
* Objects and functions serialization to JSON is the same for both JSON interfaces.
|
||||||
|
*
|
||||||
|
* The main TDLib interface is asynchronous. To match requests with a corresponding response a field "@extra" can
|
||||||
|
* be added to the request object. The corresponding response will have an "@extra" field with exactly the same value.
|
||||||
|
*
|
||||||
|
* A TDLib client instance can be created through td_json_client_create.
|
||||||
|
* Requests then can be sent using td_json_client_send from any thread.
|
||||||
|
* New updates and request responses can be received through td_json_client_receive from any thread. This function
|
||||||
|
* must not be called simultaneously from two different threads. Also note that all updates and request responses
|
||||||
|
* must be applied in the order they were received to ensure consistency.
|
||||||
|
* Given this information, it's advisable to call this function from a dedicated thread.
|
||||||
|
* Some service TDLib requests can be executed synchronously from any thread by using td_json_client_execute.
|
||||||
|
* The TDLib client instance can be destroyed via td_json_client_destroy.
|
||||||
|
*
|
||||||
|
* General pattern of usage:
|
||||||
|
* \code
|
||||||
|
* void *client = td_json_client_create();
|
||||||
|
* // somehow share the client with other threads, which will be able to send requests via td_json_client_send
|
||||||
|
*
|
||||||
|
* const double WAIT_TIMEOUT = 10.0; // seconds
|
||||||
|
* int is_closed = 0; // should be set to 1, when updateAuthorizationState with authorizationStateClosed is received
|
||||||
|
* while (!is_closed) {
|
||||||
|
* const char *result = td_json_client_receive(client, WAIT_TIMEOUT);
|
||||||
|
* if (result) {
|
||||||
|
* // parse the result as JSON object and process it as an incoming update or an answer to a previously sent request
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* td_json_client_destroy(client);
|
||||||
|
* \endcode
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance of TDLib.
|
||||||
|
* \return Pointer to the created instance of TDLib.
|
||||||
|
*/
|
||||||
|
TDJSON_EXPORT void *td_json_client_create();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends request to the TDLib client. May be called from any thread.
|
||||||
|
* \param[in] client The client.
|
||||||
|
* \param[in] request JSON-serialized null-terminated request to TDLib.
|
||||||
|
*/
|
||||||
|
TDJSON_EXPORT void td_json_client_send(void *client, const char *request);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Receives incoming updates and request responses from the TDLib client. May be called from any thread, but
|
||||||
|
* must not be called simultaneously from two different threads.
|
||||||
|
* Returned pointer will be deallocated by TDLib during next call to td_json_client_receive or td_json_client_execute
|
||||||
|
* in the same thread, so it can't be used after that.
|
||||||
|
* \param[in] client The client.
|
||||||
|
* \param[in] timeout The maximum number of seconds allowed for this function to wait for new data.
|
||||||
|
* \return JSON-serialized null-terminated incoming update or request response. May be NULL if the timeout expires.
|
||||||
|
*/
|
||||||
|
TDJSON_EXPORT const char *td_json_client_receive(void *client, double timeout);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Synchronously executes TDLib request. May be called from any thread.
|
||||||
|
* Only a few requests can be executed synchronously.
|
||||||
|
* Returned pointer will be deallocated by TDLib during next call to td_json_client_receive or td_json_client_execute
|
||||||
|
* in the same thread, so it can't be used after that.
|
||||||
|
* \param[in] client The client. Currently ignored for all requests, so NULL can be passed.
|
||||||
|
* \param[in] request JSON-serialized null-terminated request to TDLib.
|
||||||
|
* \return JSON-serialized null-terminated request response.
|
||||||
|
*/
|
||||||
|
TDJSON_EXPORT const char *td_json_client_execute(void *client, const char *request);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroys the TDLib client instance. After this is called the client instance must not be used anymore.
|
||||||
|
* \param[in] client The client.
|
||||||
|
*/
|
||||||
|
TDJSON_EXPORT void td_json_client_destroy(void *client);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -199,7 +199,7 @@ using tl_object_ptr = tl::unique_ptr<Type>;
|
||||||
* \return Wrapped pointer to the created TL-object.
|
* \return Wrapped pointer to the created TL-object.
|
||||||
*/
|
*/
|
||||||
template <class Type, class... Args>
|
template <class Type, class... Args>
|
||||||
tl_object_ptr<Type> make_tl_object(Args &&... args) {
|
tl_object_ptr<Type> make_tl_object(Args &&...args) {
|
||||||
return tl_object_ptr<Type>(new Type(std::forward<Args>(args)...));
|
return tl_object_ptr<Type>(new Type(std::forward<Args>(args)...));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue