mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-18 23:27:09 +02:00
Check items before deleting by 'Delete' key.
This commit is contained in:
parent
e4f039b141
commit
75c420b9d7
5 changed files with 93 additions and 76 deletions
|
@ -26,6 +26,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "window/window_session_controller.h"
|
||||
#include "window/window_peer_menu.h"
|
||||
#include "main/main_session.h"
|
||||
#include "boxes/confirm_box.h"
|
||||
#include "ui/widgets/popup_menu.h"
|
||||
#include "ui/toast/toast.h"
|
||||
#include "ui/inactive_press.h"
|
||||
|
@ -1642,10 +1643,14 @@ TextForMimeData ListWidget::getSelectedText() const {
|
|||
return result;
|
||||
}
|
||||
|
||||
MessageIdsList ListWidget::getSelectedItems() const {
|
||||
MessageIdsList ListWidget::getSelectedIds() const {
|
||||
return collectSelectedIds();
|
||||
}
|
||||
|
||||
SelectedItems ListWidget::getSelectedItems() const {
|
||||
return collectSelectedItems();
|
||||
}
|
||||
|
||||
int ListWidget::findItemIndexByY(int y) const {
|
||||
Expects(!_items.empty());
|
||||
|
||||
|
@ -2482,7 +2487,7 @@ std::unique_ptr<QMimeData> ListWidget::prepareDrag() {
|
|||
return true;
|
||||
}();
|
||||
auto items = canForwardAll
|
||||
? getSelectedItems()
|
||||
? collectSelectedIds()
|
||||
: MessageIdsList();
|
||||
if (!items.empty()) {
|
||||
session().data().setMimeForwardIds(std::move(items));
|
||||
|
@ -2711,4 +2716,74 @@ rpl::producer<FullMsgId> ListWidget::readMessageRequested() const {
|
|||
|
||||
ListWidget::~ListWidget() = default;
|
||||
|
||||
void ConfirmDeleteSelectedItems(not_null<ListWidget*> widget) {
|
||||
const auto items = widget->getSelectedItems();
|
||||
if (items.empty()) {
|
||||
return;
|
||||
}
|
||||
for (const auto &item : items) {
|
||||
if (!item.canDelete) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
const auto weak = Ui::MakeWeak(widget);
|
||||
const auto box = Ui::show(Box<DeleteMessagesBox>(
|
||||
&widget->controller()->session(),
|
||||
widget->getSelectedIds()));
|
||||
box->setDeleteConfirmedCallback([=] {
|
||||
if (const auto strong = weak.data()) {
|
||||
strong->cancelSelection();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void ConfirmForwardSelectedItems(not_null<ListWidget*> widget) {
|
||||
const auto items = widget->getSelectedItems();
|
||||
if (items.empty()) {
|
||||
return;
|
||||
}
|
||||
for (const auto &item : items) {
|
||||
if (!item.canForward) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
auto ids = widget->getSelectedIds();
|
||||
const auto weak = Ui::MakeWeak(widget);
|
||||
Window::ShowForwardMessagesBox(widget->controller(), std::move(ids), [=] {
|
||||
if (const auto strong = weak.data()) {
|
||||
strong->cancelSelection();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void ConfirmSendNowSelectedItems(not_null<ListWidget*> widget) {
|
||||
const auto items = widget->getSelectedItems();
|
||||
if (items.empty()) {
|
||||
return;
|
||||
}
|
||||
const auto navigation = widget->controller();
|
||||
const auto history = [&]() -> History* {
|
||||
auto result = (History*)nullptr;
|
||||
auto &data = navigation->session().data();
|
||||
for (const auto &item : items) {
|
||||
if (!item.canSendNow) {
|
||||
return nullptr;
|
||||
}
|
||||
const auto message = data.message(item.msgId);
|
||||
if (message) {
|
||||
result = message->history();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}();
|
||||
if (!history) {
|
||||
return;
|
||||
}
|
||||
Window::ShowSendNowMessagesBox(
|
||||
navigation,
|
||||
history,
|
||||
widget->getSelectedIds(),
|
||||
[=] { navigation->showBackFromStack(); });
|
||||
}
|
||||
|
||||
} // namespace HistoryView
|
||||
|
|
|
@ -183,8 +183,9 @@ public:
|
|||
Data::MessagePosition position,
|
||||
Fn<bool()> overrideInitialScroll);
|
||||
|
||||
TextForMimeData getSelectedText() const;
|
||||
MessageIdsList getSelectedItems() const;
|
||||
[[nodiscard]] TextForMimeData getSelectedText() const;
|
||||
[[nodiscard]] MessageIdsList getSelectedIds() const;
|
||||
[[nodiscard]] SelectedItems getSelectedItems() const;
|
||||
void cancelSelection();
|
||||
void selectItem(not_null<HistoryItem*> item);
|
||||
void selectItemAsGroup(not_null<HistoryItem*> item);
|
||||
|
@ -551,4 +552,8 @@ private:
|
|||
|
||||
};
|
||||
|
||||
void ConfirmDeleteSelectedItems(not_null<ListWidget*> widget);
|
||||
void ConfirmForwardSelectedItems(not_null<ListWidget*> widget);
|
||||
void ConfirmSendNowSelectedItems(not_null<ListWidget*> widget);
|
||||
|
||||
} // namespace HistoryView
|
||||
|
|
|
@ -502,7 +502,7 @@ void PinnedWidget::listScrollTo(int top) {
|
|||
}
|
||||
|
||||
void PinnedWidget::listCancelRequest() {
|
||||
if (_inner && !_inner->getSelectedItems().empty()) {
|
||||
if (_inner && !_inner->getSelectedIds().empty()) {
|
||||
clearSelected();
|
||||
return;
|
||||
}
|
||||
|
@ -588,7 +588,7 @@ bool PinnedWidget::listAllowsMultiSelect() {
|
|||
|
||||
bool PinnedWidget::listIsItemGoodForSelection(
|
||||
not_null<HistoryItem*> item) {
|
||||
return !item->isSending() && !item->hasFailed();
|
||||
return IsServerMsgId(item->id);
|
||||
}
|
||||
|
||||
bool PinnedWidget::listIsLessInOrder(
|
||||
|
@ -640,32 +640,11 @@ bool PinnedWidget::listIsGoodForAroundPosition(
|
|||
}
|
||||
|
||||
void PinnedWidget::confirmDeleteSelected() {
|
||||
auto items = _inner->getSelectedItems();
|
||||
if (items.empty()) {
|
||||
return;
|
||||
}
|
||||
const auto weak = Ui::MakeWeak(this);
|
||||
const auto box = Ui::show(Box<DeleteMessagesBox>(
|
||||
&_history->session(),
|
||||
std::move(items)));
|
||||
box->setDeleteConfirmedCallback([=] {
|
||||
if (const auto strong = weak.data()) {
|
||||
strong->clearSelected();
|
||||
}
|
||||
});
|
||||
ConfirmDeleteSelectedItems(_inner);
|
||||
}
|
||||
|
||||
void PinnedWidget::confirmForwardSelected() {
|
||||
auto items = _inner->getSelectedItems();
|
||||
if (items.empty()) {
|
||||
return;
|
||||
}
|
||||
const auto weak = Ui::MakeWeak(this);
|
||||
Window::ShowForwardMessagesBox(controller(), std::move(items), [=] {
|
||||
if (const auto strong = weak.data()) {
|
||||
strong->clearSelected();
|
||||
}
|
||||
});
|
||||
ConfirmForwardSelectedItems(_inner);
|
||||
}
|
||||
|
||||
void PinnedWidget::clearSelected() {
|
||||
|
|
|
@ -1629,7 +1629,7 @@ bool RepliesWidget::listAllowsMultiSelect() {
|
|||
|
||||
bool RepliesWidget::listIsItemGoodForSelection(
|
||||
not_null<HistoryItem*> item) {
|
||||
return !item->isSending() && !item->hasFailed();
|
||||
return IsServerMsgId(item->id);
|
||||
}
|
||||
|
||||
bool RepliesWidget::listIsLessInOrder(
|
||||
|
@ -1739,32 +1739,11 @@ bool RepliesWidget::listIsGoodForAroundPosition(
|
|||
}
|
||||
|
||||
void RepliesWidget::confirmDeleteSelected() {
|
||||
auto items = _inner->getSelectedItems();
|
||||
if (items.empty()) {
|
||||
return;
|
||||
}
|
||||
const auto weak = Ui::MakeWeak(this);
|
||||
const auto box = Ui::show(Box<DeleteMessagesBox>(
|
||||
&_history->session(),
|
||||
std::move(items)));
|
||||
box->setDeleteConfirmedCallback([=] {
|
||||
if (const auto strong = weak.data()) {
|
||||
strong->clearSelected();
|
||||
}
|
||||
});
|
||||
ConfirmDeleteSelectedItems(_inner);
|
||||
}
|
||||
|
||||
void RepliesWidget::confirmForwardSelected() {
|
||||
auto items = _inner->getSelectedItems();
|
||||
if (items.empty()) {
|
||||
return;
|
||||
}
|
||||
const auto weak = Ui::MakeWeak(this);
|
||||
Window::ShowForwardMessagesBox(controller(), std::move(items), [=] {
|
||||
if (const auto strong = weak.data()) {
|
||||
strong->clearSelected();
|
||||
}
|
||||
});
|
||||
ConfirmForwardSelectedItems(_inner);
|
||||
}
|
||||
|
||||
void RepliesWidget::clearSelected() {
|
||||
|
|
|
@ -1166,32 +1166,11 @@ bool ScheduledWidget::listIsGoodForAroundPosition(
|
|||
}
|
||||
|
||||
void ScheduledWidget::confirmSendNowSelected() {
|
||||
auto items = _inner->getSelectedItems();
|
||||
if (items.empty()) {
|
||||
return;
|
||||
}
|
||||
const auto navigation = controller();
|
||||
Window::ShowSendNowMessagesBox(
|
||||
navigation,
|
||||
_history,
|
||||
std::move(items),
|
||||
[=] { navigation->showBackFromStack(); });
|
||||
ConfirmSendNowSelectedItems(_inner);
|
||||
}
|
||||
|
||||
void ScheduledWidget::confirmDeleteSelected() {
|
||||
auto items = _inner->getSelectedItems();
|
||||
if (items.empty()) {
|
||||
return;
|
||||
}
|
||||
const auto weak = Ui::MakeWeak(this);
|
||||
const auto box = Ui::show(Box<DeleteMessagesBox>(
|
||||
&_history->session(),
|
||||
std::move(items)));
|
||||
box->setDeleteConfirmedCallback([=] {
|
||||
if (const auto strong = weak.data()) {
|
||||
strong->clearSelected();
|
||||
}
|
||||
});
|
||||
ConfirmDeleteSelectedItems(_inner);
|
||||
}
|
||||
|
||||
void ScheduledWidget::clearSelected() {
|
||||
|
|
Loading…
Add table
Reference in a new issue