Add td_api::getSavedMessagesTopicMessageByDate.

This commit is contained in:
levlam 2024-01-18 16:45:45 +03:00
parent 26d63f605b
commit 5002f25c0a
6 changed files with 88 additions and 5 deletions

View File

@ -7175,6 +7175,11 @@ getSavedMessagesTopicHistory saved_messages_topic:SavedMessagesTopic from_messag
//@description Deletes all messages in a Saved Messages topic @saved_messages_topic Saved Messages topic which messages will be deleted
deleteSavedMessagesTopicHistory saved_messages_topic:SavedMessagesTopic = Ok;
//@description Returns the last message sent in a Saved Messages topic no later than the specified date
//@saved_messages_topic Saved Messages topic which message will be returned
//@date Point in time (Unix timestamp) relative to which to search for messages
getSavedMessagesTopicMessageByDate saved_messages_topic:SavedMessagesTopic date:int32 = Message;
//@description Returns a list of common group chats with a given user. Chats are sorted by their type and creation date
//@user_id User identifier

View File

@ -273,13 +273,10 @@ class GetSavedHistoryQuery final : public Td::ResultHandler {
return on_error(result_ptr.move_as_error());
}
auto result = result_ptr.move_as_ok();
LOG(INFO) << "Receive Saved Messages topic history: " << to_string(result);
auto info =
get_messages_info(td_, td_->dialog_manager_->get_my_dialog_id(), std::move(result), "GetSavedHistoryQuery");
auto my_dialog_id = td_->dialog_manager_->get_my_dialog_id();
auto info = get_messages_info(td_, my_dialog_id, result_ptr.move_as_ok(), "GetSavedHistoryQuery");
LOG_IF(ERROR, info.is_channel_messages) << "Receive channel messages in GetSavedHistoryQuery";
auto my_dialog_id = td_->dialog_manager_->get_my_dialog_id();
vector<td_api::object_ptr<td_api::message>> messages;
for (auto &message : info.messages) {
auto full_message_id =
@ -301,6 +298,57 @@ class GetSavedHistoryQuery final : public Td::ResultHandler {
}
};
class GetSavedMessageByDateQuery final : public Td::ResultHandler {
Promise<td_api::object_ptr<td_api::message>> promise_;
int32 date_ = 0;
public:
explicit GetSavedMessageByDateQuery(Promise<td_api::object_ptr<td_api::message>> &&promise)
: promise_(std::move(promise)) {
}
void send(SavedMessagesTopicId saved_messages_topic_id, int32 date) {
date_ = date;
auto saved_input_peer = saved_messages_topic_id.get_input_peer(td_);
CHECK(saved_input_peer != nullptr);
send_query(G()->net_query_creator().create(
telegram_api::messages_getSavedHistory(std::move(saved_input_peer), 0, date, -3, 5, 0, 0, 0)));
}
void on_result(BufferSlice packet) final {
auto result_ptr = fetch_result<telegram_api::messages_getSavedHistory>(packet);
if (result_ptr.is_error()) {
return on_error(result_ptr.move_as_error());
}
auto my_dialog_id = td_->dialog_manager_->get_my_dialog_id();
auto info = get_messages_info(td_, my_dialog_id, result_ptr.move_as_ok(), "GetSavedMessageByDateQuery");
LOG_IF(ERROR, info.is_channel_messages) << "Receive channel messages in GetSavedMessageByDateQuery";
for (auto &message : info.messages) {
auto message_date = MessagesManager::get_message_date(message);
auto message_dialog_id = DialogId::get_message_dialog_id(message);
if (message_dialog_id != my_dialog_id) {
LOG(ERROR) << "Receive message in wrong " << message_dialog_id << " instead of " << my_dialog_id;
continue;
}
if (message_date != 0 && message_date <= date_) {
auto message_full_id = td_->messages_manager_->on_get_message(std::move(message), false, false, false,
"GetSavedMessageByDateQuery");
if (message_full_id != MessageFullId()) {
return promise_.set_value(
td_->messages_manager_->get_message_object(message_full_id, "GetSavedMessageByDateQuery"));
}
}
}
promise_.set_value(nullptr);
}
void on_error(Status status) final {
promise_.set_error(std::move(status));
}
};
class GetDialogUnreadMarksQuery final : public Td::ResultHandler {
public:
void send() {
@ -16179,6 +16227,21 @@ void MessagesManager::delete_saved_messages_topic_history(SavedMessagesTopicId s
run_affected_history_query_until_complete(my_dialog_id, std::move(query), true, std::move(promise));
}
void MessagesManager::get_saved_messages_topic_message_by_date(SavedMessagesTopicId saved_messages_topic_id, int32 date,
Promise<td_api::object_ptr<td_api::message>> &&promise) {
if (!saved_messages_topic_id.is_valid()) {
return promise.set_error(Status::Error(400, "Invalid Saved Messages topic specified"));
}
auto my_dialog_id = td_->dialog_manager_->get_my_dialog_id();
TRY_STATUS_PROMISE(promise, saved_messages_topic_id.is_valid_in(td_, my_dialog_id));
if (date <= 0) {
date = 1;
}
td_->create_handler<GetSavedMessageByDateQuery>(std::move(promise))->send(saved_messages_topic_id, date);
}
vector<DialogId> MessagesManager::search_public_dialogs(const string &query, Promise<Unit> &&promise) {
LOG(INFO) << "Search public chats with query = \"" << query << '"';

View File

@ -543,6 +543,9 @@ class MessagesManager final : public Actor {
void delete_saved_messages_topic_history(SavedMessagesTopicId saved_messages_topic_id, Promise<Unit> &&promise);
void get_saved_messages_topic_message_by_date(SavedMessagesTopicId saved_messages_topic_id, int32 date,
Promise<td_api::object_ptr<td_api::message>> &&promise);
vector<DialogId> search_public_dialogs(const string &query, Promise<Unit> &&promise);
std::pair<int32, vector<DialogId>> search_dialogs(const string &query, int32 limit, Promise<Unit> &&promise);

View File

@ -5049,6 +5049,13 @@ void Td::on_request(uint64 id, const td_api::deleteSavedMessagesTopicHistory &re
std::move(promise));
}
void Td::on_request(uint64 id, const td_api::getSavedMessagesTopicMessageByDate &request) {
CHECK_IS_USER();
CREATE_REQUEST_PROMISE();
messages_manager_->get_saved_messages_topic_message_by_date(SavedMessagesTopicId(this, request.saved_messages_topic_),
request.date_, std::move(promise));
}
void Td::on_request(uint64 id, td_api::searchPublicChat &request) {
CLEAN_INPUT_STRING(request.username_);
CREATE_REQUEST(SearchPublicChatRequest, request.username_);

View File

@ -679,6 +679,8 @@ class Td final : public Actor {
void on_request(uint64 id, const td_api::deleteSavedMessagesTopicHistory &request);
void on_request(uint64 id, const td_api::getSavedMessagesTopicMessageByDate &request);
void on_request(uint64 id, td_api::searchPublicChat &request);
void on_request(uint64 id, td_api::searchPublicChats &request);

View File

@ -2766,6 +2766,9 @@ class CliClient final : public Actor {
from_message_id, offset, as_limit(limit)));
} else if (op == "dsmth" && args.empty()) {
send_request(td_api::make_object<td_api::deleteSavedMessagesTopicHistory>(get_saved_messages_topic()));
} else if (op == "gsmtmbd") {
send_request(td_api::make_object<td_api::getSavedMessagesTopicMessageByDate>(get_saved_messages_topic(),
to_integer<int32>(args)));
} else if (op == "gcc" || op == "GetCommonChats") {
UserId user_id;
ChatId offset_chat_id;