From 7983d33ad5115d2caaabdcb95b1650f5e0805cfe Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 28 Nov 2020 10:21:11 +0300 Subject: [PATCH] Add manage_call admin right support. --- Telegram/Resources/langs/lang.strings | 2 ++ Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp | 3 ++- .../SourceFiles/boxes/peers/edit_peer_permissions_box.cpp | 1 + Telegram/SourceFiles/calls/calls_group_members.cpp | 6 ++++-- Telegram/SourceFiles/data/data_channel.cpp | 4 ++++ Telegram/SourceFiles/data/data_channel.h | 1 + Telegram/SourceFiles/data/data_chat.cpp | 3 ++- Telegram/SourceFiles/data/data_group_call.cpp | 4 ++-- Telegram/SourceFiles/data/data_group_call.h | 2 +- .../history/admin_log/history_admin_log_item.cpp | 6 +++++- 10 files changed, 24 insertions(+), 8 deletions(-) diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 94cd8ad64..9675aa046 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -1881,6 +1881,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_rights_group_invite_link" = "Invite users via link"; "lng_rights_group_invite" = "Add users"; "lng_rights_group_pin" = "Pin messages"; +"lng_rights_group_manage_calls" = "Manage voice chats"; "lng_rights_group_delete" = "Delete messages"; "lng_rights_group_anonymous" = "Remain Anonymous"; "lng_rights_add_admins" = "Add new admins"; @@ -2045,6 +2046,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_admin_log_admin_invite_users" = "Add members"; "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_add_admins" = "Add new admins"; // #feed diff --git a/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp index c6fbac836..2ef65dcef 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp @@ -216,7 +216,8 @@ MTPChatAdminRights EditAdminBox::Defaults(not_null peer) { | Flag::f_delete_messages | Flag::f_ban_users | Flag::f_invite_users - | Flag::f_pin_messages) + | Flag::f_pin_messages + | Flag::f_manage_call) : (Flag::f_change_info | Flag::f_post_messages | Flag::f_edit_messages diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_permissions_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_permissions_box.cpp index 91e0a0dfe..6684a390f 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_permissions_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_permissions_box.cpp @@ -135,6 +135,7 @@ std::vector> AdminRightLabels( ? tr::lng_rights_group_invite_link(tr::now) : tr::lng_rights_group_invite(tr::now) }, { Flag::f_pin_messages, tr::lng_rights_group_pin(tr::now) }, + { Flag::f_manage_call, tr::lng_rights_group_manage_calls(tr::now) }, { Flag::f_anonymous, tr::lng_rights_group_anonymous(tr::now) }, { Flag::f_add_admins, tr::lng_rights_add_admins(tr::now) }, }; diff --git a/Telegram/SourceFiles/calls/calls_group_members.cpp b/Telegram/SourceFiles/calls/calls_group_members.cpp index 543ce6fdf..1ebc20818 100644 --- a/Telegram/SourceFiles/calls/calls_group_members.cpp +++ b/Telegram/SourceFiles/calls/calls_group_members.cpp @@ -19,7 +19,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/effects/ripple_animation.h" #include "main/main_session.h" #include "lang/lang_keys.h" -#include "facades.h" +#include "facades.h" // Ui::showPeerHistory. +#include "mainwindow.h" // App::wnd()->activate. #include "styles/style_calls.h" namespace Calls { @@ -50,7 +51,7 @@ public: return QSize(_st->width, _st->height); } bool actionDisabled() const override { - return peer()->isSelf() || !_channel->amCreator(); + return peer()->isSelf() || !_channel->canManageCall(); } QMargins actionMargins() const override { return QMargins( @@ -403,6 +404,7 @@ auto MembersController::toggleMuteRequests() const void MembersController::rowClicked(not_null row) { Ui::showPeerHistory(row->peer(), ShowAtUnreadMsgId); + App::wnd()->activate(); } void MembersController::rowActionClicked( diff --git a/Telegram/SourceFiles/data/data_channel.cpp b/Telegram/SourceFiles/data/data_channel.cpp index b150fdda2..9f5ed04fe 100644 --- a/Telegram/SourceFiles/data/data_channel.cpp +++ b/Telegram/SourceFiles/data/data_channel.cpp @@ -523,6 +523,10 @@ bool ChannelData::canRestrictUser(not_null user) const { return adminRights() & AdminRight::f_ban_users; } +bool ChannelData::canManageCall() const { + return amCreator() || (adminRights() & AdminRight::f_manage_call); +} + void ChannelData::setAdminRights(const MTPChatAdminRights &rights) { if (rights.c_chatAdminRights().vflags().v == adminRights()) { return; diff --git a/Telegram/SourceFiles/data/data_channel.h b/Telegram/SourceFiles/data/data_channel.h index 070c42502..372244ab8 100644 --- a/Telegram/SourceFiles/data/data_channel.h +++ b/Telegram/SourceFiles/data/data_channel.h @@ -306,6 +306,7 @@ public: [[nodiscard]] bool canDelete() const; [[nodiscard]] bool canEditAdmin(not_null user) const; [[nodiscard]] bool canRestrictUser(not_null user) const; + [[nodiscard]] bool canManageCall() const; void setInviteLink(const QString &newInviteLink); [[nodiscard]] QString inviteLink() const; diff --git a/Telegram/SourceFiles/data/data_chat.cpp b/Telegram/SourceFiles/data/data_chat.cpp index 47c167951..568cf04ab 100644 --- a/Telegram/SourceFiles/data/data_chat.cpp +++ b/Telegram/SourceFiles/data/data_chat.cpp @@ -44,7 +44,8 @@ auto ChatData::DefaultAdminRights() -> AdminRights { | Flag::f_delete_messages | Flag::f_ban_users | Flag::f_invite_users - | Flag::f_pin_messages; + | Flag::f_pin_messages + | Flag::f_manage_call; } bool ChatData::canWrite() const { diff --git a/Telegram/SourceFiles/data/data_group_call.cpp b/Telegram/SourceFiles/data/data_group_call.cpp index a3a6251c6..dd0040ba3 100644 --- a/Telegram/SourceFiles/data/data_group_call.cpp +++ b/Telegram/SourceFiles/data/data_group_call.cpp @@ -212,8 +212,8 @@ void GroupCall::applyParticipantsSlice( }); } ranges::sort(_participants, std::greater<>(), [](const Participant &p) { - return p.lastActivePrecise - ? p.lastActivePrecise + return p.lastSpoke + ? p.lastSpoke : p.lastActive ? p.lastActive : p.date; diff --git a/Telegram/SourceFiles/data/data_group_call.h b/Telegram/SourceFiles/data/data_group_call.h index 8182abfb8..164989b58 100644 --- a/Telegram/SourceFiles/data/data_group_call.h +++ b/Telegram/SourceFiles/data/data_group_call.h @@ -25,7 +25,7 @@ public: not_null user; TimeId date = 0; TimeId lastActive = 0; - TimeId lastActivePrecise = 0; + TimeId lastSpoke = 0; uint32 source = 0; bool muted = false; bool canSelfUnmute = false; diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_item.cpp b/Telegram/SourceFiles/history/admin_log/history_admin_log_item.cpp index e1b1da1df..27df26a23 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_item.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_item.cpp @@ -164,6 +164,7 @@ TextWithEntities GenerateAdminChangeText( { Flag::f_ban_users, tr::lng_admin_log_admin_ban_users }, { Flag::f_invite_users, invitePhrase }, { Flag::f_pin_messages, tr::lng_admin_log_admin_pin_messages }, + { Flag::f_manage_call, tr::lng_admin_log_admin_manage_calls }, { Flag::f_add_admins, tr::lng_admin_log_admin_add_admins }, }; phraseMap[Flag::f_invite_users] = invitePhrase; @@ -197,7 +198,10 @@ QString GenerateBannedChangeText( { Flag::f_view_messages, tr::lng_admin_log_banned_view_messages }, { Flag::f_send_messages, tr::lng_admin_log_banned_send_messages }, { Flag::f_send_media, tr::lng_admin_log_banned_send_media }, - { Flag::f_send_stickers | Flag::f_send_gifs | Flag::f_send_inline | Flag::f_send_games, tr::lng_admin_log_banned_send_stickers }, + { Flag::f_send_stickers + | Flag::f_send_gifs + | Flag::f_send_inline + | Flag::f_send_games, tr::lng_admin_log_banned_send_stickers }, { Flag::f_embed_links, tr::lng_admin_log_banned_embed_links }, { Flag::f_send_polls, tr::lng_admin_log_banned_send_polls }, { Flag::f_change_info, tr::lng_admin_log_admin_change_info },