Skip to content

Commit 81e191c

Browse files
committed
feat: break down set promotion&invite setters
1 parent 04cf81e commit 81e191c

File tree

4 files changed

+101
-36
lines changed

4 files changed

+101
-36
lines changed

src/groups/meta_group_wrapper.cpp

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,19 @@ void MetaGroupWrapper::Init(Napi::Env env, Napi::Object exports) {
4747
InstanceMethod(
4848
"membersMarkPendingRemoval",
4949
&MetaGroupWrapper::membersMarkPendingRemoval),
50-
InstanceMethod("memberSetName", &MetaGroupWrapper::memberSetName),
50+
InstanceMethod(
51+
"memberSetNameTruncated", &MetaGroupWrapper::memberSetNameTruncated),
5152
InstanceMethod("memberSetInvited", &MetaGroupWrapper::memberSetInvited),
5253
InstanceMethod("memberSetAccepted", &MetaGroupWrapper::memberSetAccepted),
5354
InstanceMethod("memberSetPromoted", &MetaGroupWrapper::memberSetPromoted),
54-
InstanceMethod("memberSetAdmin", &MetaGroupWrapper::memberSetAdmin),
55+
InstanceMethod(
56+
"memberSetPromotionSent", &MetaGroupWrapper::memberSetPromotionSent),
57+
InstanceMethod(
58+
"memberSetPromotionFailed",
59+
&MetaGroupWrapper::memberSetPromotionFailed),
60+
InstanceMethod(
61+
"memberSetPromotionAccepted",
62+
&MetaGroupWrapper::memberSetPromotionAccepted),
5563
InstanceMethod(
5664
"memberSetProfilePicture", &MetaGroupWrapper::memberSetProfilePicture),
5765
InstanceMethod("memberEraseAndRekey", &MetaGroupWrapper::memberEraseAndRekey),
@@ -73,6 +81,7 @@ void MetaGroupWrapper::Init(Napi::Env env, Napi::Object exports) {
7381
InstanceMethod(
7482
"swarmVerifySubAccount", &MetaGroupWrapper::swarmVerifySubAccount),
7583
InstanceMethod("loadAdminKeys", &MetaGroupWrapper::loadAdminKeys),
84+
InstanceMethod("keysAdmin", &MetaGroupWrapper::keysAdmin),
7685

7786
InstanceMethod("swarmSubaccountSign", &MetaGroupWrapper::swarmSubaccountSign),
7887
InstanceMethod(
@@ -431,7 +440,7 @@ void MetaGroupWrapper::memberConstructAndSet(const Napi::CallbackInfo& info) {
431440
});
432441
}
433442

434-
void MetaGroupWrapper::memberSetName(const Napi::CallbackInfo& info) {
443+
void MetaGroupWrapper::memberSetNameTruncated(const Napi::CallbackInfo& info) {
435444
wrapExceptions(info, [&] {
436445
assertIsString(info[0]);
437446
assertIsString(info[1]);
@@ -477,29 +486,51 @@ void MetaGroupWrapper::memberSetAccepted(const Napi::CallbackInfo& info) {
477486

478487
void MetaGroupWrapper::memberSetPromoted(const Napi::CallbackInfo& info) {
479488
wrapExceptions(info, [&] {
480-
assertInfoLength(info, 2);
489+
assertInfoLength(info, 1);
481490
assertIsString(info[0]);
482-
assertIsBoolean(info[1]);
483491
auto pubkeyHex = toCppString(info[0], __PRETTY_FUNCTION__);
484-
auto failed = toCppBoolean(info[1], __PRETTY_FUNCTION__);
485492
auto m = this->meta_group->members->get(pubkeyHex);
486493
if (m) {
487-
m->set_promoted(failed);
494+
m->set_promoted();
488495
this->meta_group->members->set(*m);
489496
}
490497
});
491498
}
492499

493-
void MetaGroupWrapper::memberSetAdmin(const Napi::CallbackInfo& info) {
500+
void MetaGroupWrapper::memberSetPromotionSent(const Napi::CallbackInfo& info) {
494501
wrapExceptions(info, [&] {
495502
assertInfoLength(info, 1);
496503
assertIsString(info[0]);
497504
auto pubkeyHex = toCppString(info[0], __PRETTY_FUNCTION__);
498-
// Note: this step might add an admin which was removed back once he accepts the promotion,
499-
// but there is not much we can do about it
500505
auto m = this->meta_group->members->get(pubkeyHex);
501506
if (m) {
502-
m->admin = true;
507+
m->set_promotion_sent();
508+
this->meta_group->members->set(*m);
509+
}
510+
});
511+
}
512+
513+
void MetaGroupWrapper::memberSetPromotionFailed(const Napi::CallbackInfo& info) {
514+
wrapExceptions(info, [&] {
515+
assertInfoLength(info, 1);
516+
assertIsString(info[0]);
517+
auto pubkeyHex = toCppString(info[0], __PRETTY_FUNCTION__);
518+
auto m = this->meta_group->members->get(pubkeyHex);
519+
if (m) {
520+
m->set_promotion_failed();
521+
this->meta_group->members->set(*m);
522+
}
523+
});
524+
}
525+
526+
void MetaGroupWrapper::memberSetPromotionAccepted(const Napi::CallbackInfo& info) {
527+
wrapExceptions(info, [&] {
528+
assertInfoLength(info, 1);
529+
assertIsString(info[0]);
530+
auto pubkeyHex = toCppString(info[0], __PRETTY_FUNCTION__);
531+
auto m = this->meta_group->members->get(pubkeyHex);
532+
if (m) {
533+
m->set_promotion_accepted();
503534
this->meta_group->members->set(*m);
504535
}
505536
});
@@ -703,7 +734,6 @@ Napi::Value MetaGroupWrapper::loadAdminKeys(const Napi::CallbackInfo& info) {
703734
});
704735
}
705736

706-
707737
Napi::Value MetaGroupWrapper::keysAdmin(const Napi::CallbackInfo& info) {
708738
return wrapResult(info, [&] {
709739
assertInfoLength(info, 0);

src/groups/meta_group_wrapper.hpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,23 @@ struct toJs_impl<member> {
2121
obj["pubkeyHex"] = toJs(env, info.session_id);
2222
obj["name"] = toJs(env, info.name);
2323
obj["profilePicture"] = toJs(env, info.profile_picture);
24+
obj["removedStatus"] = toJs(env, info.removed_status);
25+
26+
// invites
27+
obj["inviteNotSent"] = toJs(env, info.invite_not_sent());
2428
obj["invitePending"] = toJs(env, info.invite_pending());
29+
obj["inviteAccepted"] = toJs(env, info.invite_status == 0);
2530
obj["inviteFailed"] = toJs(env, info.invite_failed());
31+
32+
// promotions
33+
obj["promotionNotSent"] = toJs(env, info.promotion_not_sent());
2634
obj["promotionPending"] = toJs(env, info.promotion_pending());
2735
obj["promotionFailed"] = toJs(env, info.promotion_failed());
2836
obj["promoted"] = toJs(env, info.promoted());
29-
obj["admin"] = toJs(env, info.admin);
30-
obj["removedStatus"] = toJs(env, info.removed_status);
37+
38+
// removed status
39+
obj["isRemoved"] = toJs(env, info.is_removed());
40+
obj["shouldRemoveMessages"] = toJs(env, info.should_remove_messages());
3141

3242
return obj;
3343
}
@@ -75,11 +85,13 @@ class MetaGroupWrapper : public Napi::ObjectWrap<MetaGroupWrapper> {
7585
Napi::Value memberGetOrConstruct(const Napi::CallbackInfo& info);
7686
void memberConstructAndSet(const Napi::CallbackInfo& info);
7787

78-
void memberSetName(const Napi::CallbackInfo& info);
88+
void memberSetNameTruncated(const Napi::CallbackInfo& info);
7989
void memberSetInvited(const Napi::CallbackInfo& info);
8090
void memberSetAccepted(const Napi::CallbackInfo& info);
8191
void memberSetPromoted(const Napi::CallbackInfo& info);
82-
void memberSetAdmin(const Napi::CallbackInfo& info);
92+
void memberSetPromotionSent(const Napi::CallbackInfo& info);
93+
void memberSetPromotionFailed(const Napi::CallbackInfo& info);
94+
void memberSetPromotionAccepted(const Napi::CallbackInfo& info);
8395
void memberSetProfilePicture(const Napi::CallbackInfo& info);
8496
Napi::Value memberEraseAndRekey(const Napi::CallbackInfo& info);
8597
void membersMarkPendingRemoval(const Napi::CallbackInfo& info);

types/groups/groupmembers.d.ts

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,29 @@ declare module 'libsession_util_nodejs' {
1313
};
1414

1515
export type GroupMemberGet = GroupMemberShared & {
16+
/** Default state, before we try sending the invite */
17+
inviteNotSent: boolean;
18+
/** We did send the invite to the user */
1619
invitePending: boolean;
20+
/** The invite was accepted by the user */
21+
inviteAccepted: boolean;
22+
23+
/** We failed to send the invite to the user */
1724
inviteFailed: boolean;
25+
26+
/** Default state, before we try sending the promotion */
27+
promotionNotSent: boolean;
28+
/** We did send the promotion, not accepted yet */
1829
promotionPending: boolean;
30+
/** We tried to send the promotion but failed */
1931
promotionFailed: boolean;
20-
/**
21-
* - 0 means not removed,
22-
* - 1 means removed (libsession: REMOVED_MEMBER),
23-
* - 2 means removed with messages (libsession: REMOVED_MEMBER_AND_MESSAGES)
24-
*/
25-
removedStatus: number;
32+
/** The user is already an admin *or* has a pending promotion */
2633
promoted: boolean;
27-
admin: boolean;
34+
35+
/** True if the user should be removed from the group */
36+
isRemoved: boolean;
37+
/** True if the user and his messages should be removed from the group */
38+
shouldRemoveMessages: boolean;
2839
};
2940

3041
type GroupMemberWrapper = {
@@ -37,15 +48,23 @@ declare module 'libsession_util_nodejs' {
3748
memberGetAllPendingRemovals: () => Array<GroupMemberGet>;
3849

3950
// setters
40-
memberSetName: (pubkeyHex: PubkeyType, newName: string) => void;
51+
memberSetNameTruncated: (pubkeyHex: PubkeyType, newName: string) => void;
52+
53+
/** A member invite states defaults to invite-not-sent. Use this function to mark that you've sent one, or at least tried (failed: boolean)*/
4154
memberSetInvited: (pubkeyHex: PubkeyType, failed: boolean) => void;
42-
memberSetPromoted: (pubkeyHex: PubkeyType, failed: boolean) => void;
43-
memberSetAdmin: (pubkeyHex: PubkeyType) => void;
55+
/** User has accepted an invitation and is now a regular member of the group */
4456
memberSetAccepted: (pubkeyHex: PubkeyType) => void;
45-
memberSetProfilePicture: (
46-
pubkeyHex: PubkeyType,
47-
profilePicture: ProfilePicture
48-
) => void;
57+
58+
/** Mark the member as waiting a promotion to be sent to them */
59+
memberSetPromoted: (pubkeyHex: PubkeyType) => void;
60+
/** Called when we did send the promotion to the member */
61+
memberSetPromotionSent: (pubkeyHex: PubkeyType) => void;
62+
/** Called when we did send the promotion to the member, but failed */
63+
memberSetPromotionFailed: (pubkeyHex: PubkeyType) => void;
64+
/** Called when the member accepted the promotion */
65+
memberSetPromotionAccepted: (pubkeyHex: PubkeyType) => void;
66+
67+
memberSetProfilePicture: (pubkeyHex: PubkeyType, profilePicture: ProfilePicture) => void;
4968
membersMarkPendingRemoval: (members: Array<PubkeyType>, withMessages: boolean) => void;
5069

5170
// eraser

types/groups/metagroup.d.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ declare module 'libsession_util_nodejs' {
1717
GroupMemberWrapper &
1818
GroupKeysWrapper & {
1919
// shared actions
20-
init: (options: GroupWrapperConstructor) => void;
21-
free: () => void;
20+
init: (options: GroupWrapperConstructor) => void;
21+
free: () => void;
2222
needsPush: () => boolean;
2323
push: () => {
2424
groupInfo: PushConfigResult | null;
@@ -80,9 +80,11 @@ declare module 'libsession_util_nodejs' {
8080
public memberGetAll: MetaGroupWrapper['memberGetAll'];
8181
public memberGetAllPendingRemovals: MetaGroupWrapper['memberGetAllPendingRemovals'];
8282
public memberSetAccepted: MetaGroupWrapper['memberSetAccepted'];
83-
public memberSetName: MetaGroupWrapper['memberSetName'];
83+
public memberSetNameTruncated: MetaGroupWrapper['memberSetNameTruncated'];
8484
public memberSetPromoted: MetaGroupWrapper['memberSetPromoted'];
85-
public memberSetAdmin: MetaGroupWrapper['memberSetAdmin'];
85+
public memberSetPromotionAccepted: MetaGroupWrapper['memberSetPromotionAccepted'];
86+
public memberSetPromotionSent: MetaGroupWrapper['memberSetPromotionSent'];
87+
public memberSetPromotionFailed: MetaGroupWrapper['memberSetPromotionFailed'];
8688
public memberSetInvited: MetaGroupWrapper['memberSetInvited'];
8789
public memberEraseAndRekey: MetaGroupWrapper['memberEraseAndRekey'];
8890
public membersMarkPendingRemoval: MetaGroupWrapper['membersMarkPendingRemoval'];
@@ -125,9 +127,11 @@ declare module 'libsession_util_nodejs' {
125127
| MakeActionCall<MetaGroupWrapper, 'memberGetAll'>
126128
| MakeActionCall<MetaGroupWrapper, 'memberGetAllPendingRemovals'>
127129
| MakeActionCall<MetaGroupWrapper, 'memberSetAccepted'>
128-
| MakeActionCall<MetaGroupWrapper, 'memberSetName'>
130+
| MakeActionCall<MetaGroupWrapper, 'memberSetNameTruncated'>
129131
| MakeActionCall<MetaGroupWrapper, 'memberSetPromoted'>
130-
| MakeActionCall<MetaGroupWrapper, 'memberSetAdmin'>
132+
| MakeActionCall<MetaGroupWrapper, 'memberSetPromotionFailed'>
133+
| MakeActionCall<MetaGroupWrapper, 'memberSetPromotionSent'>
134+
| MakeActionCall<MetaGroupWrapper, 'memberSetPromotionAccepted'>
131135
| MakeActionCall<MetaGroupWrapper, 'memberSetInvited'>
132136
| MakeActionCall<MetaGroupWrapper, 'memberEraseAndRekey'>
133137
| MakeActionCall<MetaGroupWrapper, 'membersMarkPendingRemoval'>

0 commit comments

Comments
 (0)