Skip to content

Commit 93f4665

Browse files
SessionHero01SessionHero01
authored andcommitted
Tidy up
1 parent d693f8a commit 93f4665

19 files changed

+553
-425
lines changed

library/src/main/cpp/contacts.cpp

Lines changed: 170 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22
#include "util.h"
33
#include "jni_utils.h"
44

5+
session::config::Contacts *ptrToContacts(JNIEnv *env, jobject obj) {
6+
auto contactsClass = jni_utils::JavaLocalRef(env, env->FindClass("network/loki/messenger/libsession_util/Contacts"));
7+
jfieldID pointerField = env->GetFieldID(contactsClass.get(), "pointer", "J");
8+
return (session::config::Contacts *) env->GetLongField(obj, pointerField);
9+
}
10+
511
extern "C"
612
JNIEXPORT jobject JNICALL
713
Java_network_loki_messenger_libsession_1util_Contacts_get(JNIEnv *env, jobject thiz,
@@ -68,7 +74,170 @@ JNIEXPORT jobject JNICALL
6874
Java_network_loki_messenger_libsession_1util_Contacts_all(JNIEnv *env, jobject thiz) {
6975
return jni_utils::run_catching_cxx_exception_or_throws<jobject>(env, [=] {
7076
std::lock_guard lock{util::util_mutex_};
71-
auto contacts = ptrToContacts(env, thiz);
7277
return jni_utils::jlist_from_collection(env, *ptrToContacts(env, thiz), serialize_contact);
7378
});
7479
}
80+
81+
jobject serialize_contact(JNIEnv *env, session::config::contact_info info) {
82+
auto contactClass = jni_utils::JavaLocalRef(env, env->FindClass("network/loki/messenger/libsession_util/util/Contact"));
83+
jmethodID constructor = env->GetMethodID(contactClass.get(), "<init>", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZZLnetwork/loki/messenger/libsession_util/util/UserPic;JJJLnetwork/loki/messenger/libsession_util/util/ExpiryMode;)V");
84+
jobject returnObj = env->NewObject(contactClass.get(),
85+
constructor,
86+
jni_utils::JavaLocalRef(env, env->NewStringUTF(info.session_id.data())).get(),
87+
jni_utils::JavaLocalRef(env, env->NewStringUTF(info.name.data())).get(),
88+
jni_utils::JavaLocalRef(env, env->NewStringUTF(info.nickname.data())).get(),
89+
(jboolean) info.approved,
90+
(jboolean) info.approved_me,
91+
(jboolean) info.blocked,
92+
jni_utils::JavaLocalRef(env, util::serialize_user_pic(env, info.profile_picture)).get(),
93+
(jlong) info.created,
94+
(jlong) (info.profile_updated.time_since_epoch().count()),
95+
(jlong) info.priority,
96+
util::serialize_expiry(env, info.exp_mode, info.exp_timer));
97+
return returnObj;
98+
}
99+
100+
session::config::contact_info deserialize_contact(JNIEnv *env, jobject info, session::config::Contacts *conf) {
101+
jclass contactClass = env->FindClass("network/loki/messenger/libsession_util/util/Contact");
102+
103+
jfieldID getId, getName, getNick, getApproved, getApprovedMe, getBlocked, getUserPic, getPriority, getExpiry, getHidden, profileUpdatedField;
104+
getId = env->GetFieldID(contactClass, "id", "Ljava/lang/String;");
105+
getName = env->GetFieldID(contactClass, "name", "Ljava/lang/String;");
106+
getNick = env->GetFieldID(contactClass, "nickname", "Ljava/lang/String;");
107+
getApproved = env->GetFieldID(contactClass, "approved", "Z");
108+
getApprovedMe = env->GetFieldID(contactClass, "approvedMe", "Z");
109+
getBlocked = env->GetFieldID(contactClass, "blocked", "Z");
110+
getUserPic = env->GetFieldID(contactClass, "profilePicture",
111+
"Lnetwork/loki/messenger/libsession_util/util/UserPic;");
112+
getPriority = env->GetFieldID(contactClass, "priority", "J");
113+
getExpiry = env->GetFieldID(contactClass, "expiryMode", "Lnetwork/loki/messenger/libsession_util/util/ExpiryMode;");
114+
profileUpdatedField = env->GetFieldID(contactClass, "profileUpdatedEpochSeconds", "J");
115+
116+
jni_utils::JavaLocalRef account_id(env, static_cast<jstring>(env->GetObjectField(info, getId)));
117+
jni_utils::JavaLocalRef name(env, static_cast<jstring>(env->GetObjectField(info, getName)));
118+
jni_utils::JavaLocalRef nickname(env, static_cast<jstring>(env->GetObjectField(info, getNick)));
119+
jni_utils::JavaLocalRef user_pic(env, env->GetObjectField(info, getUserPic));
120+
jni_utils::JavaLocalRef expiry_mode(env, env->GetObjectField(info, getExpiry));
121+
122+
auto expiry_pair = util::deserialize_expiry(env, expiry_mode.get());
123+
auto profile_updated_seconds = env->GetLongField(info, profileUpdatedField);
124+
125+
auto contact_info = conf->get_or_construct(jni_utils::JavaStringRef(env, account_id.get()).view());
126+
if (name.get()) {
127+
contact_info.name = jni_utils::JavaStringRef(env, name.get()).view();
128+
}
129+
if (nickname.get()) {
130+
contact_info.nickname = jni_utils::JavaStringRef(env, nickname.get()).view();
131+
}
132+
contact_info.approved = env->GetBooleanField(info, getApproved);
133+
contact_info.approved_me = env->GetBooleanField(info, getApprovedMe);
134+
contact_info.blocked = env->GetBooleanField(info, getBlocked);
135+
contact_info.profile_updated = std::chrono::sys_seconds{std::chrono::seconds{profile_updated_seconds}};
136+
if (user_pic.get() != nullptr) {
137+
contact_info.profile_picture = util::deserialize_user_pic(env, user_pic.get());
138+
}
139+
140+
contact_info.priority = env->GetLongField(info, getPriority);
141+
contact_info.exp_mode = expiry_pair.first;
142+
contact_info.exp_timer = std::chrono::seconds(expiry_pair.second);
143+
144+
return contact_info;
145+
}
146+
147+
jobject serialize_blinded_contact(JNIEnv *env, const session::config::blinded_contact_info &info) {
148+
jni_utils::JavaLocalRef<jclass> clazz(env, env->FindClass("network/loki/messenger/libsession_util/util/BlindedContact"));
149+
auto constructor = env->GetMethodID(clazz.get(), "<init>", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JLnetwork/loki/messenger/libsession_util/util/UserPic;)V");
150+
151+
return env->NewObject(
152+
clazz.get(),
153+
constructor,
154+
jni_utils::JavaLocalRef(env, env->NewStringUTF(info.session_id().c_str())).get(),
155+
jni_utils::JavaLocalRef(env, env->NewStringUTF(info.comm.base_url().data())).get(),
156+
jni_utils::JavaLocalRef(env, env->NewStringUTF(info.comm.pubkey_hex().data())).get(),
157+
jni_utils::JavaLocalRef(env, env->NewStringUTF(info.name.c_str())).get(),
158+
(jlong) (info.created.time_since_epoch().count()),
159+
jni_utils::JavaLocalRef(env, util::serialize_user_pic(env, info.profile_picture)).get()
160+
);
161+
}
162+
163+
session::config::blinded_contact_info deserialize_blinded_contact(JNIEnv *env, jobject jInfo) {
164+
jni_utils::JavaLocalRef<jclass> clazz(env, env->GetObjectClass(jInfo));
165+
auto idField = env->GetFieldID(clazz.get(), "id", "Ljava/lang/String;");
166+
auto communityServerField = env->GetFieldID(clazz.get(), "communityServer", "Ljava/lang/String;");
167+
auto communityPubkeyField = env->GetFieldID(clazz.get(), "communityServerPubKeyHex", "Ljava/lang/String;");
168+
auto nameField = env->GetFieldID(clazz.get(), "name", "Ljava/lang/String;");
169+
auto createdEpochSecondsField = env->GetFieldID(clazz.get(), "createdEpochSeconds", "J");
170+
auto profilePicField = env->GetFieldID(clazz.get(), "profilePic", "Lnetwork/loki/messenger/libsession_util/util/UserPic;");
171+
172+
session::config::blinded_contact_info info;
173+
info.set_base_url(jni_utils::JavaStringRef(env, (jstring) env->GetObjectField(jInfo, communityServerField)).view());
174+
info.set_pubkey(jni_utils::JavaStringRef(env, (jstring) env->GetObjectField(jInfo, communityPubkeyField)).view());
175+
info.set_room(jni_utils::JavaStringRef(env, (jstring) env->GetObjectField(jInfo, idField)).view());
176+
info.created = std::chrono::sys_seconds{std::chrono::seconds{env->GetLongField(jInfo, createdEpochSecondsField)}};
177+
info.profile_picture = util::deserialize_user_pic(env, jni_utils::JavaLocalRef(env, env->GetObjectField(jInfo, profilePicField)).get());
178+
179+
return info;
180+
}
181+
182+
extern "C"
183+
JNIEXPORT jobject JNICALL
184+
Java_network_loki_messenger_libsession_1util_Contacts_getOrConstructBlinded(JNIEnv *env,
185+
jobject thiz,
186+
jstring community_server_url,
187+
jstring community_server_pub_key_hex,
188+
jstring blinded_id) {
189+
return serialize_blinded_contact(env, ptrToContacts(env, thiz)->get_or_construct_blinded(
190+
jni_utils::JavaStringRef(env, community_server_url).view(),
191+
jni_utils::JavaStringRef(env, community_server_pub_key_hex).view(),
192+
jni_utils::JavaStringRef(env, blinded_id).view(),
193+
false
194+
));
195+
}
196+
197+
extern "C"
198+
JNIEXPORT void JNICALL
199+
Java_network_loki_messenger_libsession_1util_Contacts_setBlinded(JNIEnv *env, jobject thiz,
200+
jobject contact) {
201+
ptrToContacts(env, thiz)->set_blinded(
202+
deserialize_blinded_contact(env, contact)
203+
);
204+
}
205+
206+
extern "C"
207+
JNIEXPORT void JNICALL
208+
Java_network_loki_messenger_libsession_1util_Contacts_eraseBlinded(JNIEnv *env, jobject thiz,
209+
jstring community_server_url,
210+
jstring blinded_id) {
211+
ptrToContacts(env, thiz)->erase_blinded(
212+
jni_utils::JavaStringRef(env, community_server_url).view(),
213+
jni_utils::JavaStringRef(env, blinded_id).view(),
214+
false,
215+
);
216+
}
217+
218+
extern "C"
219+
JNIEXPORT jobject JNICALL
220+
Java_network_loki_messenger_libsession_1util_Contacts_allBlinded(JNIEnv *env, jobject thiz) {
221+
return jni_utils::jlist_from_collection(
222+
env,
223+
ptrToContacts(env, thiz)->blinded(),
224+
serialize_blinded_contact
225+
);
226+
}
227+
228+
extern "C"
229+
JNIEXPORT jobject JNICALL
230+
Java_network_loki_messenger_libsession_1util_Contacts_getBlinded(JNIEnv *env,
231+
jobject thiz,
232+
jstring blinded_id) {
233+
auto result = ptrToContacts(env, thiz)->get_blinded(
234+
jni_utils::JavaStringRef(env, blinded_id).view(),
235+
false
236+
);
237+
238+
if (result) {
239+
return serialize_blinded_contact(env, *result);
240+
} else {
241+
return nullptr;
242+
}
243+
}

library/src/main/cpp/contacts.h

Lines changed: 3 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -2,108 +2,11 @@
22
#define SESSION_ANDROID_CONTACTS_H
33

44
#include <jni.h>
5-
#include <vector>
65
#include "session/config/contacts.hpp"
7-
#include "util.h"
8-
#include "jni_utils.h"
96

10-
inline session::config::Contacts *ptrToContacts(JNIEnv *env, jobject obj) {
11-
auto contactsClass = jni_utils::JavaLocalRef(env, env->FindClass("network/loki/messenger/libsession_util/Contacts"));
12-
jfieldID pointerField = env->GetFieldID(contactsClass.get(), "pointer", "J");
13-
return (session::config::Contacts *) env->GetLongField(obj, pointerField);
14-
}
15-
16-
inline jobject serialize_contact(JNIEnv *env, session::config::contact_info info) {
17-
auto contactClass = jni_utils::JavaLocalRef(env, env->FindClass("network/loki/messenger/libsession_util/util/Contact"));
18-
jmethodID constructor = env->GetMethodID(contactClass.get(), "<init>", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZZLnetwork/loki/messenger/libsession_util/util/UserPic;JLnetwork/loki/messenger/libsession_util/util/ExpiryMode;)V");
19-
auto id = jni_utils::JavaLocalRef(env, env->NewStringUTF(info.session_id.data()));
20-
auto name = jni_utils::JavaLocalRef(env, env->NewStringUTF(info.name.data()));
21-
auto nickname = jni_utils::JavaLocalRef(env, env->NewStringUTF(info.nickname.data()));
22-
jboolean approved, approvedMe, blocked;
23-
approved = info.approved;
24-
approvedMe = info.approved_me;
25-
blocked = info.blocked;
26-
auto created = info.created;
27-
auto profilePic = jni_utils::JavaLocalRef(env, util::serialize_user_pic(env, info.profile_picture));
28-
jobject returnObj = env->NewObject(contactClass.get(), constructor, id.get(), name.get(), nickname.get(), approved,
29-
approvedMe, blocked, profilePic.get(), (jlong)info.priority,
30-
util::serialize_expiry(env, info.exp_mode, info.exp_timer));
31-
return returnObj;
32-
}
33-
34-
inline session::config::contact_info deserialize_contact(JNIEnv *env, jobject info, session::config::Contacts *conf) {
35-
jclass contactClass = env->FindClass("network/loki/messenger/libsession_util/util/Contact");
36-
37-
jfieldID getId, getName, getNick, getApproved, getApprovedMe, getBlocked, getUserPic, getPriority, getExpiry, getHidden;
38-
getId = env->GetFieldID(contactClass, "id", "Ljava/lang/String;");
39-
getName = env->GetFieldID(contactClass, "name", "Ljava/lang/String;");
40-
getNick = env->GetFieldID(contactClass, "nickname", "Ljava/lang/String;");
41-
getApproved = env->GetFieldID(contactClass, "approved", "Z");
42-
getApprovedMe = env->GetFieldID(contactClass, "approvedMe", "Z");
43-
getBlocked = env->GetFieldID(contactClass, "blocked", "Z");
44-
getUserPic = env->GetFieldID(contactClass, "profilePicture",
45-
"Lnetwork/loki/messenger/libsession_util/util/UserPic;");
46-
getPriority = env->GetFieldID(contactClass, "priority", "J");
47-
getExpiry = env->GetFieldID(contactClass, "expiryMode", "Lnetwork/loki/messenger/libsession_util/util/ExpiryMode;");
48-
auto account_id = jni_utils::JavaLocalRef(env, static_cast<jstring>(env->GetObjectField(info, getId)));
49-
auto name = jni_utils::JavaLocalRef(env, static_cast<jstring>(env->GetObjectField(info, getName)));
50-
auto nickname = jni_utils::JavaLocalRef(env, static_cast<jstring>(env->GetObjectField(info, getNick)));
51-
bool approved, approvedMe, blocked, hidden;
52-
int priority = env->GetLongField(info, getPriority);
53-
approved = env->GetBooleanField(info, getApproved);
54-
approvedMe = env->GetBooleanField(info, getApprovedMe);
55-
blocked = env->GetBooleanField(info, getBlocked);
56-
auto user_pic = jni_utils::JavaLocalRef(env, env->GetObjectField(info, getUserPic));
57-
auto expiry_mode = jni_utils::JavaLocalRef(env, env->GetObjectField(info, getExpiry));
58-
59-
auto expiry_pair = util::deserialize_expiry(env, expiry_mode.get());
60-
61-
std::string url;
62-
std::vector<unsigned char> key;
63-
64-
if (user_pic.get() != nullptr) {
65-
auto deserialized_pic = util::deserialize_user_pic(env, user_pic.get());
66-
auto url_jstring = deserialized_pic.first;
67-
auto url_bytes = env->GetStringUTFChars(url_jstring, nullptr);
68-
url = std::string(url_bytes);
69-
env->ReleaseStringUTFChars(url_jstring, url_bytes);
70-
key = util::vector_from_bytes(env, deserialized_pic.second);
71-
}
72-
73-
auto account_id_bytes = env->GetStringUTFChars(account_id.get(), nullptr);
74-
auto name_bytes = name.get() ? env->GetStringUTFChars(name.get(), nullptr) : nullptr;
75-
auto nickname_bytes = nickname.get() ? env->GetStringUTFChars(nickname.get(), nullptr) : nullptr;
76-
77-
auto contact_info = conf->get_or_construct(account_id_bytes);
78-
if (name_bytes) {
79-
contact_info.name = name_bytes;
80-
}
81-
if (nickname_bytes) {
82-
contact_info.nickname = nickname_bytes;
83-
}
84-
contact_info.approved = approved;
85-
contact_info.approved_me = approvedMe;
86-
contact_info.blocked = blocked;
87-
if (!url.empty() && !key.empty()) {
88-
contact_info.profile_picture = session::config::profile_pic(url, key);
89-
} else {
90-
contact_info.profile_picture = session::config::profile_pic();
91-
}
92-
93-
env->ReleaseStringUTFChars(account_id.get(), account_id_bytes);
94-
if (name_bytes) {
95-
env->ReleaseStringUTFChars(name.get(), name_bytes);
96-
}
97-
if (nickname_bytes) {
98-
env->ReleaseStringUTFChars(nickname.get(), nickname_bytes);
99-
}
100-
101-
contact_info.priority = priority;
102-
contact_info.exp_mode = expiry_pair.first;
103-
contact_info.exp_timer = std::chrono::seconds(expiry_pair.second);
104-
105-
return contact_info;
106-
}
7+
session::config::Contacts *ptrToContacts(JNIEnv *env, jobject obj);
8+
jobject serialize_contact(JNIEnv *env, session::config::contact_info info);
9+
session::config::contact_info deserialize_contact(JNIEnv *env, jobject info, session::config::Contacts *conf);
10710

10811

10912
#endif //SESSION_ANDROID_CONTACTS_H

library/src/main/cpp/group_info.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,11 +157,7 @@ Java_network_loki_messenger_libsession_1util_GroupInfoConfig_setProfilePic(JNIEn
157157
jobject new_profile_pic) {
158158
std::lock_guard guard{util::util_mutex_};
159159
auto group_info = ptrToInfo(env, thiz);
160-
auto user_pic = util::deserialize_user_pic(env, new_profile_pic);
161-
auto url = env->GetStringUTFChars(user_pic.first, nullptr);
162-
auto key = util::vector_from_bytes(env, user_pic.second);
163-
group_info->set_profile_pic(url, key);
164-
env->ReleaseStringUTFChars(user_pic.first, url);
160+
group_info->set_profile_pic(util::deserialize_user_pic(env, new_profile_pic));
165161
}
166162

167163
extern "C"

library/src/main/cpp/group_members.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -199,12 +199,7 @@ JNIEXPORT void JNICALL
199199
Java_network_loki_messenger_libsession_1util_util_GroupMember_setProfilePic(JNIEnv *env,
200200
jobject thiz,
201201
jobject pic) {
202-
const auto [jurl, jkey] = util::deserialize_user_pic(env, pic);
203-
auto url = util::string_from_jstring(env, jurl);
204-
auto key = util::vector_from_bytes(env, jkey);
205-
auto &picture = ptrToMember(env, thiz)->profile_picture;
206-
picture.url = url;
207-
picture.key = key;
202+
ptrToMember(env, thiz)->profile_picture = util::deserialize_user_pic(env, pic);
208203
}
209204

210205
extern "C"

library/src/main/cpp/user_profile.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,7 @@ JNIEXPORT void JNICALL
3939
Java_network_loki_messenger_libsession_1util_UserProfile_setPic(JNIEnv *env, jobject thiz,
4040
jobject user_pic) {
4141
std::lock_guard lock{util::util_mutex_};
42-
auto profile = ptrToProfile(env, thiz);
43-
auto pic = util::deserialize_user_pic(env, user_pic);
44-
auto url = env->GetStringUTFChars(pic.first, nullptr);
45-
auto key = util::vector_from_bytes(env, pic.second);
46-
profile->set_profile_pic(url, key);
47-
env->ReleaseStringUTFChars(pic.first, url);
42+
ptrToProfile(env, thiz)->set_profile_pic(util::deserialize_user_pic(env, user_pic));
4843
}
4944

5045
}

