| 865 | } |
| 866 | |
| 867 | void Filler::addBlockUser() { |
| 868 | const auto user = _peer->asUser(); |
| 869 | if (!user |
| 870 | || user->isInaccessible() |
| 871 | || user->isSelf() |
| 872 | || user->isRepliesChat() |
| 873 | || user->isVerifyCodes()) { |
| 874 | return; |
| 875 | } |
| 876 | const auto window = _controller; |
| 877 | const auto blockText = [](not_null<UserData*> user) { |
| 878 | return user->isBlocked() |
| 879 | ? ((user->isBot() && !user->isSupport()) |
| 880 | ? tr::lng_profile_restart_bot(tr::now) |
| 881 | : tr::lng_profile_unblock_user(tr::now)) |
| 882 | : ((user->isBot() && !user->isSupport()) |
| 883 | ? tr::lng_profile_block_bot(tr::now) |
| 884 | : tr::lng_profile_block_user(tr::now)); |
| 885 | }; |
| 886 | const auto blockAction = _addAction(blockText(user), [=] { |
| 887 | const auto show = window->uiShow(); |
| 888 | if (show->showFrozenError()) { |
| 889 | return; |
| 890 | } else if (user->isBlocked()) { |
| 891 | PeerMenuUnblockUserWithBotRestart(show, user); |
| 892 | } else if (user->isBot()) { |
| 893 | user->session().api().blockedPeers().block(user); |
| 894 | } else { |
| 895 | window->show(Box( |
| 896 | PeerMenuBlockUserBox, |
| 897 | &window->window(), |
| 898 | user, |
| 899 | v::null, |
| 900 | v::null)); |
| 901 | } |
| 902 | }, (!user->isBlocked() |
| 903 | ? &st::menuIconBlock |
| 904 | : user->isBot() |
| 905 | ? &st::menuIconRestartBot |
| 906 | : &st::menuIconUnblock)); |
| 907 | |
| 908 | auto actionText = _peer->session().changes().peerUpdates( |
| 909 | _peer, |
| 910 | Data::PeerUpdate::Flag::IsBlocked |
| 911 | ) | rpl::map([=] { return blockText(user); }); |
| 912 | SetActionText(blockAction, std::move(actionText)); |
| 913 | |
| 914 | if (user->blockStatus() == UserData::BlockStatus::Unknown) { |
| 915 | user->session().api().requestFullPeer(user); |
| 916 | } |
| 917 | } |
| 918 | |
| 919 | void Filler::addViewDiscussion() { |
| 920 | const auto channel = _peer->asBroadcast(); |
nothing calls this directly
no test coverage detected