Use special method for blocking from Replies.
This commit is contained in:
parent
c535a7c564
commit
0fb42ed82a
|
@ -1294,6 +1294,7 @@ contacts.toggleTopPeers#8514bdda enabled:Bool = Bool;
|
|||
contacts.addContact#e8f463d0 flags:# add_phone_privacy_exception:flags.0?true id:InputUser first_name:string last_name:string phone:string = Updates;
|
||||
contacts.acceptContact#f831a20f id:InputUser = Updates;
|
||||
contacts.getLocated#d348bc44 flags:# background:flags.1?true geo_point:InputGeoPoint self_expires:flags.0?int = Updates;
|
||||
contacts.blockFromReplies#29a8962c flags:# delete_message:flags.0?true delete_history:flags.1?true report_spam:flags.2?true msg_id:int = Updates;
|
||||
|
||||
messages.getMessages#63c66506 id:Vector<InputMessage> = messages.Messages;
|
||||
messages.getDialogs#a0ee3b73 flags:# exclude_pinned:flags.0?true folder_id:flags.1?int offset_date:int offset_id:int offset_peer:InputPeer limit:int hash:int = messages.Dialogs;
|
||||
|
|
|
@ -215,10 +215,8 @@ void ReportBox::updateMaxHeight() {
|
|||
void BlockSenderFromRepliesBox(
|
||||
not_null<Ui::GenericBox*> box,
|
||||
not_null<Window::SessionController*> controller,
|
||||
MessageIdsList ids) {
|
||||
Expects(!ids.empty());
|
||||
|
||||
const auto item = controller->session().data().message(ids.front());
|
||||
FullMsgId id) {
|
||||
const auto item = controller->session().data().message(id);
|
||||
Assert(item != nullptr);
|
||||
|
||||
PeerMenuBlockUserBox(
|
||||
|
@ -226,5 +224,5 @@ void BlockSenderFromRepliesBox(
|
|||
&controller->window(),
|
||||
item->senderOriginal(),
|
||||
true,
|
||||
std::move(ids));
|
||||
Window::ClearReply{ id });
|
||||
}
|
||||
|
|
|
@ -69,4 +69,4 @@ private:
|
|||
void BlockSenderFromRepliesBox(
|
||||
not_null<Ui::GenericBox*> box,
|
||||
not_null<Window::SessionController*> controller,
|
||||
MessageIdsList ids);
|
||||
FullMsgId id);
|
||||
|
|
|
@ -3177,21 +3177,12 @@ void HistoryInner::blockSenderItem(FullMsgId itemId) {
|
|||
Ui::show(Box(
|
||||
BlockSenderFromRepliesBox,
|
||||
_controller,
|
||||
MessageIdsList(1, itemId)));
|
||||
itemId));
|
||||
}
|
||||
}
|
||||
|
||||
void HistoryInner::blockSenderAsGroup(FullMsgId itemId) {
|
||||
if (const auto item = session().data().message(itemId)) {
|
||||
const auto group = session().data().groups().find(item);
|
||||
if (!group) {
|
||||
return blockSenderItem(itemId);
|
||||
}
|
||||
Ui::show(Box(
|
||||
BlockSenderFromRepliesBox,
|
||||
_controller,
|
||||
session().data().itemsToIds(group->items)));
|
||||
}
|
||||
blockSenderItem(itemId);
|
||||
}
|
||||
|
||||
void HistoryInner::addSelectionRange(
|
||||
|
|
|
@ -26,6 +26,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "mainwidget.h"
|
||||
#include "mainwindow.h"
|
||||
#include "api/api_chat_filters.h"
|
||||
#include "api/api_updates.h"
|
||||
#include "mtproto/mtproto_config.h"
|
||||
#include "history/history.h"
|
||||
#include "history/history_item.h"
|
||||
|
@ -858,7 +859,7 @@ void PeerMenuBlockUserBox(
|
|||
not_null<Window::Controller*> window,
|
||||
not_null<PeerData*> peer,
|
||||
std::variant<v::null_t, bool> suggestReport,
|
||||
std::variant<v::null_t, ClearChat, MessageIdsList> suggestClear) {
|
||||
std::variant<v::null_t, ClearChat, ClearReply> suggestClear) {
|
||||
using Flag = MTPDpeerSettings::Flag;
|
||||
const auto settings = peer->settings().value_or(Flag(0));
|
||||
const auto reportNeeded = v::is_null(suggestReport)
|
||||
|
@ -896,15 +897,25 @@ void PeerMenuBlockUserBox(
|
|||
tr::lng_blocked_list_confirm_clear(tr::now),
|
||||
true,
|
||||
st::defaultBoxCheckbox))
|
||||
: v::is<MessageIdsList>(suggestClear)
|
||||
: v::is<ClearReply>(suggestClear)
|
||||
? box->addRow(object_ptr<Ui::Checkbox>(
|
||||
box,
|
||||
tr::lng_context_delete_msg(tr::now),
|
||||
true,
|
||||
st::defaultBoxCheckbox))
|
||||
: nullptr;
|
||||
if (clear) {
|
||||
box->addSkip(st::boxMediumSkip);
|
||||
}
|
||||
const auto allFromUser = v::is<ClearReply>(suggestClear)
|
||||
? box->addRow(object_ptr<Ui::Checkbox>(
|
||||
box,
|
||||
tr::lng_delete_all_from(tr::now),
|
||||
true,
|
||||
st::defaultBoxCheckbox))
|
||||
: nullptr;
|
||||
|
||||
if (report || clear) {
|
||||
if (allFromUser) {
|
||||
box->addSkip(st::boxLittleSkip);
|
||||
}
|
||||
|
||||
|
@ -915,43 +926,28 @@ void PeerMenuBlockUserBox(
|
|||
box->addButton(tr::lng_blocked_list_confirm_ok(), [=] {
|
||||
const auto reportChecked = report && report->checked();
|
||||
const auto clearChecked = clear && clear->checked();
|
||||
const auto fromUserChecked = allFromUser && allFromUser->checked();
|
||||
|
||||
box->closeBox();
|
||||
|
||||
peer->session().api().blockPeer(peer);
|
||||
if (reportChecked) {
|
||||
if (const auto ids = std::get_if<MessageIdsList>(&suggestClear)) {
|
||||
Assert(!ids->empty());
|
||||
const auto itemsPeer = [&]() -> PeerData* {
|
||||
for (const auto &itemId : *ids) {
|
||||
if (const auto item = peer->owner().message(itemId)) {
|
||||
return item->history()->peer;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}();
|
||||
if (itemsPeer) {
|
||||
auto items = QVector<MTPint>();
|
||||
items.reserve(ids->size());
|
||||
for (const auto &itemId : *ids) {
|
||||
items.push_back(MTP_int(itemId.msg));
|
||||
}
|
||||
peer->session().api().request(MTPmessages_Report(
|
||||
itemsPeer->input,
|
||||
MTP_vector<MTPint>(items),
|
||||
MTP_inputReportReasonSpam()
|
||||
)).send();
|
||||
}
|
||||
} else {
|
||||
if (const auto clearReply = std::get_if<ClearReply>(&suggestClear)) {
|
||||
using Flag = MTPcontacts_BlockFromReplies::Flag;
|
||||
peer->session().api().request(MTPcontacts_BlockFromReplies(
|
||||
MTP_flags((clearChecked ? Flag::f_delete_message : Flag(0))
|
||||
| (fromUserChecked ? Flag::f_delete_history : Flag(0))
|
||||
| (reportChecked ? Flag::f_report_spam : Flag(0))),
|
||||
MTP_int(clearReply->replyId.msg)
|
||||
)).done([=](const MTPUpdates &result) {
|
||||
peer->session().updates().applyUpdates(result);
|
||||
}).send();
|
||||
} else {
|
||||
peer->session().api().blockPeer(peer);
|
||||
if (reportChecked) {
|
||||
peer->session().api().request(MTPmessages_ReportSpam(
|
||||
peer->input
|
||||
)).send();
|
||||
}
|
||||
}
|
||||
if (clearChecked) {
|
||||
if (const auto ids = std::get_if<MessageIdsList>(&suggestClear)) {
|
||||
peer->owner().histories().deleteMessages(*ids, false);
|
||||
} else if (v::is<ClearChat>(suggestClear)) {
|
||||
if (clearChecked) {
|
||||
crl::on_main(&peer->session(), [=] {
|
||||
peer->session().api().deleteConversation(peer, false);
|
||||
});
|
||||
|
|
|
@ -72,12 +72,15 @@ void PeerMenuCreatePoll(
|
|||
|
||||
struct ClearChat {
|
||||
};
|
||||
struct ClearReply {
|
||||
FullMsgId replyId;
|
||||
};
|
||||
void PeerMenuBlockUserBox(
|
||||
not_null<Ui::GenericBox*> box,
|
||||
not_null<Window::Controller*> window,
|
||||
not_null<PeerData*> peer,
|
||||
std::variant<v::null_t, bool> suggestReport,
|
||||
std::variant<v::null_t, ClearChat, MessageIdsList> suggestClear);
|
||||
std::variant<v::null_t, ClearChat, ClearReply> suggestClear);
|
||||
void PeerMenuUnblockUserWithBotRestart(not_null<UserData*> user);
|
||||
|
||||
void ToggleHistoryArchived(not_null<History*> history, bool archived);
|
||||
|
|
Loading…
Reference in New Issue