From 994d789c60f9723dc73bbcdaa738595ac82877f8 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Fri, 9 Dec 2022 19:08:35 +0300 Subject: [PATCH] Added ability to remember last choice in delete messages box. --- Telegram/Resources/langs/lang.strings | 2 + .../SourceFiles/boxes/delete_messages_box.cpp | 39 ++++++++++++++++++- .../SourceFiles/boxes/delete_messages_box.h | 5 +++ Telegram/SourceFiles/core/core_settings.cpp | 14 +++++++ Telegram/SourceFiles/core/core_settings.h | 4 ++ 5 files changed, 63 insertions(+), 1 deletion(-) diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index cb96ca5c3..79870f17d 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -166,6 +166,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_scam_badge" = "SCAM"; "lng_fake_badge" = "FAKE"; +"lng_remember" = "Remember this choice"; + "lng_channels_limit_title" = "Too Many Communities"; "lng_channels_limit1#one" = "You are a member of **{count}** groups and channels."; "lng_channels_limit1#other" = "You are a member of **{count}** groups and channels."; diff --git a/Telegram/SourceFiles/boxes/delete_messages_box.cpp b/Telegram/SourceFiles/boxes/delete_messages_box.cpp index cfddd2adc..28a4ad97b 100644 --- a/Telegram/SourceFiles/boxes/delete_messages_box.cpp +++ b/Telegram/SourceFiles/boxes/delete_messages_box.cpp @@ -12,6 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "api/api_messages_search.h" #include "base/unixtime.h" #include "core/application.h" +#include "core/core_settings.h" #include "data/data_channel.h" #include "data/data_chat.h" #include "data/data_histories.h" @@ -27,6 +28,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/buttons.h" #include "ui/widgets/checkbox.h" #include "ui/widgets/labels.h" +#include "ui/wrap/slide_wrap.h" #include "styles/style_layers.h" #include "styles/style_boxes.h" @@ -229,11 +231,32 @@ void DeleteMessagesBox::prepare() { auto count = int(_ids.size()); if (hasScheduledMessages()) { } else if (auto revoke = revokeText(peer)) { + const auto &settings = Core::App().settings(); + const auto revokeByDefault = + !settings.rememberedDeleteMessageOnlyForYou(); _revoke.create( this, revoke->checkbox, - true, + revokeByDefault, st::defaultBoxCheckbox); + _revokeRemember.create( + this, + object_ptr( + this, + tr::lng_remember(), + false, + st::defaultBoxCheckbox)); + _revokeRemember->hide(anim::type::instant); + _revoke->checkedValue( + ) | rpl::start_with_next([=](bool checked) { + _revokeRemember->toggle( + checked != revokeByDefault, + anim::type::normal); + }, _revokeRemember->lifetime()); + _revokeRemember->heightValue( + ) | rpl::start_with_next([=](int h) { + setDimensions(st::boxWidth, _fullHeight + h); + }, lifetime()); appendDetails(std::move(revoke->description)); } else if (peer->isChannel()) { if (peer->isMegagroup()) { @@ -309,6 +332,7 @@ void DeleteMessagesBox::prepare() { + st::boxLittleSkip; } setDimensions(st::boxWidth, fullHeight); + _fullHeight = fullHeight; } bool DeleteMessagesBox::hasScheduledMessages() const { @@ -450,6 +474,11 @@ void DeleteMessagesBox::resizeEvent(QResizeEvent *e) { _revoke->resizeToNaturalWidth(availableWidth); _revoke->moveToLeft(padding.left(), top); top += _revoke->heightNoMargins() + st::boxLittleSkip; + if (_revokeRemember) { + _revokeRemember->resizeToNaturalWidth(availableWidth); + _revokeRemember->moveToLeft(padding.left(),top); + top += _revokeRemember->heightNoMargins(); + } } if (_autoDeleteSettings) { top += st::boxMediumSkip - st::boxLittleSkip; @@ -469,6 +498,14 @@ void DeleteMessagesBox::keyPressEvent(QKeyEvent *e) { } void DeleteMessagesBox::deleteAndClear() { + if (_revoke + && _revokeRemember + && _revokeRemember->toggled() + && _revokeRemember->entity()->checked()) { + Core::App().settings().setRememberedDeleteMessageOnlyForYou( + !_revoke->checked()); + Core::App().saveSettingsDelayed(); + } const auto revoke = _revoke ? _revoke->checked() : _revokeForBot; const auto session = _session; const auto invokeCallbackAndClose = [&] { diff --git a/Telegram/SourceFiles/boxes/delete_messages_box.h b/Telegram/SourceFiles/boxes/delete_messages_box.h index ccb0b20c2..9987fd8b3 100644 --- a/Telegram/SourceFiles/boxes/delete_messages_box.h +++ b/Telegram/SourceFiles/boxes/delete_messages_box.h @@ -17,6 +17,8 @@ namespace Ui { class Checkbox; class FlatLabel; class LinkButton; +template +class SlideWrap; } // namespace Ui class DeleteMessagesBox final : public Ui::BoxContent { @@ -73,11 +75,14 @@ private: object_ptr _text = { nullptr }; object_ptr _revoke = { nullptr }; + object_ptr> _revokeRemember = { nullptr }; object_ptr _banUser = { nullptr }; object_ptr _reportSpam = { nullptr }; object_ptr _deleteAll = { nullptr }; object_ptr _autoDeleteSettings = { nullptr }; + int _fullHeight = 0; + Fn _deleteConfirmedCallback; }; diff --git a/Telegram/SourceFiles/core/core_settings.cpp b/Telegram/SourceFiles/core/core_settings.cpp index da140dcf8..546aa8763 100644 --- a/Telegram/SourceFiles/core/core_settings.cpp +++ b/Telegram/SourceFiles/core/core_settings.cpp @@ -274,6 +274,9 @@ QByteArray Settings::serialize() const { for (const auto &lang : _skipTranslationForLanguages) { stream << quint64(lang); } + + stream + << qint32(_rememberedDeleteMessageOnlyForYou ? 1 : 0); } return result; } @@ -370,6 +373,7 @@ void Settings::addFromSerialized(const QByteArray &serialized) { qint32 legacySkipTranslationForLanguage = _translateButtonEnabled ? 1 : 0; qint32 skipTranslationForLanguagesCount = 0; std::vector skipTranslationForLanguages; + qint32 rememberedDeleteMessageOnlyForYou = _rememberedDeleteMessageOnlyForYou ? 1 : 0; stream >> themesAccentColors; if (!stream.atEnd()) { @@ -579,6 +583,8 @@ void Settings::addFromSerialized(const QByteArray &serialized) { skipTranslationForLanguages.emplace_back(language); } } + + stream >> rememberedDeleteMessageOnlyForYou; } if (stream.status() != QDataStream::Ok) { LOG(("App Error: " @@ -761,6 +767,7 @@ void Settings::addFromSerialized(const QByteArray &serialized) { std::abs(legacySkipTranslationForLanguage)); } } + _rememberedDeleteMessageOnlyForYou = (rememberedDeleteMessageOnlyForYou == 1); } QString Settings::getSoundPath(const QString &key) const { @@ -1083,4 +1090,11 @@ std::vector Settings::skipTranslationForLanguages() const { return _skipTranslationForLanguages; } +void Settings::setRememberedDeleteMessageOnlyForYou(bool value) { + _rememberedDeleteMessageOnlyForYou = value; +} +bool Settings::rememberedDeleteMessageOnlyForYou() const { + return _rememberedDeleteMessageOnlyForYou; +} + } // namespace Core diff --git a/Telegram/SourceFiles/core/core_settings.h b/Telegram/SourceFiles/core/core_settings.h index c012d8f46..652269af1 100644 --- a/Telegram/SourceFiles/core/core_settings.h +++ b/Telegram/SourceFiles/core/core_settings.h @@ -727,6 +727,9 @@ public: void setSkipTranslationForLanguages(std::vector languages); [[nodiscard]] std::vector skipTranslationForLanguages() const; + void setRememberedDeleteMessageOnlyForYou(bool value); + [[nodiscard]] bool rememberedDeleteMessageOnlyForYou() const; + [[nodiscard]] static bool ThirdColumnByDefault(); [[nodiscard]] static float64 DefaultDialogsWidthRatio(); [[nodiscard]] static qint32 SerializePlaybackSpeed(float64 speed) { @@ -843,6 +846,7 @@ private: HistoryView::DoubleClickQuickAction(); bool _translateButtonEnabled = false; std::vector _skipTranslationForLanguages; + bool _rememberedDeleteMessageOnlyForYou = false; bool _tabbedReplacedWithInfo = false; // per-window rpl::event_stream _tabbedReplacedWithInfoValue; // per-window