Skip to content

Commit 23b69a8

Browse files
authored
Merge pull request #3 from Bilb/fix-use-member-status-enum
feat: use consolited enum for group status from libsession-util
2 parents 551967b + 671d092 commit 23b69a8

File tree

4 files changed

+88
-47
lines changed

4 files changed

+88
-47
lines changed

src/groups/meta_group_wrapper.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,10 @@ Napi::Value MetaGroupWrapper::memberGetAllPendingRemovals(const Napi::CallbackIn
396396
return wrapResult(info, [&] {
397397
std::vector<session::config::groups::member> allMembersRemoved;
398398
for (auto& member : *this->meta_group->members) {
399-
if (member.is_removed()) {
399+
auto memberStatus = member.status();
400+
if (memberStatus == member::Status::removed_unknown ||
401+
memberStatus == member::Status::removed ||
402+
memberStatus == member::Status::removed_including_messages) {
400403
allMembersRemoved.push_back(member);
401404
}
402405
}

src/groups/meta_group_wrapper.hpp

Lines changed: 48 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "../utilities.hpp"
88
#include "./meta_group.hpp"
99
#include "oxenc/bt_producer.h"
10+
#include "session/config/groups/members.hpp"
1011
#include "session/config/user_groups.hpp"
1112

1213
namespace session::nodeapi {
@@ -25,43 +26,57 @@ struct toJs_impl<member> {
2526
obj["pubkeyHex"] = toJs(env, info.session_id);
2627
obj["name"] = toJs(env, info.name);
2728
obj["profilePicture"] = toJs(env, info.profile_picture);
28-
obj["removedStatus"] = toJs(env, info.removed_status);
29-
30-
// promoted() is true as soon as the member is scheduled to be promoted
31-
// Note: this should be part of `libsession-util`, not `libsession-util-nodejs`
32-
if (info.promoted() && !info.promotion_pending()) {
33-
obj["memberStatus"] = toJs(env, "PROMOTION_ACCEPTED");
34-
} else if (info.promotion_failed()) {
35-
obj["memberStatus"] = toJs(env, "PROMOTION_FAILED");
36-
} else if (info.promotion_pending()) {
37-
obj["memberStatus"] = toJs(env, "PROMOTION_SENT");
38-
} else if (info.admin) {
39-
obj["memberStatus"] = toJs(env, "PROMOTION_NOT_SENT");
40-
} else if (info.invite_status == 0) {
41-
obj["memberStatus"] = toJs(env, "INVITE_ACCEPTED");
42-
} else if (info.invite_not_sent()) {
43-
obj["memberStatus"] = toJs(env, "INVITE_NOT_SENT");
44-
} else if (info.invite_failed()) {
45-
obj["memberStatus"] = toJs(env, "INVITE_FAILED");
46-
} else if (info.invite_pending()) {
47-
// Note: INVITE_NOT_SENT is 3, which makes invite_pending() return true, so be sure to
48-
// check for invite_not_sent() above.
49-
obj["memberStatus"] = toJs(env, "INVITE_SENT");
50-
} else {
51-
obj["memberStatus"] = toJs(env, "UNKNOWN");
29+
30+
auto status = info.status();
31+
32+
switch (status) {
33+
// invite statuses
34+
case member::Status::invite_unknown:
35+
obj["memberStatus"] = toJs(env, "INVITE_UNKNOWN");
36+
break;
37+
case member::Status::invite_not_sent:
38+
obj["memberStatus"] = toJs(env, "INVITE_NOT_SENT");
39+
break;
40+
case member::Status::invite_failed:
41+
obj["memberStatus"] = toJs(env, "INVITE_FAILED");
42+
break;
43+
case member::Status::invite_sent: obj["memberStatus"] = toJs(env, "INVITE_SENT"); break;
44+
case member::Status::invite_accepted:
45+
obj["memberStatus"] = toJs(env, "INVITE_ACCEPTED");
46+
break;
47+
48+
// promotion statuses
49+
case member::Status::promotion_unknown:
50+
obj["memberStatus"] = toJs(env, "PROMOTION_UNKNOWN");
51+
break;
52+
case member::Status::promotion_not_sent:
53+
obj["memberStatus"] = toJs(env, "PROMOTION_NOT_SENT");
54+
break;
55+
case member::Status::promotion_failed:
56+
obj["memberStatus"] = toJs(env, "PROMOTION_FAILED");
57+
break;
58+
case member::Status::promotion_sent:
59+
obj["memberStatus"] = toJs(env, "PROMOTION_SENT");
60+
break;
61+
case member::Status::promotion_accepted:
62+
obj["memberStatus"] = toJs(env, "PROMOTION_ACCEPTED");
63+
break;
64+
65+
// removed statuses
66+
case member::Status::removed_unknown:
67+
obj["memberStatus"] = toJs(env, "REMOVED_UNKNOWN");
68+
break;
69+
case member::Status::removed: obj["memberStatus"] = toJs(env, "REMOVED_MEMBER"); break;
70+
case member::Status::removed_including_messages:
71+
obj["memberStatus"] = toJs(env, "REMOVED_MEMBER_AND_MESSAGES");
72+
break;
73+
74+
default: throw std::runtime_error{"Invalid member status got as an enum"};
5275
}
5376

77+
// we display the "crown" on top of the member's avatar when this field is true
5478
obj["nominatedAdmin"] = toJs(env, info.admin);
5579

56-
if (!info.is_removed()) {
57-
obj["removedStatus"] = toJs(env, "NOT_REMOVED");
58-
} else {
59-
if (info.should_remove_messages()) {
60-
obj["removedStatus"] = toJs(env, "REMOVED_MEMBER_AND_MESSAGES");
61-
} else {
62-
obj["removedStatus"] = toJs(env, "REMOVED_MEMBER");
63-
}
64-
}
6580
return obj;
6681
}
6782
};

types/groups/groupmembers.d.ts

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,33 +12,56 @@ declare module 'libsession_util_nodejs' {
1212
profilePicture: ProfilePicture | null;
1313
};
1414

15+
/**
16+
* Unified status that a member can have based on the various libsession-util values.
17+
*
18+
* **Invite statuses**
19+
* - INVITE_UNKNOWN: fallback invite case
20+
* - INVITE_NOT_SENT: as soon as we've scheduled that member to be invited, but before we've tried sending the invite message
21+
* - INVITE_FAILED: we know the invite failed to be sent to the member
22+
* - INVITE_SENT: we know the invite has been sent to the member
23+
* - INVITE_ACCEPTED: regular member
24+
*
25+
* **Promotion statuses**
26+
* - PROMOTION_UNKNOWN: promotion fallback case
27+
* - PROMOTION_NOT_SENT: as soon as we've scheduled that guy to be an admin, but before we've tried sending the promotion message
28+
* - PROMOTION_FAILED: we know the promotion failed to be sent to the member
29+
* - PROMOTION_SENT: we know the promotion message was sent to the member
30+
* - PROMOTION_ACCEPTED: regular admin
31+
*
32+
* **Removed statuses**
33+
* - REMOVED_MEMBER: the member is pending removal from the group
34+
* - REMOVED_MEMBER_AND_MESSAGES: the member and his messages are pending removal from the group
35+
* - REMOVED_UNKNOWN: the member is pending removal, fallback case;
36+
*/
1537
type MemberStateGroupV2 =
16-
| 'INVITE_NOT_SENT' // as soon as we've scheduled that guy to be invited, but before we've tried sending the invite message
38+
| 'INVITE_UNKNOWN'
39+
| 'INVITE_NOT_SENT'
1740
| 'INVITE_FAILED'
1841
| 'INVITE_SENT'
19-
| 'INVITE_ACCEPTED' // regular member
20-
| 'PROMOTION_NOT_SENT' // as soon as we've scheduled that guy to be an admin, but before we've tried sending the promotion message
42+
| 'INVITE_ACCEPTED'
43+
| 'PROMOTION_UNKNOWN'
44+
| 'PROMOTION_NOT_SENT'
2145
| 'PROMOTION_FAILED'
2246
| 'PROMOTION_SENT'
23-
| 'PROMOTION_ACCEPTED' // regular admin
24-
| 'UNKNOWN';
47+
| 'PROMOTION_ACCEPTED'
48+
| 'REMOVED_MEMBER'
49+
| 'REMOVED_MEMBER_AND_MESSAGES'
50+
| 'REMOVED_UNKNOWN';
2551

2652
export type GroupMemberGet = GroupMemberShared & {
2753
memberStatus: MemberStateGroupV2;
2854

2955
/**
30-
* NOT_REMOVED = 0:
31-
* REMOVED_MEMBER = 1,
32-
* REMOVED_MEMBER_AND_MESSAGES = 2;
33-
*/
34-
removedStatus: 'NOT_REMOVED' | 'REMOVED_MEMBER' | 'REMOVED_MEMBER_AND_MESSAGES' | 'UNKNOWN';
35-
/**
36-
* True if the member is scheduled to get the keys (.admin field of libsession).
56+
* True if the member is scheduled to get the keys (`.admin` field of libsession).
3757
* This is equivalent of memberStatus being one of:
58+
* - PROMOTION_UNKNOWN
3859
* - PROMOTION_NOT_SENT
3960
* - PROMOTION_FAILED
4061
* - PROMOTION_SENT
4162
* - PROMOTION_ACCEPTED
63+
*
64+
* We display the "crown" on top of the member's avatar when this field is true
4265
*/
4366
nominatedAdmin: boolean;
4467
};

0 commit comments

Comments
 (0)