Added ability to choose precise time for user restriction.

Fixed #3599.
Fixed #6923.
This commit is contained in:
23rd 2022-04-17 11:41:26 +03:00 committed by John Preston
parent f1a7db780e
commit 1ed7d482ab
2 changed files with 25 additions and 30 deletions

View file

@ -20,10 +20,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/toast/toast.h" #include "ui/toast/toast.h"
#include "ui/text/text_utilities.h" #include "ui/text/text_utilities.h"
#include "ui/text/text_options.h" #include "ui/text/text_options.h"
#include "ui/boxes/calendar_box.h"
#include "ui/special_buttons.h" #include "ui/special_buttons.h"
#include "chat_helpers/emoji_suggestions_widget.h" #include "chat_helpers/emoji_suggestions_widget.h"
#include "settings/settings_privacy_security.h" #include "settings/settings_privacy_security.h"
#include "ui/boxes/choose_date_time.h"
#include "ui/boxes/confirm_box.h" #include "ui/boxes/confirm_box.h"
#include "boxes/passcode_box.h" #include "boxes/passcode_box.h"
#include "boxes/peers/add_bot_to_chat_box.h" #include "boxes/peers/add_bot_to_chat_box.h"
@ -783,35 +783,33 @@ ChatRestrictionsInfo EditRestrictedBox::defaultRights() const {
} }
void EditRestrictedBox::showRestrictUntil() { void EditRestrictedBox::showRestrictUntil() {
auto tomorrow = QDate::currentDate().addDays(1); _show.showBox(Box([=](not_null<Ui::GenericBox*> box) {
auto highlighted = isUntilForever() const auto save = [=](TimeId result) {
? tomorrow if (!result) {
: base::unixtime::parse(getRealUntilValue()).date(); return;
auto month = highlighted; }
auto box = Box<Ui::CalendarBox>(Ui::CalendarBoxArgs{ setRestrictUntil(result);
.month = month, box->closeBox();
.highlighted = highlighted, };
.callback = [=](const QDate &date) { const auto now = base::unixtime::now();
setRestrictUntil( const auto time = isUntilForever()
static_cast<int>(date.startOfDay().toSecsSinceEpoch())); ? (now + kSecondsInDay)
}, : getRealUntilValue();
.finalize = [=](not_null<Ui::CalendarBox*> box) { ChooseDateTimeBox(box, {
box->addLeftButton( .title = tr::lng_rights_chat_banned_until_header(),
tr::lng_rights_chat_banned_forever(), .submit = tr::lng_settings_save(),
[=] { setRestrictUntil(0); }); .done = save,
}, .min = [=] { return now; },
.minDate = tomorrow, .time = time,
.maxDate = QDate::currentDate().addDays(kMaxRestrictDelayDays), .max = [=] {
}); return now + kSecondsInDay * kMaxRestrictDelayDays;
_restrictUntilBox = Ui::MakeWeak(box.data()); },
_show.showBox(std::move(box)); });
}));
} }
void EditRestrictedBox::setRestrictUntil(TimeId until) { void EditRestrictedBox::setRestrictUntil(TimeId until) {
_until = until; _until = until;
if (_restrictUntilBox) {
_restrictUntilBox->closeBox();
}
_untilVariants.clear(); _untilVariants.clear();
createUntilGroup(); createUntilGroup();
createUntilVariants(); createUntilVariants();
@ -861,8 +859,7 @@ void EditRestrictedBox::createUntilVariants() {
tr::lng_rights_chat_banned_custom_date( tr::lng_rights_chat_banned_custom_date(
tr::now, tr::now,
lt_date, lt_date,
langDayOfMonthFull( langDateTime(base::unixtime::parse(until))));
base::unixtime::parse(until).date())));
} }
}; };
auto addCurrentVariant = [&](TimeId from, TimeId to) { auto addCurrentVariant = [&](TimeId from, TimeId to) {

View file

@ -17,7 +17,6 @@ class LinkButton;
class Checkbox; class Checkbox;
class Radiobutton; class Radiobutton;
class RadiobuttonGroup; class RadiobuttonGroup;
class CalendarBox;
class VerticalLayout; class VerticalLayout;
template <typename Widget> template <typename Widget>
class SlideWrap; class SlideWrap;
@ -176,7 +175,6 @@ private:
std::shared_ptr<Ui::RadiobuttonGroup> _untilGroup; std::shared_ptr<Ui::RadiobuttonGroup> _untilGroup;
std::vector<base::unique_qptr<Ui::Radiobutton>> _untilVariants; std::vector<base::unique_qptr<Ui::Radiobutton>> _untilVariants;
QPointer<Ui::CalendarBox> _restrictUntilBox;
static constexpr auto kUntilOneDay = -1; static constexpr auto kUntilOneDay = -1;
static constexpr auto kUntilOneWeek = -2; static constexpr auto kUntilOneWeek = -2;