feat: update shared library to use priority only, fix compile errors, fix group member sync problem

This commit is contained in:
0x330a 2023-04-04 17:43:21 +10:00
parent 5acaffda56
commit 6193fe4668
No known key found for this signature in database
GPG Key ID: 267811D6E6A2698C
10 changed files with 41 additions and 57 deletions

View File

@ -117,10 +117,12 @@ class Storage(context: Context, helper: SQLCipherOpenHelper, private val configF
// don't update our own address into the contacts DB // don't update our own address into the contacts DB
if (getUserPublicKey() != address.serialize()) { if (getUserPublicKey() != address.serialize()) {
val contacts = configFactory.contacts ?: return val contacts = configFactory.contacts ?: return
contacts.upsertContact(address.serialize()) contacts.upsertContact(address.serialize()) {
priority = ConfigBase.PRIORITY_VISIBLE
}
} else { } else {
val userProfile = configFactory.user ?: return val userProfile = configFactory.user ?: return
userProfile.setNtsHidden(false) userProfile.setNtsPriority(ConfigBase.PRIORITY_VISIBLE)
} }
val newVolatileParams = volatile.getOrConstructOneToOne(address.serialize()).copy( val newVolatileParams = volatile.getOrConstructOneToOne(address.serialize()).copy(
lastRead = SnodeAPI.nowWithOffset lastRead = SnodeAPI.nowWithOffset
@ -146,11 +148,11 @@ class Storage(context: Context, helper: SQLCipherOpenHelper, private val configF
if (getUserPublicKey() != address.serialize()) { if (getUserPublicKey() != address.serialize()) {
val contacts = configFactory.contacts ?: return val contacts = configFactory.contacts ?: return
contacts.upsertContact(address.serialize()) { contacts.upsertContact(address.serialize()) {
// hidden = true TODO: maybe this? priority = ConfigBase.PRIORITY_HIDDEN
} }
} else { } else {
val userProfile = configFactory.user ?: return val userProfile = configFactory.user ?: return
userProfile.setNtsHidden(true) userProfile.setNtsPriority(ConfigBase.PRIORITY_HIDDEN)
} }
} }
ConfigurationMessageUtilities.forceSyncConfigurationNowIfNeeded(context) ConfigurationMessageUtilities.forceSyncConfigurationNowIfNeeded(context)
@ -414,7 +416,7 @@ class Storage(context: Context, helper: SQLCipherOpenHelper, private val configF
profileManager.setProfileKey(context, recipient, userPic.key) profileManager.setProfileKey(context, recipient, userPic.key)
setUserProfilePictureURL(userPic.url) setUserProfilePictureURL(userPic.url)
} }
if (userProfile.getNtsHidden()) { if (userProfile.getNtsPriority() == ConfigBase.PRIORITY_HIDDEN) {
// delete nts thread if needed // delete nts thread if needed
val ourThread = getThreadId(recipient) ?: return val ourThread = getThreadId(recipient) ?: return
deleteConversation(ourThread) deleteConversation(ourThread)
@ -524,8 +526,8 @@ class Storage(context: Context, helper: SQLCipherOpenHelper, private val configF
val existingThread = existingGroup?.let { getThreadId(existingGroup.encodedId) } val existingThread = existingGroup?.let { getThreadId(existingGroup.encodedId) }
if (existingGroup != null) { if (existingGroup != null) {
Log.d("Loki-DBG", "Existing closed group, don't add") Log.d("Loki-DBG", "Existing closed group, don't add")
if (group.hidden && existingThread != null) { if (group.priority == ConfigBase.PRIORITY_HIDDEN && existingThread != null) {
threadDb.setThreadArchived(existingThread) threadDb.deleteConversation(existingThread)
} else if (existingThread == null) { } else if (existingThread == null) {
Log.w("Loki-DBG", "Existing group had no thread to hide") Log.w("Loki-DBG", "Existing group had no thread to hide")
} }
@ -766,7 +768,7 @@ class Storage(context: Context, helper: SQLCipherOpenHelper, private val configF
sessionId = groupPublicKey, sessionId = groupPublicKey,
name = name, name = name,
members = members, members = members,
hidden = false, priority = ConfigBase.PRIORITY_VISIBLE,
encPubKey = encryptionKeyPair.publicKey.serialize(), encPubKey = encryptionKeyPair.publicKey.serialize(),
encSecKey = encryptionKeyPair.privateKey.serialize(), encSecKey = encryptionKeyPair.privateKey.serialize(),
disappearingTimer = 0L disappearingTimer = 0L
@ -801,7 +803,7 @@ class Storage(context: Context, helper: SQLCipherOpenHelper, private val configF
members = membersMap, members = membersMap,
encPubKey = latestKeyPair.publicKey.serialize(), encPubKey = latestKeyPair.publicKey.serialize(),
encSecKey = latestKeyPair.privateKey.serialize(), encSecKey = latestKeyPair.privateKey.serialize(),
priority = if (isPinned(threadID)) 1 else 0, priority = if (isPinned(threadID)) ConfigBase.PRIORITY_PINNED else ConfigBase.PRIORITY_VISIBLE,
disappearingTimer = recipientSettings.expireMessages.toLong() disappearingTimer = recipientSettings.expireMessages.toLong()
) )
userGroups.set(groupInfo) userGroups.set(groupInfo)
@ -1070,7 +1072,7 @@ class Storage(context: Context, helper: SQLCipherOpenHelper, private val configF
profileManager.setUnidentifiedAccessMode(context, recipient, Recipient.UnidentifiedAccessMode.UNKNOWN) profileManager.setUnidentifiedAccessMode(context, recipient, Recipient.UnidentifiedAccessMode.UNKNOWN)
profileManager.setProfilePictureURL(context, recipient, url) profileManager.setProfilePictureURL(context, recipient, url)
} }
if (contact.hidden) { if (contact.priority == ConfigBase.PRIORITY_HIDDEN) {
getThreadId(fromSerialized(contact.id))?.let { conversationThreadId -> getThreadId(fromSerialized(contact.id))?.let { conversationThreadId ->
deleteConversation(conversationThreadId) deleteConversation(conversationThreadId)
} }
@ -1146,25 +1148,25 @@ class Storage(context: Context, helper: SQLCipherOpenHelper, private val configF
val threadRecipient = getRecipientForThread(threadID) ?: return val threadRecipient = getRecipientForThread(threadID) ?: return
if (threadRecipient.isLocalNumber) { if (threadRecipient.isLocalNumber) {
val user = configFactory.user ?: return val user = configFactory.user ?: return
user.setNtsPriority(if (isPinned) 1 else 0) user.setNtsPriority(if (isPinned) ConfigBase.PRIORITY_PINNED else ConfigBase.PRIORITY_VISIBLE)
} else if (threadRecipient.isContactRecipient) { } else if (threadRecipient.isContactRecipient) {
val contacts = configFactory.contacts ?: return val contacts = configFactory.contacts ?: return
contacts.upsertContact(threadRecipient.address.serialize()) { contacts.upsertContact(threadRecipient.address.serialize()) {
priority = if (isPinned) 1 else 0 priority = if (isPinned) ConfigBase.PRIORITY_PINNED else ConfigBase.PRIORITY_VISIBLE
} }
} else if (threadRecipient.isGroupRecipient) { } else if (threadRecipient.isGroupRecipient) {
val groups = configFactory.userGroups ?: return val groups = configFactory.userGroups ?: return
if (threadRecipient.isClosedGroupRecipient) { if (threadRecipient.isClosedGroupRecipient) {
val sessionId = GroupUtil.doubleDecodeGroupId(threadRecipient.address.serialize()) val sessionId = GroupUtil.doubleDecodeGroupId(threadRecipient.address.serialize())
val newGroupInfo = groups.getOrConstructLegacyGroupInfo(sessionId).copy ( val newGroupInfo = groups.getOrConstructLegacyGroupInfo(sessionId).copy (
priority = if (isPinned) 1 else 0 priority = if (isPinned) ConfigBase.PRIORITY_PINNED else ConfigBase.PRIORITY_VISIBLE
) )
groups.set(newGroupInfo) groups.set(newGroupInfo)
} else if (threadRecipient.isOpenGroupRecipient) { } else if (threadRecipient.isOpenGroupRecipient) {
val openGroup = getOpenGroup(threadID) ?: return val openGroup = getOpenGroup(threadID) ?: return
val (baseUrl, room, pubKeyHex) = BaseCommunityInfo.parseFullUrl(openGroup.joinURL) ?: return val (baseUrl, room, pubKeyHex) = BaseCommunityInfo.parseFullUrl(openGroup.joinURL) ?: return
val newGroupInfo = groups.getOrConstructCommunityInfo(baseUrl, room, Hex.toStringCondensed(pubKeyHex)).copy ( val newGroupInfo = groups.getOrConstructCommunityInfo(baseUrl, room, Hex.toStringCondensed(pubKeyHex)).copy (
priority = if (isPinned) 1 else 0 priority = if (isPinned) ConfigBase.PRIORITY_PINNED else ConfigBase.PRIORITY_VISIBLE
) )
groups.set(newGroupInfo) groups.set(newGroupInfo)
} }
@ -1187,7 +1189,7 @@ class Storage(context: Context, helper: SQLCipherOpenHelper, private val configF
// TODO: handle contact // TODO: handle contact
val contacts = configFactory.contacts ?: return val contacts = configFactory.contacts ?: return
contacts.upsertContact(recipient.address.serialize()) { contacts.upsertContact(recipient.address.serialize()) {
this.hidden = true this.priority = ConfigBase.PRIORITY_HIDDEN
} }
ConfigurationMessageUtilities.forceSyncConfigurationNowIfNeeded(context) ConfigurationMessageUtilities.forceSyncConfigurationNowIfNeeded(context)
} else if (recipient.isClosedGroupRecipient) { } else if (recipient.isClosedGroupRecipient) {

View File

@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.groups package org.thoughtcrime.securesms.groups
import android.content.Context import android.content.Context
import network.loki.messenger.libsession_util.util.GroupInfo import network.loki.messenger.libsession_util.ConfigBase
import org.session.libsession.messaging.MessagingModuleConfiguration import org.session.libsession.messaging.MessagingModuleConfiguration
import org.session.libsession.messaging.sending_receiving.notifications.PushNotificationAPI import org.session.libsession.messaging.sending_receiving.notifications.PushNotificationAPI
import org.session.libsession.messaging.sending_receiving.pollers.ClosedGroupPollerV2 import org.session.libsession.messaging.sending_receiving.pollers.ClosedGroupPollerV2
@ -9,7 +9,6 @@ import org.session.libsession.utilities.Address
import org.session.libsession.utilities.GroupRecord import org.session.libsession.utilities.GroupRecord
import org.session.libsession.utilities.GroupUtil import org.session.libsession.utilities.GroupUtil
import org.session.libsession.utilities.recipients.Recipient import org.session.libsession.utilities.recipients.Recipient
import org.session.libsignal.utilities.toHexString
import org.thoughtcrime.securesms.ApplicationContext import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.dependencies.ConfigFactory import org.thoughtcrime.securesms.dependencies.ConfigFactory
@ -54,7 +53,7 @@ object ClosedGroupManager {
members = latestMemberMap, members = latestMemberMap,
name = group.title, name = group.title,
disappearingTimer = groupRecipientSettings.expireMessages.toLong(), disappearingTimer = groupRecipientSettings.expireMessages.toLong(),
priority = if (storage.isPinned(threadId)) 1 else 0, priority = if (storage.isPinned(threadId)) ConfigBase.PRIORITY_PINNED else ConfigBase.PRIORITY_VISIBLE,
encSecKey = latestKeyPair.privateKey.serialize(), encSecKey = latestKeyPair.privateKey.serialize(),
encPubKey = latestKeyPair.publicKey.serialize() encPubKey = latestKeyPair.publicKey.serialize()
) )

View File

@ -27,7 +27,7 @@ import org.session.libsignal.utilities.Hex
import org.session.libsignal.utilities.Log import org.session.libsignal.utilities.Log
import org.session.libsignal.utilities.toHexString import org.session.libsignal.utilities.toHexString
import org.thoughtcrime.securesms.dependencies.DatabaseComponent import org.thoughtcrime.securesms.dependencies.DatabaseComponent
import java.util.* import java.util.Timer
object ConfigurationMessageUtilities { object ConfigurationMessageUtilities {
@ -123,7 +123,11 @@ object ConfigurationMessageUtilities {
profile.setPic(UserPic(picUrl, picKey)) profile.setPic(UserPic(picUrl, picKey))
} }
val ownThreadId = storage.getThreadId(Address.fromSerialized(ownPublicKey)) val ownThreadId = storage.getThreadId(Address.fromSerialized(ownPublicKey))
profile.setNtsHidden(ownThreadId != null) profile.setNtsPriority(
if (ownThreadId != null)
if (storage.isPinned(ownThreadId)) ConfigBase.PRIORITY_PINNED else ConfigBase.PRIORITY_VISIBLE
else ConfigBase.PRIORITY_HIDDEN
)
if (ownThreadId != null) { if (ownThreadId != null) {
// have NTS thread // have NTS thread
val ntsPinned = storage.isPinned(ownThreadId) val ntsPinned = storage.isPinned(ownThreadId)
@ -248,8 +252,7 @@ object ConfigurationMessageUtilities {
sessionId = sessionId, sessionId = sessionId,
name = group.title, name = group.title,
members = admins + members, members = admins + members,
hidden = threadId == null, priority = if (isPinned) ConfigBase.PRIORITY_PINNED else ConfigBase.PRIORITY_VISIBLE,
priority = if (isPinned) 1 else 0,
encPubKey = encryptionKeyPair.publicKey.serialize(), encPubKey = encryptionKeyPair.publicKey.serialize(),
encSecKey = encryptionKeyPair.privateKey.serialize(), encSecKey = encryptionKeyPair.privateKey.serialize(),
disappearingTimer = recipient.expireMessages.toLong() disappearingTimer = recipient.expireMessages.toLong()

@ -1 +1 @@
Subproject commit 5241878bb20a9232b011f709adb87d1e6e7496b4 Subproject commit 3817b543f5f862b58afd50c285fbccc26bc82ee0

View File

@ -13,18 +13,17 @@ inline session::config::Contacts *ptrToContacts(JNIEnv *env, jobject obj) {
inline jobject serialize_contact(JNIEnv *env, session::config::contact_info info) { inline jobject serialize_contact(JNIEnv *env, session::config::contact_info info) {
jclass contactClass = env->FindClass("network/loki/messenger/libsession_util/util/Contact"); jclass contactClass = env->FindClass("network/loki/messenger/libsession_util/util/Contact");
jmethodID constructor = env->GetMethodID(contactClass, "<init>", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZZZLnetwork/loki/messenger/libsession_util/util/UserPic;ILnetwork/loki/messenger/libsession_util/util/ExpiryMode;)V"); jmethodID constructor = env->GetMethodID(contactClass, "<init>", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZZLnetwork/loki/messenger/libsession_util/util/UserPic;ILnetwork/loki/messenger/libsession_util/util/ExpiryMode;)V");
jstring id = env->NewStringUTF(info.session_id.data()); jstring id = env->NewStringUTF(info.session_id.data());
jstring name = env->NewStringUTF(info.name.data()); jstring name = env->NewStringUTF(info.name.data());
jstring nickname = env->NewStringUTF(info.nickname.data()); jstring nickname = env->NewStringUTF(info.nickname.data());
jboolean approved, approvedMe, blocked, hidden; jboolean approved, approvedMe, blocked;
approved = info.approved; approved = info.approved;
approvedMe = info.approved_me; approvedMe = info.approved_me;
blocked = info.blocked; blocked = info.blocked;
hidden = info.hidden;
jobject profilePic = util::serialize_user_pic(env, info.profile_picture); jobject profilePic = util::serialize_user_pic(env, info.profile_picture);
jobject returnObj = env->NewObject(contactClass, constructor, id, name, nickname, approved, jobject returnObj = env->NewObject(contactClass, constructor, id, name, nickname, approved,
approvedMe, blocked, hidden, profilePic, info.priority, approvedMe, blocked, profilePic, info.priority,
util::serialize_expiry(env, info.exp_mode, info.exp_timer)); util::serialize_expiry(env, info.exp_mode, info.exp_timer));
return returnObj; return returnObj;
} }
@ -40,7 +39,6 @@ deserialize_contact(JNIEnv *env, jobject info, session::config::Contacts *conf)
getApproved = env->GetFieldID(contactClass, "approved", "Z"); getApproved = env->GetFieldID(contactClass, "approved", "Z");
getApprovedMe = env->GetFieldID(contactClass, "approvedMe", "Z"); getApprovedMe = env->GetFieldID(contactClass, "approvedMe", "Z");
getBlocked = env->GetFieldID(contactClass, "blocked", "Z"); getBlocked = env->GetFieldID(contactClass, "blocked", "Z");
getHidden = env->GetFieldID(contactClass, "hidden", "Z");
getUserPic = env->GetFieldID(contactClass, "profilePicture", getUserPic = env->GetFieldID(contactClass, "profilePicture",
"Lnetwork/loki/messenger/libsession_util/util/UserPic;"); "Lnetwork/loki/messenger/libsession_util/util/UserPic;");
getPriority = env->GetFieldID(contactClass, "priority", "I"); getPriority = env->GetFieldID(contactClass, "priority", "I");
@ -54,7 +52,6 @@ deserialize_contact(JNIEnv *env, jobject info, session::config::Contacts *conf)
approved = env->GetBooleanField(info, getApproved); approved = env->GetBooleanField(info, getApproved);
approvedMe = env->GetBooleanField(info, getApprovedMe); approvedMe = env->GetBooleanField(info, getApprovedMe);
blocked = env->GetBooleanField(info, getBlocked); blocked = env->GetBooleanField(info, getBlocked);
hidden = env->GetBooleanField(info, getHidden);
jobject user_pic = env->GetObjectField(info, getUserPic); jobject user_pic = env->GetObjectField(info, getUserPic);
jobject expiry_mode = env->GetObjectField(info, getExpiry); jobject expiry_mode = env->GetObjectField(info, getExpiry);
@ -86,7 +83,6 @@ deserialize_contact(JNIEnv *env, jobject info, session::config::Contacts *conf)
contact_info.approved = approved; contact_info.approved = approved;
contact_info.approved_me = approvedMe; contact_info.approved_me = approvedMe;
contact_info.blocked = blocked; contact_info.blocked = blocked;
contact_info.hidden = hidden;
if (!url.empty() && !key.empty()) { if (!url.empty() && !key.empty()) {
contact_info.profile_picture = session::config::profile_pic(url, key); contact_info.profile_picture = session::config::profile_pic(url, key);
} else { } else {

View File

@ -47,7 +47,6 @@ inline session::config::legacy_group_info deserialize_legacy_group_info(JNIEnv *
auto id_field = env->GetFieldID(clazz, "sessionId", "Ljava/lang/String;"); auto id_field = env->GetFieldID(clazz, "sessionId", "Ljava/lang/String;");
auto name_field = env->GetFieldID(clazz, "name", "Ljava/lang/String;"); auto name_field = env->GetFieldID(clazz, "name", "Ljava/lang/String;");
auto members_field = env->GetFieldID(clazz, "members", "Ljava/util/Map;"); auto members_field = env->GetFieldID(clazz, "members", "Ljava/util/Map;");
auto hidden_field = env->GetFieldID(clazz, "hidden", "Z");
auto enc_pub_key_field = env->GetFieldID(clazz, "encPubKey", "[B"); auto enc_pub_key_field = env->GetFieldID(clazz, "encPubKey", "[B");
auto enc_sec_key_field = env->GetFieldID(clazz, "encSecKey", "[B"); auto enc_sec_key_field = env->GetFieldID(clazz, "encSecKey", "[B");
auto priority_field = env->GetFieldID(clazz, "priority", "I"); auto priority_field = env->GetFieldID(clazz, "priority", "I");
@ -55,7 +54,6 @@ inline session::config::legacy_group_info deserialize_legacy_group_info(JNIEnv *
jstring id = static_cast<jstring>(env->GetObjectField(info, id_field)); jstring id = static_cast<jstring>(env->GetObjectField(info, id_field));
jstring name = static_cast<jstring>(env->GetObjectField(info, name_field)); jstring name = static_cast<jstring>(env->GetObjectField(info, name_field));
jobject members_map = env->GetObjectField(info, members_field); jobject members_map = env->GetObjectField(info, members_field);
bool hidden = env->GetBooleanField(info, hidden_field);
jbyteArray enc_pub_key = static_cast<jbyteArray>(env->GetObjectField(info, enc_pub_key_field)); jbyteArray enc_pub_key = static_cast<jbyteArray>(env->GetObjectField(info, enc_pub_key_field));
jbyteArray enc_sec_key = static_cast<jbyteArray>(env->GetObjectField(info, enc_sec_key_field)); jbyteArray enc_sec_key = static_cast<jbyteArray>(env->GetObjectField(info, enc_sec_key_field));
int priority = env->GetIntField(info, priority_field); int priority = env->GetIntField(info, priority_field);
@ -67,10 +65,12 @@ inline session::config::legacy_group_info deserialize_legacy_group_info(JNIEnv *
auto info_deserialized = conf->get_or_construct_legacy_group(id_bytes); auto info_deserialized = conf->get_or_construct_legacy_group(id_bytes);
info_deserialized.priority = priority; auto current_members = info_deserialized.members();
for (auto member = current_members.begin(); member != current_members.end(); ++member) {
info_deserialized.erase(member->first);
}
deserialize_members_into(env, members_map, info_deserialized); deserialize_members_into(env, members_map, info_deserialized);
info_deserialized.name = name_bytes; info_deserialized.name = name_bytes;
info_deserialized.hidden = hidden;
info_deserialized.enc_pubkey = enc_pub_key_bytes; info_deserialized.enc_pubkey = enc_pub_key_bytes;
info_deserialized.enc_seckey = enc_sec_key_bytes; info_deserialized.enc_seckey = enc_sec_key_bytes;
info_deserialized.disappearing_timer = std::chrono::seconds(env->GetLongField(info, disappearing_timer_field)); info_deserialized.disappearing_timer = std::chrono::seconds(env->GetLongField(info, disappearing_timer_field));
@ -116,11 +116,10 @@ inline jobject serialize_legacy_group_info(JNIEnv *env, session::config::legacy_
jbyteArray enc_pubkey = util::bytes_from_ustring(env, info.enc_pubkey); jbyteArray enc_pubkey = util::bytes_from_ustring(env, info.enc_pubkey);
jbyteArray enc_seckey = util::bytes_from_ustring(env, info.enc_seckey); jbyteArray enc_seckey = util::bytes_from_ustring(env, info.enc_seckey);
int priority = info.priority; int priority = info.priority;
bool hidden = info.hidden;
jclass legacy_group_class = env->FindClass("network/loki/messenger/libsession_util/util/GroupInfo$LegacyGroupInfo"); jclass legacy_group_class = env->FindClass("network/loki/messenger/libsession_util/util/GroupInfo$LegacyGroupInfo");
jmethodID constructor = env->GetMethodID(legacy_group_class, "<init>", "(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Z[B[BIJ)V"); jmethodID constructor = env->GetMethodID(legacy_group_class, "<init>", "(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;[B[BIJ)V");
jobject serialized = env->NewObject(legacy_group_class, constructor, session_id, name, members, hidden, enc_pubkey, enc_seckey, priority, (jlong) info.disappearing_timer.count()); jobject serialized = env->NewObject(legacy_group_class, constructor, session_id, name, members, enc_pubkey, enc_seckey, priority, (jlong) info.disappearing_timer.count());
return serialized; return serialized;
} }

View File

@ -84,21 +84,8 @@ Java_network_loki_messenger_libsession_1util_UserProfile_setNtsPriority(JNIEnv *
profile->set_nts_priority(priority); profile->set_nts_priority(priority);
} }
extern "C" extern "C"
JNIEXPORT void JNICALL
Java_network_loki_messenger_libsession_1util_UserProfile_setNtsHidden(JNIEnv *env, jobject thiz,
jboolean is_hidden) {
auto profile = ptrToProfile(env, thiz);
profile->set_nts_hidden(is_hidden);
}
extern "C"
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_network_loki_messenger_libsession_1util_UserProfile_getNtsPriority(JNIEnv *env, jobject thiz) { Java_network_loki_messenger_libsession_1util_UserProfile_getNtsPriority(JNIEnv *env, jobject thiz) {
auto profile = ptrToProfile(env, thiz); auto profile = ptrToProfile(env, thiz);
return profile->get_nts_priority(); return profile->get_nts_priority();
} }
extern "C"
JNIEXPORT jboolean JNICALL
Java_network_loki_messenger_libsession_1util_UserProfile_getNtsHidden(JNIEnv *env, jobject thiz) {
auto profile = ptrToProfile(env, thiz);
return profile->get_nts_hidden();
}

View File

@ -25,6 +25,10 @@ sealed class ConfigBase(protected val /* yucky */ pointer: Long) {
const val isNewConfigEnabled = true const val isNewConfigEnabled = true
const val PRIORITY_HIDDEN = -1
const val PRIORITY_VISIBLE = 0
const val PRIORITY_PINNED = 1
} }
external fun dirty(): Boolean external fun dirty(): Boolean
@ -96,8 +100,6 @@ class UserProfile(pointer: Long) : ConfigBase(pointer) {
external fun setPic(userPic: UserPic) external fun setPic(userPic: UserPic)
external fun setNtsPriority(priority: Int) external fun setNtsPriority(priority: Int)
external fun getNtsPriority(): Int external fun getNtsPriority(): Int
external fun setNtsHidden(isHidden: Boolean)
external fun getNtsHidden(): Boolean
} }
class ConversationVolatileConfig(pointer: Long): ConfigBase(pointer) { class ConversationVolatileConfig(pointer: Long): ConfigBase(pointer) {

View File

@ -7,7 +7,6 @@ data class Contact(
var approved: Boolean = false, var approved: Boolean = false,
var approvedMe: Boolean = false, var approvedMe: Boolean = false,
var blocked: Boolean = false, var blocked: Boolean = false,
var hidden: Boolean = false,
var profilePicture: UserPic = UserPic.DEFAULT, var profilePicture: UserPic = UserPic.DEFAULT,
var priority: Int = 0, var priority: Int = 0,
var expiryMode: ExpiryMode var expiryMode: ExpiryMode

View File

@ -8,10 +8,9 @@ sealed class GroupInfo {
val sessionId: String, val sessionId: String,
val name: String, val name: String,
val members: Map<String, Boolean>, val members: Map<String, Boolean>,
val hidden: Boolean,
val encPubKey: ByteArray, val encPubKey: ByteArray,
val encSecKey: ByteArray, val encSecKey: ByteArray,
val priority: Int = 0, val priority: Int,
val disappearingTimer: Long val disappearingTimer: Long
): GroupInfo() { ): GroupInfo() {
companion object { companion object {
@ -28,7 +27,6 @@ sealed class GroupInfo {
if (sessionId != other.sessionId) return false if (sessionId != other.sessionId) return false
if (name != other.name) return false if (name != other.name) return false
if (members != other.members) return false if (members != other.members) return false
if (hidden != other.hidden) return false
if (!encPubKey.contentEquals(other.encPubKey)) return false if (!encPubKey.contentEquals(other.encPubKey)) return false
if (!encSecKey.contentEquals(other.encSecKey)) return false if (!encSecKey.contentEquals(other.encSecKey)) return false
if (priority != other.priority) return false if (priority != other.priority) return false
@ -40,7 +38,6 @@ sealed class GroupInfo {
var result = sessionId.hashCode() var result = sessionId.hashCode()
result = 31 * result + name.hashCode() result = 31 * result + name.hashCode()
result = 31 * result + members.hashCode() result = 31 * result + members.hashCode()
result = 31 * result + hidden.hashCode()
result = 31 * result + encPubKey.contentHashCode() result = 31 * result + encPubKey.contentHashCode()
result = 31 * result + encSecKey.contentHashCode() result = 31 * result + encSecKey.contentHashCode()
result = 31 * result + priority result = 31 * result + priority