parent
f1236edf5b
commit
03a5619d61
|
@ -1583,6 +1583,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
"lng_context_copy_selected_items" = "Copy Selected as Text";
|
"lng_context_copy_selected_items" = "Copy Selected as Text";
|
||||||
"lng_context_forward_selected" = "Forward Selected";
|
"lng_context_forward_selected" = "Forward Selected";
|
||||||
"lng_context_send_now_selected" = "Send selected now";
|
"lng_context_send_now_selected" = "Send selected now";
|
||||||
|
"lng_context_reschedule_selected" = "Reschedule Selected";
|
||||||
"lng_context_delete_selected" = "Delete Selected";
|
"lng_context_delete_selected" = "Delete Selected";
|
||||||
"lng_context_clear_selection" = "Clear Selection";
|
"lng_context_clear_selection" = "Clear Selection";
|
||||||
"lng_send_image_empty" = "Could not send an empty file: {name}";
|
"lng_send_image_empty" = "Could not send an empty file: {name}";
|
||||||
|
|
|
@ -443,31 +443,61 @@ bool AddSendNowMessageAction(
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AddRescheduleMessageAction(
|
bool AddRescheduleAction(
|
||||||
not_null<Ui::PopupMenu*> menu,
|
not_null<Ui::PopupMenu*> menu,
|
||||||
const ContextMenuRequest &request,
|
const ContextMenuRequest &request,
|
||||||
not_null<ListWidget*> list) {
|
not_null<ListWidget*> list) {
|
||||||
if (!HasEditMessageAction(request, list)
|
const auto owner = &request.navigation->session().data();
|
||||||
|| !request.item->isScheduled()) {
|
|
||||||
|
const auto goodSingle = !(!HasEditMessageAction(request, list)
|
||||||
|
|| !request.item->isScheduled());
|
||||||
|
const auto goodMany = [&] {
|
||||||
|
if (goodSingle) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!request.overSelection || request.selectedItems.empty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}();
|
||||||
|
if (!goodSingle && !goodMany) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const auto owner = &request.item->history()->owner();
|
auto ids = goodSingle
|
||||||
const auto itemId = request.item->fullId();
|
? MessageIdsList{ request.item->fullId() }
|
||||||
menu->addAction(tr::lng_context_reschedule(tr::now), [=] {
|
: ExtractIdsList(request.selectedItems);
|
||||||
const auto item = owner->message(itemId);
|
ranges::sort(ids, [&](const FullMsgId &a, const FullMsgId &b) {
|
||||||
if (!item) {
|
const auto itemA = owner->message(a);
|
||||||
|
const auto itemB = owner->message(b);
|
||||||
|
return (itemA && itemB) && (itemA->position() < itemB->position());
|
||||||
|
});
|
||||||
|
|
||||||
|
auto text = ((ids.size() == 1)
|
||||||
|
? tr::lng_context_reschedule
|
||||||
|
: tr::lng_context_reschedule_selected)(tr::now);
|
||||||
|
|
||||||
|
menu->addAction(std::move(text), [=] {
|
||||||
|
const auto firstItem = owner->message(ids.front());
|
||||||
|
if (!firstItem) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
list->cancelSelection();
|
||||||
const auto callback = [=](Api::SendOptions options) {
|
const auto callback = [=](Api::SendOptions options) {
|
||||||
if (const auto item = owner->message(itemId)) {
|
for (const auto &id : ids) {
|
||||||
|
const auto item = owner->message(id);
|
||||||
|
if (!item && !item->isScheduled()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (!item->media() || !item->media()->webpage()) {
|
if (!item->media() || !item->media()->webpage()) {
|
||||||
options.removeWebPageId = true;
|
options.removeWebPageId = true;
|
||||||
}
|
}
|
||||||
Api::RescheduleMessage(item, options);
|
Api::RescheduleMessage(item, options);
|
||||||
|
// Increase the scheduled date by 1ms to keep the order.
|
||||||
|
options.scheduled += 1;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const auto peer = item->history()->peer;
|
const auto peer = firstItem->history()->peer;
|
||||||
const auto sendMenuType = !peer
|
const auto sendMenuType = !peer
|
||||||
? SendMenu::Type::Disabled
|
? SendMenu::Type::Disabled
|
||||||
: peer->isSelf()
|
: peer->isSelf()
|
||||||
|
@ -477,9 +507,10 @@ bool AddRescheduleMessageAction(
|
||||||
: SendMenu::Type::Scheduled;
|
: SendMenu::Type::Scheduled;
|
||||||
|
|
||||||
using S = Data::ScheduledMessages;
|
using S = Data::ScheduledMessages;
|
||||||
const auto date = (item->date() == S::kScheduledUntilOnlineTimestamp)
|
const auto itemDate = firstItem->date();
|
||||||
|
const auto date = (itemDate == S::kScheduledUntilOnlineTimestamp)
|
||||||
? HistoryView::DefaultScheduleTime()
|
? HistoryView::DefaultScheduleTime()
|
||||||
: item->date() + 600;
|
: itemDate + 600;
|
||||||
|
|
||||||
const auto box = Ui::show(
|
const auto box = Ui::show(
|
||||||
HistoryView::PrepareScheduleBox(
|
HistoryView::PrepareScheduleBox(
|
||||||
|
@ -490,9 +521,10 @@ bool AddRescheduleMessageAction(
|
||||||
Ui::LayerOption::KeepOther);
|
Ui::LayerOption::KeepOther);
|
||||||
|
|
||||||
owner->itemRemoved(
|
owner->itemRemoved(
|
||||||
itemId
|
) | rpl::start_with_next([=](not_null<const HistoryItem*> item) {
|
||||||
) | rpl::start_with_next([=] {
|
if (ranges::contains(ids, item->fullId())) {
|
||||||
box->closeBox();
|
box->closeBox();
|
||||||
|
}
|
||||||
}, box->lifetime());
|
}, box->lifetime());
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
|
@ -825,7 +857,7 @@ void AddMessageActions(
|
||||||
AddDeleteAction(menu, request, list);
|
AddDeleteAction(menu, request, list);
|
||||||
AddReportAction(menu, request, list);
|
AddReportAction(menu, request, list);
|
||||||
AddSelectionAction(menu, request, list);
|
AddSelectionAction(menu, request, list);
|
||||||
AddRescheduleMessageAction(menu, request, list);
|
AddRescheduleAction(menu, request, list);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddCopyLinkAction(
|
void AddCopyLinkAction(
|
||||||
|
|
Loading…
Reference in New Issue