9
9
10
10
namespace session ::nodeapi {
11
11
12
+ Napi::Object member_to_js (const Napi::Env& env, const member& info, const member::Status& status) {
13
+ auto obj = Napi::Object::New (env);
14
+
15
+ obj[" pubkeyHex" ] = toJs (env, info.session_id );
16
+ obj[" name" ] = toJs (env, info.name );
17
+ obj[" profilePicture" ] = toJs (env, info.profile_picture );
18
+
19
+ switch (status) {
20
+ // invite statuses
21
+ case member::Status::invite_unknown:
22
+ obj[" memberStatus" ] = toJs (env, " INVITE_UNKNOWN" );
23
+ break ;
24
+ case member::Status::invite_not_sent:
25
+ obj[" memberStatus" ] = toJs (env, " INVITE_NOT_SENT" );
26
+ break ;
27
+ case member::Status::invite_sending:
28
+ obj[" memberStatus" ] = toJs (env, " INVITE_SENDING" );
29
+ break ;
30
+ case member::Status::invite_failed: obj[" memberStatus" ] = toJs (env, " INVITE_FAILED" ); break ;
31
+ case member::Status::invite_sent: obj[" memberStatus" ] = toJs (env, " INVITE_SENT" ); break ;
32
+ case member::Status::invite_accepted:
33
+ obj[" memberStatus" ] = toJs (env, " INVITE_ACCEPTED" );
34
+ break ;
35
+
36
+ // promotion statuses
37
+ case member::Status::promotion_unknown:
38
+ obj[" memberStatus" ] = toJs (env, " PROMOTION_UNKNOWN" );
39
+ break ;
40
+ case member::Status::promotion_not_sent:
41
+ obj[" memberStatus" ] = toJs (env, " PROMOTION_NOT_SENT" );
42
+ break ;
43
+ case member::Status::promotion_sending:
44
+ obj[" memberStatus" ] = toJs (env, " PROMOTION_SENDING" );
45
+ break ;
46
+ case member::Status::promotion_failed:
47
+ obj[" memberStatus" ] = toJs (env, " PROMOTION_FAILED" );
48
+ break ;
49
+ case member::Status::promotion_sent:
50
+ obj[" memberStatus" ] = toJs (env, " PROMOTION_SENT" );
51
+ break ;
52
+ case member::Status::promotion_accepted:
53
+ obj[" memberStatus" ] = toJs (env, " PROMOTION_ACCEPTED" );
54
+ break ;
55
+
56
+ // removed statuses
57
+ case member::Status::removed_unknown:
58
+ obj[" memberStatus" ] = toJs (env, " REMOVED_UNKNOWN" );
59
+ break ;
60
+ case member::Status::removed: obj[" memberStatus" ] = toJs (env, " REMOVED_MEMBER" ); break ;
61
+ case member::Status::removed_including_messages:
62
+ obj[" memberStatus" ] = toJs (env, " REMOVED_MEMBER_AND_MESSAGES" );
63
+ break ;
64
+
65
+ default : throw std::runtime_error{" Invalid member status got as an enum" };
66
+ }
67
+
68
+ // we display the "crown" on top of the member's avatar when this field is true
69
+ obj[" nominatedAdmin" ] = toJs (env, info.admin );
70
+
71
+ return obj;
72
+ };
73
+
12
74
MetaGroupWrapper::MetaGroupWrapper (const Napi::CallbackInfo& info) :
13
75
meta_group{std::move (MetaBaseWrapper::constructGroupWrapper (info, " MetaGroupWrapper" ))},
14
76
Napi::ObjectWrap<MetaGroupWrapper>{info} {}
@@ -388,26 +450,28 @@ Napi::Value MetaGroupWrapper::infoDestroy(const Napi::CallbackInfo& info) {
388
450
389
451
Napi::Value MetaGroupWrapper::memberGetAll (const Napi::CallbackInfo& info) {
390
452
return wrapResult (info, [&] {
391
- std::vector<session::config::groups::member> allMembers ;
453
+ std::vector<Napi::Object> allMembersJs ;
392
454
for (auto & member : *this ->meta_group ->members ) {
393
- allMembers.push_back (member);
455
+ allMembersJs.push_back (
456
+ member_to_js (info.Env (), member, meta_group->members ->get_status (member)));
394
457
}
395
- return allMembers ;
458
+ return allMembersJs ;
396
459
});
397
460
}
398
461
399
462
Napi::Value MetaGroupWrapper::memberGetAllPendingRemovals (const Napi::CallbackInfo& info) {
400
463
return wrapResult (info, [&] {
401
- std::vector<session::config::groups::member> allMembersRemoved ;
464
+ std::vector<Napi::Object> allMembersRemovedJs ;
402
465
for (auto & member : *this ->meta_group ->members ) {
403
- auto memberStatus = member. status ( );
466
+ auto memberStatus = this -> meta_group -> members -> get_status (member );
404
467
if (memberStatus == member::Status::removed_unknown ||
405
468
memberStatus == member::Status::removed ||
406
469
memberStatus == member::Status::removed_including_messages) {
407
- allMembersRemoved.push_back (member);
470
+ allMembersRemovedJs.push_back (
471
+ member_to_js (info.Env (), member, meta_group->members ->get_status (member)));
408
472
}
409
473
}
410
- return allMembersRemoved ;
474
+ return allMembersRemovedJs ;
411
475
});
412
476
}
413
477
@@ -417,7 +481,11 @@ Napi::Value MetaGroupWrapper::memberGet(const Napi::CallbackInfo& info) {
417
481
assertIsString (info[0 ]);
418
482
419
483
auto pubkeyHex = toCppString (info[0 ], " memberGet" );
420
- return meta_group->members ->get (pubkeyHex);
484
+ auto existing = meta_group->members ->get (pubkeyHex);
485
+
486
+ return existing ? member_to_js (
487
+ info.Env (), *existing, meta_group->members ->get_status (*existing))
488
+ : info.Env ().Null ();
421
489
});
422
490
}
423
491
@@ -427,7 +495,8 @@ Napi::Value MetaGroupWrapper::memberGetOrConstruct(const Napi::CallbackInfo& inf
427
495
assertIsString (info[0 ]);
428
496
429
497
auto pubkeyHex = toCppString (info[0 ], " memberGetOrConstruct" );
430
- return meta_group->members ->get_or_construct (pubkeyHex);
498
+ auto created = meta_group->members ->get_or_construct (pubkeyHex);
499
+ return member_to_js (info.Env (), created, meta_group->members ->get_status (created));
431
500
});
432
501
}
433
502
@@ -439,7 +508,7 @@ Napi::Value MetaGroupWrapper::memberConstructAndSet(const Napi::CallbackInfo& in
439
508
auto pubkeyHex = toCppString (info[0 ], " memberConstructAndSet" );
440
509
auto created = meta_group->members ->get_or_construct (pubkeyHex);
441
510
meta_group->members ->set (created);
442
- return created;
511
+ return member_to_js (info. Env (), created, meta_group-> members -> get_status (created)) ;
443
512
});
444
513
}
445
514
0 commit comments