Add SavedMessagesTopicId::is_valid_in.

This commit is contained in:
levlam 2024-01-15 23:25:51 +03:00
parent 3eba7d4f2b
commit 7e3107b1d3
3 changed files with 23 additions and 17 deletions

View File

@ -19988,13 +19988,10 @@ MessagesManager::FoundDialogMessages MessagesManager::search_dialog_messages(
return result; return result;
} }
} }
if (saved_messages_topic_id != SavedMessagesTopicId()) { {
if (dialog_id != td_->dialog_manager_->get_my_dialog_id()) { auto status = saved_messages_topic_id.is_valid_in(td_, dialog_id);
promise.set_error(Status::Error(400, "Can't filter by Saved Messages topic in the chat")); if (status.is_error()) {
return result; promise.set_error(std::move(status));
}
if (!saved_messages_topic_id.have_input_peer(td_)) {
promise.set_error(Status::Error(400, "Invalid Saved Messages topic specified"));
return result; return result;
} }
} }
@ -21282,14 +21279,8 @@ void MessagesManager::get_dialog_message_position(MessageFullId message_full_id,
return promise.set_error(Status::Error(400, "Message doesn't belong to the message thread")); return promise.set_error(Status::Error(400, "Message doesn't belong to the message thread"));
} }
} }
if (saved_messages_topic_id != SavedMessagesTopicId()) { TRY_STATUS_PROMISE(promise, saved_messages_topic_id.is_valid_in(td_, dialog_id));
if (dialog_id != td_->dialog_manager_->get_my_dialog_id()) {
return promise.set_error(Status::Error(400, "Can't filter by Saved Messages topic in the chat"));
}
if (!saved_messages_topic_id.have_input_peer(td_)) {
return promise.set_error(Status::Error(400, "Invalid Saved Messages topic specified"));
}
}
if (dialog_id.get_type() == DialogType::SecretChat) { if (dialog_id.get_type() == DialogType::SecretChat) {
return promise.set_error(Status::Error(400, "The method can't be used in secret chats")); return promise.set_error(Status::Error(400, "The method can't be used in secret chats"));
} }

View File

@ -80,6 +80,18 @@ bool SavedMessagesTopicId::have_input_peer(Td *td) const {
return td->dialog_manager_->have_input_peer(dialog_id_, AccessRights::Know); return td->dialog_manager_->have_input_peer(dialog_id_, AccessRights::Know);
} }
Status SavedMessagesTopicId::is_valid_in(Td *td, DialogId dialog_id) const {
if (dialog_id_ != DialogId()) {
if (dialog_id != td->dialog_manager_->get_my_dialog_id()) {
return Status::Error(400, "Can't use Saved Messages topic in the chat");
}
if (!have_input_peer(td)) {
return Status::Error(400, "Invalid Saved Messages topic specified");
}
}
return Status::OK();
}
telegram_api::object_ptr<telegram_api::InputPeer> SavedMessagesTopicId::get_input_peer(const Td *td) const { telegram_api::object_ptr<telegram_api::InputPeer> SavedMessagesTopicId::get_input_peer(const Td *td) const {
return td->dialog_manager_->get_input_peer(dialog_id_, AccessRights::Know); return td->dialog_manager_->get_input_peer(dialog_id_, AccessRights::Know);
} }

View File

@ -11,6 +11,7 @@
#include "td/utils/common.h" #include "td/utils/common.h"
#include "td/utils/HashTableUtils.h" #include "td/utils/HashTableUtils.h"
#include "td/utils/Status.h"
#include "td/utils/StringBuilder.h" #include "td/utils/StringBuilder.h"
namespace td { namespace td {
@ -28,6 +29,8 @@ class SavedMessagesTopicId {
friend StringBuilder &operator<<(StringBuilder &string_builder, SavedMessagesTopicId saved_messages_topic_id); friend StringBuilder &operator<<(StringBuilder &string_builder, SavedMessagesTopicId saved_messages_topic_id);
bool have_input_peer(Td *td) const;
public: public:
SavedMessagesTopicId() = default; SavedMessagesTopicId() = default;
@ -42,9 +45,9 @@ class SavedMessagesTopicId {
return dialog_id_.is_valid(); return dialog_id_.is_valid();
} }
td_api::object_ptr<td_api::SavedMessagesTopic> get_saved_messages_topic_object(Td *td) const; Status is_valid_in(Td *td, DialogId dialog_id) const;
bool have_input_peer(Td *td) const; td_api::object_ptr<td_api::SavedMessagesTopic> get_saved_messages_topic_object(Td *td) const;
telegram_api::object_ptr<telegram_api::InputPeer> get_input_peer(const Td *td) const; telegram_api::object_ptr<telegram_api::InputPeer> get_input_peer(const Td *td) const;