Replaced box for auto-delete settings with menu.

This commit is contained in:
23rd 2022-03-29 01:22:21 +03:00 committed by John Preston
parent fc71a640a6
commit 8fcd07863a
5 changed files with 59 additions and 33 deletions

View file

@ -236,6 +236,7 @@ void DeleteMessagesBox::prepare() {
|| (_wipeHistoryPeer->isChannel() || (_wipeHistoryPeer->isChannel()
&& _wipeHistoryPeer->asChannel()->canDeleteMessages()))) { && _wipeHistoryPeer->asChannel()->canDeleteMessages()))) {
_wipeHistoryPeer->updateFull(); _wipeHistoryPeer->updateFull();
#if 0
_autoDeleteSettings.create( _autoDeleteSettings.create(
this, this,
(_wipeHistoryPeer->messagesTTL() (_wipeHistoryPeer->messagesTTL()
@ -245,10 +246,11 @@ void DeleteMessagesBox::prepare() {
_autoDeleteSettings->setClickedCallback([=] { _autoDeleteSettings->setClickedCallback([=] {
getDelegate()->show( getDelegate()->show(
Box( Box(
HistoryView::Controls::AutoDeleteSettingsBox, HistoryView::Controls::AutoDeleteSettingsMenu,
_wipeHistoryPeer), _wipeHistoryPeer),
Ui::LayerOption(0)); Ui::LayerOption(0));
}); });
#endif
} }
if (canDelete) { if (canDelete) {

View file

@ -6386,6 +6386,7 @@ void HistoryWidget::checkMessagesTTL() {
} else if (!_ttlInfo || _ttlInfo->peer() != _peer) { } else if (!_ttlInfo || _ttlInfo->peer() != _peer) {
_ttlInfo = std::make_unique<HistoryView::Controls::TTLButton>( _ttlInfo = std::make_unique<HistoryView::Controls::TTLButton>(
this, this,
std::make_shared<Window::Show>(controller()),
_peer); _peer);
orderWidgets(); orderWidgets();
updateControlsGeometry(); updateControlsGeometry();

View file

@ -1949,7 +1949,10 @@ void ComposeControls::updateMessagesTTLShown() {
updateControlsVisibility(); updateControlsVisibility();
updateControlsGeometry(_wrap->size()); updateControlsGeometry(_wrap->size());
} else if (shown && !_ttlInfo) { } else if (shown && !_ttlInfo) {
_ttlInfo = std::make_unique<Controls::TTLButton>(_wrap.get(), peer); _ttlInfo = std::make_unique<Controls::TTLButton>(
_wrap.get(),
std::make_shared<Window::Show>(_window),
peer);
orderControls(); orderControls();
updateControlsVisibility(); updateControlsVisibility();
updateControlsGeometry(_wrap->size()); updateControlsGeometry(_wrap->size());

View file

@ -12,6 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_channel.h" #include "data/data_channel.h"
#include "data/data_changes.h" #include "data/data_changes.h"
#include "main/main_session.h" #include "main/main_session.h"
#include "menu/menu_ttl.h"
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "boxes/peers/edit_peer_info_box.h" #include "boxes/peers/edit_peer_info_box.h"
#include "ui/boxes/auto_delete_settings.h" #include "ui/boxes/auto_delete_settings.h"
@ -26,12 +27,12 @@ namespace {
constexpr auto kToastDuration = crl::time(3500); constexpr auto kToastDuration = crl::time(3500);
} // namespace void ShowAutoDeleteToast(
not_null<QWidget*> parent,
void ShowAutoDeleteToast(not_null<PeerData*> peer) { not_null<PeerData*> peer) {
const auto period = peer->messagesTTL(); const auto period = peer->messagesTTL();
if (!period) { if (!period) {
Ui::Toast::Show(tr::lng_ttl_about_tooltip_off(tr::now)); Ui::Toast::Show(parent, tr::lng_ttl_about_tooltip_off(tr::now));
return; return;
} }
@ -46,20 +47,27 @@ void ShowAutoDeleteToast(not_null<PeerData*> peer) {
? tr::lng_ttl_about_tooltip_channel(tr::now, lt_duration, duration) ? tr::lng_ttl_about_tooltip_channel(tr::now, lt_duration, duration)
: tr::lng_ttl_about_tooltip(tr::now, lt_duration, duration); : tr::lng_ttl_about_tooltip(tr::now, lt_duration, duration);
Ui::ShowMultilineToast({ Ui::ShowMultilineToast({
.parentOverride = parent,
.text = { text }, .text = { text },
.duration = kToastDuration, .duration = kToastDuration,
}); });
} }
void AutoDeleteSettingsBox( } // namespace
not_null<Ui::GenericBox*> box,
not_null<PeerData*> peer) { void AutoDeleteSettingsMenu(
not_null<Ui::RpWidget*> parent,
std::shared_ptr<Ui::Show> show,
not_null<PeerData*> peer,
rpl::producer<> triggers) {
struct State { struct State {
TimeId savingPeriod = 0; TimeId savingPeriod = 0;
mtpRequestId savingRequestId = 0; mtpRequestId savingRequestId = 0;
QPointer<Ui::GenericBox> weak; QPointer<Ui::RpWidget> weak;
}; };
const auto state = std::make_shared<State>(State{ .weak = box.get() }); const auto state = std::make_shared<State>(State{
.weak = Ui::MakeWeak(parent.get()),
});
auto callback = [=](TimeId period) { auto callback = [=](TimeId period) {
auto &api = peer->session().api(); auto &api = peer->session().api();
if (state->savingRequestId) { if (state->savingRequestId) {
@ -74,42 +82,49 @@ void AutoDeleteSettingsBox(
MTP_int(period) MTP_int(period)
)).done([=](const MTPUpdates &result) { )).done([=](const MTPUpdates &result) {
peer->session().api().applyUpdates(result); peer->session().api().applyUpdates(result);
ShowAutoDeleteToast(peer); ShowAutoDeleteToast(show->toastParent(), peer);
#if 0
if (const auto strong = state->weak.data()) { if (const auto strong = state->weak.data()) {
strong->closeBox(); strong->closeBox();
} }
#endif
}).fail([=] { }).fail([=] {
state->savingRequestId = 0; state->savingRequestId = 0;
}).send(); }).send();
}; };
Ui::AutoDeleteSettingsBox( auto about = peer->isUser()
box, ? tr::lng_ttl_edit_about(lt_user, rpl::single(peer->shortName()))
peer->messagesTTL(), : peer->isBroadcast()
(peer->isUser() ? tr::lng_ttl_edit_about_channel()
? tr::lng_ttl_edit_about(lt_user, rpl::single(peer->shortName())) : tr::lng_ttl_edit_about_group();
: peer->isBroadcast() const auto ttl = peer->messagesTTL();
? tr::lng_ttl_edit_about_channel() TTLMenu::SetupTTLMenu(
: tr::lng_ttl_edit_about_group()), parent,
std::move(callback)); std::move(triggers),
{ std::move(show), ttl, std::move(about), std::move(callback) });
} }
TTLButton::TTLButton(not_null<QWidget*> parent, not_null<PeerData*> peer) TTLButton::TTLButton(
not_null<Ui::RpWidget*> parent,
std::shared_ptr<Ui::Show> show,
not_null<PeerData*> peer)
: _peer(peer) : _peer(peer)
, _button(parent, st::historyMessagesTTL) { , _button(parent, st::historyMessagesTTL) {
_button.setClickedCallback([=] { auto triggers = _button.clicks(
) | rpl::to_empty | rpl::filter([=] {
const auto canEdit = peer->isUser() const auto canEdit = peer->isUser()
|| (peer->isChat() || (peer->isChat()
&& peer->asChat()->canDeleteMessages()) && peer->asChat()->canDeleteMessages())
|| (peer->isChannel() || (peer->isChannel()
&& peer->asChannel()->canDeleteMessages()); && peer->asChannel()->canDeleteMessages());
if (!canEdit) { if (!canEdit) {
ShowAutoDeleteToast(peer); ShowAutoDeleteToast(show->toastParent(), peer);
return; return false;
} }
Ui::show( return true;
Box(AutoDeleteSettingsBox, peer),
Ui::LayerOption(0));
}); });
AutoDeleteSettingsMenu(parent, show, peer, std::move(triggers));
peer->session().changes().peerFlagsValue( peer->session().changes().peerFlagsValue(
peer, peer,
Data::PeerUpdate::Flag::MessagesTTL Data::PeerUpdate::Flag::MessagesTTL

View file

@ -10,18 +10,23 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
namespace Ui { namespace Ui {
class GenericBox; class Show;
} // namespace Ui } // namespace Ui
namespace HistoryView::Controls { namespace HistoryView::Controls {
void AutoDeleteSettingsBox( void AutoDeleteSettingsMenu(
not_null<Ui::GenericBox*> box, not_null<Ui::RpWidget*> parent,
not_null<PeerData*> peer); std::shared_ptr<Ui::Show> show,
not_null<PeerData*> peer,
rpl::producer<> triggers);
class TTLButton final { class TTLButton final {
public: public:
TTLButton(not_null<QWidget*> parent, not_null<PeerData*> peer); TTLButton(
not_null<Ui::RpWidget*> parent,
std::shared_ptr<Ui::Show> show,
not_null<PeerData*> peer);
[[nodiscard]] not_null<PeerData*> peer() const { [[nodiscard]] not_null<PeerData*> peer() const {
return _peer; return _peer;