Add manage_call admin right support.

This commit is contained in:
John Preston 2020-11-28 10:21:11 +03:00
parent d18b29efb8
commit 7983d33ad5
10 changed files with 24 additions and 8 deletions

View file

@ -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_link" = "Invite users via link";
"lng_rights_group_invite" = "Add users"; "lng_rights_group_invite" = "Add users";
"lng_rights_group_pin" = "Pin messages"; "lng_rights_group_pin" = "Pin messages";
"lng_rights_group_manage_calls" = "Manage voice chats";
"lng_rights_group_delete" = "Delete messages"; "lng_rights_group_delete" = "Delete messages";
"lng_rights_group_anonymous" = "Remain Anonymous"; "lng_rights_group_anonymous" = "Remain Anonymous";
"lng_rights_add_admins" = "Add new admins"; "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_users" = "Add members";
"lng_admin_log_admin_invite_link" = "Invite users via link"; "lng_admin_log_admin_invite_link" = "Invite users via link";
"lng_admin_log_admin_pin_messages" = "Pin messages"; "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"; "lng_admin_log_admin_add_admins" = "Add new admins";
// #feed // #feed

View file

@ -216,7 +216,8 @@ MTPChatAdminRights EditAdminBox::Defaults(not_null<PeerData*> peer) {
| Flag::f_delete_messages | Flag::f_delete_messages
| Flag::f_ban_users | Flag::f_ban_users
| Flag::f_invite_users | Flag::f_invite_users
| Flag::f_pin_messages) | Flag::f_pin_messages
| Flag::f_manage_call)
: (Flag::f_change_info : (Flag::f_change_info
| Flag::f_post_messages | Flag::f_post_messages
| Flag::f_edit_messages | Flag::f_edit_messages

View file

@ -135,6 +135,7 @@ std::vector<std::pair<ChatAdminRights, QString>> AdminRightLabels(
? tr::lng_rights_group_invite_link(tr::now) ? tr::lng_rights_group_invite_link(tr::now)
: tr::lng_rights_group_invite(tr::now) }, : tr::lng_rights_group_invite(tr::now) },
{ Flag::f_pin_messages, tr::lng_rights_group_pin(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_anonymous, tr::lng_rights_group_anonymous(tr::now) },
{ Flag::f_add_admins, tr::lng_rights_add_admins(tr::now) }, { Flag::f_add_admins, tr::lng_rights_add_admins(tr::now) },
}; };

View file

@ -19,7 +19,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/effects/ripple_animation.h" #include "ui/effects/ripple_animation.h"
#include "main/main_session.h" #include "main/main_session.h"
#include "lang/lang_keys.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" #include "styles/style_calls.h"
namespace Calls { namespace Calls {
@ -50,7 +51,7 @@ public:
return QSize(_st->width, _st->height); return QSize(_st->width, _st->height);
} }
bool actionDisabled() const override { bool actionDisabled() const override {
return peer()->isSelf() || !_channel->amCreator(); return peer()->isSelf() || !_channel->canManageCall();
} }
QMargins actionMargins() const override { QMargins actionMargins() const override {
return QMargins( return QMargins(
@ -403,6 +404,7 @@ auto MembersController::toggleMuteRequests() const
void MembersController::rowClicked(not_null<PeerListRow*> row) { void MembersController::rowClicked(not_null<PeerListRow*> row) {
Ui::showPeerHistory(row->peer(), ShowAtUnreadMsgId); Ui::showPeerHistory(row->peer(), ShowAtUnreadMsgId);
App::wnd()->activate();
} }
void MembersController::rowActionClicked( void MembersController::rowActionClicked(

View file

@ -523,6 +523,10 @@ bool ChannelData::canRestrictUser(not_null<UserData*> user) const {
return adminRights() & AdminRight::f_ban_users; return adminRights() & AdminRight::f_ban_users;
} }
bool ChannelData::canManageCall() const {
return amCreator() || (adminRights() & AdminRight::f_manage_call);
}
void ChannelData::setAdminRights(const MTPChatAdminRights &rights) { void ChannelData::setAdminRights(const MTPChatAdminRights &rights) {
if (rights.c_chatAdminRights().vflags().v == adminRights()) { if (rights.c_chatAdminRights().vflags().v == adminRights()) {
return; return;

View file

@ -306,6 +306,7 @@ public:
[[nodiscard]] bool canDelete() const; [[nodiscard]] bool canDelete() const;
[[nodiscard]] bool canEditAdmin(not_null<UserData*> user) const; [[nodiscard]] bool canEditAdmin(not_null<UserData*> user) const;
[[nodiscard]] bool canRestrictUser(not_null<UserData*> user) const; [[nodiscard]] bool canRestrictUser(not_null<UserData*> user) const;
[[nodiscard]] bool canManageCall() const;
void setInviteLink(const QString &newInviteLink); void setInviteLink(const QString &newInviteLink);
[[nodiscard]] QString inviteLink() const; [[nodiscard]] QString inviteLink() const;

View file

@ -44,7 +44,8 @@ auto ChatData::DefaultAdminRights() -> AdminRights {
| Flag::f_delete_messages | Flag::f_delete_messages
| Flag::f_ban_users | Flag::f_ban_users
| Flag::f_invite_users | Flag::f_invite_users
| Flag::f_pin_messages; | Flag::f_pin_messages
| Flag::f_manage_call;
} }
bool ChatData::canWrite() const { bool ChatData::canWrite() const {

View file

@ -212,8 +212,8 @@ void GroupCall::applyParticipantsSlice(
}); });
} }
ranges::sort(_participants, std::greater<>(), [](const Participant &p) { ranges::sort(_participants, std::greater<>(), [](const Participant &p) {
return p.lastActivePrecise return p.lastSpoke
? p.lastActivePrecise ? p.lastSpoke
: p.lastActive : p.lastActive
? p.lastActive ? p.lastActive
: p.date; : p.date;

View file

@ -25,7 +25,7 @@ public:
not_null<UserData*> user; not_null<UserData*> user;
TimeId date = 0; TimeId date = 0;
TimeId lastActive = 0; TimeId lastActive = 0;
TimeId lastActivePrecise = 0; TimeId lastSpoke = 0;
uint32 source = 0; uint32 source = 0;
bool muted = false; bool muted = false;
bool canSelfUnmute = false; bool canSelfUnmute = false;

View file

@ -164,6 +164,7 @@ TextWithEntities GenerateAdminChangeText(
{ Flag::f_ban_users, tr::lng_admin_log_admin_ban_users }, { Flag::f_ban_users, tr::lng_admin_log_admin_ban_users },
{ Flag::f_invite_users, invitePhrase }, { Flag::f_invite_users, invitePhrase },
{ Flag::f_pin_messages, tr::lng_admin_log_admin_pin_messages }, { 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 }, { Flag::f_add_admins, tr::lng_admin_log_admin_add_admins },
}; };
phraseMap[Flag::f_invite_users] = invitePhrase; 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_view_messages, tr::lng_admin_log_banned_view_messages },
{ Flag::f_send_messages, tr::lng_admin_log_banned_send_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_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_embed_links, tr::lng_admin_log_banned_embed_links },
{ Flag::f_send_polls, tr::lng_admin_log_banned_send_polls }, { Flag::f_send_polls, tr::lng_admin_log_banned_send_polls },
{ Flag::f_change_info, tr::lng_admin_log_admin_change_info }, { Flag::f_change_info, tr::lng_admin_log_admin_change_info },