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

View File

@ -105,9 +105,11 @@ public:
not_null<PeerData*> peer,
const QString &link) const;
[[nodiscard]] rpl::producer<Update> updates(
not_null<PeerData*> peer) const;
not_null<PeerData*> peer,
not_null<UserData*> admin) const;
[[nodiscard]] rpl::producer<> allRevokedDestroyed(
not_null<PeerData*> peer) const;
not_null<PeerData*> peer,
not_null<UserData*> admin) const;
void requestMoreLinks(
not_null<PeerData*> peer,
@ -189,7 +191,12 @@ private:
std::vector<Fn<void()>>> _deleteRevokedCallbacks;
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_invite());
peer->session().api().inviteLinks().updates(
peer
peer,
link.admin
) | rpl::start_with_next([=](const Api::InviteLinkUpdate &update) {
if (update.was == link.link
&& (!update.now || (!link.revoked && update.now->revoked))) {

View File

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