Add checks for maximum count of pinned Saved Messages topic and their existence before locally pin them.

This commit is contained in:
levlam 2024-02-05 22:31:16 +03:00
parent abd4cec117
commit 0bcc699dc5
2 changed files with 21 additions and 0 deletions

View File

@ -13,6 +13,7 @@
#include "td/telegram/DialogManager.h"
#include "td/telegram/Global.h"
#include "td/telegram/MessagesManager.h"
#include "td/telegram/OptionManager.h"
#include "td/telegram/ServerMessageId.h"
#include "td/telegram/Td.h"
#include "td/telegram/telegram_api.h"
@ -748,12 +749,24 @@ void SavedMessagesManager::delete_saved_messages_topic_messages_by_date(SavedMes
std::move(promise));
}
int32 SavedMessagesManager::get_pinned_saved_messages_topic_limit() const {
return clamp(narrow_cast<int32>(td_->option_manager_->get_option_integer("pinned_saved_messages_topic_count_max")), 0,
1000);
}
void SavedMessagesManager::toggle_saved_messages_topic_is_pinned(SavedMessagesTopicId saved_messages_topic_id,
bool is_pinned, Promise<Unit> &&promise) {
TRY_STATUS_PROMISE(promise, saved_messages_topic_id.is_valid_status(td_));
if (!are_pinned_saved_messages_topics_inited_) {
return promise.set_error(Status::Error(400, "Pinned Saved Messages topics must be loaded first"));
}
if (get_topic(saved_messages_topic_id) == nullptr) {
return promise.set_error(Status::Error(400, "Can't find Saved Messages topic"));
}
if (is_pinned && !td::contains(pinned_saved_messages_topic_ids_, saved_messages_topic_id) &&
static_cast<size_t>(get_pinned_saved_messages_topic_limit()) <= pinned_saved_messages_topic_ids_.size()) {
return promise.set_error(Status::Error(400, "The maximum number of pinned chats exceeded"));
}
if (!set_saved_messages_topic_is_pinned(saved_messages_topic_id, is_pinned)) {
return promise.set_value(Unit());
}
@ -764,10 +777,16 @@ void SavedMessagesManager::set_pinned_saved_messages_topics(vector<SavedMessages
Promise<Unit> &&promise) {
for (const auto &saved_messages_topic_id : saved_messages_topic_ids) {
TRY_STATUS_PROMISE(promise, saved_messages_topic_id.is_valid_status(td_));
if (get_topic(saved_messages_topic_id) == nullptr) {
return promise.set_error(Status::Error(400, "Can't find Saved Messages topic"));
}
}
if (!are_pinned_saved_messages_topics_inited_) {
return promise.set_error(Status::Error(400, "Pinned Saved Messages topics must be loaded first"));
}
if (static_cast<size_t>(get_pinned_saved_messages_topic_limit()) < saved_messages_topic_ids.size()) {
return promise.set_error(Status::Error(400, "The maximum number of pinned chats exceeded"));
}
if (!set_pinned_saved_messages_topics(saved_messages_topic_ids)) {
return promise.set_value(Unit());
}

View File

@ -86,6 +86,8 @@ class SavedMessagesManager final : public Actor {
bool set_saved_messages_topic_is_pinned(SavedMessagesTopic *topic, bool is_pinned);
int32 get_pinned_saved_messages_topic_limit() const;
void on_topic_changed(SavedMessagesTopicId saved_messages_topic_id, SavedMessagesTopic *topic);
Td *td_;