From 13f1ab79659619febecf03104e52b453799c0d17 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Mon, 28 Feb 2022 21:16:55 +0300 Subject: [PATCH] Added confirm box for stream key revoking from settings of group call. --- .../calls/group/calls_group_call.cpp | 8 +++ .../calls/group/calls_group_call.h | 3 + .../calls/group/calls_group_settings.cpp | 63 +++++++++---------- 3 files changed, 40 insertions(+), 34 deletions(-) diff --git a/Telegram/SourceFiles/calls/group/calls_group_call.cpp b/Telegram/SourceFiles/calls/group/calls_group_call.cpp index 1570a5b41..0f9ce5bb1 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_call.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_call.cpp @@ -1036,6 +1036,14 @@ QString GroupCall::rtmpKey() const { return _rtmpKey; } +void GroupCall::setRtmpUrl(const QString &value) { + _rtmpUrl = value; +} + +void GroupCall::setRtmpKey(const QString &value) { + _rtmpKey = value; +} + Data::GroupCall *GroupCall::lookupReal() const { const auto real = _peer->groupCall(); return (real && real->id() == _id) ? real : nullptr; diff --git a/Telegram/SourceFiles/calls/group/calls_group_call.h b/Telegram/SourceFiles/calls/group/calls_group_call.h index c6896c627..cf713265e 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_call.h +++ b/Telegram/SourceFiles/calls/group/calls_group_call.h @@ -239,6 +239,9 @@ public: [[nodiscard]] QString rtmpUrl() const; [[nodiscard]] QString rtmpKey() const; + void setRtmpUrl(const QString &value); + void setRtmpKey(const QString &value); + [[nodiscard]] Data::GroupCall *lookupReal() const; [[nodiscard]] rpl::producer> real() const; diff --git a/Telegram/SourceFiles/calls/group/calls_group_settings.cpp b/Telegram/SourceFiles/calls/group/calls_group_settings.cpp index 0b595db13..5e25bd23a 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_settings.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_settings.cpp @@ -17,7 +17,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/buttons.h" #include "ui/widgets/checkbox.h" #include "ui/widgets/input_fields.h" -#include "ui/widgets/dropdown_menu.h" +#include "ui/widgets/popup_menu.h" #include "ui/wrap/slide_wrap.h" #include "ui/text/text_utilities.h" #include "ui/toasts/common_toasts.h" @@ -630,16 +630,13 @@ void SettingsBox( } if (rtmp) { struct State { - base::unique_qptr menu; + base::unique_qptr menu; mtpRequestId requestId; rpl::event_stream data; }; const auto top = box->addTopButton(st::groupCallMenuToggle); const auto state = top->lifetime().make_state(); - const auto revoke = [=] { - if (state->requestId) { - return; - } + const auto revokeSure = [=] { const auto session = &peer->session(); state->requestId = session->api().request( MTPphone_GetGroupCallStreamRtmpUrl( @@ -653,48 +650,46 @@ void SettingsBox( .key = qs(data.vkey()), }; }); + if (const auto call = weakCall.get()) { + call->setRtmpUrl(data.url); + call->setRtmpKey(data.key); + } + if (!top) { + return; + } + state->requestId = 0; state->data.fire(std::move(data)); }).fail([=] { state->requestId = 0; }).send(); }; + const auto revoke = [=] { + if (state->requestId || !top) { + return; + } + box->getDelegate()->show(Ui::MakeConfirmBox({ + .text = tr::lng_group_call_rtmp_revoke_sure(), + .confirmed = [=](Fn &&close) { + revokeSure(); + close(); + }, + .confirmText = tr::lng_group_invite_context_revoke(), + .labelStyle = &st::groupCallBoxLabel, + })); + }; top->setClickedCallback([=] { - state->menu = base::make_unique_q( + state->menu = base::make_unique_q( box, - st::groupCallDropdownMenu); + st::groupCallPopupMenu); state->menu->addAction( tr::lng_group_call_rtmp_revoke(tr::now), revoke); state->menu->moveToRight( st::groupCallRtmpTopBarMenuPosition.x(), st::groupCallRtmpTopBarMenuPosition.y()); - state->menu->showAnimated( + state->menu->setForcedOrigin( Ui::PanelAnimation::Origin::TopRight); - const auto raw = state->menu.get(); - raw->setHiddenCallback([=] { - raw->deleteLater(); - if (state->menu == raw) { - state->menu = nullptr; - if (top) { - top->setForceRippled(false); - } - } - }); - raw->setShowStartCallback([=] { - if (state->menu == raw) { - if (top) { - top->setForceRippled(true); - } - } - }); - raw->setHideStartCallback([=] { - if (state->menu == raw) { - if (top) { - top->setForceRippled(false); - } - } - }); - top->installEventFilter(state->menu); + state->menu->popup(QCursor::pos()); return true; });