diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 3d7169c2b9..65492b1c0a 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -1950,6 +1950,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_manage_monoforum_price" = "Price for each message"; "lng_manage_monoforum_about" = "Allow users to send messages to your channel, with the option to charge a fee for each message."; "lng_manage_monoforum_price_about" = "Your channel will receive {percent} of the selected fee ({amount}) for each incoming message."; +"lng_manage_monoforum_link_subtitle" = "Link to direct messages"; "lng_manage_history_visibility_title" = "Chat history for new members"; "lng_manage_history_visibility_shown" = "Visible"; diff --git a/Telegram/SourceFiles/boxes/edit_privacy_box.cpp b/Telegram/SourceFiles/boxes/edit_privacy_box.cpp index be19114412..411f4b1e36 100644 --- a/Telegram/SourceFiles/boxes/edit_privacy_box.cpp +++ b/Telegram/SourceFiles/boxes/edit_privacy_box.cpp @@ -8,37 +8,42 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/edit_privacy_box.h" #include "api/api_global_privacy.h" +#include "apiwrap.h" #include "boxes/filters/edit_filter_chats_list.h" -#include "ui/effects/premium_graphics.h" -#include "ui/layers/generic_box.h" -#include "ui/widgets/checkbox.h" -#include "ui/widgets/continuous_sliders.h" -#include "ui/widgets/shadow.h" -#include "ui/text/format_values.h" -#include "ui/text/text_utilities.h" -#include "ui/toast/toast.h" -#include "ui/wrap/slide_wrap.h" -#include "ui/painter.h" -#include "ui/vertical_list.h" +#include "boxes/peers/edit_peer_invite_link.h" +#include "data/data_channel.h" +#include "data/data_chat.h" +#include "data/data_peer_values.h" +#include "data/data_user.h" #include "history/history.h" -#include "boxes/peer_list_controllers.h" +#include "lang/lang_keys.h" +#include "main/main_app_config.h" +#include "main/main_session.h" #include "settings/settings_premium.h" #include "settings/settings_privacy_controllers.h" #include "settings/settings_privacy_security.h" -#include "calls/calls_instance.h" -#include "lang/lang_keys.h" -#include "apiwrap.h" -#include "main/main_app_config.h" -#include "main/main_session.h" -#include "data/data_user.h" -#include "data/data_chat.h" -#include "data/data_channel.h" -#include "data/data_peer_values.h" +#include "ui/boxes/peer_qr_box.h" +#include "ui/controls/invite_link_buttons.h" +#include "ui/controls/invite_link_label.h" +#include "ui/effects/premium_graphics.h" +#include "ui/layers/generic_box.h" +#include "ui/painter.h" +#include "ui/text/format_values.h" +#include "ui/text/text_utilities.h" +#include "ui/toast/toast.h" +#include "ui/vertical_list.h" +#include "ui/widgets/buttons.h" +#include "ui/widgets/checkbox.h" +#include "ui/widgets/continuous_sliders.h" +#include "ui/widgets/popup_menu.h" +#include "ui/widgets/shadow.h" +#include "ui/wrap/slide_wrap.h" #include "window/window_session_controller.h" #include "styles/style_boxes.h" -#include "styles/style_settings.h" +#include "styles/style_info.h" #include "styles/style_layers.h" #include "styles/style_menu_icons.h" +#include "styles/style_settings.h" #include "styles/style_window.h" namespace { @@ -1312,6 +1317,58 @@ void EditDirectMessagesPriceBox( *result = stars; }, box->lifetime()); + if (const auto username = channel->username(); !username.isEmpty()) { + Ui::AddSkip(inner); + Ui::AddSubsectionTitle( + inner, + tr::lng_manage_monoforum_link_subtitle()); + + constexpr auto kDirectParam = "?direct"_cs; + const auto link = channel->session().createInternalLinkFull(username) + + kDirectParam.utf8(); + const auto copyLink = [=] { + TextUtilities::SetClipboardText(TextForMimeData::Simple(link)); + box->uiShow()->showToast(tr::lng_group_invite_copied(tr::now)); + }; + const auto shareLink = [=] { + box->uiShow()->showBox(ShareInviteLinkBox(channel, link)); + }; + const auto createMenu = [=] { + auto result = base::make_unique_q( + inner, + st::popupMenuWithIcons); + result->addAction( + tr::lng_group_invite_context_qr(tr::now), + [=] { + box->uiShow()->showBox(Box([=]( + not_null qrBox) { + Ui::FillPeerQrBox(qrBox, channel, link, nullptr); + })); + }, + &st::menuIconQrCode); + return result; + }; + + auto linkText = Ui::Text::StripUrlProtocol(link); + const auto label = inner->lifetime().make_state( + inner, + rpl::single(std::move(linkText)), + createMenu); + inner->add( + label->take(), + st::inviteLinkFieldPadding); + + label->clicks() | rpl::start_with_next(copyLink, label->lifetime()); + + Ui::AddSkip(inner); + + AddCopyShareLinkButtons(inner, copyLink, shareLink); + Ui::AddSkip(inner); + Ui::AddSkip(inner); + + Ui::AddDivider(inner); + } + box->addButton(tr::lng_settings_save(), [=] { const auto weak = base::make_weak(box); callback(toggle->toggled() ? *result : std::optional());