From 7e45283ba2806835e5841abff2736e16b8addb4e Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Fri, 18 Apr 2025 00:16:59 +0300 Subject: [PATCH] Added privacy link to birthday box from top bar suggestion. --- .../SourceFiles/core/local_url_handlers.cpp | 62 +++++++++++++++++-- .../dialogs/dialogs_top_bar_suggestion.cpp | 2 +- .../settings/settings_privacy_controllers.h | 2 +- 3 files changed, 58 insertions(+), 8 deletions(-) diff --git a/Telegram/SourceFiles/core/local_url_handlers.cpp b/Telegram/SourceFiles/core/local_url_handlers.cpp index 9092ba251b..f1eba0ca21 100644 --- a/Telegram/SourceFiles/core/local_url_handlers.cpp +++ b/Telegram/SourceFiles/core/local_url_handlers.cpp @@ -37,6 +37,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "passport/passport_form_controller.h" #include "ui/text/text_utilities.h" #include "ui/toast/toast.h" +#include "ui/vertical_list.h" #include "data/components/credits.h" #include "data/data_birthday.h" #include "data/data_channel.h" @@ -936,10 +937,41 @@ bool ShowEditBirthday( : (u"Error: "_q + error.type())); })).handleFloodErrors().send(); }; - controller->show(Box( - Ui::EditBirthdayBox, - user->birthday(), - save)); + if (match->captured(1).isEmpty()) { + controller->show(Box(Ui::EditBirthdayBox, user->birthday(), save)); + } else { + controller->show(Box([=](not_null box) { + Ui::EditBirthdayBox(box, user->birthday(), save); + + const auto container = box->verticalLayout(); + const auto session = &user->session(); + const auto key = Api::UserPrivacy::Key::Birthday; + session->api().userPrivacy().reload(key); + auto isExactlyContacts = session->api().userPrivacy().value( + key + ) | rpl::map([=](const Api::UserPrivacy::Rule &value) { + return (value.option == Api::UserPrivacy::Option::Contacts) + && value.always.peers.empty() + && !value.always.premiums + && value.never.peers.empty(); + }) | rpl::distinct_until_changed(); + Ui::AddSkip(container); + const auto link = u"internal:edit_privacy_birthday:from_box"_q; + Ui::AddDividerText(container, rpl::conditional( + std::move(isExactlyContacts), + tr::lng_settings_birthday_contacts( + lt_link, + tr::lng_settings_birthday_contacts_link( + ) | Ui::Text::ToLink(link), + Ui::Text::WithEntities), + tr::lng_settings_birthday_about( + lt_link, + tr::lng_settings_birthday_about_link( + ) | Ui::Text::ToLink(link), + Ui::Text::WithEntities))); + })); + + } return true; } @@ -950,11 +982,29 @@ bool ShowEditBirthdayPrivacy( if (!controller) { return false; } + const auto isFromBox = !match->captured(1).isEmpty(); auto syncLifetime = controller->session().api().userPrivacy().value( Api::UserPrivacy::Key::Birthday ) | rpl::take( 1 ) | rpl::start_with_next([=](const Api::UserPrivacy::Rule &value) { + if (isFromBox) { + using namespace ::Settings; + class Controller final : public BirthdayPrivacyController { + object_ptr setupAboveWidget( + not_null controller, + not_null parent, + rpl::producer