feat: finish group info wrappers
This commit is contained in:
parent
9bf20a18c4
commit
efc88b45bb
|
@ -5,25 +5,196 @@
|
|||
|
||||
extern "C"
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_newInstance__Ljava_lang_String_2(
|
||||
JNIEnv *env, jobject thiz, jstring pub_key_hex) {
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_00024Companion_newInstance___3B(
|
||||
JNIEnv *env, jobject thiz, jbyteArray pub_key) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto pub_key_string = util::ustring_from_jstring(env, pub_key_hex);
|
||||
auto group_info = session::config::groups::Info(pub_key_string, std::nullopt, std::nullopt);
|
||||
// TODO
|
||||
auto pub_key_bytes = util::ustring_from_bytes(env, pub_key);
|
||||
auto* group_info = new session::config::groups::Info(pub_key_bytes, std::nullopt, std::nullopt);
|
||||
|
||||
jclass groupInfoClass = env->FindClass("network/loki/messenger/libsession_util/GroupInfoConfig");
|
||||
jmethodID constructor = env->GetMethodID(groupInfoClass, "<init>", "(J)V");
|
||||
jobject newConfig = env->NewObject(groupInfoClass, constructor, reinterpret_cast<jlong>(group_info));
|
||||
|
||||
return newConfig;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_newInstance__Ljava_lang_String_2_3B(
|
||||
JNIEnv *env, jobject thiz, jstring pub_key_hex, jbyteArray secret_key) {
|
||||
// TODO: implement newInstance()
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_00024Companion_newInstance___3B_3B(
|
||||
JNIEnv *env, jobject thiz, jbyteArray pub_key, jbyteArray secret_key) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto pub_key_bytes = util::ustring_from_bytes(env, pub_key);
|
||||
auto secret_key_bytes = util::ustring_from_bytes(env, secret_key);
|
||||
auto* group_info = new session::config::groups::Info(pub_key_bytes, secret_key_bytes, std::nullopt);
|
||||
|
||||
jclass groupInfoClass = env->FindClass("network/loki/messenger/libsession_util/GroupInfoConfig");
|
||||
jmethodID constructor = env->GetMethodID(groupInfoClass, "<init>", "(J)V");
|
||||
jobject newConfig = env->NewObject(groupInfoClass, constructor, reinterpret_cast<jlong>(group_info));
|
||||
|
||||
return newConfig;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_newInstance__Ljava_lang_String_2_3B_3B(
|
||||
JNIEnv *env, jobject thiz, jstring pub_key_hex, jbyteArray secret_key,
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_00024Companion_newInstance___3B_3B_3B(
|
||||
JNIEnv *env, jobject thiz, jbyteArray pub_key, jbyteArray secret_key,
|
||||
jbyteArray initial_dump) {
|
||||
// TODO: implement newInstance()
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto pub_key_bytes = util::ustring_from_bytes(env, pub_key);
|
||||
auto secret_key_bytes = util::ustring_from_bytes(env, secret_key);
|
||||
auto initial_dump_bytes = util::ustring_from_bytes(env, initial_dump);
|
||||
auto* group_info = new session::config::groups::Info(pub_key_bytes, secret_key_bytes, initial_dump_bytes);
|
||||
|
||||
jclass groupInfoClass = env->FindClass("network/loki/messenger/libsession_util/GroupInfoConfig");
|
||||
jmethodID constructor = env->GetMethodID(groupInfoClass, "<init>", "(J)V");
|
||||
jobject newConfig = env->NewObject(groupInfoClass, constructor, reinterpret_cast<jlong>(group_info));
|
||||
|
||||
return newConfig;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT void JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_destroyGroup(JNIEnv *env,
|
||||
jobject thiz) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto group_info = ptrToInfo(env, thiz);
|
||||
group_info->destroy_group();
|
||||
}
|
||||
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_getCreated(JNIEnv *env, jobject thiz) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto group_info = ptrToInfo(env, thiz);
|
||||
return util::jlongFromOptional(env, group_info->get_created());
|
||||
}
|
||||
extern "C"
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_getDeleteAttachmentsBefore(JNIEnv *env,
|
||||
jobject thiz) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto group_info = ptrToInfo(env, thiz);
|
||||
return util::jlongFromOptional(env, group_info->get_delete_attach_before());
|
||||
}
|
||||
extern "C"
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_getDeleteBefore(JNIEnv *env,
|
||||
jobject thiz) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto group_info = ptrToInfo(env, thiz);
|
||||
return util::jlongFromOptional(env, group_info->get_delete_before());
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_getExpiryTimer(JNIEnv *env,
|
||||
jobject thiz) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto group_info = ptrToInfo(env, thiz);
|
||||
auto timer = group_info->get_expiry_timer();
|
||||
if (!timer) {
|
||||
return nullptr;
|
||||
}
|
||||
long long in_seconds = timer->count();
|
||||
return util::jlongFromOptional(env, std::optional{in_seconds});
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jstring JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_getName(JNIEnv *env, jobject thiz) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto group_info = ptrToInfo(env, thiz);
|
||||
return util::jstringFromOptional(env, group_info->get_name());
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_getProfilePic(JNIEnv *env,
|
||||
jobject thiz) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto group_info = ptrToInfo(env, thiz);
|
||||
return util::serialize_user_pic(env, group_info->get_profile_pic());
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_isDestroyed(JNIEnv *env,
|
||||
jobject thiz) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto group_info = ptrToInfo(env, thiz);
|
||||
return group_info->is_destroyed();
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT void JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_setCreated(JNIEnv *env, jobject thiz,
|
||||
jlong created_at) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto group_info = ptrToInfo(env, thiz);
|
||||
group_info->set_created(created_at);
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT void JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_setDeleteAttachmentsBefore(JNIEnv *env,
|
||||
jobject thiz,
|
||||
jlong delete_before) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto group_info = ptrToInfo(env, thiz);
|
||||
group_info->set_delete_attach_before(delete_before);
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT void JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_setDeleteBefore(JNIEnv *env,
|
||||
jobject thiz,
|
||||
jlong delete_before) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto group_info = ptrToInfo(env, thiz);
|
||||
group_info->set_delete_before(delete_before);
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT void JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_setExpiryTimer(JNIEnv *env,
|
||||
jobject thiz,
|
||||
jlong expire_seconds) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto group_info = ptrToInfo(env, thiz);
|
||||
group_info->set_expiry_timer(std::chrono::seconds{expire_seconds})
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT void JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_setName(JNIEnv *env, jobject thiz,
|
||||
jstring new_name) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto group_info = ptrToInfo(env, thiz);
|
||||
auto bytes = env->GetStringUTFChars(new_name, nullptr);
|
||||
group_info->set_name(bytes);
|
||||
env->ReleaseStringUTFChars(new_name, bytes);
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT void JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_setProfilePic(JNIEnv *env,
|
||||
jobject thiz,
|
||||
jobject new_profile_pic) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto group_info = ptrToInfo(env, thiz);
|
||||
auto user_pic = util::deserialize_user_pic(env, new_profile_pic);
|
||||
auto url = env->GetStringUTFChars(user_pic.first, nullptr);
|
||||
auto key = util::ustring_from_bytes(env, user_pic.second);
|
||||
group_info->set_profile_pic(url, key);
|
||||
env->ReleaseStringUTFChars(user_pic.first, url);
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupInfoConfig_storageNamespace(JNIEnv *env,
|
||||
jobject thiz) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto group_info = ptrToInfo(env, thiz);
|
||||
return static_cast<jlong>(group_info->storage_namespace());
|
||||
}
|
|
@ -3,4 +3,10 @@
|
|||
|
||||
#include "util.h"
|
||||
|
||||
inline session::config::groups::Info* ptrToInfo(JNIEnv* env, jobject obj) {
|
||||
jclass configClass = env->FindClass("network/loki/messenger/libsession_util/GroupInfoConfig");
|
||||
jfieldID pointerField = env->GetFieldID(configClass, "pointer", "J");
|
||||
return (session::config::groups::Info*) env->GetLongField(obj, pointerField);
|
||||
}
|
||||
|
||||
#endif //SESSION_ANDROID_GROUP_INFO_H
|
||||
|
|
|
@ -113,6 +113,23 @@ namespace util {
|
|||
return std::pair(session::config::expiration_mode::none, 0);
|
||||
}
|
||||
|
||||
jobject jlongFromOptional(JNIEnv* env, std::optional<long long> optional) {
|
||||
if (!optional) {
|
||||
return nullptr;
|
||||
}
|
||||
jclass longClass = env->FindClass("java/lang/Long");
|
||||
jmethodID constructor = env->GetMethodID(longClass, "<init>", "(J)V");
|
||||
jobject returned = env->NewObject(longClass, constructor, (jlong)*optional);
|
||||
return returned;
|
||||
}
|
||||
|
||||
jstring jstringFromOptional(JNIEnv* env, std::optional<std::string_view> optional) {
|
||||
if (!optional) {
|
||||
return nullptr;
|
||||
}
|
||||
return env->NewStringUTF(optional->data());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extern "C"
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include <array>
|
||||
#include <optional>
|
||||
#include "session/types.hpp"
|
||||
#include "session/config/groups/info.hpp"
|
||||
#include "session/config/profile_pic.hpp"
|
||||
#include "session/config/user_groups.hpp"
|
||||
#include "session/config/expiring.hpp"
|
||||
|
@ -20,6 +21,8 @@ namespace util {
|
|||
session::config::community deserialize_base_community(JNIEnv *env, jobject base_community);
|
||||
jobject serialize_expiry(JNIEnv *env, const session::config::expiration_mode& mode, const std::chrono::seconds& time_seconds);
|
||||
std::pair<session::config::expiration_mode, long> deserialize_expiry(JNIEnv *env, jobject expiry_mode);
|
||||
jobject jlongFromOptional(JNIEnv* env, std::optional<long long> optional);
|
||||
jstring jstringFromOptional(JNIEnv* env, std::optional<std::string_view> optional);
|
||||
}
|
||||
|
||||
#endif
|
|
@ -201,11 +201,34 @@ class UserGroupsConfig(pointer: Long): ConfigBase(pointer) {
|
|||
}
|
||||
|
||||
class GroupInfoConfig(pointer: Long): ConfigBase(pointer) {
|
||||
companion object {}
|
||||
init {
|
||||
System.loadLibrary("session_util")
|
||||
companion object {
|
||||
init {
|
||||
System.loadLibrary("session_util")
|
||||
}
|
||||
|
||||
external fun newInstance(pubKey: ByteArray): GroupInfoConfig
|
||||
external fun newInstance(pubKey: ByteArray, secretKey: ByteArray?): GroupInfoConfig
|
||||
external fun newInstance(
|
||||
pubKey: ByteArray,
|
||||
secretKey: ByteArray?,
|
||||
initialDump: ByteArray
|
||||
): GroupInfoConfig
|
||||
}
|
||||
external fun newInstance(pubKeyHex: String): GroupInfoConfig
|
||||
external fun newInstance(pubKeyHex: String, secretKey: ByteArray?): GroupInfoConfig
|
||||
external fun newInstance(pubKeyHex: String, secretKey: ByteArray?, initialDump: ByteArray): GroupInfoConfig
|
||||
|
||||
external fun destroyGroup()
|
||||
external fun getCreated(): Long?
|
||||
external fun getDeleteAttachmentsBefore(): Long?
|
||||
external fun getDeleteBefore(): Long?
|
||||
external fun getExpiryTimer(): Long? // TODO: maybe refactor this to new type when disappearing messages merged
|
||||
external fun getName(): String?
|
||||
external fun getProfilePic(): UserPic
|
||||
external fun isDestroyed(): Boolean
|
||||
external fun setCreated(createdAt: Long)
|
||||
external fun setDeleteAttachmentsBefore(deleteBefore: Long)
|
||||
external fun setDeleteBefore(deleteBefore: Long)
|
||||
external fun setExpiryTimer(expireSeconds: Long)
|
||||
external fun setName(newName: String)
|
||||
external fun setProfilePic(newProfilePic: UserPic)
|
||||
external fun storageNamespace(): Long
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue