feat: add set group invite completed, persist a group config individually
This commit is contained in:
parent
2448af0b73
commit
383634c90e
|
@ -1225,6 +1225,21 @@ open class Storage(
|
|||
MessageSender.send(responseMessage, invitingAdminAddress)
|
||||
}
|
||||
|
||||
override fun setGroupInviteComplete(approved: Boolean, invitee: String, closedGroup: SessionId) {
|
||||
val groupMembers = configFactory.getGroupMemberConfig(closedGroup) ?: return
|
||||
val member = groupMembers.get(invitee) ?: run {
|
||||
Log.e("ClosedGroup", "User wasn't in the group membership to add!")
|
||||
return
|
||||
}
|
||||
if (approved) {
|
||||
groupMembers.set(member.copy(invitePending = false))
|
||||
} else {
|
||||
groupMembers.erase(member)
|
||||
}
|
||||
configFactory.persistGroupConfigDump(groupMembers, closedGroup, SnodeAPI.nowWithOffset)
|
||||
groupMembers.close()
|
||||
}
|
||||
|
||||
override fun setServerCapabilities(server: String, capabilities: List<String>) {
|
||||
return DatabaseComponent.get(context).lokiAPIDatabase().setServerCapabilities(server, capabilities)
|
||||
}
|
||||
|
|
|
@ -293,6 +293,16 @@ class ConfigFactory(
|
|||
)
|
||||
}
|
||||
|
||||
fun persistGroupConfigDump(forConfigObject: ConfigBase, groupSessionId: SessionId, timestamp: Long) = synchronized(userGroupsLock) {
|
||||
val dumped = forConfigObject.dump()
|
||||
configDatabase.storeConfig(
|
||||
ConfigDatabase.KEYS_VARIANT,
|
||||
groupSessionId.hexString(),
|
||||
dumped,
|
||||
timestamp
|
||||
)
|
||||
}
|
||||
|
||||
override fun persist(forConfigObject: Config, timestamp: Long) {
|
||||
try {
|
||||
listeners.forEach { listener ->
|
||||
|
|
|
@ -160,6 +160,7 @@ interface StorageProtocol {
|
|||
fun createNewGroup(groupName: String, groupDescription: String, members: Set<SessionId>): Optional<Recipient>
|
||||
fun getMembers(groupPublicKey: String): List<LibSessionGroupMember>
|
||||
fun acceptClosedGroupInvite(groupId: SessionId, name: String, authData: ByteArray, invitingAdmin: SessionId)
|
||||
fun setGroupInviteComplete(approved: Boolean, invitee: String, closedGroup: SessionId)
|
||||
|
||||
// Groups
|
||||
fun getAllGroups(includeInactive: Boolean): List<GroupRecord>
|
||||
|
|
|
@ -209,7 +209,7 @@ class BatchMessageReceiveJob(
|
|||
}
|
||||
}
|
||||
|
||||
else -> MessageReceiver.handle(message, proto, threadId, openGroupID)
|
||||
else -> MessageReceiver.handle(message, proto, threadId, openGroupID, parameters.closedGroup?.publicKey?.let(SessionId::from))
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Couldn't process message (id: $id)", e)
|
||||
|
|
|
@ -41,7 +41,7 @@ class MessageReceiveJob(val data: ByteArray, val serverHash: String? = null, val
|
|||
val (message, proto) = MessageReceiver.parse(this.data, this.openGroupMessageServerID, openGroupPublicKey = serverPublicKey, currentClosedGroups = currentClosedGroups)
|
||||
val threadId = Message.getThreadId(message, this.openGroupID, storage, false)
|
||||
message.serverHash = serverHash
|
||||
MessageReceiver.handle(message, proto, threadId ?: -1, this.openGroupID)
|
||||
MessageReceiver.handle(message, proto, threadId ?: -1, this.openGroupID, null)
|
||||
this.handleSuccess(dispatcherName)
|
||||
deferred.resolve(Unit)
|
||||
} catch (e: Exception) {
|
||||
|
|
|
@ -62,7 +62,7 @@ internal fun MessageReceiver.isBlocked(publicKey: String): Boolean {
|
|||
return recipient.isBlocked
|
||||
}
|
||||
|
||||
fun MessageReceiver.handle(message: Message, proto: SignalServiceProtos.Content, threadId: Long, openGroupID: String?) {
|
||||
fun MessageReceiver.handle(message: Message, proto: SignalServiceProtos.Content, threadId: Long, openGroupID: String?, closedGroup: SessionId?) {
|
||||
// Do nothing if the message was outdated
|
||||
if (MessageReceiver.messageIsOutdated(message, threadId, openGroupID)) { return }
|
||||
|
||||
|
@ -70,7 +70,7 @@ fun MessageReceiver.handle(message: Message, proto: SignalServiceProtos.Content,
|
|||
is ReadReceipt -> handleReadReceipt(message)
|
||||
is TypingIndicator -> handleTypingIndicator(message)
|
||||
is ClosedGroupControlMessage -> handleClosedGroupControlMessage(message)
|
||||
is GroupUpdated -> handleNewLibSessionClosedGroupMessage(message)
|
||||
is GroupUpdated -> handleNewLibSessionClosedGroupMessage(message, closedGroup)
|
||||
is ExpirationTimerUpdate -> handleExpirationTimerUpdate(message)
|
||||
is DataExtractionNotification -> handleDataExtractionNotification(message)
|
||||
is ConfigurationMessage -> handleConfigurationMessage(message)
|
||||
|
@ -519,19 +519,19 @@ private fun ClosedGroupControlMessage.getPublicKey(): String = kind!!.let { when
|
|||
is ClosedGroupControlMessage.Kind.NameChange -> groupPublicKey!!
|
||||
}}
|
||||
|
||||
private fun MessageReceiver.handleGroupUpdated(message: GroupUpdated) {
|
||||
private fun MessageReceiver.handleGroupUpdated(message: GroupUpdated, closedGroup: SessionId) {
|
||||
when {
|
||||
message.inner.hasInviteMessage() -> handleNewLibSessionClosedGroupMessage(message)
|
||||
message.inner.hasInviteResponse() -> handleInviteResponse(message)
|
||||
message.inner.hasInviteResponse() -> handleInviteResponse(message, closedGroup)
|
||||
}
|
||||
}
|
||||
|
||||
private fun MessageReceiver.handleInviteResponse(message: GroupUpdated) {
|
||||
private fun MessageReceiver.handleInviteResponse(message: GroupUpdated, closedGroup: SessionId) {
|
||||
val sender = message.sender!!
|
||||
// val profile = message // maybe we do need data to be the inner so we can access profile
|
||||
val storage = MessagingModuleConfiguration.shared.storage
|
||||
val approved = message.inner.inviteResponse.isApproved
|
||||
|
||||
storage.setGroupInviteComplete(approved, sender, closedGroup)
|
||||
}
|
||||
|
||||
private fun MessageReceiver.handleNewLibSessionClosedGroupMessage(message: GroupUpdated) {
|
||||
|
|
Loading…
Reference in New Issue