mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 06:07:06 +02:00
Use separate strings for channel voice chats.
This commit is contained in:
parent
2c07bdd0e8
commit
e9a5c45f34
13 changed files with 186 additions and 76 deletions
|
@ -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}.";
|
||||
|
|
|
@ -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) }
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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() },
|
||||
});
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -26,6 +26,7 @@ struct GroupCallBarContent {
|
|||
TimeId scheduleDate = 0;
|
||||
int count = 0;
|
||||
bool shown = false;
|
||||
bool livestream = false;
|
||||
std::vector<GroupCallUser> users;
|
||||
};
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Add table
Reference in a new issue