From 5f4aab3121a6ef2c0c6d25111500fd58c762b8fb Mon Sep 17 00:00:00 2001 From: Jonathan Rainville Date: Wed, 8 May 2024 15:55:30 -0400 Subject: [PATCH] feat(community)_: send signals about member reevaluation in progress (#5120) Needed for https://github.com/status-im/status-desktop/issues/14378 --- protocol/communities/manager.go | 8 ++++++++ signal/events_community_reevaluation.go | 26 +++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 signal/events_community_reevaluation.go diff --git a/protocol/communities/manager.go b/protocol/communities/manager.go index dcb559231..95c86f16f 100644 --- a/protocol/communities/manager.go +++ b/protocol/communities/manager.go @@ -1227,7 +1227,15 @@ func (m *Manager) DeleteCommunityTokenPermission(request *requests.DeleteCommuni } func (m *Manager) reevaluateCommunityMembersPermissions(communityID types.HexBytes) error { + // Publish when the reevluation started since it can take a while + signal.SendCommunityMemberReevaluationStarted(types.EncodeHex(communityID)) + community, newPrivilegedMembers, err := m.ReevaluateMembers(communityID) + + // Publish the reevaluation ending, even if it errored + // A possible improvement would be to pass the error here + signal.SendCommunityMemberReevaluationEnded(types.EncodeHex(communityID)) + if err != nil { return err } diff --git a/signal/events_community_reevaluation.go b/signal/events_community_reevaluation.go new file mode 100644 index 000000000..ba9632eba --- /dev/null +++ b/signal/events_community_reevaluation.go @@ -0,0 +1,26 @@ +package signal + +const ( + MemberReevaluationStatus = "community.memberReevaluationStatus" +) + +type ReevaluationStatus uint + +const ( + None ReevaluationStatus = iota + InProgress + Done +) + +type CommunityMemberReevaluationSignal struct { + CommunityID string `json:"communityId"` + Status ReevaluationStatus `json:"status"` +} + +func SendCommunityMemberReevaluationStarted(communityID string) { + send(MemberReevaluationStatus, CommunityMemberReevaluationSignal{CommunityID: communityID, Status: InProgress}) +} + +func SendCommunityMemberReevaluationEnded(communityID string) { + send(MemberReevaluationStatus, CommunityMemberReevaluationSignal{CommunityID: communityID, Status: Done}) +}