diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 439500f5fc..198c2414a5 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -4978,6 +4978,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_context_reply_to_task" = "Reply to Task"; "lng_context_reply_to_poll_option" = "Reply to Option"; "lng_context_copy_poll_option" = "Copy Option"; +"lng_context_delete_poll_option" = "Delete Option"; "lng_context_edit_msg" = "Edit"; "lng_context_draw" = "Edit Image"; "lng_context_add_factcheck" = "Add Fact Check"; diff --git a/Telegram/SourceFiles/api/api_polls.cpp b/Telegram/SourceFiles/api/api_polls.cpp index 7ed110d0b4..931c45083f 100644 --- a/Telegram/SourceFiles/api/api_polls.cpp +++ b/Telegram/SourceFiles/api/api_polls.cpp @@ -231,6 +231,27 @@ void Polls::addAnswer( _pollAddAnswerRequestIds.emplace(itemId, requestId); } +void Polls::deleteAnswer(FullMsgId itemId, const QByteArray &option) { + if (_pollVotesRequestIds.contains(itemId)) { + return; + } + const auto item = _session->data().message(itemId); + if (!item) { + return; + } + const auto requestId = _api.request(MTPmessages_DeletePollAnswer( + item->history()->peer->input(), + MTP_int(item->id), + MTP_bytes(option) + )).done([=](const MTPUpdates &result) { + _pollVotesRequestIds.erase(itemId); + _session->updates().applyUpdates(result); + }).fail([=] { + _pollVotesRequestIds.erase(itemId); + }).send(); + _pollVotesRequestIds.emplace(itemId, requestId); +} + void Polls::close(not_null item) { const auto itemId = item->fullId(); if (_pollCloseRequestIds.contains(itemId)) { diff --git a/Telegram/SourceFiles/api/api_polls.h b/Telegram/SourceFiles/api/api_polls.h index 0268547344..c07341b6a5 100644 --- a/Telegram/SourceFiles/api/api_polls.h +++ b/Telegram/SourceFiles/api/api_polls.h @@ -42,6 +42,7 @@ public: const PollMedia &media, Fn done, Fn fail); + void deleteAnswer(FullMsgId itemId, const QByteArray &option); void close(not_null item); void reloadResults(not_null item); diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index 29b3d81263..f3feef73f6 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "history/history_inner_widget.h" +#include "api/api_polls.h" #include "chat_helpers/stickers_emoji_pack.h" #include "core/application.h" #include "core/file_utilities.h" @@ -2995,6 +2996,18 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { TextUtilities::SetClipboardText(text); }, &st::menuIconCopy); + if (poll->creator() && a->addedDate) { + const auto itemId = item->fullId(); + const auto option = pollOptionLink; + _menu->addAction( + tr::lng_context_delete_poll_option(tr::now), + [=] { + poll->session().api().polls().deleteAnswer( + itemId, + option); + }, + &st::menuIconDelete); + } } } } diff --git a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp index fb685245d4..8d9d55d297 100644 --- a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp +++ b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp @@ -1323,6 +1323,17 @@ base::unique_qptr FillContextMenu( TextUtilities::SetClipboardText(text); }, &st::menuIconCopy); + if (poll->creator() && a->addedDate) { + const auto itemId = item->fullId(); + result->addAction( + tr::lng_context_delete_poll_option(tr::now), + [=] { + poll->session().api().polls().deleteAnswer( + itemId, + pollOption); + }, + &st::menuIconDelete); + } } } }