Add class ChainId.
This commit is contained in:
parent
46e23a407f
commit
b845766bd1
|
@ -474,6 +474,7 @@ set(TDLIB_SOURCE
|
||||||
td/telegram/CallId.h
|
td/telegram/CallId.h
|
||||||
td/telegram/CallManager.h
|
td/telegram/CallManager.h
|
||||||
td/telegram/CallbackQueriesManager.h
|
td/telegram/CallbackQueriesManager.h
|
||||||
|
td/telegram/ChainId.h
|
||||||
td/telegram/ChannelId.h
|
td/telegram/ChannelId.h
|
||||||
td/telegram/ChatId.h
|
td/telegram/ChatId.h
|
||||||
td/telegram/ClientActor.h
|
td/telegram/ClientActor.h
|
||||||
|
|
37
td/telegram/ChainId.h
Normal file
37
td/telegram/ChainId.h
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
//
|
||||||
|
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
//
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "td/telegram/DialogId.h"
|
||||||
|
#include "td/telegram/FolderId.h"
|
||||||
|
#include "td/telegram/MessageContentType.h"
|
||||||
|
#include "td/telegram/PollId.h"
|
||||||
|
|
||||||
|
#include "td/utils/common.h"
|
||||||
|
|
||||||
|
namespace td {
|
||||||
|
|
||||||
|
class ChainId {
|
||||||
|
uint64 id = 0;
|
||||||
|
|
||||||
|
public:
|
||||||
|
ChainId(DialogId dialog_id, MessageContentType message_content_type = MessageContentType::None)
|
||||||
|
: id((static_cast<uint64>(dialog_id.get()) << 10) + get_message_content_chain_id(message_content_type)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
ChainId(FolderId folder_id) : id((static_cast<uint64>(folder_id.get() + (1 << 30)) << 10)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
ChainId(PollId poll_id) : id(static_cast<uint64>(poll_id.get())) {
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64 get() const {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace td
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include "td/telegram/AccessRights.h"
|
#include "td/telegram/AccessRights.h"
|
||||||
#include "td/telegram/AuthManager.h"
|
#include "td/telegram/AuthManager.h"
|
||||||
|
#include "td/telegram/ChainId.h"
|
||||||
#include "td/telegram/ContactsManager.h"
|
#include "td/telegram/ContactsManager.h"
|
||||||
#include "td/telegram/DialogId.h"
|
#include "td/telegram/DialogId.h"
|
||||||
#include "td/telegram/Global.h"
|
#include "td/telegram/Global.h"
|
||||||
|
@ -35,7 +36,7 @@ class SetGameScoreQuery final : public Td::ResultHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
void send(DialogId dialog_id, MessageId message_id, bool edit_message,
|
void send(DialogId dialog_id, MessageId message_id, bool edit_message,
|
||||||
tl_object_ptr<telegram_api::InputUser> input_user, int32 score, bool force, uint64 sequence_dispatcher_id) {
|
tl_object_ptr<telegram_api::InputUser> input_user, int32 score, bool force) {
|
||||||
int32 flags = 0;
|
int32 flags = 0;
|
||||||
if (edit_message) {
|
if (edit_message) {
|
||||||
flags |= telegram_api::messages_setGameScore::EDIT_MESSAGE_MASK;
|
flags |= telegram_api::messages_setGameScore::EDIT_MESSAGE_MASK;
|
||||||
|
@ -55,7 +56,7 @@ class SetGameScoreQuery final : public Td::ResultHandler {
|
||||||
send_query(G()->net_query_creator().create(
|
send_query(G()->net_query_creator().create(
|
||||||
telegram_api::messages_setGameScore(flags, false /*ignored*/, false /*ignored*/, std::move(input_peer),
|
telegram_api::messages_setGameScore(flags, false /*ignored*/, false /*ignored*/, std::move(input_peer),
|
||||||
message_id.get_server_message_id().get(), std::move(input_user), score),
|
message_id.get_server_message_id().get(), std::move(input_user), score),
|
||||||
{sequence_dispatcher_id}));
|
{{dialog_id}}));
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
void on_result(BufferSlice packet) final {
|
||||||
|
@ -227,8 +228,7 @@ void GameManager::set_game_score(FullMessageId full_message_id, bool edit_messag
|
||||||
send_closure(actor_id, &GameManager::on_set_game_score, full_message_id, std::move(promise));
|
send_closure(actor_id, &GameManager::on_set_game_score, full_message_id, std::move(promise));
|
||||||
});
|
});
|
||||||
td_->create_handler<SetGameScoreQuery>(std::move(query_promise))
|
td_->create_handler<SetGameScoreQuery>(std::move(query_promise))
|
||||||
->send(dialog_id, full_message_id.get_message_id(), edit_message, r_input_user.move_as_ok(), score, force,
|
->send(dialog_id, full_message_id.get_message_id(), edit_message, r_input_user.move_as_ok(), score, force);
|
||||||
MessagesManager::get_sequence_dispatcher_id(dialog_id, MessageContentType::None));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameManager::on_set_game_score(FullMessageId full_message_id,
|
void GameManager::on_set_game_score(FullMessageId full_message_id,
|
||||||
|
|
|
@ -341,4 +341,20 @@ bool can_have_message_content_caption(MessageContentType content_type) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64 get_message_content_chain_id(MessageContentType content_type) {
|
||||||
|
switch (content_type) {
|
||||||
|
case MessageContentType::Animation:
|
||||||
|
case MessageContentType::Audio:
|
||||||
|
case MessageContentType::Document:
|
||||||
|
case MessageContentType::Photo:
|
||||||
|
case MessageContentType::Sticker:
|
||||||
|
case MessageContentType::Video:
|
||||||
|
case MessageContentType::VideoNote:
|
||||||
|
case MessageContentType::VoiceNote:
|
||||||
|
return 1;
|
||||||
|
default:
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
|
|
@ -76,6 +76,8 @@ bool is_service_message_content(MessageContentType content_type);
|
||||||
|
|
||||||
bool can_have_message_content_caption(MessageContentType content_type);
|
bool can_have_message_content_caption(MessageContentType content_type);
|
||||||
|
|
||||||
|
uint64 get_message_content_chain_id(MessageContentType content_type);
|
||||||
|
|
||||||
struct MessageContentTypeHash {
|
struct MessageContentTypeHash {
|
||||||
std::size_t operator()(MessageContentType content_type) const {
|
std::size_t operator()(MessageContentType content_type) const {
|
||||||
return std::hash<int32>()(static_cast<int32>(content_type));
|
return std::hash<int32>()(static_cast<int32>(content_type));
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "td/telegram/MessagesManager.h"
|
#include "td/telegram/MessagesManager.h"
|
||||||
|
|
||||||
#include "td/telegram/AuthManager.h"
|
#include "td/telegram/AuthManager.h"
|
||||||
|
#include "td/telegram/ChainId.h"
|
||||||
#include "td/telegram/ChatId.h"
|
#include "td/telegram/ChatId.h"
|
||||||
#include "td/telegram/ConfigShared.h"
|
#include "td/telegram/ConfigShared.h"
|
||||||
#include "td/telegram/ContactsManager.h"
|
#include "td/telegram/ContactsManager.h"
|
||||||
|
@ -334,10 +335,10 @@ class GetPinnedDialogsQuery final : public Td::ResultHandler {
|
||||||
explicit GetPinnedDialogsQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
explicit GetPinnedDialogsQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
NetQueryRef send(FolderId folder_id, uint64 sequence_id) {
|
NetQueryRef send(FolderId folder_id) {
|
||||||
folder_id_ = folder_id;
|
folder_id_ = folder_id;
|
||||||
auto query =
|
auto query =
|
||||||
G()->net_query_creator().create(telegram_api::messages_getPinnedDialogs(folder_id.get()), {sequence_id});
|
G()->net_query_creator().create(telegram_api::messages_getPinnedDialogs(folder_id.get()), {{folder_id}});
|
||||||
auto result = query.get_weak();
|
auto result = query.get_weak();
|
||||||
send_query(std::move(query));
|
send_query(std::move(query));
|
||||||
return result;
|
return result;
|
||||||
|
@ -783,7 +784,7 @@ class GetDialogListQuery final : public Td::ResultHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
void send(FolderId folder_id, int32 offset_date, ServerMessageId offset_message_id, DialogId offset_dialog_id,
|
void send(FolderId folder_id, int32 offset_date, ServerMessageId offset_message_id, DialogId offset_dialog_id,
|
||||||
int32 limit, uint64 sequence_id) {
|
int32 limit) {
|
||||||
folder_id_ = folder_id;
|
folder_id_ = folder_id;
|
||||||
auto input_peer = MessagesManager::get_input_peer_force(offset_dialog_id);
|
auto input_peer = MessagesManager::get_input_peer_force(offset_dialog_id);
|
||||||
CHECK(input_peer != nullptr);
|
CHECK(input_peer != nullptr);
|
||||||
|
@ -793,7 +794,7 @@ class GetDialogListQuery final : public Td::ResultHandler {
|
||||||
send_query(G()->net_query_creator().create(
|
send_query(G()->net_query_creator().create(
|
||||||
telegram_api::messages_getDialogs(flags, false /*ignored*/, folder_id.get(), offset_date,
|
telegram_api::messages_getDialogs(flags, false /*ignored*/, folder_id.get(), offset_date,
|
||||||
offset_message_id.get(), std::move(input_peer), limit, 0),
|
offset_message_id.get(), std::move(input_peer), limit, 0),
|
||||||
{sequence_id}));
|
{{folder_id}}));
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
void on_result(BufferSlice packet) final {
|
||||||
|
@ -1841,7 +1842,7 @@ class ToggleDialogIsBlockedQuery final : public Td::ResultHandler {
|
||||||
explicit ToggleDialogIsBlockedQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
explicit ToggleDialogIsBlockedQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void send(DialogId dialog_id, bool is_blocked, uint64 sequence_dispatcher_id) {
|
void send(DialogId dialog_id, bool is_blocked) {
|
||||||
dialog_id_ = dialog_id;
|
dialog_id_ = dialog_id;
|
||||||
is_blocked_ = is_blocked;
|
is_blocked_ = is_blocked;
|
||||||
|
|
||||||
|
@ -1849,7 +1850,7 @@ class ToggleDialogIsBlockedQuery final : public Td::ResultHandler {
|
||||||
CHECK(input_peer != nullptr && input_peer->get_id() != telegram_api::inputPeerEmpty::ID);
|
CHECK(input_peer != nullptr && input_peer->get_id() != telegram_api::inputPeerEmpty::ID);
|
||||||
auto query = is_blocked ? G()->net_query_creator().create(telegram_api::contacts_block(std::move(input_peer)))
|
auto query = is_blocked ? G()->net_query_creator().create(telegram_api::contacts_block(std::move(input_peer)))
|
||||||
: G()->net_query_creator().create(telegram_api::contacts_unblock(std::move(input_peer)));
|
: G()->net_query_creator().create(telegram_api::contacts_unblock(std::move(input_peer)));
|
||||||
query->set_chain_ids({sequence_dispatcher_id});
|
query->set_chain_ids({{dialog_id, MessageContentType::Photo}, {dialog_id, MessageContentType::Text}});
|
||||||
send_query(std::move(query));
|
send_query(std::move(query));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3082,7 +3083,7 @@ class SaveDefaultSendAsQuery final : public Td::ResultHandler {
|
||||||
explicit SaveDefaultSendAsQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
explicit SaveDefaultSendAsQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void send(DialogId dialog_id, DialogId send_as_dialog_id, uint64 sequence_dispatcher_id) {
|
void send(DialogId dialog_id, DialogId send_as_dialog_id) {
|
||||||
auto input_peer = td_->messages_manager_->get_input_peer(dialog_id, AccessRights::Read);
|
auto input_peer = td_->messages_manager_->get_input_peer(dialog_id, AccessRights::Read);
|
||||||
CHECK(input_peer != nullptr);
|
CHECK(input_peer != nullptr);
|
||||||
|
|
||||||
|
@ -3091,7 +3092,7 @@ class SaveDefaultSendAsQuery final : public Td::ResultHandler {
|
||||||
|
|
||||||
send_query(G()->net_query_creator().create(
|
send_query(G()->net_query_creator().create(
|
||||||
telegram_api::messages_saveDefaultSendAs(std::move(input_peer), std::move(send_as_input_peer)),
|
telegram_api::messages_saveDefaultSendAs(std::move(input_peer), std::move(send_as_input_peer)),
|
||||||
{sequence_dispatcher_id}));
|
{{dialog_id, MessageContentType::Photo}, {dialog_id}}));
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
void on_result(BufferSlice packet) final {
|
||||||
|
@ -3120,7 +3121,7 @@ class SendMessageQuery final : public Td::ResultHandler {
|
||||||
void send(int32 flags, DialogId dialog_id, tl_object_ptr<telegram_api::InputPeer> as_input_peer,
|
void send(int32 flags, DialogId dialog_id, tl_object_ptr<telegram_api::InputPeer> as_input_peer,
|
||||||
MessageId reply_to_message_id, int32 schedule_date, tl_object_ptr<telegram_api::ReplyMarkup> &&reply_markup,
|
MessageId reply_to_message_id, int32 schedule_date, tl_object_ptr<telegram_api::ReplyMarkup> &&reply_markup,
|
||||||
vector<tl_object_ptr<telegram_api::MessageEntity>> &&entities, const string &text, int64 random_id,
|
vector<tl_object_ptr<telegram_api::MessageEntity>> &&entities, const string &text, int64 random_id,
|
||||||
NetQueryRef *send_query_ref, uint64 sequence_dispatcher_id) {
|
NetQueryRef *send_query_ref) {
|
||||||
random_id_ = random_id;
|
random_id_ = random_id;
|
||||||
dialog_id_ = dialog_id;
|
dialog_id_ = dialog_id;
|
||||||
|
|
||||||
|
@ -3141,7 +3142,7 @@ class SendMessageQuery final : public Td::ResultHandler {
|
||||||
flags, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/,
|
flags, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/,
|
||||||
std::move(input_peer), reply_to_message_id.get_server_message_id().get(), text, random_id,
|
std::move(input_peer), reply_to_message_id.get_server_message_id().get(), text, random_id,
|
||||||
std::move(reply_markup), std::move(entities), schedule_date, std::move(as_input_peer)),
|
std::move(reply_markup), std::move(entities), schedule_date, std::move(as_input_peer)),
|
||||||
{sequence_dispatcher_id});
|
{{dialog_id, MessageContentType::Text}});
|
||||||
if (G()->shared_config().get_option_boolean("use_quick_ack")) {
|
if (G()->shared_config().get_option_boolean("use_quick_ack")) {
|
||||||
query->quick_ack_promise_ = PromiseCreator::lambda(
|
query->quick_ack_promise_ = PromiseCreator::lambda(
|
||||||
[random_id](Unit) {
|
[random_id](Unit) {
|
||||||
|
@ -3307,7 +3308,7 @@ class SendMultiMediaQuery final : public Td::ResultHandler {
|
||||||
public:
|
public:
|
||||||
void send(int32 flags, DialogId dialog_id, tl_object_ptr<telegram_api::InputPeer> as_input_peer,
|
void send(int32 flags, DialogId dialog_id, tl_object_ptr<telegram_api::InputPeer> as_input_peer,
|
||||||
MessageId reply_to_message_id, int32 schedule_date, vector<FileId> &&file_ids,
|
MessageId reply_to_message_id, int32 schedule_date, vector<FileId> &&file_ids,
|
||||||
vector<tl_object_ptr<telegram_api::inputSingleMedia>> &&input_single_media, uint64 sequence_dispatcher_id) {
|
vector<tl_object_ptr<telegram_api::inputSingleMedia>> &&input_single_media, bool is_copy) {
|
||||||
for (auto &single_media : input_single_media) {
|
for (auto &single_media : input_single_media) {
|
||||||
random_ids_.push_back(single_media->random_id_);
|
random_ids_.push_back(single_media->random_id_);
|
||||||
CHECK(FileManager::extract_was_uploaded(single_media->media_) == false);
|
CHECK(FileManager::extract_was_uploaded(single_media->media_) == false);
|
||||||
|
@ -3332,7 +3333,8 @@ class SendMultiMediaQuery final : public Td::ResultHandler {
|
||||||
false /*ignored*/, std::move(input_peer),
|
false /*ignored*/, std::move(input_peer),
|
||||||
reply_to_message_id.get_server_message_id().get(),
|
reply_to_message_id.get_server_message_id().get(),
|
||||||
std::move(input_single_media), schedule_date, std::move(as_input_peer)),
|
std::move(input_single_media), schedule_date, std::move(as_input_peer)),
|
||||||
{sequence_dispatcher_id}));
|
{{dialog_id, is_copy ? MessageContentType::None : MessageContentType::Photo},
|
||||||
|
{dialog_id, MessageContentType::Photo}}));
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
void on_result(BufferSlice packet) final {
|
||||||
|
@ -3420,8 +3422,8 @@ class SendMediaQuery final : public Td::ResultHandler {
|
||||||
tl_object_ptr<telegram_api::InputPeer> as_input_peer, MessageId reply_to_message_id, int32 schedule_date,
|
tl_object_ptr<telegram_api::InputPeer> as_input_peer, MessageId reply_to_message_id, int32 schedule_date,
|
||||||
tl_object_ptr<telegram_api::ReplyMarkup> &&reply_markup,
|
tl_object_ptr<telegram_api::ReplyMarkup> &&reply_markup,
|
||||||
vector<tl_object_ptr<telegram_api::MessageEntity>> &&entities, const string &text,
|
vector<tl_object_ptr<telegram_api::MessageEntity>> &&entities, const string &text,
|
||||||
tl_object_ptr<telegram_api::InputMedia> &&input_media, int64 random_id, NetQueryRef *send_query_ref,
|
tl_object_ptr<telegram_api::InputMedia> &&input_media, MessageContentType content_type, int64 random_id,
|
||||||
uint64 sequence_dispatcher_id) {
|
NetQueryRef *send_query_ref) {
|
||||||
random_id_ = random_id;
|
random_id_ = random_id;
|
||||||
file_id_ = file_id;
|
file_id_ = file_id;
|
||||||
thumbnail_file_id_ = thumbnail_file_id;
|
thumbnail_file_id_ = thumbnail_file_id;
|
||||||
|
@ -3447,7 +3449,7 @@ class SendMediaQuery final : public Td::ResultHandler {
|
||||||
flags, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/, std::move(input_peer),
|
flags, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/, std::move(input_peer),
|
||||||
reply_to_message_id.get_server_message_id().get(), std::move(input_media), text, random_id,
|
reply_to_message_id.get_server_message_id().get(), std::move(input_media), text, random_id,
|
||||||
std::move(reply_markup), std::move(entities), schedule_date, std::move(as_input_peer)),
|
std::move(reply_markup), std::move(entities), schedule_date, std::move(as_input_peer)),
|
||||||
{sequence_dispatcher_id});
|
{{dialog_id, content_type}});
|
||||||
if (G()->shared_config().get_option_boolean("use_quick_ack") && was_uploaded_) {
|
if (G()->shared_config().get_option_boolean("use_quick_ack") && was_uploaded_) {
|
||||||
query->quick_ack_promise_ = PromiseCreator::lambda(
|
query->quick_ack_promise_ = PromiseCreator::lambda(
|
||||||
[random_id](Unit) {
|
[random_id](Unit) {
|
||||||
|
@ -3605,7 +3607,7 @@ class SendScheduledMessageQuery final : public Td::ResultHandler {
|
||||||
explicit SendScheduledMessageQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
explicit SendScheduledMessageQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void send(DialogId dialog_id, MessageId message_id, uint64 sequence_dispatcher_id) {
|
void send(DialogId dialog_id, MessageId message_id) {
|
||||||
dialog_id_ = dialog_id;
|
dialog_id_ = dialog_id;
|
||||||
|
|
||||||
auto input_peer = td_->messages_manager_->get_input_peer(dialog_id, AccessRights::Edit);
|
auto input_peer = td_->messages_manager_->get_input_peer(dialog_id, AccessRights::Edit);
|
||||||
|
@ -3616,7 +3618,7 @@ class SendScheduledMessageQuery final : public Td::ResultHandler {
|
||||||
int32 server_message_id = message_id.get_scheduled_server_message_id().get();
|
int32 server_message_id = message_id.get_scheduled_server_message_id().get();
|
||||||
send_query(G()->net_query_creator().create(
|
send_query(G()->net_query_creator().create(
|
||||||
telegram_api::messages_sendScheduledMessages(std::move(input_peer), {server_message_id}),
|
telegram_api::messages_sendScheduledMessages(std::move(input_peer), {server_message_id}),
|
||||||
{sequence_dispatcher_id}));
|
{{dialog_id, MessageContentType::Text}, {dialog_id, MessageContentType::Photo}}));
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
void on_result(BufferSlice packet) final {
|
||||||
|
@ -3657,8 +3659,7 @@ class EditMessageQuery final : public Td::ResultHandler {
|
||||||
void send(int32 flags, DialogId dialog_id, MessageId message_id, const string &text,
|
void send(int32 flags, DialogId dialog_id, MessageId message_id, const string &text,
|
||||||
vector<tl_object_ptr<telegram_api::MessageEntity>> &&entities,
|
vector<tl_object_ptr<telegram_api::MessageEntity>> &&entities,
|
||||||
tl_object_ptr<telegram_api::InputMedia> &&input_media,
|
tl_object_ptr<telegram_api::InputMedia> &&input_media,
|
||||||
tl_object_ptr<telegram_api::ReplyMarkup> &&reply_markup, int32 schedule_date,
|
tl_object_ptr<telegram_api::ReplyMarkup> &&reply_markup, int32 schedule_date) {
|
||||||
uint64 sequence_dispatcher_id) {
|
|
||||||
dialog_id_ = dialog_id;
|
dialog_id_ = dialog_id;
|
||||||
|
|
||||||
if (input_media != nullptr && false) {
|
if (input_media != nullptr && false) {
|
||||||
|
@ -3692,7 +3693,7 @@ class EditMessageQuery final : public Td::ResultHandler {
|
||||||
telegram_api::messages_editMessage(flags, false /*ignored*/, std::move(input_peer), server_message_id, text,
|
telegram_api::messages_editMessage(flags, false /*ignored*/, std::move(input_peer), server_message_id, text,
|
||||||
std::move(input_media), std::move(reply_markup), std::move(entities),
|
std::move(input_media), std::move(reply_markup), std::move(entities),
|
||||||
schedule_date),
|
schedule_date),
|
||||||
{sequence_dispatcher_id}));
|
{{dialog_id}}));
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
void on_result(BufferSlice packet) final {
|
||||||
|
@ -3786,7 +3787,7 @@ class ForwardMessagesQuery final : public Td::ResultHandler {
|
||||||
|
|
||||||
void send(int32 flags, DialogId to_dialog_id, DialogId from_dialog_id,
|
void send(int32 flags, DialogId to_dialog_id, DialogId from_dialog_id,
|
||||||
tl_object_ptr<telegram_api::InputPeer> as_input_peer, const vector<MessageId> &message_ids,
|
tl_object_ptr<telegram_api::InputPeer> as_input_peer, const vector<MessageId> &message_ids,
|
||||||
vector<int64> &&random_ids, int32 schedule_date, uint64 sequence_dispatcher_id) {
|
vector<int64> &&random_ids, int32 schedule_date) {
|
||||||
random_ids_ = random_ids;
|
random_ids_ = random_ids;
|
||||||
from_dialog_id_ = from_dialog_id;
|
from_dialog_id_ = from_dialog_id;
|
||||||
to_dialog_id_ = to_dialog_id;
|
to_dialog_id_ = to_dialog_id;
|
||||||
|
@ -3810,7 +3811,7 @@ class ForwardMessagesQuery final : public Td::ResultHandler {
|
||||||
flags, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/,
|
flags, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/,
|
||||||
false /*ignored*/, std::move(from_input_peer), MessagesManager::get_server_message_ids(message_ids),
|
false /*ignored*/, std::move(from_input_peer), MessagesManager::get_server_message_ids(message_ids),
|
||||||
std::move(random_ids), std::move(to_input_peer), schedule_date, std::move(as_input_peer)),
|
std::move(random_ids), std::move(to_input_peer), schedule_date, std::move(as_input_peer)),
|
||||||
{sequence_dispatcher_id});
|
{{to_dialog_id, MessageContentType::Text}, {to_dialog_id, MessageContentType::Photo}});
|
||||||
if (G()->shared_config().get_option_boolean("use_quick_ack")) {
|
if (G()->shared_config().get_option_boolean("use_quick_ack")) {
|
||||||
query->quick_ack_promise_ = PromiseCreator::lambda(
|
query->quick_ack_promise_ = PromiseCreator::lambda(
|
||||||
[random_ids = random_ids_](Unit) {
|
[random_ids = random_ids_](Unit) {
|
||||||
|
@ -12229,8 +12230,7 @@ void MessagesManager::repair_server_dialog_total_count(DialogListId dialog_list_
|
||||||
|
|
||||||
LOG(INFO) << "Repair total chat count in " << dialog_list_id;
|
LOG(INFO) << "Repair total chat count in " << dialog_list_id;
|
||||||
td_->create_handler<GetDialogListQuery>(Promise<Unit>())
|
td_->create_handler<GetDialogListQuery>(Promise<Unit>())
|
||||||
->send(dialog_list_id.get_folder_id(), 2147483647, ServerMessageId(), DialogId(), 1,
|
->send(dialog_list_id.get_folder_id(), 2147483647, ServerMessageId(), DialogId(), 1);
|
||||||
get_sequence_dispatcher_id(DialogId(), MessageContentType::None));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesManager::repair_secret_chat_total_count(DialogListId dialog_list_id) {
|
void MessagesManager::repair_secret_chat_total_count(DialogListId dialog_list_id) {
|
||||||
|
@ -16595,8 +16595,7 @@ void MessagesManager::load_folder_dialog_list(FolderId folder_id, int32 limit, b
|
||||||
td_->create_handler<GetDialogListQuery>(multipromise.get_promise())
|
td_->create_handler<GetDialogListQuery>(multipromise.get_promise())
|
||||||
->send(folder_id, folder.last_server_dialog_date_.get_date(),
|
->send(folder_id, folder.last_server_dialog_date_.get_date(),
|
||||||
folder.last_server_dialog_date_.get_message_id().get_next_server_message_id().get_server_message_id(),
|
folder.last_server_dialog_date_.get_message_id().get_next_server_message_id().get_server_message_id(),
|
||||||
folder.last_server_dialog_date_.get_dialog_id(), int32{MAX_GET_DIALOGS},
|
folder.last_server_dialog_date_.get_dialog_id(), int32{MAX_GET_DIALOGS});
|
||||||
get_sequence_dispatcher_id(DialogId(), MessageContentType::None));
|
|
||||||
is_query_sent = true;
|
is_query_sent = true;
|
||||||
}
|
}
|
||||||
if (folder_id == FolderId::main() && folder.last_server_dialog_date_ == MIN_DIALOG_DATE) {
|
if (folder_id == FolderId::main() && folder.last_server_dialog_date_ == MIN_DIALOG_DATE) {
|
||||||
|
@ -16862,8 +16861,7 @@ void MessagesManager::reload_pinned_dialogs(DialogListId dialog_list_id, Promise
|
||||||
CHECK(!td_->auth_manager_->is_bot());
|
CHECK(!td_->auth_manager_->is_bot());
|
||||||
|
|
||||||
if (dialog_list_id.is_folder()) {
|
if (dialog_list_id.is_folder()) {
|
||||||
td_->create_handler<GetPinnedDialogsQuery>(std::move(promise))
|
td_->create_handler<GetPinnedDialogsQuery>(std::move(promise))->send(dialog_list_id.get_folder_id());
|
||||||
->send(dialog_list_id.get_folder_id(), get_sequence_dispatcher_id(DialogId(), MessageContentType::None));
|
|
||||||
} else if (dialog_list_id.is_filter()) {
|
} else if (dialog_list_id.is_filter()) {
|
||||||
schedule_dialog_filters_reload(0.0);
|
schedule_dialog_filters_reload(0.0);
|
||||||
dialog_filter_reload_queries_.push_back(std::move(promise));
|
dialog_filter_reload_queries_.push_back(std::move(promise));
|
||||||
|
@ -20018,7 +20016,7 @@ void MessagesManager::toggle_dialog_is_blocked_on_server(DialogId dialog_id, boo
|
||||||
}
|
}
|
||||||
|
|
||||||
td_->create_handler<ToggleDialogIsBlockedQuery>(get_erase_log_event_promise(log_event_id))
|
td_->create_handler<ToggleDialogIsBlockedQuery>(get_erase_log_event_promise(log_event_id))
|
||||||
->send(dialog_id, is_blocked, get_sequence_dispatcher_id(dialog_id, MessageContentType::Text));
|
->send(dialog_id, is_blocked);
|
||||||
}
|
}
|
||||||
|
|
||||||
Status MessagesManager::toggle_dialog_silent_send_message(DialogId dialog_id, bool silent_send_message) {
|
Status MessagesManager::toggle_dialog_silent_send_message(DialogId dialog_id, bool silent_send_message) {
|
||||||
|
@ -24773,7 +24771,7 @@ void MessagesManager::cancel_send_message_query(DialogId dialog_id, Message *m)
|
||||||
|
|
||||||
if (!m->message_id.is_scheduled() && G()->parameters().use_file_db &&
|
if (!m->message_id.is_scheduled() && G()->parameters().use_file_db &&
|
||||||
!m->is_copy) { // ResourceManager::Mode::Baseline
|
!m->is_copy) { // ResourceManager::Mode::Baseline
|
||||||
auto queue_id = get_sequence_dispatcher_id(dialog_id, m->content->get_type());
|
auto queue_id = ChainId(dialog_id, m->content->get_type()).get();
|
||||||
if (queue_id & 1) {
|
if (queue_id & 1) {
|
||||||
auto queue_it = yet_unsent_media_queues_.find(queue_id);
|
auto queue_it = yet_unsent_media_queues_.find(queue_id);
|
||||||
if (queue_it != yet_unsent_media_queues_.end()) {
|
if (queue_it != yet_unsent_media_queues_.end()) {
|
||||||
|
@ -24975,9 +24973,7 @@ void MessagesManager::set_dialog_default_send_message_as_dialog_id(DialogId dial
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO save order with all types of messages
|
td_->create_handler<SaveDefaultSendAsQuery>(std::move(promise))->send(dialog_id, message_sender_dialog_id);
|
||||||
td_->create_handler<SaveDefaultSendAsQuery>(std::move(promise))
|
|
||||||
->send(dialog_id, message_sender_dialog_id, get_sequence_dispatcher_id(dialog_id, MessageContentType::Text));
|
|
||||||
|
|
||||||
on_update_dialog_default_send_message_as_dialog_id(dialog_id, message_sender_dialog_id, true);
|
on_update_dialog_default_send_message_as_dialog_id(dialog_id, message_sender_dialog_id, true);
|
||||||
}
|
}
|
||||||
|
@ -25441,8 +25437,7 @@ void MessagesManager::on_message_media_uploaded(DialogId dialog_id, const Messag
|
||||||
td_->create_handler<EditMessageQuery>(std::move(promise))
|
td_->create_handler<EditMessageQuery>(std::move(promise))
|
||||||
->send(1 << 11, dialog_id, message_id, caption == nullptr ? "" : caption->text,
|
->send(1 << 11, dialog_id, message_id, caption == nullptr ? "" : caption->text,
|
||||||
get_input_message_entities(td_->contacts_manager_.get(), caption, "edit_message_media"),
|
get_input_message_entities(td_->contacts_manager_.get(), caption, "edit_message_media"),
|
||||||
std::move(input_media), std::move(input_reply_markup), schedule_date,
|
std::move(input_media), std::move(input_reply_markup), schedule_date);
|
||||||
get_sequence_dispatcher_id(dialog_id, MessageContentType::None));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25467,8 +25462,8 @@ void MessagesManager::on_message_media_uploaded(DialogId dialog_id, const Messag
|
||||||
file_id, thumbnail_file_id, get_message_flags(m), dialog_id, get_send_message_as_input_peer(m),
|
file_id, thumbnail_file_id, get_message_flags(m), dialog_id, get_send_message_as_input_peer(m),
|
||||||
m->reply_to_message_id, get_message_schedule_date(m), get_input_reply_markup(m->reply_markup),
|
m->reply_to_message_id, get_message_schedule_date(m), get_input_reply_markup(m->reply_markup),
|
||||||
get_input_message_entities(td_->contacts_manager_.get(), caption, "on_message_media_uploaded"),
|
get_input_message_entities(td_->contacts_manager_.get(), caption, "on_message_media_uploaded"),
|
||||||
caption == nullptr ? "" : caption->text, std::move(input_media), random_id, &m->send_query_ref,
|
caption == nullptr ? "" : caption->text, std::move(input_media),
|
||||||
get_sequence_dispatcher_id(dialog_id, m->is_copy ? MessageContentType::None : m->content->get_type()));
|
m->is_copy ? MessageContentType::None : m->content->get_type(), random_id, &m->send_query_ref);
|
||||||
}));
|
}));
|
||||||
} else {
|
} else {
|
||||||
switch (input_media->get_id()) {
|
switch (input_media->get_id()) {
|
||||||
|
@ -25832,10 +25827,9 @@ void MessagesManager::do_send_message_group(int64 media_album_id) {
|
||||||
if (input_single_media.empty()) {
|
if (input_single_media.empty()) {
|
||||||
LOG(INFO) << "Media group " << media_album_id << " from " << dialog_id << " is empty";
|
LOG(INFO) << "Media group " << media_album_id << " from " << dialog_id << " is empty";
|
||||||
}
|
}
|
||||||
td_->create_handler<SendMultiMediaQuery>()->send(
|
td_->create_handler<SendMultiMediaQuery>()->send(flags, dialog_id, std::move(as_input_peer), reply_to_message_id,
|
||||||
flags, dialog_id, std::move(as_input_peer), reply_to_message_id, schedule_date, std::move(file_ids),
|
schedule_date, std::move(file_ids), std::move(input_single_media),
|
||||||
std::move(input_single_media),
|
is_copy);
|
||||||
get_sequence_dispatcher_id(dialog_id, is_copy ? MessageContentType::None : MessageContentType::Photo));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesManager::on_text_message_ready_to_send(DialogId dialog_id, MessageId message_id) {
|
void MessagesManager::on_text_message_ready_to_send(DialogId dialog_id, MessageId message_id) {
|
||||||
|
@ -25858,8 +25852,6 @@ void MessagesManager::on_text_message_ready_to_send(DialogId dialog_id, MessageI
|
||||||
CHECK(!message_id.is_scheduled());
|
CHECK(!message_id.is_scheduled());
|
||||||
send_secret_message(dialog_id, m, get_secret_input_media(content, td_, nullptr, BufferSlice()));
|
send_secret_message(dialog_id, m, get_secret_input_media(content, td_, nullptr, BufferSlice()));
|
||||||
} else {
|
} else {
|
||||||
auto content_type = content->get_type();
|
|
||||||
|
|
||||||
const FormattedText *message_text = get_message_content_text(content);
|
const FormattedText *message_text = get_message_content_text(content);
|
||||||
CHECK(message_text != nullptr);
|
CHECK(message_text != nullptr);
|
||||||
|
|
||||||
|
@ -25868,7 +25860,7 @@ void MessagesManager::on_text_message_ready_to_send(DialogId dialog_id, MessageI
|
||||||
get_message_flags(m), dialog_id, get_send_message_as_input_peer(m), m->reply_to_message_id,
|
get_message_flags(m), dialog_id, get_send_message_as_input_peer(m), m->reply_to_message_id,
|
||||||
get_message_schedule_date(m), get_input_reply_markup(m->reply_markup),
|
get_message_schedule_date(m), get_input_reply_markup(m->reply_markup),
|
||||||
get_input_message_entities(td_->contacts_manager_.get(), message_text->entities, "do_send_message"),
|
get_input_message_entities(td_->contacts_manager_.get(), message_text->entities, "do_send_message"),
|
||||||
message_text->text, random_id, &m->send_query_ref, get_sequence_dispatcher_id(dialog_id, content_type));
|
message_text->text, random_id, &m->send_query_ref);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25884,7 +25876,7 @@ void MessagesManager::on_media_message_ready_to_send(DialogId dialog_id, Message
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto queue_id = get_sequence_dispatcher_id(dialog_id, MessageContentType::Photo);
|
auto queue_id = ChainId(dialog_id, MessageContentType::Photo).get();
|
||||||
CHECK(queue_id & 1);
|
CHECK(queue_id & 1);
|
||||||
auto &queue = yet_unsent_media_queues_[queue_id];
|
auto &queue = yet_unsent_media_queues_[queue_id];
|
||||||
auto it = queue.find(message_id);
|
auto it = queue.find(message_id);
|
||||||
|
@ -25910,7 +25902,7 @@ void MessagesManager::on_media_message_ready_to_send(DialogId dialog_id, Message
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesManager::on_yet_unsent_media_queue_updated(DialogId dialog_id) {
|
void MessagesManager::on_yet_unsent_media_queue_updated(DialogId dialog_id) {
|
||||||
auto queue_id = get_sequence_dispatcher_id(dialog_id, MessageContentType::Photo);
|
auto queue_id = ChainId(dialog_id, MessageContentType::Photo).get();
|
||||||
CHECK(queue_id & 1);
|
CHECK(queue_id & 1);
|
||||||
while (true) {
|
while (true) {
|
||||||
auto it = yet_unsent_media_queues_.find(queue_id);
|
auto it = yet_unsent_media_queues_.find(queue_id);
|
||||||
|
@ -26587,8 +26579,7 @@ void MessagesManager::edit_message_text(FullMessageId full_message_id,
|
||||||
->send(flags, dialog_id, m->message_id, input_message_text.text.text,
|
->send(flags, dialog_id, m->message_id, input_message_text.text.text,
|
||||||
get_input_message_entities(td_->contacts_manager_.get(), input_message_text.text.entities,
|
get_input_message_entities(td_->contacts_manager_.get(), input_message_text.text.entities,
|
||||||
"edit_message_text"),
|
"edit_message_text"),
|
||||||
nullptr, std::move(input_reply_markup), get_message_schedule_date(m),
|
nullptr, std::move(input_reply_markup), get_message_schedule_date(m));
|
||||||
get_sequence_dispatcher_id(dialog_id, MessageContentType::None));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesManager::edit_message_live_location(FullMessageId full_message_id,
|
void MessagesManager::edit_message_live_location(FullMessageId full_message_id,
|
||||||
|
@ -26648,8 +26639,7 @@ void MessagesManager::edit_message_live_location(FullMessageId full_message_id,
|
||||||
flags, false /*ignored*/, location.get_input_geo_point(), heading, 0, proximity_alert_radius);
|
flags, false /*ignored*/, location.get_input_geo_point(), heading, 0, proximity_alert_radius);
|
||||||
td_->create_handler<EditMessageQuery>(std::move(promise))
|
td_->create_handler<EditMessageQuery>(std::move(promise))
|
||||||
->send(0, dialog_id, m->message_id, string(), vector<tl_object_ptr<telegram_api::MessageEntity>>(),
|
->send(0, dialog_id, m->message_id, string(), vector<tl_object_ptr<telegram_api::MessageEntity>>(),
|
||||||
std::move(input_media), std::move(input_reply_markup), get_message_schedule_date(m),
|
std::move(input_media), std::move(input_reply_markup), get_message_schedule_date(m));
|
||||||
get_sequence_dispatcher_id(dialog_id, MessageContentType::None));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesManager::cancel_edit_message_media(DialogId dialog_id, Message *m, Slice error_message) {
|
void MessagesManager::cancel_edit_message_media(DialogId dialog_id, Message *m, Slice error_message) {
|
||||||
|
@ -26876,8 +26866,7 @@ void MessagesManager::edit_message_caption(FullMessageId full_message_id,
|
||||||
td_->create_handler<EditMessageQuery>(std::move(promise))
|
td_->create_handler<EditMessageQuery>(std::move(promise))
|
||||||
->send(1 << 11, dialog_id, m->message_id, caption.text,
|
->send(1 << 11, dialog_id, m->message_id, caption.text,
|
||||||
get_input_message_entities(td_->contacts_manager_.get(), caption.entities, "edit_message_caption"),
|
get_input_message_entities(td_->contacts_manager_.get(), caption.entities, "edit_message_caption"),
|
||||||
nullptr, std::move(input_reply_markup), get_message_schedule_date(m),
|
nullptr, std::move(input_reply_markup), get_message_schedule_date(m));
|
||||||
get_sequence_dispatcher_id(dialog_id, MessageContentType::None));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesManager::edit_message_reply_markup(FullMessageId full_message_id,
|
void MessagesManager::edit_message_reply_markup(FullMessageId full_message_id,
|
||||||
|
@ -26915,8 +26904,7 @@ void MessagesManager::edit_message_reply_markup(FullMessageId full_message_id,
|
||||||
auto input_reply_markup = get_input_reply_markup(r_new_reply_markup.ok());
|
auto input_reply_markup = get_input_reply_markup(r_new_reply_markup.ok());
|
||||||
td_->create_handler<EditMessageQuery>(std::move(promise))
|
td_->create_handler<EditMessageQuery>(std::move(promise))
|
||||||
->send(0, dialog_id, m->message_id, string(), vector<tl_object_ptr<telegram_api::MessageEntity>>(), nullptr,
|
->send(0, dialog_id, m->message_id, string(), vector<tl_object_ptr<telegram_api::MessageEntity>>(), nullptr,
|
||||||
std::move(input_reply_markup), get_message_schedule_date(m),
|
std::move(input_reply_markup), get_message_schedule_date(m));
|
||||||
get_sequence_dispatcher_id(dialog_id, MessageContentType::None));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesManager::edit_inline_message_text(const string &inline_message_id,
|
void MessagesManager::edit_inline_message_text(const string &inline_message_id,
|
||||||
|
@ -27147,10 +27135,9 @@ void MessagesManager::edit_message_scheduling_state(
|
||||||
if (schedule_date > 0) {
|
if (schedule_date > 0) {
|
||||||
td_->create_handler<EditMessageQuery>(std::move(promise))
|
td_->create_handler<EditMessageQuery>(std::move(promise))
|
||||||
->send(0, dialog_id, m->message_id, string(), vector<tl_object_ptr<telegram_api::MessageEntity>>(), nullptr,
|
->send(0, dialog_id, m->message_id, string(), vector<tl_object_ptr<telegram_api::MessageEntity>>(), nullptr,
|
||||||
nullptr, schedule_date, get_sequence_dispatcher_id(dialog_id, MessageContentType::None));
|
nullptr, schedule_date);
|
||||||
} else {
|
} else {
|
||||||
td_->create_handler<SendScheduledMessageQuery>(std::move(promise))
|
td_->create_handler<SendScheduledMessageQuery>(std::move(promise))->send(dialog_id, m->message_id);
|
||||||
->send(dialog_id, m->message_id, get_sequence_dispatcher_id(dialog_id, MessageContentType::None));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27682,7 +27669,7 @@ void MessagesManager::do_forward_messages(DialogId to_dialog_id, DialogId from_d
|
||||||
transform(messages, [this, to_dialog_id](const Message *m) { return begin_send_message(to_dialog_id, m); });
|
transform(messages, [this, to_dialog_id](const Message *m) { return begin_send_message(to_dialog_id, m); });
|
||||||
td_->create_handler<ForwardMessagesQuery>(get_erase_log_event_promise(log_event_id))
|
td_->create_handler<ForwardMessagesQuery>(get_erase_log_event_promise(log_event_id))
|
||||||
->send(flags, to_dialog_id, from_dialog_id, get_send_message_as_input_peer(messages[0]), message_ids,
|
->send(flags, to_dialog_id, from_dialog_id, get_send_message_as_input_peer(messages[0]), message_ids,
|
||||||
std::move(random_ids), schedule_date, get_sequence_dispatcher_id(to_dialog_id, MessageContentType::None));
|
std::move(random_ids), schedule_date);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<td_api::object_ptr<td_api::message>> MessagesManager::forward_message(
|
Result<td_api::object_ptr<td_api::message>> MessagesManager::forward_message(
|
||||||
|
@ -32619,7 +32606,7 @@ void MessagesManager::on_send_dialog_action_timeout(DialogId dialog_id) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto queue_id = get_sequence_dispatcher_id(dialog_id, MessageContentType::Photo);
|
auto queue_id = ChainId(dialog_id, MessageContentType::Photo).get();
|
||||||
CHECK(queue_id & 1);
|
CHECK(queue_id & 1);
|
||||||
|
|
||||||
auto queue_it = yet_unsent_media_queues_.find(queue_id);
|
auto queue_it = yet_unsent_media_queues_.find(queue_id);
|
||||||
|
@ -34115,7 +34102,7 @@ MessagesManager::Message *MessagesManager::add_message_to_dialog(Dialog *d, uniq
|
||||||
|
|
||||||
if (G()->parameters().use_file_db && message_id.is_yet_unsent() && !message->via_bot_user_id.is_valid() &&
|
if (G()->parameters().use_file_db && message_id.is_yet_unsent() && !message->via_bot_user_id.is_valid() &&
|
||||||
!message->hide_via_bot && !message->is_copy) {
|
!message->hide_via_bot && !message->is_copy) {
|
||||||
auto queue_id = get_sequence_dispatcher_id(dialog_id, message_content_type);
|
auto queue_id = ChainId(dialog_id, message_content_type).get();
|
||||||
if (queue_id & 1) {
|
if (queue_id & 1) {
|
||||||
LOG(INFO) << "Add " << message_id << " from " << source << " to queue " << queue_id;
|
LOG(INFO) << "Add " << message_id << " from " << source << " to queue " << queue_id;
|
||||||
yet_unsent_media_queues_[queue_id][message_id]; // reserve place for promise
|
yet_unsent_media_queues_[queue_id][message_id]; // reserve place for promise
|
||||||
|
@ -36847,22 +36834,6 @@ void MessagesManager::update_list_last_dialog_date(DialogList &list) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64 MessagesManager::get_sequence_dispatcher_id(DialogId dialog_id, MessageContentType message_content_type) {
|
|
||||||
switch (message_content_type) {
|
|
||||||
case MessageContentType::Animation:
|
|
||||||
case MessageContentType::Audio:
|
|
||||||
case MessageContentType::Document:
|
|
||||||
case MessageContentType::Photo:
|
|
||||||
case MessageContentType::Sticker:
|
|
||||||
case MessageContentType::Video:
|
|
||||||
case MessageContentType::VideoNote:
|
|
||||||
case MessageContentType::VoiceNote:
|
|
||||||
return static_cast<uint64>(dialog_id.get() * 2 + 1);
|
|
||||||
default:
|
|
||||||
return static_cast<uint64>(dialog_id.get() * 2 + 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MessagesManager::Dialog *MessagesManager::get_dialog(DialogId dialog_id) {
|
MessagesManager::Dialog *MessagesManager::get_dialog(DialogId dialog_id) {
|
||||||
auto it = dialogs_.find(dialog_id);
|
auto it = dialogs_.find(dialog_id);
|
||||||
return it == dialogs_.end() ? nullptr : it->second.get();
|
return it == dialogs_.end() ? nullptr : it->second.get();
|
||||||
|
|
|
@ -973,8 +973,6 @@ class MessagesManager final : public Actor {
|
||||||
|
|
||||||
void get_current_state(vector<td_api::object_ptr<td_api::Update>> &updates) const;
|
void get_current_state(vector<td_api::object_ptr<td_api::Update>> &updates) const;
|
||||||
|
|
||||||
static uint64 get_sequence_dispatcher_id(DialogId dialog_id, MessageContentType message_content_type);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class PendingPtsUpdate {
|
class PendingPtsUpdate {
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include "td/telegram/AccessRights.h"
|
#include "td/telegram/AccessRights.h"
|
||||||
#include "td/telegram/AuthManager.h"
|
#include "td/telegram/AuthManager.h"
|
||||||
|
#include "td/telegram/ChainId.h"
|
||||||
#include "td/telegram/ContactsManager.h"
|
#include "td/telegram/ContactsManager.h"
|
||||||
#include "td/telegram/Dependencies.h"
|
#include "td/telegram/Dependencies.h"
|
||||||
#include "td/telegram/DialogId.h"
|
#include "td/telegram/DialogId.h"
|
||||||
|
@ -144,7 +145,8 @@ class SendVoteQuery final : public Td::ResultHandler {
|
||||||
explicit SendVoteQuery(Promise<tl_object_ptr<telegram_api::Updates>> &&promise) : promise_(std::move(promise)) {
|
explicit SendVoteQuery(Promise<tl_object_ptr<telegram_api::Updates>> &&promise) : promise_(std::move(promise)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void send(FullMessageId full_message_id, vector<BufferSlice> &&options, uint64 generation, NetQueryRef *query_ref) {
|
void send(FullMessageId full_message_id, vector<BufferSlice> &&options, PollId poll_id, uint64 generation,
|
||||||
|
NetQueryRef *query_ref) {
|
||||||
dialog_id_ = full_message_id.get_dialog_id();
|
dialog_id_ = full_message_id.get_dialog_id();
|
||||||
auto input_peer = td_->messages_manager_->get_input_peer(dialog_id_, AccessRights::Read);
|
auto input_peer = td_->messages_manager_->get_input_peer(dialog_id_, AccessRights::Read);
|
||||||
if (input_peer == nullptr) {
|
if (input_peer == nullptr) {
|
||||||
|
@ -153,9 +155,8 @@ class SendVoteQuery final : public Td::ResultHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
auto message_id = full_message_id.get_message_id().get_server_message_id().get();
|
auto message_id = full_message_id.get_message_id().get_server_message_id().get();
|
||||||
auto sequence_id = static_cast<uint64>(-1);
|
|
||||||
auto query = G()->net_query_creator().create(
|
auto query = G()->net_query_creator().create(
|
||||||
telegram_api::messages_sendVote(std::move(input_peer), message_id, std::move(options)), {sequence_id});
|
telegram_api::messages_sendVote(std::move(input_peer), message_id, std::move(options)), {{poll_id}});
|
||||||
*query_ref = query.get_weak();
|
*query_ref = query.get_weak();
|
||||||
send_query(std::move(query));
|
send_query(std::move(query));
|
||||||
}
|
}
|
||||||
|
@ -185,7 +186,7 @@ class StopPollQuery final : public Td::ResultHandler {
|
||||||
explicit StopPollQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
explicit StopPollQuery(Promise<Unit> &&promise) : promise_(std::move(promise)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void send(FullMessageId full_message_id, unique_ptr<ReplyMarkup> &&reply_markup) {
|
void send(FullMessageId full_message_id, unique_ptr<ReplyMarkup> &&reply_markup, PollId poll_id) {
|
||||||
dialog_id_ = full_message_id.get_dialog_id();
|
dialog_id_ = full_message_id.get_dialog_id();
|
||||||
auto input_peer = td_->messages_manager_->get_input_peer(dialog_id_, AccessRights::Edit);
|
auto input_peer = td_->messages_manager_->get_input_peer(dialog_id_, AccessRights::Edit);
|
||||||
if (input_peer == nullptr) {
|
if (input_peer == nullptr) {
|
||||||
|
@ -204,14 +205,11 @@ class StopPollQuery final : public Td::ResultHandler {
|
||||||
poll->flags_ |= telegram_api::poll::CLOSED_MASK;
|
poll->flags_ |= telegram_api::poll::CLOSED_MASK;
|
||||||
auto input_media = telegram_api::make_object<telegram_api::inputMediaPoll>(0, std::move(poll),
|
auto input_media = telegram_api::make_object<telegram_api::inputMediaPoll>(0, std::move(poll),
|
||||||
vector<BufferSlice>(), string(), Auto());
|
vector<BufferSlice>(), string(), Auto());
|
||||||
auto query = G()->net_query_creator().create(telegram_api::messages_editMessage(
|
send_query(G()->net_query_creator().create(
|
||||||
flags, false /*ignored*/, std::move(input_peer), message_id, string(), std::move(input_media),
|
telegram_api::messages_editMessage(flags, false /*ignored*/, std::move(input_peer), message_id, string(),
|
||||||
std::move(input_reply_markup), vector<tl_object_ptr<telegram_api::MessageEntity>>(), 0));
|
std::move(input_media), std::move(input_reply_markup),
|
||||||
if (!td_->auth_manager_->is_bot()) {
|
vector<tl_object_ptr<telegram_api::MessageEntity>>(), 0),
|
||||||
auto sequence_id = static_cast<uint64>(-1);
|
{{poll_id}}));
|
||||||
query->set_chain_ids({sequence_id});
|
|
||||||
}
|
|
||||||
send_query(std::move(query));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
void on_result(BufferSlice packet) final {
|
||||||
|
@ -818,7 +816,7 @@ void PollManager::do_set_poll_answer(PollId poll_id, FullMessageId full_message_
|
||||||
send_closure(actor_id, &PollManager::on_set_poll_answer, poll_id, generation, std::move(result));
|
send_closure(actor_id, &PollManager::on_set_poll_answer, poll_id, generation, std::move(result));
|
||||||
});
|
});
|
||||||
td_->create_handler<SendVoteQuery>(std::move(query_promise))
|
td_->create_handler<SendVoteQuery>(std::move(query_promise))
|
||||||
->send(full_message_id, std::move(sent_options), generation, &pending_answer.query_ref_);
|
->send(full_message_id, std::move(sent_options), poll_id, generation, &pending_answer.query_ref_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PollManager::on_set_poll_answer(PollId poll_id, uint64 generation,
|
void PollManager::on_set_poll_answer(PollId poll_id, uint64 generation,
|
||||||
|
@ -1130,7 +1128,7 @@ void PollManager::do_stop_poll(PollId poll_id, FullMessageId full_message_id, un
|
||||||
CHECK(is_inserted);
|
CHECK(is_inserted);
|
||||||
auto new_promise = get_erase_log_event_promise(log_event_id, std::move(promise));
|
auto new_promise = get_erase_log_event_promise(log_event_id, std::move(promise));
|
||||||
|
|
||||||
td_->create_handler<StopPollQuery>(std::move(new_promise))->send(full_message_id, std::move(reply_markup));
|
td_->create_handler<StopPollQuery>(std::move(new_promise))->send(full_message_id, std::move(reply_markup), poll_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PollManager::stop_local_poll(PollId poll_id) {
|
void PollManager::stop_local_poll(PollId poll_id) {
|
||||||
|
|
|
@ -6,9 +6,11 @@
|
||||||
//
|
//
|
||||||
#include "td/telegram/net/NetQuery.h"
|
#include "td/telegram/net/NetQuery.h"
|
||||||
|
|
||||||
|
#include "td/telegram/ChainId.h"
|
||||||
#include "td/telegram/Global.h"
|
#include "td/telegram/Global.h"
|
||||||
#include "td/telegram/telegram_api.h"
|
#include "td/telegram/telegram_api.h"
|
||||||
|
|
||||||
|
#include "td/utils/algorithm.h"
|
||||||
#include "td/utils/as.h"
|
#include "td/utils/as.h"
|
||||||
#include "td/utils/misc.h"
|
#include "td/utils/misc.h"
|
||||||
#include "td/utils/SliceBuilder.h"
|
#include "td/utils/SliceBuilder.h"
|
||||||
|
@ -21,6 +23,11 @@ int64 NetQuery::get_my_id() {
|
||||||
return G()->get_my_id();
|
return G()->get_my_id();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NetQuery::set_chain_ids(vector<ChainId> &&chain_ids) {
|
||||||
|
chain_ids_ = transform(chain_ids, [](ChainId chain_id) { return chain_id.get(); });
|
||||||
|
td::unique(chain_ids_);
|
||||||
|
}
|
||||||
|
|
||||||
void NetQuery::on_net_write(size_t size) {
|
void NetQuery::on_net_write(size_t size) {
|
||||||
if (file_type_ == -1) {
|
if (file_type_ == -1) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -34,6 +34,8 @@ namespace td {
|
||||||
|
|
||||||
extern int VERBOSITY_NAME(net_query);
|
extern int VERBOSITY_NAME(net_query);
|
||||||
|
|
||||||
|
class ChainId;
|
||||||
|
|
||||||
class NetQuery;
|
class NetQuery;
|
||||||
using NetQueryPtr = ObjectPool<NetQuery>::OwnerPtr;
|
using NetQueryPtr = ObjectPool<NetQuery>::OwnerPtr;
|
||||||
using NetQueryRef = ObjectPool<NetQuery>::WeakPtr;
|
using NetQueryRef = ObjectPool<NetQuery>::WeakPtr;
|
||||||
|
@ -279,9 +281,7 @@ class NetQuery final : public TsListNode<NetQueryDebug> {
|
||||||
Span<uint64> get_chain_ids() const {
|
Span<uint64> get_chain_ids() const {
|
||||||
return chain_ids_;
|
return chain_ids_;
|
||||||
}
|
}
|
||||||
void set_chain_ids(vector<uint64> &&chain_ids) {
|
void set_chain_ids(vector<ChainId> &&chain_ids);
|
||||||
chain_ids_ = std::move(chain_ids);
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_in_sequence_dispatcher(bool in_sequence_dispacher) {
|
void set_in_sequence_dispatcher(bool in_sequence_dispacher) {
|
||||||
in_sequence_dispacher_ = in_sequence_dispacher;
|
in_sequence_dispacher_ = in_sequence_dispacher;
|
||||||
|
|
|
@ -25,12 +25,12 @@ NetQueryCreator::NetQueryCreator(std::shared_ptr<NetQueryStats> net_query_stats)
|
||||||
object_pool_.set_check_empty(true);
|
object_pool_.set_check_empty(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
NetQueryPtr NetQueryCreator::create(const telegram_api::Function &function, vector<uint64> chain_ids, DcId dc_id,
|
NetQueryPtr NetQueryCreator::create(const telegram_api::Function &function, vector<ChainId> chain_ids, DcId dc_id,
|
||||||
NetQuery::Type type) {
|
NetQuery::Type type) {
|
||||||
return create(UniqueId::next(), function, std::move(chain_ids), dc_id, type, NetQuery::AuthFlag::On);
|
return create(UniqueId::next(), function, std::move(chain_ids), dc_id, type, NetQuery::AuthFlag::On);
|
||||||
}
|
}
|
||||||
|
|
||||||
NetQueryPtr NetQueryCreator::create(uint64 id, const telegram_api::Function &function, vector<uint64> &&chain_ids,
|
NetQueryPtr NetQueryCreator::create(uint64 id, const telegram_api::Function &function, vector<ChainId> &&chain_ids,
|
||||||
DcId dc_id, NetQuery::Type type, NetQuery::AuthFlag auth_flag) {
|
DcId dc_id, NetQuery::Type type, NetQuery::AuthFlag auth_flag) {
|
||||||
LOG(INFO) << "Create query " << to_string(function);
|
LOG(INFO) << "Create query " << to_string(function);
|
||||||
auto storer = DefaultStorer<telegram_api::Function>(function);
|
auto storer = DefaultStorer<telegram_api::Function>(function);
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
//
|
//
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "td/telegram/ChainId.h"
|
||||||
#include "td/telegram/net/DcId.h"
|
#include "td/telegram/net/DcId.h"
|
||||||
#include "td/telegram/net/NetQuery.h"
|
#include "td/telegram/net/NetQuery.h"
|
||||||
#include "td/telegram/net/NetQueryStats.h"
|
#include "td/telegram/net/NetQueryStats.h"
|
||||||
|
@ -29,14 +30,14 @@ class NetQueryCreator {
|
||||||
object_pool_.set_check_empty(false);
|
object_pool_.set_check_empty(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
NetQueryPtr create(const telegram_api::Function &function, vector<uint64> chain_ids = {}, DcId dc_id = DcId::main(),
|
NetQueryPtr create(const telegram_api::Function &function, vector<ChainId> chain_ids = {}, DcId dc_id = DcId::main(),
|
||||||
NetQuery::Type type = NetQuery::Type::Common);
|
NetQuery::Type type = NetQuery::Type::Common);
|
||||||
|
|
||||||
NetQueryPtr create_unauth(const telegram_api::Function &function, DcId dc_id = DcId::main()) {
|
NetQueryPtr create_unauth(const telegram_api::Function &function, DcId dc_id = DcId::main()) {
|
||||||
return create(UniqueId::next(), function, {}, dc_id, NetQuery::Type::Common, NetQuery::AuthFlag::Off);
|
return create(UniqueId::next(), function, {}, dc_id, NetQuery::Type::Common, NetQuery::AuthFlag::Off);
|
||||||
}
|
}
|
||||||
|
|
||||||
NetQueryPtr create(uint64 id, const telegram_api::Function &function, vector<uint64> &&chain_ids, DcId dc_id,
|
NetQueryPtr create(uint64 id, const telegram_api::Function &function, vector<ChainId> &&chain_ids, DcId dc_id,
|
||||||
NetQuery::Type type, NetQuery::AuthFlag auth_flag);
|
NetQuery::Type type, NetQuery::AuthFlag auth_flag);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user