library/src/main/cpp/util.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,12 @@ namespace util {
6666
);
6767
}
6868

69-
std::pair<jstring, jbyteArray> deserialize_user_pic(JNIEnv *env, jobject user_pic) {
70-
auto userPicClass = jni_utils::JavaLocalRef(env, env->GetObjectClass(user_pic));
69+
70+
session::config::profile_pic deserialize_user_pic(JNIEnv *env, jobject user_pic) {
71+
jni_utils::JavaLocalRef clazz(env, env->GetObjectClass(user_pic));
7172
return {
72-
static_cast<jstring>(env->CallObjectMethod(user_pic, env->GetMethodID(userPicClass.get(), "getUrl", "()Ljava/lang/String;"))),
73-
static_cast<jbyteArray>(env->CallObjectMethod(user_pic, env->GetMethodID(userPicClass.get(), "getKeyAsByteArray", "()[B")))
73+
jni_utils::JavaStringRef(env, (jstring) (env->CallObjectMethod(user_pic, env->GetMethodID(clazz.get(), "getUrl", "Ljava/lang/String;")))).view(),
74+
util::vector_from_bytes(env, static_cast<jbyteArray>(env->CallObjectMethod(user_pic, env->GetMethodID(clazz.get(), "getKeyAsByteArray", "()[B"))))
7475
};
7576
}
7677

0 commit comments

Comments
 (0)