From 7fd2a81a38816c81bad067a8f66546a5a87802b2 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 24 Jul 2018 01:45:44 +0300 Subject: [PATCH] Fix some secret chat actions on closing. GitOrigin-RevId: 055965d9dd24f42c16826d18c88ef1205d9b808e --- td/telegram/MessagesManager.cpp | 4 +--- td/telegram/SecretChatActor.cpp | 16 ++++++++++++++-- td/telegram/SecretChatActor.h | 2 -- td/telegram/logevent/SecretChatEvent.h | 24 +++++++++++++----------- 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 49e42cf9..aeaef874 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -8523,10 +8523,8 @@ void MessagesManager::delete_dialog_history_from_server(DialogId dialog_id, Mess ->send(dialog_id.get_channel_id(), max_message_id, allow_error); break; case DialogType::SecretChat: - // TODO: use promise send_closure(G()->secret_chats_manager(), &SecretChatsManager::delete_all_messages, - dialog_id.get_secret_chat_id(), Promise<>()); - promise.set_value(Unit()); + dialog_id.get_secret_chat_id(), std::move(promise)); break; case DialogType::None: default: diff --git a/td/telegram/SecretChatActor.cpp b/td/telegram/SecretChatActor.cpp index ffcfdaca..1a0b3f01 100644 --- a/td/telegram/SecretChatActor.cpp +++ b/td/telegram/SecretChatActor.cpp @@ -36,9 +36,11 @@ #define G GLOBAL_SHOULD_NOT_BE_USED_HERE namespace td { + inline TLObjectStorer create_storer(const secret_api::Object &object) { return TLObjectStorer(object); } + class SecretImpl { public: explicit SecretImpl(const Storer &data) : data(data) { @@ -52,6 +54,7 @@ class SecretImpl { private: const Storer &data; }; + SecretChatActor::SecretChatActor(int32 id, std::unique_ptr context, bool can_be_empty) : context_(std::move(context)), can_be_empty_(can_be_empty) { auth_state_.id = id; @@ -87,8 +90,13 @@ void SecretChatActor::create_chat(int32 user_id, int64 user_access_hash, int32 r promise.set_value(SecretChatId(random_id)); loop(); } + void SecretChatActor::on_result_resendable(NetQueryPtr net_query, Promise promise) { - LOG(INFO) << "on_result_resendable: " << net_query; + LOG(INFO) << "on_result_resendable: " << net_query << " " << close_flag_; + if (context_->close_flag()) { + return; + } + auto key = UniqueId::extract_key(net_query->id()); if (close_flag_) { if (key == static_cast(QueryType::DiscardEncryption)) { @@ -103,7 +111,8 @@ void SecretChatActor::on_result_resendable(NetQueryPtr net_query, Promise(QueryType::EncryptedChat): return on_update_chat(std::move(net_query)); case static_cast(QueryType::Message): - return on_outbound_send_message_result(std::move(net_query), std::move(promise)), Status::OK(); + on_outbound_send_message_result(std::move(net_query), std::move(promise)); + return Status::OK(); case static_cast(QueryType::ReadHistory): return on_read_history(std::move(net_query)); case static_cast(QueryType::Ignore): @@ -114,18 +123,21 @@ void SecretChatActor::on_result_resendable(NetQueryPtr net_query, Promise event) { if (close_flag_) { return; } do_close_chat_impl(std::move(event)); } + void SecretChatActor::replay_create_chat(std::unique_ptr event) { if (close_flag_) { return; } do_create_chat_impl(std::move(event)); } + void SecretChatActor::add_inbound_message(std::unique_ptr message) { SCOPE_EXIT { if (message) { diff --git a/td/telegram/SecretChatActor.h b/td/telegram/SecretChatActor.h index ce096b50..a93629c2 100644 --- a/td/telegram/SecretChatActor.h +++ b/td/telegram/SecretChatActor.h @@ -43,9 +43,7 @@ namespace td { class BinlogInterface; -class DhCache; class NetQueryCreator; -class SequenceDispatcher; class SecretChatActor : public NetQueryCallback { public: diff --git a/td/telegram/logevent/SecretChatEvent.h b/td/telegram/logevent/SecretChatEvent.h index e4f9bb74..3748469d 100644 --- a/td/telegram/logevent/SecretChatEvent.h +++ b/td/telegram/logevent/SecretChatEvent.h @@ -275,11 +275,12 @@ class InboundSecretMessage : public LogEventHelper