Fix invite link updates handling.

This commit is contained in:
John Preston 2021-02-05 18:36:37 +04:00
parent 4153603d09
commit 9262b773cb
4 changed files with 26 additions and 14 deletions

View file

@ -362,7 +362,7 @@ void InviteLinks::destroyAllRevoked(
callback(); callback();
} }
} }
_allRevokedDestroyed.fire_copy(peer); _allRevokedDestroyed.fire({ peer, admin });
}).fail([=](const RPCError &error) { }).fail([=](const RPCError &error) {
}).send(); }).send();
} }
@ -452,19 +452,20 @@ rpl::producer<JoinedByLinkSlice> InviteLinks::joinedFirstSliceValue(
} }
auto InviteLinks::updates( auto InviteLinks::updates(
not_null<PeerData*> peer) const -> rpl::producer<Update> { not_null<PeerData*> peer,
not_null<UserData*> admin) const -> rpl::producer<Update> {
return _updates.events() | rpl::filter([=](const Update &update) { return _updates.events() | rpl::filter([=](const Update &update) {
return update.peer == peer; return update.peer == peer && update.admin == admin;
}); });
} }
rpl::producer<> InviteLinks::allRevokedDestroyed( rpl::producer<> InviteLinks::allRevokedDestroyed(
not_null<PeerData*> peer) const { not_null<PeerData*> peer,
using namespace rpl::mappers; not_null<UserData*> admin) const {
return _allRevokedDestroyed.events( return _allRevokedDestroyed.events(
) | rpl::filter( ) | rpl::filter([=](const AllRevokedDestroyed &which) {
_1 == peer return which.peer == peer && which.admin == admin;
) | rpl::to_empty; }) | rpl::to_empty;
} }
void InviteLinks::requestJoinedFirstSlice(LinkKey key) { void InviteLinks::requestJoinedFirstSlice(LinkKey key) {

View file

@ -105,9 +105,11 @@ public:
not_null<PeerData*> peer, not_null<PeerData*> peer,
const QString &link) const; const QString &link) const;
[[nodiscard]] rpl::producer<Update> updates( [[nodiscard]] rpl::producer<Update> updates(
not_null<PeerData*> peer) const; not_null<PeerData*> peer,
not_null<UserData*> admin) const;
[[nodiscard]] rpl::producer<> allRevokedDestroyed( [[nodiscard]] rpl::producer<> allRevokedDestroyed(
not_null<PeerData*> peer) const; not_null<PeerData*> peer,
not_null<UserData*> admin) const;
void requestMoreLinks( void requestMoreLinks(
not_null<PeerData*> peer, not_null<PeerData*> peer,
@ -189,7 +191,12 @@ private:
std::vector<Fn<void()>>> _deleteRevokedCallbacks; std::vector<Fn<void()>>> _deleteRevokedCallbacks;
rpl::event_stream<Update> _updates; rpl::event_stream<Update> _updates;
rpl::event_stream<not_null<PeerData*>> _allRevokedDestroyed;
struct AllRevokedDestroyed {
not_null<PeerData*> peer;
not_null<UserData*> admin;
};
rpl::event_stream<AllRevokedDestroyed> _allRevokedDestroyed;
}; };

View file

@ -583,7 +583,8 @@ void ShowInviteLinkBox(
? tr::lng_manage_peer_link_permanent() ? tr::lng_manage_peer_link_permanent()
: tr::lng_manage_peer_link_invite()); : tr::lng_manage_peer_link_invite());
peer->session().api().inviteLinks().updates( peer->session().api().inviteLinks().updates(
peer peer,
link.admin
) | rpl::start_with_next([=](const Api::InviteLinkUpdate &update) { ) | rpl::start_with_next([=](const Api::InviteLinkUpdate &update) {
if (update.was == link.link if (update.was == link.link
&& (!update.now || (!link.revoked && update.now->revoked))) { && (!update.now || (!link.revoked && update.now->revoked))) {

View file

@ -466,7 +466,8 @@ LinksController::LinksController(
}, _lifetime); }, _lifetime);
peer->session().api().inviteLinks().updates( peer->session().api().inviteLinks().updates(
peer peer,
admin
) | rpl::start_with_next([=](const Api::InviteLinkUpdate &update) { ) | rpl::start_with_next([=](const Api::InviteLinkUpdate &update) {
const auto now = base::unixtime::now(); const auto now = base::unixtime::now();
if (!update.now || update.now->revoked != _revoked) { if (!update.now || update.now->revoked != _revoked) {
@ -485,7 +486,8 @@ LinksController::LinksController(
if (_revoked) { if (_revoked) {
peer->session().api().inviteLinks().allRevokedDestroyed( peer->session().api().inviteLinks().allRevokedDestroyed(
peer peer,
admin
) | rpl::start_with_next([=] { ) | rpl::start_with_next([=] {
_requesting = false; _requesting = false;
_allLoaded = true; _allLoaded = true;
@ -621,6 +623,7 @@ void LinksController::updateRow(const InviteLinkData &data, TimeId now) {
delegate()->peerListUpdateRow(row); delegate()->peerListUpdateRow(row);
} else if (_revoked) { } else if (_revoked) {
prependRow(data, now); prependRow(data, now);
delegate()->peerListRefreshRows();
} }
} }