mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Fix invite link updates handling.
This commit is contained in:
parent
4153603d09
commit
9262b773cb
4 changed files with 26 additions and 14 deletions
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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))) {
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue