|
|
@ -262,27 +262,22 @@ private fun MessageReceiver.handleNewClosedGroup(message: ClosedGroupControlMess
|
|
|
|
private fun handleNewClosedGroup(sender: String, sentTimestamp: Long, groupPublicKey: String, name: String, encryptionKeyPair: ECKeyPair, members: List<String>, admins: List<String>, formationTimestamp: Long) {
|
|
|
|
private fun handleNewClosedGroup(sender: String, sentTimestamp: Long, groupPublicKey: String, name: String, encryptionKeyPair: ECKeyPair, members: List<String>, admins: List<String>, formationTimestamp: Long) {
|
|
|
|
val context = MessagingModuleConfiguration.shared.context
|
|
|
|
val context = MessagingModuleConfiguration.shared.context
|
|
|
|
val storage = MessagingModuleConfiguration.shared.storage
|
|
|
|
val storage = MessagingModuleConfiguration.shared.storage
|
|
|
|
|
|
|
|
val userPublicKey = TextSecurePreferences.getLocalNumber(context)
|
|
|
|
// Create the group
|
|
|
|
// Create the group
|
|
|
|
val groupID = GroupUtil.doubleEncodeGroupID(groupPublicKey)
|
|
|
|
val groupID = GroupUtil.doubleEncodeGroupID(groupPublicKey)
|
|
|
|
if (storage.getGroup(groupID) != null) {
|
|
|
|
if (storage.getGroup(groupID) != null) {
|
|
|
|
// Update the group
|
|
|
|
// Update the group
|
|
|
|
// Clear zombie list if the group wasn't active
|
|
|
|
|
|
|
|
if (!storage.isGroupActive(groupPublicKey)) {
|
|
|
|
if (!storage.isGroupActive(groupPublicKey)) {
|
|
|
|
|
|
|
|
// Clear zombie list if the group wasn't active
|
|
|
|
storage.setZombieMembers(groupID, listOf())
|
|
|
|
storage.setZombieMembers(groupID, listOf())
|
|
|
|
|
|
|
|
// Update the formation timestamp
|
|
|
|
|
|
|
|
storage.updateFormationTimestamp(groupID, formationTimestamp)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
storage.updateTitle(groupID, name)
|
|
|
|
storage.updateTitle(groupID, name)
|
|
|
|
storage.updateMembers(groupID, members.map { Address.fromSerialized(it) })
|
|
|
|
storage.updateMembers(groupID, members.map { Address.fromSerialized(it) })
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
storage.createGroup(groupID, name, LinkedList(members.map { Address.fromSerialized(it) }),
|
|
|
|
storage.createGroup(groupID, name, LinkedList(members.map { Address.fromSerialized(it) }),
|
|
|
|
null, null, LinkedList(admins.map { Address.fromSerialized(it) }), formationTimestamp)
|
|
|
|
null, null, LinkedList(admins.map { Address.fromSerialized(it) }), formationTimestamp)
|
|
|
|
val userPublicKey = TextSecurePreferences.getLocalNumber(context)
|
|
|
|
|
|
|
|
// Notify the user
|
|
|
|
|
|
|
|
if (userPublicKey == sender) {
|
|
|
|
|
|
|
|
val threadID = storage.getOrCreateThreadIdFor(Address.fromSerialized(groupID))
|
|
|
|
|
|
|
|
storage.insertOutgoingInfoMessage(context, groupID, SignalServiceGroup.Type.CREATION, name, members, admins, threadID, sentTimestamp)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
storage.insertIncomingInfoMessage(context, sender, groupID, SignalServiceGroup.Type.CREATION, name, members, admins, sentTimestamp)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
storage.setProfileSharing(Address.fromSerialized(groupID), true)
|
|
|
|
storage.setProfileSharing(Address.fromSerialized(groupID), true)
|
|
|
|
// Add the group to the user's set of public keys to poll for
|
|
|
|
// Add the group to the user's set of public keys to poll for
|
|
|
@ -291,6 +286,13 @@ private fun handleNewClosedGroup(sender: String, sentTimestamp: Long, groupPubli
|
|
|
|
storage.addClosedGroupEncryptionKeyPair(encryptionKeyPair, groupPublicKey)
|
|
|
|
storage.addClosedGroupEncryptionKeyPair(encryptionKeyPair, groupPublicKey)
|
|
|
|
// Notify the PN server
|
|
|
|
// Notify the PN server
|
|
|
|
PushNotificationAPI.performOperation(PushNotificationAPI.ClosedGroupOperation.Subscribe, groupPublicKey, storage.getUserPublicKey()!!)
|
|
|
|
PushNotificationAPI.performOperation(PushNotificationAPI.ClosedGroupOperation.Subscribe, groupPublicKey, storage.getUserPublicKey()!!)
|
|
|
|
|
|
|
|
// Notify the user
|
|
|
|
|
|
|
|
if (userPublicKey == sender) {
|
|
|
|
|
|
|
|
val threadID = storage.getOrCreateThreadIdFor(Address.fromSerialized(groupID))
|
|
|
|
|
|
|
|
storage.insertOutgoingInfoMessage(context, groupID, SignalServiceGroup.Type.CREATION, name, members, admins, threadID, sentTimestamp)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
storage.insertIncomingInfoMessage(context, sender, groupID, SignalServiceGroup.Type.CREATION, name, members, admins, sentTimestamp)
|
|
|
|
|
|
|
|
}
|
|
|
|
// Start polling
|
|
|
|
// Start polling
|
|
|
|
ClosedGroupPollerV2.shared.startPolling(groupPublicKey)
|
|
|
|
ClosedGroupPollerV2.shared.startPolling(groupPublicKey)
|
|
|
|
}
|
|
|
|
}
|
|
|
|