Add LogeventIdWithGeneration helper class.
GitOrigin-RevId: 838115e565a4b1b349d5248117ac869d2e73b6e1
This commit is contained in:
parent
3148dc0871
commit
621c920655
@ -439,6 +439,7 @@ set(TDLIB_SOURCE
|
|||||||
td/telegram/JsonValue.cpp
|
td/telegram/JsonValue.cpp
|
||||||
td/telegram/LanguagePackManager.cpp
|
td/telegram/LanguagePackManager.cpp
|
||||||
td/telegram/Location.cpp
|
td/telegram/Location.cpp
|
||||||
|
td/telegram/logevent/LogEventHelper.cpp
|
||||||
td/telegram/Logging.cpp
|
td/telegram/Logging.cpp
|
||||||
td/telegram/MessageContent.cpp
|
td/telegram/MessageContent.cpp
|
||||||
td/telegram/MessageContentType.cpp
|
td/telegram/MessageContentType.cpp
|
||||||
|
@ -26,7 +26,6 @@
|
|||||||
#include "td/telegram/InputMessageText.h"
|
#include "td/telegram/InputMessageText.h"
|
||||||
#include "td/telegram/Location.h"
|
#include "td/telegram/Location.h"
|
||||||
#include "td/telegram/logevent/LogEvent.h"
|
#include "td/telegram/logevent/LogEvent.h"
|
||||||
#include "td/telegram/logevent/LogEventHelper.h"
|
|
||||||
#include "td/telegram/MessageContent.h"
|
#include "td/telegram/MessageContent.h"
|
||||||
#include "td/telegram/MessageEntity.h"
|
#include "td/telegram/MessageEntity.h"
|
||||||
#include "td/telegram/MessageEntity.hpp"
|
#include "td/telegram/MessageEntity.hpp"
|
||||||
@ -17258,20 +17257,11 @@ Status MessagesManager::set_dialog_draft_message(DialogId dialog_id,
|
|||||||
if (update_dialog_draft_message(d, std::move(new_draft_message), false, true)) {
|
if (update_dialog_draft_message(d, std::move(new_draft_message), false, true)) {
|
||||||
if (dialog_id.get_type() != DialogType::SecretChat) {
|
if (dialog_id.get_type() != DialogType::SecretChat) {
|
||||||
if (G()->parameters().use_message_db) {
|
if (G()->parameters().use_message_db) {
|
||||||
LOG(INFO) << "Save draft of " << dialog_id << " to binlog";
|
|
||||||
SaveDialogDraftMessageOnServerLogEvent logevent;
|
SaveDialogDraftMessageOnServerLogEvent logevent;
|
||||||
logevent.dialog_id_ = dialog_id;
|
logevent.dialog_id_ = dialog_id;
|
||||||
auto storer = LogEventStorerImpl<SaveDialogDraftMessageOnServerLogEvent>(logevent);
|
add_log_event(d->save_draft_message_logevent_id,
|
||||||
if (d->save_draft_message_logevent_id == 0) {
|
LogEventStorerImpl<SaveDialogDraftMessageOnServerLogEvent>(logevent),
|
||||||
d->save_draft_message_logevent_id =
|
LogEvent::HandlerType::SaveDialogDraftMessageOnServer, "draft");
|
||||||
binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::SaveDialogDraftMessageOnServer, storer);
|
|
||||||
LOG(INFO) << "Add draft logevent " << d->save_draft_message_logevent_id;
|
|
||||||
} else {
|
|
||||||
auto new_logevent_id = binlog_rewrite(G()->td_db()->get_binlog(), d->save_draft_message_logevent_id,
|
|
||||||
LogEvent::HandlerType::SaveDialogDraftMessageOnServer, storer);
|
|
||||||
LOG(INFO) << "Rewrite draft logevent " << d->save_draft_message_logevent_id << " with " << new_logevent_id;
|
|
||||||
}
|
|
||||||
d->save_draft_message_logevent_id_generation++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pending_draft_message_timeout_.set_timeout_in(dialog_id.get(), d->is_opened ? MIN_SAVE_DRAFT_DELAY : 0);
|
pending_draft_message_timeout_.set_timeout_in(dialog_id.get(), d->is_opened ? MIN_SAVE_DRAFT_DELAY : 0);
|
||||||
@ -17289,10 +17279,10 @@ void MessagesManager::save_dialog_draft_message_on_server(DialogId dialog_id) {
|
|||||||
CHECK(d != nullptr);
|
CHECK(d != nullptr);
|
||||||
|
|
||||||
Promise<> promise;
|
Promise<> promise;
|
||||||
if (d->save_draft_message_logevent_id != 0) {
|
if (d->save_draft_message_logevent_id.logevent_id != 0) {
|
||||||
d->save_draft_message_logevent_id_generation++;
|
d->save_draft_message_logevent_id.generation++;
|
||||||
promise = PromiseCreator::lambda([actor_id = actor_id(this), dialog_id,
|
promise = PromiseCreator::lambda([actor_id = actor_id(this), dialog_id,
|
||||||
generation = d->save_draft_message_logevent_id_generation](Result<Unit> result) {
|
generation = d->save_draft_message_logevent_id.generation](Result<Unit> result) {
|
||||||
if (!G()->close_flag()) {
|
if (!G()->close_flag()) {
|
||||||
send_closure(actor_id, &MessagesManager::on_saved_dialog_draft_message, dialog_id, generation);
|
send_closure(actor_id, &MessagesManager::on_saved_dialog_draft_message, dialog_id, generation);
|
||||||
}
|
}
|
||||||
@ -17306,13 +17296,7 @@ void MessagesManager::save_dialog_draft_message_on_server(DialogId dialog_id) {
|
|||||||
void MessagesManager::on_saved_dialog_draft_message(DialogId dialog_id, uint64 generation) {
|
void MessagesManager::on_saved_dialog_draft_message(DialogId dialog_id, uint64 generation) {
|
||||||
auto d = get_dialog(dialog_id);
|
auto d = get_dialog(dialog_id);
|
||||||
CHECK(d != nullptr);
|
CHECK(d != nullptr);
|
||||||
LOG(INFO) << "Saved draft in " << dialog_id << " with logevent " << d->save_draft_message_logevent_id;
|
delete_log_event(d->save_draft_message_logevent_id, generation, "draft");
|
||||||
if (d->save_draft_message_logevent_id_generation == generation) {
|
|
||||||
CHECK(d->save_draft_message_logevent_id != 0);
|
|
||||||
LOG(INFO) << "Delete draft logevent " << d->save_draft_message_logevent_id;
|
|
||||||
binlog_erase(G()->td_db()->get_binlog(), d->save_draft_message_logevent_id);
|
|
||||||
d->save_draft_message_logevent_id = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesManager::clear_all_draft_messages(bool exclude_secret_chats, Promise<Unit> &&promise) {
|
void MessagesManager::clear_all_draft_messages(bool exclude_secret_chats, Promise<Unit> &&promise) {
|
||||||
@ -17820,29 +17804,19 @@ void MessagesManager::update_dialog_notification_settings_on_server(DialogId dia
|
|||||||
CHECK(d != nullptr);
|
CHECK(d != nullptr);
|
||||||
|
|
||||||
if (!from_binlog && G()->parameters().use_message_db) {
|
if (!from_binlog && G()->parameters().use_message_db) {
|
||||||
LOG(INFO) << "Save notification settings of " << dialog_id << " to binlog";
|
|
||||||
UpdateDialogNotificationSettingsOnServerLogEvent logevent;
|
UpdateDialogNotificationSettingsOnServerLogEvent logevent;
|
||||||
logevent.dialog_id_ = dialog_id;
|
logevent.dialog_id_ = dialog_id;
|
||||||
auto storer = LogEventStorerImpl<UpdateDialogNotificationSettingsOnServerLogEvent>(logevent);
|
add_log_event(d->save_notification_settings_logevent_id,
|
||||||
if (d->save_notification_settings_logevent_id == 0) {
|
LogEventStorerImpl<UpdateDialogNotificationSettingsOnServerLogEvent>(logevent),
|
||||||
d->save_notification_settings_logevent_id = binlog_add(
|
LogEvent::HandlerType::UpdateDialogNotificationSettingsOnServer, "notification settings");
|
||||||
G()->td_db()->get_binlog(), LogEvent::HandlerType::UpdateDialogNotificationSettingsOnServer, storer);
|
|
||||||
LOG(INFO) << "Add notification settings logevent " << d->save_notification_settings_logevent_id;
|
|
||||||
} else {
|
|
||||||
auto new_logevent_id = binlog_rewrite(G()->td_db()->get_binlog(), d->save_notification_settings_logevent_id,
|
|
||||||
LogEvent::HandlerType::UpdateDialogNotificationSettingsOnServer, storer);
|
|
||||||
LOG(INFO) << "Rewrite notification settings logevent " << d->save_notification_settings_logevent_id << " with "
|
|
||||||
<< new_logevent_id;
|
|
||||||
}
|
|
||||||
d->save_notification_settings_logevent_id_generation++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Promise<> promise;
|
Promise<> promise;
|
||||||
if (d->save_notification_settings_logevent_id != 0) {
|
if (d->save_notification_settings_logevent_id.logevent_id != 0) {
|
||||||
d->save_notification_settings_logevent_id_generation++;
|
d->save_notification_settings_logevent_id.generation++;
|
||||||
promise = PromiseCreator::lambda(
|
promise = PromiseCreator::lambda(
|
||||||
[actor_id = actor_id(this), dialog_id,
|
[actor_id = actor_id(this), dialog_id,
|
||||||
generation = d->save_notification_settings_logevent_id_generation](Result<Unit> result) {
|
generation = d->save_notification_settings_logevent_id.generation](Result<Unit> result) {
|
||||||
if (!G()->close_flag()) {
|
if (!G()->close_flag()) {
|
||||||
send_closure(actor_id, &MessagesManager::on_updated_dialog_notification_settings, dialog_id, generation);
|
send_closure(actor_id, &MessagesManager::on_updated_dialog_notification_settings, dialog_id, generation);
|
||||||
}
|
}
|
||||||
@ -17864,14 +17838,7 @@ void MessagesManager::on_updated_dialog_notification_settings(DialogId dialog_id
|
|||||||
CHECK(!td_->auth_manager_->is_bot());
|
CHECK(!td_->auth_manager_->is_bot());
|
||||||
auto d = get_dialog(dialog_id);
|
auto d = get_dialog(dialog_id);
|
||||||
CHECK(d != nullptr);
|
CHECK(d != nullptr);
|
||||||
LOG(INFO) << "Saved notification settings in " << dialog_id << " with logevent "
|
delete_log_event(d->save_notification_settings_logevent_id, generation, "notification settings");
|
||||||
<< d->save_notification_settings_logevent_id;
|
|
||||||
if (d->save_notification_settings_logevent_id_generation == generation) {
|
|
||||||
CHECK(d->save_notification_settings_logevent_id != 0);
|
|
||||||
LOG(INFO) << "Delete notification settings logevent " << d->save_notification_settings_logevent_id;
|
|
||||||
binlog_erase(G()->td_db()->get_binlog(), d->save_notification_settings_logevent_id);
|
|
||||||
d->save_notification_settings_logevent_id = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Status MessagesManager::set_dialog_client_data(DialogId dialog_id, string &&client_data) {
|
Status MessagesManager::set_dialog_client_data(DialogId dialog_id, string &&client_data) {
|
||||||
@ -19157,36 +19124,16 @@ void MessagesManager::read_history_on_server(Dialog *d, MessageId max_message_id
|
|||||||
ReadHistoryInSecretChatLogEvent logevent;
|
ReadHistoryInSecretChatLogEvent logevent;
|
||||||
logevent.dialog_id_ = dialog_id;
|
logevent.dialog_id_ = dialog_id;
|
||||||
logevent.max_date_ = m->date;
|
logevent.max_date_ = m->date;
|
||||||
|
add_log_event(d->read_history_logevent_id, LogEventStorerImpl<ReadHistoryInSecretChatLogEvent>(logevent),
|
||||||
|
LogEvent::HandlerType::ReadHistoryInSecretChat, "read history");
|
||||||
|
|
||||||
d->last_read_inbox_message_date = m->date;
|
d->last_read_inbox_message_date = m->date;
|
||||||
|
|
||||||
auto storer = LogEventStorerImpl<ReadHistoryInSecretChatLogEvent>(logevent);
|
|
||||||
if (d->read_history_logevent_id == 0) {
|
|
||||||
d->read_history_logevent_id =
|
|
||||||
binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::ReadHistoryInSecretChat, storer);
|
|
||||||
LOG(INFO) << "Add read history logevent " << d->read_history_logevent_id;
|
|
||||||
} else {
|
|
||||||
auto new_logevent_id = binlog_rewrite(G()->td_db()->get_binlog(), d->read_history_logevent_id,
|
|
||||||
LogEvent::HandlerType::ReadHistoryInSecretChat, storer);
|
|
||||||
LOG(INFO) << "Rewrite read history logevent " << d->read_history_logevent_id << " with " << new_logevent_id;
|
|
||||||
}
|
|
||||||
d->read_history_logevent_id_generation++;
|
|
||||||
} else if (G()->parameters().use_message_db) {
|
} else if (G()->parameters().use_message_db) {
|
||||||
ReadHistoryOnServerLogEvent logevent;
|
ReadHistoryOnServerLogEvent logevent;
|
||||||
logevent.dialog_id_ = dialog_id;
|
logevent.dialog_id_ = dialog_id;
|
||||||
logevent.max_message_id_ = max_message_id;
|
logevent.max_message_id_ = max_message_id;
|
||||||
|
add_log_event(d->read_history_logevent_id, LogEventStorerImpl<ReadHistoryOnServerLogEvent>(logevent),
|
||||||
auto storer = LogEventStorerImpl<ReadHistoryOnServerLogEvent>(logevent);
|
LogEvent::HandlerType::ReadHistoryOnServer, "read history");
|
||||||
if (d->read_history_logevent_id == 0) {
|
|
||||||
d->read_history_logevent_id =
|
|
||||||
binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::ReadHistoryOnServer, storer);
|
|
||||||
LOG(INFO) << "Add read history logevent " << d->read_history_logevent_id;
|
|
||||||
} else {
|
|
||||||
auto new_logevent_id = binlog_rewrite(G()->td_db()->get_binlog(), d->read_history_logevent_id,
|
|
||||||
LogEvent::HandlerType::ReadHistoryOnServer, storer);
|
|
||||||
LOG(INFO) << "Rewrite read history logevent " << d->read_history_logevent_id << " with " << new_logevent_id;
|
|
||||||
}
|
|
||||||
d->read_history_logevent_id_generation++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool need_delay = d->is_opened && !is_secret && d->server_unread_count > 0;
|
bool need_delay = d->is_opened && !is_secret && d->server_unread_count > 0;
|
||||||
@ -19210,10 +19157,10 @@ void MessagesManager::read_history_on_server_impl(DialogId dialog_id, MessageId
|
|||||||
}
|
}
|
||||||
|
|
||||||
Promise<> promise;
|
Promise<> promise;
|
||||||
if (d->read_history_logevent_id != 0) {
|
if (d->read_history_logevent_id.logevent_id != 0) {
|
||||||
d->read_history_logevent_id_generation++;
|
d->read_history_logevent_id.generation++;
|
||||||
promise = PromiseCreator::lambda([actor_id = actor_id(this), dialog_id,
|
promise = PromiseCreator::lambda([actor_id = actor_id(this), dialog_id,
|
||||||
generation = d->read_history_logevent_id_generation](Result<Unit> result) {
|
generation = d->read_history_logevent_id.generation](Result<Unit> result) {
|
||||||
if (!G()->close_flag()) {
|
if (!G()->close_flag()) {
|
||||||
send_closure(actor_id, &MessagesManager::on_read_history_finished, dialog_id, generation);
|
send_closure(actor_id, &MessagesManager::on_read_history_finished, dialog_id, generation);
|
||||||
}
|
}
|
||||||
@ -19262,13 +19209,7 @@ void MessagesManager::read_history_on_server_impl(DialogId dialog_id, MessageId
|
|||||||
void MessagesManager::on_read_history_finished(DialogId dialog_id, uint64 generation) {
|
void MessagesManager::on_read_history_finished(DialogId dialog_id, uint64 generation) {
|
||||||
auto d = get_dialog(dialog_id);
|
auto d = get_dialog(dialog_id);
|
||||||
CHECK(d != nullptr);
|
CHECK(d != nullptr);
|
||||||
LOG(INFO) << "Finished reading history in " << dialog_id << " with logevent " << d->read_history_logevent_id;
|
delete_log_event(d->read_history_logevent_id, generation, "read history");
|
||||||
if (d->read_history_logevent_id_generation == generation) {
|
|
||||||
CHECK(d->read_history_logevent_id != 0);
|
|
||||||
LOG(INFO) << "Delete read history logevent " << d->read_history_logevent_id;
|
|
||||||
binlog_erase(G()->td_db()->get_binlog(), d->read_history_logevent_id);
|
|
||||||
d->read_history_logevent_id = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<int32, vector<MessageId>> MessagesManager::search_dialog_messages(
|
std::pair<int32, vector<MessageId>> MessagesManager::search_dialog_messages(
|
||||||
@ -28567,21 +28508,14 @@ void MessagesManager::set_dialog_folder_id_on_server(DialogId dialog_id, bool fr
|
|||||||
SetDialogFolderIdOnServerLogEvent logevent;
|
SetDialogFolderIdOnServerLogEvent logevent;
|
||||||
logevent.dialog_id_ = dialog_id;
|
logevent.dialog_id_ = dialog_id;
|
||||||
logevent.folder_id_ = d->folder_id;
|
logevent.folder_id_ = d->folder_id;
|
||||||
auto storer = LogEventStorerImpl<SetDialogFolderIdOnServerLogEvent>(logevent);
|
add_log_event(d->set_folder_id_logevent_id, LogEventStorerImpl<SetDialogFolderIdOnServerLogEvent>(logevent),
|
||||||
if (d->set_folder_id_logevent_id == 0) {
|
LogEvent::HandlerType::SetDialogFolderIdOnServer, "set chat folder");
|
||||||
d->set_folder_id_logevent_id =
|
|
||||||
binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::SetDialogFolderIdOnServer, storer);
|
|
||||||
} else {
|
|
||||||
binlog_rewrite(G()->td_db()->get_binlog(), d->set_folder_id_logevent_id,
|
|
||||||
LogEvent::HandlerType::SetDialogFolderIdOnServer, storer);
|
|
||||||
}
|
|
||||||
d->set_folder_id_logevent_id_generation++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Promise<> promise;
|
Promise<> promise;
|
||||||
if (d->set_folder_id_logevent_id != 0) {
|
if (d->set_folder_id_logevent_id.logevent_id != 0) {
|
||||||
promise = PromiseCreator::lambda([actor_id = actor_id(this), dialog_id,
|
promise = PromiseCreator::lambda([actor_id = actor_id(this), dialog_id,
|
||||||
generation = d->set_folder_id_logevent_id_generation](Result<Unit> result) {
|
generation = d->set_folder_id_logevent_id.generation](Result<Unit> result) {
|
||||||
if (!G()->close_flag()) {
|
if (!G()->close_flag()) {
|
||||||
send_closure(actor_id, &MessagesManager::on_updated_dialog_folder_id, dialog_id, generation);
|
send_closure(actor_id, &MessagesManager::on_updated_dialog_folder_id, dialog_id, generation);
|
||||||
}
|
}
|
||||||
@ -28595,13 +28529,7 @@ void MessagesManager::set_dialog_folder_id_on_server(DialogId dialog_id, bool fr
|
|||||||
void MessagesManager::on_updated_dialog_folder_id(DialogId dialog_id, uint64 generation) {
|
void MessagesManager::on_updated_dialog_folder_id(DialogId dialog_id, uint64 generation) {
|
||||||
auto d = get_dialog(dialog_id);
|
auto d = get_dialog(dialog_id);
|
||||||
CHECK(d != nullptr);
|
CHECK(d != nullptr);
|
||||||
LOG(INFO) << "Saved folder_id of " << dialog_id << " with logevent " << d->set_folder_id_logevent_id;
|
delete_log_event(d->set_folder_id_logevent_id, generation, "set chat folder");
|
||||||
if (d->set_folder_id_logevent_id_generation == generation) {
|
|
||||||
CHECK(d->set_folder_id_logevent_id != 0);
|
|
||||||
LOG(INFO) << "Delete set folder_id logevent " << d->set_folder_id_logevent_id;
|
|
||||||
binlog_erase(G()->td_db()->get_binlog(), d->set_folder_id_logevent_id);
|
|
||||||
d->set_folder_id_logevent_id = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesManager::set_dialog_photo(DialogId dialog_id, const tl_object_ptr<td_api::InputChatPhoto> &input_photo,
|
void MessagesManager::set_dialog_photo(DialogId dialog_id, const tl_object_ptr<td_api::InputChatPhoto> &input_photo,
|
||||||
@ -34229,11 +34157,11 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
binlog_erase(G()->td_db()->get_binlog(), event.id_);
|
binlog_erase(G()->td_db()->get_binlog(), event.id_);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (d->read_history_logevent_id != 0) {
|
if (d->read_history_logevent_id.logevent_id != 0) {
|
||||||
// we need only latest read history event
|
// we need only latest read history event
|
||||||
binlog_erase(G()->td_db()->get_binlog(), d->read_history_logevent_id);
|
binlog_erase(G()->td_db()->get_binlog(), d->read_history_logevent_id.logevent_id);
|
||||||
}
|
}
|
||||||
d->read_history_logevent_id = event.id_;
|
d->read_history_logevent_id.logevent_id = event.id_;
|
||||||
|
|
||||||
read_history_on_server_impl(dialog_id, log_event.max_message_id_);
|
read_history_on_server_impl(dialog_id, log_event.max_message_id_);
|
||||||
break;
|
break;
|
||||||
@ -34255,11 +34183,11 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
binlog_erase(G()->td_db()->get_binlog(), event.id_);
|
binlog_erase(G()->td_db()->get_binlog(), event.id_);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (d->read_history_logevent_id != 0) {
|
if (d->read_history_logevent_id.logevent_id != 0) {
|
||||||
// we need only latest read history event
|
// we need only latest read history event
|
||||||
binlog_erase(G()->td_db()->get_binlog(), d->read_history_logevent_id);
|
binlog_erase(G()->td_db()->get_binlog(), d->read_history_logevent_id.logevent_id);
|
||||||
}
|
}
|
||||||
d->read_history_logevent_id = event.id_;
|
d->read_history_logevent_id.logevent_id = event.id_;
|
||||||
d->last_read_inbox_message_date = log_event.max_date_;
|
d->last_read_inbox_message_date = log_event.max_date_;
|
||||||
|
|
||||||
read_history_on_server_impl(dialog_id, MessageId());
|
read_history_on_server_impl(dialog_id, MessageId());
|
||||||
@ -34399,7 +34327,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
binlog_erase(G()->td_db()->get_binlog(), event.id_);
|
binlog_erase(G()->td_db()->get_binlog(), event.id_);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
d->save_draft_message_logevent_id = event.id_;
|
d->save_draft_message_logevent_id.logevent_id = event.id_;
|
||||||
|
|
||||||
save_dialog_draft_message_on_server(dialog_id);
|
save_dialog_draft_message_on_server(dialog_id);
|
||||||
break;
|
break;
|
||||||
@ -34419,7 +34347,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
binlog_erase(G()->td_db()->get_binlog(), event.id_);
|
binlog_erase(G()->td_db()->get_binlog(), event.id_);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
d->save_notification_settings_logevent_id = event.id_;
|
d->save_notification_settings_logevent_id.logevent_id = event.id_;
|
||||||
|
|
||||||
update_dialog_notification_settings_on_server(dialog_id, true);
|
update_dialog_notification_settings_on_server(dialog_id, true);
|
||||||
break;
|
break;
|
||||||
@ -34472,8 +34400,8 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
binlog_erase(G()->td_db()->get_binlog(), event.id_);
|
binlog_erase(G()->td_db()->get_binlog(), event.id_);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
d->set_folder_id_logevent_id = event.id_;
|
d->set_folder_id_logevent_id.logevent_id = event.id_;
|
||||||
d->set_folder_id_logevent_id_generation++;
|
d->set_folder_id_logevent_id.generation++;
|
||||||
|
|
||||||
set_dialog_folder_id(d, log_event.folder_id_);
|
set_dialog_folder_id(d, log_event.folder_id_);
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "td/telegram/FullMessageId.h"
|
#include "td/telegram/FullMessageId.h"
|
||||||
#include "td/telegram/Global.h"
|
#include "td/telegram/Global.h"
|
||||||
#include "td/telegram/InputDialogId.h"
|
#include "td/telegram/InputDialogId.h"
|
||||||
|
#include "td/telegram/logevent/LogEventHelper.h"
|
||||||
#include "td/telegram/MessageContentType.h"
|
#include "td/telegram/MessageContentType.h"
|
||||||
#include "td/telegram/MessageCopyOptions.h"
|
#include "td/telegram/MessageCopyOptions.h"
|
||||||
#include "td/telegram/MessageId.h"
|
#include "td/telegram/MessageId.h"
|
||||||
@ -1144,14 +1145,10 @@ class MessagesManager : public Actor {
|
|||||||
MessageId reply_markup_message_id;
|
MessageId reply_markup_message_id;
|
||||||
DialogNotificationSettings notification_settings;
|
DialogNotificationSettings notification_settings;
|
||||||
unique_ptr<DraftMessage> draft_message;
|
unique_ptr<DraftMessage> draft_message;
|
||||||
uint64 save_draft_message_logevent_id = 0;
|
LogeventIdWithGeneration save_draft_message_logevent_id;
|
||||||
uint64 save_draft_message_logevent_id_generation = 0;
|
LogeventIdWithGeneration save_notification_settings_logevent_id;
|
||||||
uint64 save_notification_settings_logevent_id = 0;
|
LogeventIdWithGeneration read_history_logevent_id;
|
||||||
uint64 save_notification_settings_logevent_id_generation = 0;
|
LogeventIdWithGeneration set_folder_id_logevent_id;
|
||||||
uint64 read_history_logevent_id = 0;
|
|
||||||
uint64 read_history_logevent_id_generation = 0;
|
|
||||||
uint64 set_folder_id_logevent_id = 0;
|
|
||||||
uint64 set_folder_id_logevent_id_generation = 0;
|
|
||||||
|
|
||||||
FolderId folder_id;
|
FolderId folder_id;
|
||||||
vector<DialogListId> dialog_list_ids; // TODO replace with mask
|
vector<DialogListId> dialog_list_ids; // TODO replace with mask
|
||||||
|
57
td/telegram/logevent/LogEventHelper.cpp
Normal file
57
td/telegram/logevent/LogEventHelper.cpp
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
//
|
||||||
|
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2020
|
||||||
|
//
|
||||||
|
// 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)
|
||||||
|
//
|
||||||
|
#include "td/telegram/logevent/LogEventHelper.h"
|
||||||
|
|
||||||
|
#include "td/telegram/Global.h"
|
||||||
|
#include "td/telegram/TdDb.h"
|
||||||
|
|
||||||
|
#include "tddb/td/db/binlog/BinlogHelper.h"
|
||||||
|
|
||||||
|
#include "td/utils/logging.h"
|
||||||
|
|
||||||
|
namespace td {
|
||||||
|
|
||||||
|
void add_log_event(LogeventIdWithGeneration &logevent_id, const Storer &storer, uint32 type, Slice name) {
|
||||||
|
LOG(INFO) << "Save " << name << " to binlog";
|
||||||
|
if (logevent_id.logevent_id == 0) {
|
||||||
|
logevent_id.logevent_id =
|
||||||
|
binlog_add(G()->td_db()->get_binlog(), type, storer);
|
||||||
|
LOG(INFO) << "Add " << name << " logevent " << logevent_id.logevent_id;
|
||||||
|
} else {
|
||||||
|
auto new_logevent_id = binlog_rewrite(G()->td_db()->get_binlog(), logevent_id.logevent_id,
|
||||||
|
type, storer);
|
||||||
|
LOG(INFO) << "Rewrite " << name << " logevent " << logevent_id.logevent_id << " with " << new_logevent_id;
|
||||||
|
}
|
||||||
|
logevent_id.generation++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void delete_log_event(LogeventIdWithGeneration &logevent_id, uint64 generation, Slice name) {
|
||||||
|
LOG(INFO) << "Finish to process " << name << " logevent " << logevent_id.logevent_id << " with generation " << generation;
|
||||||
|
if (logevent_id.generation == generation) {
|
||||||
|
CHECK(logevent_id.logevent_id != 0);
|
||||||
|
LOG(INFO) << "Delete " << name << " logevent " << logevent_id.logevent_id;
|
||||||
|
binlog_erase(G()->td_db()->get_binlog(), logevent_id.logevent_id);
|
||||||
|
logevent_id.logevent_id = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Promise<Unit> get_erase_logevent_promise(uint64 logevent_id, Promise<Unit> promise) {
|
||||||
|
if (logevent_id == 0) {
|
||||||
|
return promise;
|
||||||
|
}
|
||||||
|
|
||||||
|
return PromiseCreator::lambda([logevent_id, promise = std::move(promise)](Result<Unit> result) mutable {
|
||||||
|
if (!G()->close_flag()) {
|
||||||
|
binlog_erase(G()->td_db()->get_binlog(), logevent_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
promise.set_result(std::move(result));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace td
|
@ -8,11 +8,6 @@
|
|||||||
|
|
||||||
#include "td/actor/PromiseFuture.h"
|
#include "td/actor/PromiseFuture.h"
|
||||||
|
|
||||||
#include "td/db/binlog/BinlogHelper.h"
|
|
||||||
|
|
||||||
#include "td/telegram/Global.h"
|
|
||||||
#include "td/telegram/TdDb.h"
|
|
||||||
|
|
||||||
#include "td/utils/common.h"
|
#include "td/utils/common.h"
|
||||||
#include "td/utils/Status.h"
|
#include "td/utils/Status.h"
|
||||||
#include "td/utils/Time.h"
|
#include "td/utils/Time.h"
|
||||||
@ -20,19 +15,16 @@
|
|||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
|
|
||||||
inline Promise<Unit> get_erase_logevent_promise(uint64 logevent_id, Promise<Unit> promise = Promise<Unit>()) {
|
struct LogeventIdWithGeneration {
|
||||||
if (logevent_id == 0) {
|
uint64 logevent_id = 0;
|
||||||
return promise;
|
uint64 generation = 0;
|
||||||
}
|
};
|
||||||
|
|
||||||
return PromiseCreator::lambda([logevent_id, promise = std::move(promise)](Result<Unit> result) mutable {
|
void add_log_event(LogeventIdWithGeneration &logevent_id, const Storer &storer, uint32 type, Slice name);
|
||||||
if (!G()->close_flag()) {
|
|
||||||
binlog_erase(G()->td_db()->get_binlog(), logevent_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
promise.set_result(std::move(result));
|
void delete_log_event(LogeventIdWithGeneration &logevent_id, uint64 generation, Slice name);
|
||||||
});
|
|
||||||
}
|
Promise<Unit> get_erase_logevent_promise(uint64 logevent_id, Promise<Unit> promise = Promise<Unit>());
|
||||||
|
|
||||||
template <class StorerT>
|
template <class StorerT>
|
||||||
void store_time(double time_at, StorerT &storer) {
|
void store_time(double time_at, StorerT &storer) {
|
||||||
|
Loading…
Reference in New Issue
Block a user