From c9fccc8ea781ba1f6316cf3b3b54480183df8d11 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 10 Feb 2021 16:14:53 +0400 Subject: [PATCH] Improve revoked link view box. --- .../icons/info/edit/links_delete.png | Bin 0 -> 432 bytes .../icons/info/edit/links_delete@2x.png | Bin 0 -> 791 bytes .../icons/info/edit/links_delete@3x.png | Bin 0 -> 1154 bytes Telegram/Resources/langs/lang.strings | 1 + .../boxes/peers/edit_peer_invite_link.cpp | 82 +++++++++++++----- .../boxes/peers/edit_peer_invite_link.h | 4 + .../boxes/peers/edit_peer_invite_links.cpp | 22 ----- Telegram/SourceFiles/info/info.style | 4 + .../ui/controls/invite_link_buttons.cpp | 13 +++ .../ui/controls/invite_link_buttons.h | 4 + 10 files changed, 84 insertions(+), 46 deletions(-) create mode 100644 Telegram/Resources/icons/info/edit/links_delete.png create mode 100644 Telegram/Resources/icons/info/edit/links_delete@2x.png create mode 100644 Telegram/Resources/icons/info/edit/links_delete@3x.png diff --git a/Telegram/Resources/icons/info/edit/links_delete.png b/Telegram/Resources/icons/info/edit/links_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..f20b3d13503caec0f56b235eb6f967f9377b753f GIT binary patch literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyz07Sip>6gA}f5OZp5{Cgthk7!twx zHZ+>6#ek=$zqsSaYt}FK<~e=fs{8R!^GcrEHtxC=!j7k$*pn8|RC{?OR#>nw>)-^o z)qiwlq&v9&%x6lC^txVZ)c5${2cC`U2mUkUMx9{1Y+{+4Wd4I8X}Rg!=X#by3+q{5@A8^e)RcQ$EpnRRQ`a3mv$7=Ev=lwW^nOf_*Op)Z`qtOl_aU8^ z`IVC%G`#+PckLGrlZ)C5+&_4g`bq)4#S;F2*{D?cQsPZnZ%}A?y85}Sb4q9e00UN< AhyVZp literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/info/edit/links_delete@2x.png b/Telegram/Resources/icons/info/edit/links_delete@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..94e5b4a0e0d8ba82d998cfb62589b0e7fbcbbff9 GIT binary patch literal 791 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(<^uz(rC1}St4blSkcz|`pJ;uuoF z_%__T?~nnH@5K()m}cV*4~6D5HWzSD5D?0?VAN(wIz6rXKojfSJy|hJMKdyz+TFG; zov`JK{#~WR9tCyfNea^PQ!7|3g0L zl&ItuZFnkkT+QrL?;Q0>4ooGo&aT%UsWxmmzv;}cM4q5OHFmR)KMst!UjOUwKFR*$ zuAL6-y9~V?TOwb_H159tUUS9Ij}?E)^=+J)Vh>H66<@x%DuZd=-L~&~pY-wlTGmov&)+i}%(-M{z0*fn1J`eNUEoj9g_ZAUK!GbI_`y;f_&d`oI( zL|G==k)&N~e`m05F*VxwM(8|4^%LD%&dBKsOx>T>!FWlI()vFGi|=#@;_y}DATZRAt literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/info/edit/links_delete@3x.png b/Telegram/Resources/icons/info/edit/links_delete@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..28df4fad1ef412abec16cf29079e7a2f6b436ef6 GIT binary patch literal 1154 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(;}uz(rC1}R)=9PbBI{>IbAF{Fa= zZH#rEmZ6Agzxomd$0#l_VXh!Hts9PI2l#IA$O`esZelfaaAbAmvJ(|L^VzrJ!Oy)% zPTjHWySLG#>-f&%^It9ZB}=P^^cYUu8{xq7hv}ivw?ho94E(HI4vYtQ8XnGM6k#~S zATdvp3~qh%NBh?LiVB0de#f^&=?1S2v)?M-eEDU{wbxrKD=Q7xuU{Wu#g?g3FDiKF zYTow6KWpS_w|DS=6it%XH*EF%cl-A3@}2wb^!G7|DcUf0N&F1|rZ4(YGDECIwW0R8 z`cCaPaW(B~P6d-U`0O}YWFvRB#LD#dU%Q{H&-`{!o)-$q2l4CumCVYvIW7zk6<% z>0I7Fx5fDM<;%gR_FaE{G^cx0;oN6OBb}rIv{} zG>7uf7dgjzIpn-iA|c>NfDN7k>Je{$QCy*3kayziyoT++b6dywxja}l%o+r(X-}EYEa%ium9Y0zopr08YEyJpcdz literal 0 HcmV?d00001 diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 1ad35512b..ec29b886a 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -1188,6 +1188,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_group_invite_share" = "Share Link"; "lng_group_invite_revoke" = "Revoke Link"; "lng_group_invite_reactivate" = "Reactivate Link"; +"lng_group_invite_delete" = "Delete Link"; "lng_group_invite_no_joined" = "No one joined yet"; "lng_group_invite_joined#one" = "{count} joined"; "lng_group_invite_joined#other" = "{count} joined"; diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp index 0868a58ea..fa624b79e 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp @@ -137,6 +137,7 @@ void Controller::addHeaderBlock(not_null container) { using namespace Settings; const auto current = _data.current(); + const auto revoked = current.revoked; const auto link = current.link; const auto admin = current.admin; const auto weak = Ui::MakeWeak(container); @@ -152,21 +153,30 @@ void Controller::addHeaderBlock(not_null container) { const auto editLink = crl::guard(weak, [=] { EditLink(_peer, _data.current()); }); + const auto deleteLink = [=] { + DeleteLink(_peer, admin, link); + }; const auto createMenu = [=] { auto result = base::make_unique_q(container); - result->addAction( - tr::lng_group_invite_context_copy(tr::now), - copyLink); - result->addAction( - tr::lng_group_invite_context_share(tr::now), - shareLink); - result->addAction( - tr::lng_group_invite_context_edit(tr::now), - editLink); - result->addAction( - tr::lng_group_invite_context_revoke(tr::now), - revokeLink); + if (revoked) { + result->addAction( + tr::lng_group_invite_context_delete(tr::now), + deleteLink); + } else { + result->addAction( + tr::lng_group_invite_context_copy(tr::now), + copyLink); + result->addAction( + tr::lng_group_invite_context_share(tr::now), + shareLink); + result->addAction( + tr::lng_group_invite_context_edit(tr::now), + editLink); + result->addAction( + tr::lng_group_invite_context_revoke(tr::now), + revokeLink); + } return result; }; @@ -197,6 +207,9 @@ void Controller::addHeaderBlock(not_null container) { AddReactivateLinkButton(reactivateWrap->entity(), editLink); AddCopyShareLinkButtons(copyShareWrap->entity(), copyLink, shareLink); + if (revoked) { + AddDeleteLinkButton(container, deleteLink); + } AddSkip(container, st::inviteLinkJoinedRowPadding.bottom() * 2); @@ -242,19 +255,19 @@ void Controller::addHeaderBlock(not_null container) { ) | rpl::start_with_next([=](const LinkData &data) { const auto now = base::unixtime::now(); const auto expired = IsExpiredLink(data, now); - reactivateWrap->toggle(expired, anim::type::instant); - copyShareWrap->toggle(!expired, anim::type::instant); + reactivateWrap->toggle(!revoked && expired, anim::type::instant); + copyShareWrap->toggle(!revoked && !expired, anim::type::instant); const auto timeExpired = (data.expireDate > 0) && (data.expireDate <= now); const auto usageExpired = (data.usageLimit > 0) && (data.usageLimit <= data.usage); - redLabelWrap->toggle(timeExpired, anim::type::instant); + redLabelWrap->toggle(!revoked && timeExpired, anim::type::instant); grayLabelWrap->toggle( - !timeExpired && (data.expireDate > 0 || usageExpired), + !revoked && !timeExpired && (data.expireDate > 0 || usageExpired), anim::type::instant); justDividerWrap->toggle( - !data.expireDate && !expired, + revoked || (!data.expireDate && !expired), anim::type::instant); }, lifetime()); } @@ -266,7 +279,8 @@ void Controller::prepare() { const auto container = header.data(); const auto current = _data.current(); - if (!current.revoked && !current.permanent) { + const auto revoked = current.revoked; + if (revoked || !current.permanent) { addHeaderBlock(container); } AddSubsectionTitle( @@ -296,7 +310,7 @@ void Controller::prepare() { const auto now = base::unixtime::now(); const auto timeExpired = (data.expireDate > 0) && (data.expireDate <= now); - if (!data.usage && data.usageLimit > 0 && !timeExpired) { + if (!revoked && !data.usage && data.usageLimit > 0 && !timeExpired) { auto description = object_ptr( nullptr, tr::lng_group_invite_can_join_via_link( @@ -320,7 +334,7 @@ void Controller::prepare() { delegate()->peerListSetDescription(nullptr); } listHeaderWrap->toggle( - data.usage || (data.usageLimit > 0 && !timeExpired), + !revoked && (data.usage || (data.usageLimit > 0 && !timeExpired)), anim::type::instant); delegate()->peerListRefreshRows(); return data.usage @@ -351,7 +365,7 @@ void Controller::prepare() { (data.usageLimit && (data.usageLimit <= data.usage) ? std::make_optional(st::boxTextFgError->c) : std::nullopt)); - if (!data.usage && data.usageLimit > 0) { + if (revoked || (!data.usage && data.usageLimit > 0)) { remaining->hide(); } else { remaining->show(); @@ -836,6 +850,28 @@ void RevokeLink( Ui::LayerOption::KeepOther); } +void DeleteLink( + not_null peer, + not_null admin, + const QString &link) { + const auto box = std::make_shared>(); + const auto sure = [=] { + const auto finish = [=] { + if (*box) { + (*box)->closeBox(); + } + }; + peer->session().api().inviteLinks().destroy( + peer, + admin, + link, + finish); + }; + *box = Ui::show( + Box(tr::lng_group_invite_delete_sure(tr::now), sure), + Ui::LayerOption::KeepOther); +} + void ShowInviteLinkBox( not_null peer, const Api::InviteLink &link) { @@ -851,9 +887,7 @@ void ShowInviteLinkBox( }) | rpl::map([=](const Api::InviteLinkUpdate &update) { return update.now ? *update.now : LinkData{ .admin = admin }; }); - auto data = revoked - ? rpl::single(link) | rpl::type_erased() - : rpl::single(link) | rpl::then(std::move(updates)); + auto data = rpl::single(link) | rpl::then(std::move(updates)); auto initBox = [=, data = rpl::duplicate(data)]( not_null box) { diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.h b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.h index 1543504f6..c8825e10f 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.h +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.h @@ -41,6 +41,10 @@ void RevokeLink( void EditLink( not_null peer, const Api::InviteLink &data); +void DeleteLink( + not_null peer, + not_null admin, + const QString &link); void ShowInviteLinkBox( not_null peer, diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp index 9b31ab49b..49c82ddb5 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp @@ -195,28 +195,6 @@ private: return result; } -void DeleteLink( - not_null peer, - not_null admin, - const QString &link) { - const auto box = std::make_shared>(); - const auto sure = [=] { - const auto finish = [=] { - if (*box) { - (*box)->closeBox(); - } - }; - peer->session().api().inviteLinks().destroy( - peer, - admin, - link, - finish); - }; - *box = Ui::show( - Box(tr::lng_group_invite_delete_sure(tr::now), sure), - Ui::LayerOption::KeepOther); -} - void DeleteAllRevoked( not_null peer, not_null admin) { diff --git a/Telegram/SourceFiles/info/info.style b/Telegram/SourceFiles/info/info.style index 720bdf1b5..ec076f378 100644 --- a/Telegram/SourceFiles/info/info.style +++ b/Telegram/SourceFiles/info/info.style @@ -872,6 +872,10 @@ inviteLinkReactivate: RoundButton(inviteLinkCopy) { icon: icon {{ "info/edit/links_reactivate", activeButtonFg }}; iconOver: icon {{ "info/edit/links_reactivate", activeButtonFgOver }}; } +inviteLinkDelete: RoundButton(inviteLinkCopy) { + icon: icon {{ "info/edit/links_delete", activeButtonFg }}; + iconOver: icon {{ "info/edit/links_delete", activeButtonFgOver }}; +} inviteLinkUserpics: GroupCallUserpics { size: 28px; shift: 6px; diff --git a/Telegram/SourceFiles/ui/controls/invite_link_buttons.cpp b/Telegram/SourceFiles/ui/controls/invite_link_buttons.cpp index d050524ae..ec0760378 100644 --- a/Telegram/SourceFiles/ui/controls/invite_link_buttons.cpp +++ b/Telegram/SourceFiles/ui/controls/invite_link_buttons.cpp @@ -75,6 +75,19 @@ void AddReactivateLinkButton( button->setClickedCallback(editLink); } +void AddDeleteLinkButton( + not_null container, + Fn deleteLink) { + const auto button = container->add( + object_ptr( + container, + tr::lng_group_invite_delete(), + st::inviteLinkDelete), + st::inviteLinkButtonsPadding); + button->setTextTransform(RoundButton::TextTransform::NoTransform); + button->setClickedCallback(deleteLink); +} + not_null AddJoinedCountButton( not_null container, rpl::producer content, diff --git a/Telegram/SourceFiles/ui/controls/invite_link_buttons.h b/Telegram/SourceFiles/ui/controls/invite_link_buttons.h index 5b4af472c..7059054cd 100644 --- a/Telegram/SourceFiles/ui/controls/invite_link_buttons.h +++ b/Telegram/SourceFiles/ui/controls/invite_link_buttons.h @@ -21,6 +21,10 @@ void AddReactivateLinkButton( not_null container, Fn editLink); +void AddDeleteLinkButton( + not_null container, + Fn deleteLink); + struct JoinedCountContent { int count = 0; QImage userpics;