|
|
|
@ -30,8 +30,6 @@ import org.session.libsession.utilities.GroupUtil
|
|
|
|
|
import org.session.libsession.utilities.TextSecurePreferences
|
|
|
|
|
import org.session.libsession.utilities.recipients.Recipient
|
|
|
|
|
import org.session.libsignal.utilities.AccountId
|
|
|
|
|
import org.session.libsignal.utilities.Log
|
|
|
|
|
import org.session.libsignal.utilities.toHexString
|
|
|
|
|
import org.thoughtcrime.securesms.database.DatabaseContentProviders
|
|
|
|
|
import org.thoughtcrime.securesms.database.DraftDatabase
|
|
|
|
|
import org.thoughtcrime.securesms.database.LokiMessageDatabase
|
|
|
|
@ -46,8 +44,6 @@ import org.thoughtcrime.securesms.database.model.MessageRecord
|
|
|
|
|
import org.thoughtcrime.securesms.database.model.ThreadRecord
|
|
|
|
|
import org.thoughtcrime.securesms.dependencies.ConfigFactory
|
|
|
|
|
import javax.inject.Inject
|
|
|
|
|
import kotlin.coroutines.resume
|
|
|
|
|
import kotlin.coroutines.suspendCoroutine
|
|
|
|
|
|
|
|
|
|
interface ConversationRepository {
|
|
|
|
|
fun maybeGetRecipientForThreadId(threadId: Long): Recipient?
|
|
|
|
@ -81,7 +77,6 @@ interface ConversationRepository {
|
|
|
|
|
messages: Set<MessageRecord>
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
fun buildUnsendRequest(recipient: Recipient, message: MessageRecord): UnsendRequest?
|
|
|
|
|
suspend fun banUser(threadId: Long, recipient: Recipient): Result<Unit>
|
|
|
|
|
suspend fun banAndDeleteAll(threadId: Long, recipient: Recipient): Result<Unit>
|
|
|
|
|
suspend fun deleteThread(threadId: Long): Result<Unit>
|
|
|
|
@ -280,21 +275,24 @@ class DefaultConversationRepository @Inject constructor(
|
|
|
|
|
// delete the messages remotely
|
|
|
|
|
val publicKey = recipient.address.serialize()
|
|
|
|
|
val userAddress: Address? = textSecurePreferences.getLocalNumber()?.let { Address.fromSerialized(it) }
|
|
|
|
|
val userAuth = requireNotNull(storage.userAuth) {
|
|
|
|
|
"User auth is required to delete messages remotely"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
messages.forEach { message ->
|
|
|
|
|
// delete from swarm
|
|
|
|
|
messageDataProvider.getServerHashForMessage(message.id, message.isMms)
|
|
|
|
|
?.let { serverHash ->
|
|
|
|
|
SnodeAPI.deleteMessage(publicKey, listOf(serverHash))
|
|
|
|
|
SnodeAPI.deleteMessage(publicKey, userAuth, listOf(serverHash))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// send an UnsendRequest to user's swarm
|
|
|
|
|
buildUnsendRequest(recipient, message)?.let { unsendRequest ->
|
|
|
|
|
buildUnsendRequest(message).let { unsendRequest ->
|
|
|
|
|
userAddress?.let { MessageSender.send(unsendRequest, it) }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// send an UnsendRequest to recipient's swarm
|
|
|
|
|
buildUnsendRequest(recipient, message)?.let { unsendRequest ->
|
|
|
|
|
buildUnsendRequest(message).let { unsendRequest ->
|
|
|
|
|
MessageSender.send(unsendRequest, recipient.address)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -304,12 +302,12 @@ class DefaultConversationRepository @Inject constructor(
|
|
|
|
|
recipient: Recipient,
|
|
|
|
|
messages: Set<MessageRecord>
|
|
|
|
|
) {
|
|
|
|
|
if (recipient.isClosedGroupRecipient) {
|
|
|
|
|
if (recipient.isLegacyClosedGroupRecipient) {
|
|
|
|
|
val publicKey = recipient.address
|
|
|
|
|
|
|
|
|
|
messages.forEach { message ->
|
|
|
|
|
// send an UnsendRequest to group's swarm
|
|
|
|
|
buildUnsendRequest(recipient, message)?.let { unsendRequest ->
|
|
|
|
|
buildUnsendRequest(message).let { unsendRequest ->
|
|
|
|
|
MessageSender.send(unsendRequest, publicKey)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -324,16 +322,19 @@ class DefaultConversationRepository @Inject constructor(
|
|
|
|
|
// delete the messages remotely
|
|
|
|
|
val publicKey = recipient.address.serialize()
|
|
|
|
|
val userAddress: Address? = textSecurePreferences.getLocalNumber()?.let { Address.fromSerialized(it) }
|
|
|
|
|
val userAuth = requireNotNull(storage.userAuth) {
|
|
|
|
|
"User auth is required to delete messages remotely"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
messages.forEach { message ->
|
|
|
|
|
// delete from swarm
|
|
|
|
|
messageDataProvider.getServerHashForMessage(message.id, message.isMms)
|
|
|
|
|
?.let { serverHash ->
|
|
|
|
|
SnodeAPI.deleteMessage(publicKey, listOf(serverHash))
|
|
|
|
|
SnodeAPI.deleteMessage(publicKey, userAuth, listOf(serverHash))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// send an UnsendRequest to user's swarm
|
|
|
|
|
buildUnsendRequest(recipient, message)?.let { unsendRequest ->
|
|
|
|
|
buildUnsendRequest(message).let { unsendRequest ->
|
|
|
|
|
userAddress?.let { MessageSender.send(unsendRequest, it) }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|