mirror of
https://github.com/oxen-io/session-android.git
synced 2025-12-31 04:56:11 +00:00
feat: finish user group wrappers and start volatile convo
This commit is contained in:
@@ -12,7 +12,6 @@ import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.session.libsignal.utilities.Hex
|
||||
import org.session.libsignal.utilities.Log
|
||||
import org.session.libsignal.utilities.toHexString
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
@@ -655,4 +654,17 @@ class InstrumentedTests {
|
||||
assertThat(keys.pendingKey(), notNullValue())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testGroupMembership() {
|
||||
val (userPublic, userSecret) = keyPair
|
||||
val userCurve = Sodium.ed25519PkToCurve25519(userPublic)
|
||||
val groupConfig = UserGroupsConfig.newInstance(userSecret)
|
||||
val group = groupConfig.createGroup()
|
||||
val groupSecret = group.adminKey
|
||||
val groupPublic = Hex.fromStringCondensed(group.groupSessionId.publicKey)
|
||||
groupConfig.set(group)
|
||||
val allClosedGroups = groupConfig.all()
|
||||
assertThat(allClosedGroups, equalTo(1))
|
||||
}
|
||||
|
||||
}
|
||||
@@ -349,4 +349,34 @@ Java_network_loki_messenger_libsession_1util_ConversationVolatileConfig_allLegac
|
||||
for (auto contact = convos->begin_legacy_groups(); contact != convos->end(); ++contact)
|
||||
env->CallObjectMethod(our_stack, push, serialize_legacy_group(env, *contact));
|
||||
return our_stack;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_ConversationVolatileConfig_getClosedGroup(JNIEnv *env,
|
||||
jobject thiz,
|
||||
jstring session_id) {
|
||||
auto config = ptrToConvoInfo(env, thiz);
|
||||
auto session_id_bytes = env->GetStringUTFChars(session_id, nullptr);
|
||||
auto group = config->get_group(session_id_bytes);
|
||||
env->ReleaseStringUTFChars(session_id, session_id_bytes);
|
||||
if (group) {
|
||||
auto serialized = serialize_closed_group(env, *group);
|
||||
return serialized;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_ConversationVolatileConfig_getOrConstructClosedGroup(
|
||||
JNIEnv *env, jobject thiz, jstring session_id) {
|
||||
// TODO: implement getOrConstructClosedGroup()
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_ConversationVolatileConfig_eraseClosedGroup(
|
||||
JNIEnv *env, jobject thiz, jstring session_id) {
|
||||
// TODO: implement eraseClosedGroup()
|
||||
}
|
||||
@@ -42,6 +42,15 @@ inline jobject serialize_legacy_group(JNIEnv *env, session::config::convo::legac
|
||||
return serialized;
|
||||
}
|
||||
|
||||
inline jobject serialize_closed_group(JNIEnv* env, session::config::convo::group group) {
|
||||
jclass clazz = env->FindClass("network/loki/messenger/libsession_util/util/Conversation$ClosedGroup");
|
||||
jmethodID constructor = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;JZ)V");
|
||||
auto session_id = env->NewStringUTF(group.id.data());
|
||||
auto last_read = group.last_read;
|
||||
auto unread = group.unread;
|
||||
return env->NewObject(clazz, constructor, session_id, last_read, unread);
|
||||
}
|
||||
|
||||
inline jobject serialize_any(JNIEnv *env, session::config::convo::any any) {
|
||||
if (auto* dm = std::get_if<session::config::convo::one_to_one>(&any)) {
|
||||
return serialize_one_to_one(env, *dm);
|
||||
|
||||
@@ -203,6 +203,7 @@ inline jobject iterator_as_java_stack(JNIEnv *env, const session::config::UserGr
|
||||
} else if (auto* community = std::get_if<session::config::community_info>(&item)) {
|
||||
serialized = serialize_community_info(env, *community);
|
||||
} else if (auto* closed = std::get_if<session::config::group_info>(&item)) {
|
||||
LOGD("Item is closed group");
|
||||
serialized = serialize_closed_group_info(env, *closed);
|
||||
}
|
||||
if (serialized != nullptr) {
|
||||
@@ -218,6 +219,8 @@ JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_UserGroupsConfig_all(JNIEnv *env, jobject thiz) {
|
||||
std::lock_guard lock{util::util_mutex_};
|
||||
auto conf = ptrToUserGroups(env, thiz);
|
||||
bool isFin = conf->begin().done();
|
||||
LOGD("Group iterator has more: %d", isFin);
|
||||
jobject all_stack = iterator_as_java_stack(env, conf->begin(), conf->end());
|
||||
return all_stack;
|
||||
}
|
||||
@@ -325,7 +328,9 @@ Java_network_loki_messenger_libsession_1util_UserGroupsConfig_allClosedGroupInfo
|
||||
jobject thiz) {
|
||||
std::lock_guard lock{util::util_mutex_};
|
||||
auto conf = ptrToUserGroups(env, thiz);
|
||||
return nullptr;
|
||||
auto closed_group_stack = iterator_as_java_stack(env, conf->begin_groups(), conf->end());
|
||||
|
||||
return closed_group_stack;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
@@ -341,7 +346,7 @@ Java_network_loki_messenger_libsession_1util_UserGroupsConfig_createGroup(JNIEnv
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_UserGroupsConfig_sizeClosedGroup(JNIEnv *env,
|
||||
Java_network_loki_messenger_libsession_1util_UserGroupsConfig_sizeClosedGroup(JNIEnv *env,
|
||||
jobject thiz) {
|
||||
std::lock_guard guard{util::util_mutex_};
|
||||
auto config = ptrToUserGroups(env, thiz);
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
#include "util.h"
|
||||
#include "conversation.h"
|
||||
#include "session/config/user_groups.hpp"
|
||||
#include <android/log.h>
|
||||
|
||||
inline session::config::UserGroups* ptrToUserGroups(JNIEnv *env, jobject obj) {
|
||||
jclass configClass = env->FindClass("network/loki/messenger/libsession_util/UserGroupsConfig");
|
||||
|
||||
@@ -11,6 +11,13 @@
|
||||
#include "session/config/profile_pic.hpp"
|
||||
#include "session/config/user_groups.hpp"
|
||||
#include "session/config/expiring.hpp"
|
||||
#include <android/log.h>
|
||||
|
||||
#define LOG_TAG "libsession-jni"
|
||||
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
|
||||
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__)
|
||||
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
|
||||
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
|
||||
|
||||
namespace util {
|
||||
extern std::mutex util_mutex_;
|
||||
|
||||
@@ -158,8 +158,12 @@ class ConversationVolatileConfig(pointer: Long): ConfigBase(pointer) {
|
||||
external fun getLegacyClosedGroup(groupId: String): Conversation.LegacyGroup?
|
||||
external fun getOrConstructLegacyGroup(groupId: String): Conversation.LegacyGroup
|
||||
external fun eraseLegacyClosedGroup(groupId: String): Boolean
|
||||
external fun erase(conversation: Conversation): Boolean
|
||||
|
||||
external fun getClosedGroup(sessionId: String): Conversation.ClosedGroup?
|
||||
external fun getOrConstructClosedGroup(sessionId: String): Conversation.ClosedGroup
|
||||
external fun eraseClosedGroup(sessionId: String): Boolean
|
||||
|
||||
external fun erase(conversation: Conversation): Boolean
|
||||
external fun set(toStore: Conversation)
|
||||
|
||||
/**
|
||||
|
||||
@@ -22,4 +22,10 @@ sealed class Conversation {
|
||||
override var lastRead: Long,
|
||||
override var unread: Boolean
|
||||
): Conversation()
|
||||
|
||||
data class ClosedGroup(
|
||||
val sessionId: String,
|
||||
override var lastRead: Long,
|
||||
override var unread: Boolean
|
||||
): Conversation()
|
||||
}
|
||||
Reference in New Issue
Block a user