Use separate strings for channel voice chats.

This commit is contained in:
John Preston 2021-08-31 17:59:29 +03:00
parent 2c07bdd0e8
commit e9a5c45f34
13 changed files with 186 additions and 76 deletions

View File

@ -1141,10 +1141,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_action_invite_users_and_one" = "{accumulated}, {user}";
"lng_action_invite_users_and_last" = "{accumulated} and {user}";
"lng_action_group_call_started_group" = "{from} started a voice chat";
"lng_action_group_call_started_channel" = "Voice chat started";
"lng_action_group_call_started_channel" = "Live stream started";
"lng_action_group_call_scheduled_group" = "{from} scheduled a voice chat for {date}";
"lng_action_group_call_scheduled_channel" = "Voice chat scheduled for {date}";
"lng_action_group_call_finished" = "Voice chat finished ({duration})";
"lng_action_group_call_scheduled_channel" = "Live stream scheduled for {date}";
"lng_action_group_call_finished" = "Live stream finished ({duration})";
"lng_action_group_call_finished_group" = "{from} ended the voice chat ({duration})";
"lng_action_add_user" = "{from} added {user}";
"lng_action_add_users_many" = "{from} added {users}";
@ -2004,6 +2004,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_call_bar_hangup" = "End call";
"lng_call_leave_to_other_sure" = "Do you want to end your active call and join a voice chat in this group?";
"lng_call_leave_to_other_sure_channel" = "Do you want to end your active call and join a live stream in this channel?";
"lng_call_box_title" = "Calls";
"lng_call_box_about" = "You haven't made any Telegram calls yet.";
@ -2045,6 +2046,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_call_microphone_off" = "{user}'s microphone is off";
"lng_group_call_title" = "Voice Chat";
"lng_group_call_title_channel" = "Live Stream";
"lng_group_call_active" = "speaking";
"lng_group_call_inactive" = "listening";
"lng_group_call_raised_hand_status" = "wants to speak";
@ -2068,13 +2070,20 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_group_call_connecting" = "Connecting...";
"lng_group_call_leave" = "Leave";
"lng_group_call_leave_title" = "Leave voice chat";
"lng_group_call_leave_title_channel" = "Leave live stream";
"lng_group_call_leave_sure" = "Are you sure you want to leave this voice chat?";
"lng_group_call_leave_sure_channel" = "Are you sure you want to leave this live stream?";
"lng_group_call_close" = "Close";
"lng_group_call_close_sure" = "Voice chat is scheduled. You can abort it or just close this panel.";
"lng_group_call_close_sure_channel" = "Live stream is scheduled. You can abort it or just close this panel.";
"lng_group_call_also_cancel" = "Abort voice chat";
"lng_group_call_also_cancel_channel" = "Abort live stream";
"lng_group_call_leave_to_other_sure" = "Do you want to leave your active voice chat and join a voice chat in this group?";
"lng_group_call_leave_to_other_sure_channel" = "Do you want to leave your active voice chat and join a live stream in this channel?";
"lng_group_call_leave_channel_to_other_sure" = "Do you want to leave your active live stream and join a voice chat in this group?";
"lng_group_call_leave_channel_to_other_sure_channel" = "Do you want to leave your active live stream and join a live stream in this channel?";
"lng_group_call_create_sure" = "Do you really want to start a voice chat in this group?";
"lng_group_call_create_sure_channel" = "Are you sure you want to start a voice chat in this channel as your personal account?";
"lng_group_call_create_sure_channel" = "Are you sure you want to start a live stream in this channel as your personal account?";
"lng_group_call_join_sure_personal" = "Are you sure you want to join this voice chat as your personal account?";
"lng_group_call_muted_no_camera" = "You can't turn on video while you're muted by admin.";
"lng_group_call_muted_no_screen" = "You can't share your screen while you're muted by admin.";
@ -2089,6 +2098,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_group_call_tooltip_force_muted" = "Muted by admin. Click if you want to speak.";
"lng_group_call_tooltip_raised_hand" = "You asked to speak. We let the speakers know.";
"lng_group_call_also_end" = "End voice chat";
"lng_group_call_also_end_channel" = "End live stream";
"lng_group_call_settings_title" = "Settings";
"lng_group_call_invite" = "Invite Member";
"lng_group_call_invited_status" = "invited";
@ -2111,24 +2121,23 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_group_call_ptt_delay" = "Push to Talk release delay: {delay}";
"lng_group_call_share" = "Share Invite Link";
"lng_group_call_noise_suppression" = "Enable Noise Suppression";
"lng_group_call_over_limit#one" = "The voice chat is over {count} member.\nNew participants only have access to audio stream.";
"lng_group_call_over_limit#other" = "The voice chat is over {count} members.\nNew participants only have access to audio stream.";
"lng_group_call_video_paused" = "Video is paused";
"lng_group_call_share_speaker" = "Users with this link can speak";
"lng_group_call_copy_speaker_link" = "Copy Speaker Link";
"lng_group_call_copy_listener_link" = "Copy Listener Link";
"lng_group_call_end" = "End Voice Chat";
"lng_group_call_end_channel" = "End Live Stream";
"lng_group_call_cancel" = "Abort Voice Chat";
"lng_group_call_cancel_channel" = "Abort Live Stream";
"lng_group_call_join" = "Join";
"lng_group_call_join_confirm" = "Do you want to join the voice chat {chat}?";
"lng_group_call_join_confirm_channel" = "Do you want to join the live stream {chat}?";
"lng_group_call_invite_done_user" = "You invited {user} to the voice chat.";
"lng_group_call_invite_done_many#one" = "You invited **{count} member** to the voice chat.";
"lng_group_call_invite_done_many#other" = "You invited **{count} members** to the voice chat.";
"lng_group_call_no_members" = "click to join";
"lng_group_call_members#one" = "{count} participant";
"lng_group_call_members#other" = "{count} participants";
"lng_group_call_no_anonymous" = "Sorry, anonymous group admins can't join voice chats.";
"lng_group_call_too_many" = "Sorry, there are too many members in this voice chat. Please try again later.";
"lng_group_call_context_mute" = "Mute";
"lng_group_call_context_unmute" = "Allow to speak";
"lng_group_call_context_remove_hand" = "Cancel request to speak";
@ -2140,6 +2149,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_group_call_context_unpin_screen" = "Unpin screencast";
"lng_group_call_context_remove" = "Remove";
"lng_group_call_remove_channel" = "Remove {channel} from the voice chat?";
"lng_group_call_remove_channel_from_channel" = "Remove {channel} from the live stream?";
"lng_group_call_duration_days#one" = "{count} day";
"lng_group_call_duration_days#other" = "{count} days";
"lng_group_call_duration_hours#one" = "{count} hour";
@ -2156,18 +2166,24 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_group_call_mac_settings" = "Open Settings";
"lng_group_call_start_as_header" = "Start Voice Chat as...";
"lng_group_call_start_as_header_channel" = "Start Live Stream as...";
"lng_group_call_join_as_header" = "Join Voice Chat as...";
"lng_group_call_join_as_header_channel" = "Join Live Stream as...";
"lng_group_call_display_as_header" = "Display me as...";
"lng_group_call_join_as_about" = "Choose whether you want to be displayed as your personal account or as your channel.";
"lng_group_call_or_schedule" = "You can also {link}.";
"lng_group_call_schedule" = "schedule a voice chat";
"lng_group_call_schedule_channel" = "schedule a live stream";
"lng_group_call_schedule_title" = "Schedule Voice Chat";
"lng_group_call_schedule_title_channel" = "Schedule Live Stream";
"lng_group_call_schedule_notified_group" = "The members of the group will be notified that the voice chat will start in {duration}.";
"lng_group_call_schedule_notified_channel" = "The subscribers of the channel will be notified that the voice chat will start in {duration}.";
"lng_group_call_schedule_notified_channel" = "The subscribers of the channel will be notified that the live stream will start in {duration}.";
"lng_group_call_scheduled_status" = "Scheduled";
"lng_group_call_scheduled_title" = "Scheduled Voice Chat";
"lng_group_call_scheduled_title_channel" = "Scheduled Live Stream";
"lng_group_call_starts_short" = "Starts {when}";
"lng_group_call_starts" = "Voice Chat starts {when}";
"lng_group_call_starts_channel" = "Live Stream starts {when}";
"lng_group_call_starts_today" = "today at {time}";
"lng_group_call_starts_tomorrow" = "tomorrow at {time}";
"lng_group_call_starts_date" = "{date} at {time}";
@ -2178,16 +2194,18 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_group_call_starts_short_date" = "{date}, {time}";
"lng_group_call_start_now" = "Start Now";
"lng_group_call_start_now_sure" = "Are you sure you want to start the voice chat now?";
"lng_group_call_start_now_sure_channel" = "Are you sure you want to start the live stream now?";
"lng_group_call_set_reminder" = "Set Reminder";
"lng_group_call_cancel_reminder" = "Cancel Reminder";
"lng_group_call_join_as_personal" = "personal account";
"lng_group_call_edit_title" = "Edit voice chat title";
"lng_group_call_switch_done" = "Members of this voice chat will now see you as **{user}**";
"lng_group_call_edit_title_header" = "Voice chat title";
"lng_group_call_edit_title_channel" = "Edit live stream title";
"lng_group_call_recording_start" = "Start recording";
"lng_group_call_recording_stop" = "Stop recording";
"lng_group_call_recording_started" = "Voice chat recording started.";
"lng_group_call_recording_started_channel" = "Live stream recording started.";
"lng_group_call_recording_stopped" = "Voice chat recording stopped.";
"lng_group_call_recording_stopped_channel" = "Live stream recording stopped.";
"lng_group_call_recording_saved" = "Audio saved to Saved Messages.";
"lng_group_call_pinned_camera_me" = "Your video is pinned.";
"lng_group_call_pinned_screen_me" = "Your screencast is pinned.";
@ -2203,18 +2221,19 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_group_call_recording_start_field" = "Recording Title";
"lng_group_call_recording_start_button" = "Start";
"lng_group_call_is_recorded" = "Voice chat is being recorded.";
"lng_group_call_is_recorded_channel" = "Live stream is being recorded.";
"lng_group_call_can_speak_here" = "You can now speak.";
"lng_group_call_can_speak" = "You can now speak in {chat}.";
"lng_group_call_title_changed" = "Voice chat title changed to {title}";
"lng_group_call_title_changed_channel" = "Live stream title changed to {title}";
"lng_group_call_join_as_changed" = "Members of this voice chat will now see you as {name}";
"lng_group_call_join_as_changed_channel" = "Members of this live stream will now see you as {name}";
"lng_no_mic_permission" = "Telegram needs access to your microphone so that you can make calls and record voice messages.";
"lng_player_message_today" = "Today at {time}";
"lng_player_message_yesterday" = "Yesterday at {time}";
"lng_player_message_date" = "{date} at {time}";
//"lng_player_cant_stream" = "This file can't be played before it is fully downloaded.\n\nWould you like to download it?";
//"lng_player_download" = "Download";
"lng_rights_edit_admin" = "Manage permissions";
"lng_rights_edit_admin_header" = "What can this admin do?";
@ -2270,6 +2289,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_rights_channel_post" = "Post messages";
"lng_rights_channel_edit" = "Edit messages of others";
"lng_rights_channel_delete" = "Delete messages of others";
"lng_rights_channel_manage_calls" = "Manage live streams";
"lng_rights_group_info" = "Change group info";
"lng_rights_group_ban" = "Ban users";
"lng_rights_group_invite_link" = "Invite users via link";
@ -2359,6 +2379,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_admin_log_filter_messages_edited" = "Edited messages";
"lng_admin_log_filter_messages_pinned" = "Pinned messages";
"lng_admin_log_filter_voice_chats" = "Voice chat";
"lng_admin_log_filter_voice_chats_channel" = "Live stream";
"lng_admin_log_filter_invite_links" = "Invite links";
"lng_admin_log_filter_members_removed" = "Leaving members";
"lng_admin_log_filter_all_admins" = "All users and admins";
@ -2431,12 +2452,19 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_admin_log_changed_slow_mode" = "{from} changed slow mode to {duration}";
"lng_admin_log_removed_slow_mode" = "{from} disabled slow mode";
"lng_admin_log_started_group_call" = "{from} started a new voice chat";
"lng_admin_log_started_group_call_channel" = "{from} started a new live stream";
"lng_admin_log_discarded_group_call" = "{from} discarded a voice chat";
"lng_admin_log_discarded_group_call_channel" = "{from} discarded a live stream";
"lng_admin_log_muted_participant" = "{from} muted {user} in a voice chat";
"lng_admin_log_muted_participant_channel" = "{from} muted {user} in a live stream";
"lng_admin_log_unmuted_participant" = "{from} unmuted {user} in a voice chat";
"lng_admin_log_unmuted_participant_channel" = "{from} unmuted {user} in a live stream";
"lng_admin_log_allowed_unmute_self" = "{from} allowed new voice chat members to speak";
"lng_admin_log_allowed_unmute_self_channel" = "{from} allowed new live stream members to speak";
"lng_admin_log_disallowed_unmute_self" = "{from} started muting new voice chat members";
"lng_admin_log_disallowed_unmute_self_channel" = "{from} started muting new live stream members";
"lng_admin_log_participant_volume" = "{from} changed voice chat volume for {user} to {percent}";
"lng_admin_log_participant_volume_channel" = "{from} changed live stream volume for {user} to {percent}";
"lng_admin_log_user_with_username" = "{name} ({mention})";
"lng_admin_log_messages_ttl_set" = "{from} enabled messages auto-delete after {duration}";
"lng_admin_log_messages_ttl_changed" = "{from} changed messages auto-delete period from {previous} to {duration}";
@ -2461,6 +2489,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_admin_log_admin_invite_link" = "Invite users via link";
"lng_admin_log_admin_pin_messages" = "Pin messages";
"lng_admin_log_admin_manage_calls" = "Manage voice chats";
"lng_admin_log_admin_manage_calls_channel" = "Manage live streams";
"lng_admin_log_admin_add_admins" = "Add new admins";
"lng_terms_signup" = "By signing up,\nyou agree to the {link}.";

View File

@ -150,7 +150,7 @@ std::vector<std::pair<ChatAdminRights, QString>> AdminRightLabels(
{ Flag::EditMessages, tr::lng_rights_channel_edit(tr::now) },
{ Flag::DeleteMessages, tr::lng_rights_channel_delete(tr::now) },
{ Flag::InviteUsers, tr::lng_rights_group_invite(tr::now) },
{ Flag::ManageCall, tr::lng_rights_group_manage_calls(tr::now) },
{ Flag::ManageCall, tr::lng_rights_channel_manage_calls(tr::now) },
{ Flag::AddAdmins, tr::lng_rights_add_admins(tr::now) }
};
}

View File

@ -126,6 +126,7 @@ void ScheduleGroupCallBox(
copy.scheduleDate = date;
done(std::move(copy));
};
const auto livestream = info.peer->isBroadcast();
const auto duration = box->lifetime().make_state<
rpl::variable<QString>>();
auto description = (info.peer->isBroadcast()
@ -151,7 +152,9 @@ void ScheduleGroupCallBox(
).addSecs(60 * 60 * (now.time().minute() < 30 ? 1 : 2));
auto descriptor = Ui::ChooseDateTimeBox(box, {
.title = tr::lng_group_call_schedule_title(),
.title = (livestream
? tr::lng_group_call_schedule_title_channel()
: tr::lng_group_call_schedule_title()),
.submit = tr::lng_schedule_button(),
.done = send,
.min = min,
@ -194,11 +197,16 @@ void ChooseJoinAsBox(
JoinInfo info,
Fn<void(JoinInfo)> done) {
box->setWidth(st::groupCallJoinAsWidth);
const auto livestream = info.peer->isBroadcast();
box->setTitle([&] {
switch (context) {
case Context::Create: return tr::lng_group_call_start_as_header();
case Context::Create: return livestream
? tr::lng_group_call_start_as_header_channel()
: tr::lng_group_call_start_as_header();
case Context::Join:
case Context::JoinWithConfirm: return tr::lng_group_call_join_as_header();
case Context::JoinWithConfirm: return livestream
? tr::lng_group_call_join_as_header_channel()
: tr::lng_group_call_join_as_header();
case Context::Switch: return tr::lng_group_call_display_as_header();
}
Unexpected("Context in ChooseJoinAsBox.");
@ -243,7 +251,9 @@ void ChooseJoinAsBox(
box,
tr::lng_group_call_or_schedule(
lt_link,
tr::lng_group_call_schedule(makeLink),
(livestream
? tr::lng_group_call_schedule_channel
: tr::lng_group_call_schedule)(makeLink),
Ui::Text::WithEntities),
labelSt));
label->setClickHandlerFilter([=](const auto&...) {
@ -276,8 +286,7 @@ void ChooseJoinAsBox(
const auto anonymouseAdmin = channel
&& ((channel->isMegagroup() && channel->amAnonymous())
|| (channel->isBroadcast()
&& (channel->amCreator()
|| channel->hasAdminRights())));
&& (channel->amCreator() || channel->hasAdminRights())));
if (anonymouseAdmin && !joinAsAlreadyUsed) {
return { tr::lng_group_call_join_sure_personal(tr::now) };
} else if (context != ChooseJoinAsProcess::Context::JoinWithConfirm) {
@ -286,7 +295,9 @@ void ChooseJoinAsBox(
const auto name = !existing->title().isEmpty()
? existing->title()
: peer->name;
return tr::lng_group_call_join_confirm(
return (peer->isBroadcast()
? tr::lng_group_call_join_confirm_channel
: tr::lng_group_call_join_confirm)(
tr::now,
lt_chat,
Ui::Text::Bold(name),
@ -402,6 +413,7 @@ void ChooseJoinAsProcess::start(
finish(info);
return;
}
const auto livestream = peer->isBroadcast();
const auto creating = !peer->groupCall();
if (creating) {
confirmation
@ -409,7 +421,9 @@ void ChooseJoinAsProcess::start(
.append(tr::lng_group_call_or_schedule(
tr::now,
lt_link,
Ui::Text::Link(tr::lng_group_call_schedule(tr::now)),
Ui::Text::Link((livestream
? tr::lng_group_call_schedule_channel
: tr::lng_group_call_schedule)(tr::now)),
Ui::Text::WithEntities));
}
const auto guard = base::make_weak(&_request->guard);

View File

@ -979,11 +979,6 @@ void GroupCall::start(TimeId scheduleDate) {
LOG(("Call Error: Could not create, error: %1"
).arg(error.type()));
hangup();
if (error.type() == u"GROUPCALL_ANONYMOUS_FORBIDDEN"_q) {
Ui::ShowMultilineToast({
.text = { tr::lng_group_call_no_anonymous(tr::now) },
});
}
}).send();
}
@ -1313,11 +1308,7 @@ void GroupCall::rejoin(not_null<PeerData*> as) {
hangup();
Ui::ShowMultilineToast({
.text = { type == u"GROUPCALL_ANONYMOUS_FORBIDDEN"_q
? tr::lng_group_call_no_anonymous(tr::now)
: type == u"GROUPCALL_PARTICIPANTS_TOO_MUCH"_q
? tr::lng_group_call_too_many(tr::now)
: type == u"GROUPCALL_FORBIDDEN"_q
.text = { type == u"GROUPCALL_FORBIDDEN"_q
? tr::lng_group_not_accessible(tr::now)
: Lang::Hard::ServerError() },
});

View File

@ -37,8 +37,11 @@ void EditGroupCallTitleBox(
not_null<Ui::GenericBox*> box,
const QString &placeholder,
const QString &title,
bool livestream,
Fn<void(QString)> done) {
box->setTitle(tr::lng_group_call_edit_title());
box->setTitle(livestream
? tr::lng_group_call_edit_title_channel()
: tr::lng_group_call_edit_title());
const auto input = box->addRow(object_ptr<Ui::InputField>(
box,
st::groupCallField,
@ -492,25 +495,36 @@ void LeaveBox(
not_null<GroupCall*> call,
bool discardChecked,
BoxContext context) {
const auto livestream = call->peer()->isBroadcast();
const auto scheduled = (call->scheduleDate() != 0);
if (!scheduled) {
box->setTitle(tr::lng_group_call_leave_title());
box->setTitle(livestream
? tr::lng_group_call_leave_title_channel()
: tr::lng_group_call_leave_title());
}
const auto inCall = (context == BoxContext::GroupCallPanel);
box->addRow(
object_ptr<Ui::FlatLabel>(
box.get(),
(scheduled
? tr::lng_group_call_close_sure()
: tr::lng_group_call_leave_sure()),
? (livestream
? tr::lng_group_call_close_sure_channel()
: tr::lng_group_call_close_sure())
: (livestream
? tr::lng_group_call_leave_sure_channel()
: tr::lng_group_call_leave_sure())),
(inCall ? st::groupCallBoxLabel : st::boxLabel)),
scheduled ? st::boxPadding : st::boxRowPadding);
const auto discard = call->peer()->canManageGroupCall()
? box->addRow(object_ptr<Ui::Checkbox>(
box.get(),
(scheduled
? tr::lng_group_call_also_cancel()
: tr::lng_group_call_also_end()),
? (livestream
? tr::lng_group_call_also_cancel_channel()
: tr::lng_group_call_also_cancel())
: (livestream
? tr::lng_group_call_also_end_channel()
: tr::lng_group_call_also_end())),
discardChecked,
(inCall ? st::groupCallCheckbox : st::defaultBoxCheckbox),
(inCall ? st::groupCallCheck : st::defaultCheck)),
@ -592,7 +606,11 @@ void FillMenu(
menu->addSeparator();
}
if (addEditTitle) {
menu->addAction(tr::lng_group_call_edit_title(tr::now), [=] {
const auto livestream = call->peer()->isBroadcast();
const auto text = (livestream
? tr::lng_group_call_edit_title_channel
: tr::lng_group_call_edit_title)(tr::now);
menu->addAction(text, [=] {
const auto done = [=](const QString &title) {
if (const auto strong = weak.get()) {
strong->changeTitle(title);
@ -603,6 +621,7 @@ void FillMenu(
EditGroupCallTitleBox,
peer->name,
real->title(),
livestream,
done));
}
});
@ -666,15 +685,18 @@ void FillMenu(
BoxContext::GroupCallPanel));
}
};
const auto livestream = real->peer()->isBroadcast();
menu->addAction(MakeAttentionAction(
menu->menu(),
(real->scheduleDate()
? (call->canManage()
? tr::lng_group_call_cancel(tr::now)
: tr::lng_group_call_leave(tr::now))
: (call->canManage()
? tr::lng_group_call_end(tr::now)
: tr::lng_group_call_leave(tr::now))),
(!call->canManage()
? tr::lng_group_call_leave
: real->scheduleDate()
? (livestream
? tr::lng_group_call_cancel_channel
: tr::lng_group_call_cancel)
: (livestream
? tr::lng_group_call_end_channel
: tr::lng_group_call_end))(tr::now),
finish));
}

View File

@ -335,7 +335,9 @@ void Panel::startScheduledNow() {
_call->startScheduledNow();
};
auto owned = ConfirmBox({
.text = { tr::lng_group_call_start_now_sure(tr::now) },
.text = { (_call->peer()->isBroadcast()
? tr::lng_group_call_start_now_sure_channel
: tr::lng_group_call_start_now_sure)(tr::now) },
.button = tr::lng_group_call_start_now(),
.callback = done,
});
@ -973,6 +975,7 @@ void Panel::updateWideControlsVisibility() {
}
void Panel::subscribeToChanges(not_null<Data::GroupCall*> real) {
const auto livestream = real->peer()->isBroadcast();
const auto validateRecordingMark = [=](bool recording) {
if (!recording && _recordingMark) {
_recordingMark.destroy();
@ -989,7 +992,9 @@ void Panel::subscribeToChanges(not_null<Data::GroupCall*> real) {
const auto skip = st::groupCallRecordingMarkSkip;
_recordingMark->resize(size + 2 * skip, size + 2 * skip);
_recordingMark->setClickedCallback([=] {
showToast({ tr::lng_group_call_is_recorded(tr::now) });
showToast({ (livestream
? tr::lng_group_call_is_recorded_channel
: tr::lng_group_call_is_recorded)(tr::now) });
});
const auto animate = [=] {
const auto opaque = state->opaque;
@ -1024,12 +1029,17 @@ void Panel::subscribeToChanges(not_null<Data::GroupCall*> real) {
_1 != 0
) | rpl::distinct_until_changed(
) | rpl::start_with_next([=](bool recorded) {
const auto livestream = _call->peer()->isBroadcast();
validateRecordingMark(recorded);
showToast((recorded
? tr::lng_group_call_recording_started
? (livestream
? tr::lng_group_call_recording_started_channel
: tr::lng_group_call_recording_started)
: _call->recordingStoppedByMe()
? tr::lng_group_call_recording_saved
: tr::lng_group_call_recording_stopped)(
: (livestream
? tr::lng_group_call_recording_stopped_channel
: tr::lng_group_call_recording_stopped))(
tr::now,
Ui::Text::RichLangValue));
}, lifetime());
@ -1277,16 +1287,18 @@ void Panel::kickParticipant(not_null<PeerData*> participantPeer) {
object_ptr<Ui::FlatLabel>(
box.get(),
(!participantPeer->isUser()
? tr::lng_group_call_remove_channel(
tr::now,
lt_channel,
participantPeer->name)
? (_peer->isBroadcast()
? tr::lng_group_call_remove_channel_from_channel
: tr::lng_group_call_remove_channel)(
tr::now,
lt_channel,
participantPeer->name)
: (_peer->isBroadcast()
? tr::lng_profile_sure_kick_channel
: tr::lng_profile_sure_kick)(
tr::now,
lt_user,
participantPeer->asUser()->firstName)),
tr::now,
lt_user,
participantPeer->asUser()->firstName)),
st::groupCallBoxLabel),
style::margins(
st::boxRowPadding.left(),

View File

@ -49,7 +49,9 @@ void Toasts::setupJoinAsChanged() {
return (state == State::Joined);
}) | rpl::take(1);
}) | rpl::flatten_latest() | rpl::start_with_next([=] {
_panel->showToast(tr::lng_group_call_join_as_changed(
_panel->showToast((_call->peer()->isBroadcast()
? tr::lng_group_call_join_as_changed_channel
: tr::lng_group_call_join_as_changed)(
tr::now,
lt_name,
Ui::Text::Bold(_call->joinAs()->name),
@ -67,7 +69,9 @@ void Toasts::setupTitleChanged() {
? peer->name
: peer->groupCall()->title();
}) | rpl::start_with_next([=](const QString &title) {
_panel->showToast(tr::lng_group_call_title_changed(
_panel->showToast((_call->peer()->isBroadcast()
? tr::lng_group_call_title_changed_channel
: tr::lng_group_call_title_changed)(
tr::now,
lt_title,
Ui::Text::Bold(title),

View File

@ -271,8 +271,10 @@ void FilterBox::Inner::createActionsCheckboxes(const FilterValue &filter) {
addFlag(Flag::f_edit, tr::lng_admin_log_filter_messages_edited(tr::now));
if (isGroup) {
addFlag(Flag::f_pinned, tr::lng_admin_log_filter_messages_pinned(tr::now));
addFlag(Flag::f_group_call, tr::lng_admin_log_filter_voice_chats(tr::now));
} else {
addFlag(Flag::f_group_call, tr::lng_admin_log_filter_voice_chats_channel(tr::now));
}
addFlag(Flag::f_group_call, tr::lng_admin_log_filter_voice_chats(tr::now));
addFlag(Flag::f_invites, tr::lng_admin_log_filter_invite_links(tr::now));
addFlag(Flag::f_leave, tr::lng_admin_log_filter_members_removed(tr::now));
}

View File

@ -165,10 +165,14 @@ TextWithEntities GenerateAdminChangeText(
auto result = tr::lng_admin_log_promoted(tr::now, lt_user, user, Ui::Text::WithEntities);
auto useInviteLinkPhrase = channel->isMegagroup() && channel->anyoneCanAddMembers();
auto invitePhrase = useInviteLinkPhrase
const auto useInviteLinkPhrase = channel->isMegagroup()
&& channel->anyoneCanAddMembers();
const auto invitePhrase = useInviteLinkPhrase
? tr::lng_admin_log_admin_invite_link
: tr::lng_admin_log_admin_invite_users;
const auto callPhrase = channel->isBroadcast()
? tr::lng_admin_log_admin_manage_calls_channel
: tr::lng_admin_log_admin_manage_calls;
static auto phraseMap = std::map<Flags, tr::phrase<>> {
{ Flag::ChangeInfo, tr::lng_admin_log_admin_change_info },
{ Flag::PostMessages, tr::lng_admin_log_admin_post_messages },
@ -181,6 +185,7 @@ TextWithEntities GenerateAdminChangeText(
{ Flag::AddAdmins, tr::lng_admin_log_admin_add_admins },
};
phraseMap[Flag::InviteUsers] = invitePhrase;
phraseMap[Flag::ManageCall] = callPhrase;
if (!channel->isMegagroup()) {
// Don't display "Ban users" changes in channels.
@ -502,6 +507,7 @@ void GenerateItems(
const auto id = event.vid().v;
const auto from = history->owner().user(event.vuser_id().v);
const auto channel = history->peer->asChannel();
const auto broadcast = channel->isBroadcast();
const auto &action = event.vaction();
const auto date = event.vdate().v;
const auto addPart = [&](
@ -825,7 +831,6 @@ void GenerateItems(
};
auto createChangeLinkedChat = [&](const MTPDchannelAdminLogEventActionChangeLinkedChat &action) {
const auto broadcast = channel->isBroadcast();
const auto now = history->owner().channelLoaded(action.vnew_value().v);
if (!now) {
auto text = (broadcast
@ -901,12 +906,16 @@ void GenerateItems(
};
auto createStartGroupCall = [&](const MTPDchannelAdminLogEventActionStartGroupCall &data) {
const auto text = tr::lng_admin_log_started_group_call(tr::now, lt_from, fromLinkText);
const auto text = (broadcast
? tr::lng_admin_log_started_group_call_channel
: tr::lng_admin_log_started_group_call)(tr::now, lt_from, fromLinkText);
addSimpleServiceMessage(text);
};
auto createDiscardGroupCall = [&](const MTPDchannelAdminLogEventActionDiscardGroupCall &data) {
const auto text = tr::lng_admin_log_discarded_group_call(tr::now, lt_from, fromLinkText);
const auto text = (broadcast
? tr::lng_admin_log_discarded_group_call_channel
: tr::lng_admin_log_discarded_group_call)(tr::now, lt_from, fromLinkText);
addSimpleServiceMessage(text);
};
@ -932,7 +941,9 @@ void GenerateItems(
const auto participantPeer = groupCallParticipantPeer(data.vparticipant());
const auto participantPeerLink = participantPeer->createOpenLink();
const auto participantPeerLinkText = textcmdLink(2, participantPeer->name);
auto text = tr::lng_admin_log_muted_participant(
auto text = (broadcast
? tr::lng_admin_log_muted_participant_channel
: tr::lng_admin_log_muted_participant)(
tr::now,
lt_from,
fromLinkText,
@ -945,7 +956,9 @@ void GenerateItems(
const auto participantPeer = groupCallParticipantPeer(data.vparticipant());
const auto participantPeerLink = participantPeer->createOpenLink();
const auto participantPeerLinkText = textcmdLink(2, participantPeer->name);
auto text = tr::lng_admin_log_unmuted_participant(
auto text = (broadcast
? tr::lng_admin_log_unmuted_participant_channel
: tr::lng_admin_log_unmuted_participant)(
tr::now,
lt_from,
fromLinkText,
@ -955,9 +968,13 @@ void GenerateItems(
};
auto createToggleGroupCallSetting = [&](const MTPDchannelAdminLogEventActionToggleGroupCallSetting &data) {
const auto text = mtpIsTrue(data.vjoin_muted())
? tr::lng_admin_log_disallowed_unmute_self(tr::now, lt_from, fromLinkText)
: tr::lng_admin_log_allowed_unmute_self(tr::now, lt_from, fromLinkText);
const auto text = (mtpIsTrue(data.vjoin_muted())
? (broadcast
? tr::lng_admin_log_disallowed_unmute_self_channel
: tr::lng_admin_log_disallowed_unmute_self)
: (broadcast
? tr::lng_admin_log_allowed_unmute_self_channel
: tr::lng_admin_log_allowed_unmute_self))(tr::now, lt_from, fromLinkText);
addSimpleServiceMessage(text);
};
@ -1026,7 +1043,9 @@ void GenerateItems(
return data.vvolume().value_or(10000);
});
const auto volumeText = QString::number(volume / 100) + '%';
auto text = tr::lng_admin_log_participant_volume(
auto text = (broadcast
? tr::lng_admin_log_participant_volume_channel
: tr::lng_admin_log_participant_volume)(
tr::now,
lt_from,
fromLinkText,

View File

@ -248,6 +248,7 @@ rpl::producer<Ui::GroupCallBarContent> GroupCallTracker::ContentByCall(
auto lifetime = rpl::lifetime();
auto state = lifetime.make_state<State>();
state->current.shown = true;
state->current.livestream = call->peer()->isBroadcast();
const auto pushNext = [=] {
if (state->scheduled) {

View File

@ -275,9 +275,13 @@ void GroupCallBar::paint(Painter &p) {
titleTop,
width,
(!_content.scheduleDate
? tr::lng_group_call_title(tr::now)
? (_content.livestream
? tr::lng_group_call_title_channel
: tr::lng_group_call_title)(tr::now)
: _content.title.isEmpty()
? tr::lng_group_call_scheduled_title(tr::now)
? (_content.livestream
? tr::lng_group_call_scheduled_title_channel
: tr::lng_group_call_scheduled_title)(tr::now)
: (titleWidth > available)
? font->elided(_content.title, available)
: _content.title));
@ -315,6 +319,8 @@ void GroupCallBar::paint(Painter &p) {
(_content.scheduleDate
? (_content.title.isEmpty()
? tr::lng_group_call_starts_short
: _content.livestream
? tr::lng_group_call_starts_channel
: tr::lng_group_call_starts)(tr::now, lt_when, when)
: _content.count > 0
? tr::lng_group_call_members(tr::now, lt_count, _content.count)

View File

@ -26,6 +26,7 @@ struct GroupCallBarContent {
TimeId scheduleDate = 0;
int count = 0;
bool shown = false;
bool livestream = false;
std::vector<GroupCallUser> users;
};

View File

@ -1066,17 +1066,26 @@ void SessionController::startOrJoinGroupCall(
// Do you want to leave your active voice chat
// to join a voice chat in this group?
askConfirmation(
tr::lng_call_leave_to_other_sure(tr::now),
(peer->isBroadcast()
? tr::lng_call_leave_to_other_sure_channel
: tr::lng_call_leave_to_other_sure)(tr::now),
tr::lng_call_bar_hangup(tr::now));
} else if (confirm != GroupCallJoinConfirm::None
&& calls.inGroupCall()) {
if (calls.currentGroupCall()->peer() == peer) {
const auto now = calls.currentGroupCall()->peer();
if (now == peer) {
calls.activateCurrentCall(joinHash);
} else if (calls.currentGroupCall()->scheduleDate()) {
calls.startOrJoinGroupCall(peer, joinHash);
} else {
askConfirmation(
tr::lng_group_call_leave_to_other_sure(tr::now),
((peer->isBroadcast() && now->isBroadcast())
? tr::lng_group_call_leave_channel_to_other_sure_channel
: now->isBroadcast()
? tr::lng_group_call_leave_channel_to_other_sure
: peer->isBroadcast()
? tr::lng_group_call_leave_to_other_sure_channel
: tr::lng_group_call_leave_to_other_sure)(tr::now),
tr::lng_group_call_leave(tr::now));
}
} else {