diff --git a/td/telegram/QuickReplyManager.cpp b/td/telegram/QuickReplyManager.cpp index 54f53817d..4c0f59eaa 100644 --- a/td/telegram/QuickReplyManager.cpp +++ b/td/telegram/QuickReplyManager.cpp @@ -684,13 +684,12 @@ int64 QuickReplyManager::get_shortcuts_hash() const { } void QuickReplyManager::delete_quick_reply_shortcut(const string &name, Promise &&promise) { - auto s = get_shortcut(name); - if (s == nullptr) { + auto it = get_shortcut_it(name); + if (it == shortcuts_.shortcuts_.end()) { return promise.set_error(Status::Error(400, "Shortcut not found")); } - auto shortcut_id = s->shortcut_id_; - td::remove_if(shortcuts_.shortcuts_, - [shortcut_id](const unique_ptr &shortcut) { return shortcut->shortcut_id_ == shortcut_id; }); + auto shortcut_id = (*it)->shortcut_id_; + shortcuts_.shortcuts_.erase(it); if (!shortcut_id.is_server()) { return promise.set_value(Unit()); @@ -731,6 +730,15 @@ QuickReplyManager::Shortcut *QuickReplyManager::get_shortcut(const string &name) return nullptr; } +vector>::iterator QuickReplyManager::get_shortcut_it(const string &name) { + for (auto it = shortcuts_.shortcuts_.begin(); it != shortcuts_.shortcuts_.end(); ++it) { + if ((*it)->name_ == name) { + return it; + } + } + return shortcuts_.shortcuts_.end(); +} + void QuickReplyManager::sort_quick_reply_messages(vector> &messages) { std::sort(messages.begin(), messages.end(), [](const unique_ptr &lhs, const unique_ptr &rhs) { diff --git a/td/telegram/QuickReplyManager.h b/td/telegram/QuickReplyManager.h index 296634c37..d0f8f759c 100644 --- a/td/telegram/QuickReplyManager.h +++ b/td/telegram/QuickReplyManager.h @@ -168,6 +168,8 @@ class QuickReplyManager final : public Actor { Shortcut *get_shortcut(const string &name); + vector>::iterator get_shortcut_it(const string &name); + static void sort_quick_reply_messages(vector> &messages); using QuickReplyMessageUniqueId = std::pair;