Skip to content

Commit 8db1bf9

Browse files
23rdjohn-preston
authored andcommitted
Added ability to share link for monoforum of owned channels.
1 parent 2740c5d commit 8db1bf9

2 files changed

Lines changed: 78 additions & 20 deletions

File tree

Telegram/Resources/langs/lang.strings

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1950,6 +1950,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
19501950
"lng_manage_monoforum_price" = "Price for each message";
19511951
"lng_manage_monoforum_about" = "Allow users to send messages to your channel, with the option to charge a fee for each message.";
19521952
"lng_manage_monoforum_price_about" = "Your channel will receive {percent} of the selected fee ({amount}) for each incoming message.";
1953+
"lng_manage_monoforum_link_subtitle" = "Link to direct messages";
19531954

19541955
"lng_manage_history_visibility_title" = "Chat history for new members";
19551956
"lng_manage_history_visibility_shown" = "Visible";

Telegram/SourceFiles/boxes/edit_privacy_box.cpp

Lines changed: 77 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,42 @@ For license and copyright information please follow this link:
88
#include "boxes/edit_privacy_box.h"
99

1010
#include "api/api_global_privacy.h"
11+
#include "apiwrap.h"
1112
#include "boxes/filters/edit_filter_chats_list.h"
13+
#include "boxes/peers/edit_peer_invite_link.h"
14+
#include "data/data_channel.h"
15+
#include "data/data_chat.h"
16+
#include "data/data_peer_values.h"
17+
#include "data/data_user.h"
18+
#include "history/history.h"
19+
#include "lang/lang_keys.h"
20+
#include "main/main_app_config.h"
21+
#include "main/main_session.h"
22+
#include "settings/settings_premium.h"
23+
#include "settings/settings_privacy_controllers.h"
24+
#include "settings/settings_privacy_security.h"
25+
#include "ui/boxes/peer_qr_box.h"
26+
#include "ui/controls/invite_link_buttons.h"
27+
#include "ui/controls/invite_link_label.h"
1228
#include "ui/effects/premium_graphics.h"
1329
#include "ui/layers/generic_box.h"
14-
#include "ui/widgets/checkbox.h"
15-
#include "ui/widgets/continuous_sliders.h"
16-
#include "ui/widgets/shadow.h"
30+
#include "ui/painter.h"
1731
#include "ui/text/format_values.h"
1832
#include "ui/text/text_utilities.h"
1933
#include "ui/toast/toast.h"
20-
#include "ui/wrap/slide_wrap.h"
21-
#include "ui/painter.h"
2234
#include "ui/vertical_list.h"
23-
#include "history/history.h"
24-
#include "boxes/peer_list_controllers.h"
25-
#include "settings/settings_premium.h"
26-
#include "settings/settings_privacy_controllers.h"
27-
#include "settings/settings_privacy_security.h"
28-
#include "calls/calls_instance.h"
29-
#include "lang/lang_keys.h"
30-
#include "apiwrap.h"
31-
#include "main/main_app_config.h"
32-
#include "main/main_session.h"
33-
#include "data/data_user.h"
34-
#include "data/data_chat.h"
35-
#include "data/data_channel.h"
36-
#include "data/data_peer_values.h"
35+
#include "ui/widgets/buttons.h"
36+
#include "ui/widgets/checkbox.h"
37+
#include "ui/widgets/continuous_sliders.h"
38+
#include "ui/widgets/popup_menu.h"
39+
#include "ui/widgets/shadow.h"
40+
#include "ui/wrap/slide_wrap.h"
3741
#include "window/window_session_controller.h"
3842
#include "styles/style_boxes.h"
39-
#include "styles/style_settings.h"
43+
#include "styles/style_info.h"
4044
#include "styles/style_layers.h"
4145
#include "styles/style_menu_icons.h"
46+
#include "styles/style_settings.h"
4247
#include "styles/style_window.h"
4348

4449
namespace {
@@ -1312,6 +1317,58 @@ void EditDirectMessagesPriceBox(
13121317
*result = stars;
13131318
}, box->lifetime());
13141319

1320+
if (const auto username = channel->username(); !username.isEmpty()) {
1321+
Ui::AddSkip(inner);
1322+
Ui::AddSubsectionTitle(
1323+
inner,
1324+
tr::lng_manage_monoforum_link_subtitle());
1325+
1326+
constexpr auto kDirectParam = "?direct"_cs;
1327+
const auto link = channel->session().createInternalLinkFull(username)
1328+
+ kDirectParam.utf8();
1329+
const auto copyLink = [=] {
1330+
TextUtilities::SetClipboardText(TextForMimeData::Simple(link));
1331+
box->uiShow()->showToast(tr::lng_group_invite_copied(tr::now));
1332+
};
1333+
const auto shareLink = [=] {
1334+
box->uiShow()->showBox(ShareInviteLinkBox(channel, link));
1335+
};
1336+
const auto createMenu = [=] {
1337+
auto result = base::make_unique_q<Ui::PopupMenu>(
1338+
inner,
1339+
st::popupMenuWithIcons);
1340+
result->addAction(
1341+
tr::lng_group_invite_context_qr(tr::now),
1342+
[=] {
1343+
box->uiShow()->showBox(Box([=](
1344+
not_null<Ui::GenericBox*> qrBox) {
1345+
Ui::FillPeerQrBox(qrBox, channel, link, nullptr);
1346+
}));
1347+
},
1348+
&st::menuIconQrCode);
1349+
return result;
1350+
};
1351+
1352+
auto linkText = Ui::Text::StripUrlProtocol(link);
1353+
const auto label = inner->lifetime().make_state<Ui::InviteLinkLabel>(
1354+
inner,
1355+
rpl::single(std::move(linkText)),
1356+
createMenu);
1357+
inner->add(
1358+
label->take(),
1359+
st::inviteLinkFieldPadding);
1360+
1361+
label->clicks() | rpl::start_with_next(copyLink, label->lifetime());
1362+
1363+
Ui::AddSkip(inner);
1364+
1365+
AddCopyShareLinkButtons(inner, copyLink, shareLink);
1366+
Ui::AddSkip(inner);
1367+
Ui::AddSkip(inner);
1368+
1369+
Ui::AddDivider(inner);
1370+
}
1371+
13151372
box->addButton(tr::lng_settings_save(), [=] {
13161373
const auto weak = base::make_weak(box);
13171374
callback(toggle->toggled() ? *result : std::optional<int>());

0 commit comments

Comments
 (0)