rpl::producer<bool> CanAddMemberValue( not_null<PeerData*> peer) { if (auto chat = peer->asChat()) { return Notify::PeerUpdateValue( chat, Notify::PeerUpdate::Flag::ChatCanEdit ) | rpl::map([chat] { return chat->canEdit(); }); } else if (auto channel = peer->asChannel()) { return Notify::PeerUpdateValue( channel, Notify::PeerUpdate::Flag::ChannelRightsChanged ) | rpl::map([channel] { return channel->canAddMembers(); }); } return rpl::single(false); }
rpl::producer<int> MembersCountValue( not_null<PeerData*> peer) { if (auto chat = peer->asChat()) { return Notify::PeerUpdateValue( peer, Notify::PeerUpdate::Flag::MembersChanged ) | rpl::map([chat] { return chat->amIn() ? std::max(chat->count, int(chat->participants.size())) : 0; }); } else if (auto channel = peer->asChannel()) { return Notify::PeerUpdateValue( channel, Notify::PeerUpdate::Flag::MembersChanged ) | rpl::map([channel] { return channel->membersCount(); }); } Unexpected("User in MembersCountViewer()."); }