feat: update copy for message reqeusts and fix the decline all / delete items

This commit is contained in:
0x330a 2023-12-08 17:06:05 +11:00
parent 4caa7681f8
commit 2628f03fcf
4 changed files with 34 additions and 23 deletions

View File

@ -195,7 +195,8 @@ class ConversationViewModel(
}
fun declineMessageRequest() {
repository.declineMessageRequest(threadId)
val recipient = recipient ?: return
repository.declineMessageRequest(threadId, recipient)
}
private fun showMessage(message: String) {

View File

@ -611,9 +611,9 @@ open class Storage(
val toAddCommunities = communities.filter { it.community.fullUrl() !in existingCommunities.map { it.value.joinURL } }
val existingJoinUrls = existingCommunities.values.map { it.joinURL }
val existingClosedGroups = getAllGroups(includeInactive = true).filter { it.isLegacyClosedGroup }
val existingLegacyClosedGroups = getAllGroups(includeInactive = true).filter { it.isLegacyClosedGroup }
val lgcIds = lgc.map { it.sessionId.hexString() }
val toDeleteClosedGroups = existingClosedGroups.filter { group ->
val toDeleteClosedGroups = existingLegacyClosedGroups.filter { group ->
GroupUtil.doubleDecodeGroupId(group.encodedId) !in lgcIds
}
@ -656,9 +656,10 @@ open class Storage(
pollerFactory.pollerFor(closedGroup.groupSessionId)?.start()
}
}
// TODO: add in removing legacy closed groups via config update
for (group in lgc) {
val existingGroup = existingClosedGroups.firstOrNull { GroupUtil.doubleDecodeGroupId(it.encodedId) == group.sessionId.hexString() }
val existingGroup = existingLegacyClosedGroups.firstOrNull { GroupUtil.doubleDecodeGroupId(it.encodedId) == group.sessionId.hexString() }
val existingThread = existingGroup?.let { getThreadId(existingGroup.encodedId) }
if (existingGroup != null) {
if (group.priority == PRIORITY_HIDDEN && existingThread != null) {
@ -1224,19 +1225,25 @@ open class Storage(
override fun respondToClosedGroupInvitation(groupRecipient: Recipient, approved: Boolean) {
val groups = configFactory.userGroups ?: return
val groupSessionId = SessionId.from(groupRecipient.address.serialize())
val closedGroupInfo = groups.getClosedGroup(groupSessionId.hexString())?.copy(
invited = false
) ?: return
groups.set(closedGroupInfo)
ConfigurationMessageUtilities.forceSyncConfigurationNowIfNeeded(context)
pollerFactory.pollerFor(groupSessionId)?.start()
val inviteResponse = GroupUpdateInviteResponseMessage.newBuilder()
.setIsApproved(true)
val responseData = GroupUpdateMessage.newBuilder()
.setInviteResponse(inviteResponse)
val responseMessage = GroupUpdated(responseData.build())
// this will fail the first couple of times :)
MessageSender.send(responseMessage, fromSerialized(groupSessionId.hexString()))
if (!approved) {
groups.eraseClosedGroup(groupSessionId.hexString())
ConfigurationMessageUtilities.forceSyncConfigurationNowIfNeeded(context)
return
} else {
val closedGroupInfo = groups.getClosedGroup(groupSessionId.hexString())?.copy(
invited = false
) ?: return
groups.set(closedGroupInfo)
ConfigurationMessageUtilities.forceSyncConfigurationNowIfNeeded(context)
pollerFactory.pollerFor(groupSessionId)?.start()
val inviteResponse = GroupUpdateInviteResponseMessage.newBuilder()
.setIsApproved(true)
val responseData = GroupUpdateMessage.newBuilder()
.setInviteResponse(inviteResponse)
val responseMessage = GroupUpdated(responseData.build())
// this will fail the first couple of times :)
MessageSender.send(responseMessage, fromSerialized(groupSessionId.hexString()))
}
}
override fun addClosedGroupInvite(

View File

@ -77,7 +77,7 @@ interface ConversationRepository {
suspend fun acceptMessageRequest(threadId: Long, recipient: Recipient): ResultOf<Unit>
fun declineMessageRequest(threadId: Long)
fun declineMessageRequest(threadId: Long, recipient: Recipient)
fun hasReceived(threadId: Long): Boolean
@ -286,8 +286,7 @@ class DefaultConversationRepository @Inject constructor(
}
override suspend fun deleteMessageRequest(thread: ThreadRecord): ResultOf<Unit> {
sessionJobDb.cancelPendingMessageSendJobs(thread.threadId)
storage.deleteConversation(thread.threadId)
declineMessageRequest(thread.threadId, thread.recipient)
return ResultOf.Success(Unit)
}
@ -320,9 +319,13 @@ class DefaultConversationRepository @Inject constructor(
}
}
override fun declineMessageRequest(threadId: Long) {
override fun declineMessageRequest(threadId: Long, recipient: Recipient) {
sessionJobDb.cancelPendingMessageSendJobs(threadId)
storage.deleteConversation(threadId)
if (recipient.isClosedGroupRecipient) {
storage.respondToClosedGroupInvitation(recipient, false)
} else {
storage.deleteConversation(threadId)
}
}
override fun hasReceived(threadId: Long): Boolean {

View File

@ -941,7 +941,7 @@
<string name="message_requests_decline_message">Are you sure you want to decline this message request?</string>
<string name="message_requests_block_message">Are you sure you want to block this message request?</string>
<string name="message_requests_deleted">Message request deleted</string>
<string name="message_requests_clear_all_message">Are you sure you want to clear all message requests?</string>
<string name="message_requests_clear_all_message">Are you sure you want to clear all message requests and group invites?</string>
<string name="message_requests_cleared">Message requests deleted</string>
<string name="message_requests_accepted">Your message request has been accepted.</string>
<string name="message_requests_pending">Your message request is currently pending.</string>