diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a97d1610f8..0ddf065ec3 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -432,10 +432,7 @@
-
-
-
+ android:exported="false">
,
runThreadUpdate: Boolean
): MessageId?
- fun markConversationAsRead(threadId: Long, lastSeenTime: Long, force: Boolean = false)
+ fun markConversationAsRead(threadId: Long, lastSeenTime: Long, force: Boolean = false, updateNotification: Boolean = true)
fun markConversationAsUnread(threadId: Long)
fun getLastSeen(threadId: Long): Long
fun ensureMessageHashesAreSender(hashes: Set, sender: String, closedGroupId: String): Boolean
diff --git a/app/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt b/app/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt
index f02e548701..a052562d29 100644
--- a/app/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt
+++ b/app/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt
@@ -14,7 +14,6 @@ import org.session.libsession.messaging.sending_receiving.attachments.Attachment
import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment
import org.session.libsession.messaging.utilities.Data
import org.session.libsession.snode.OnionRequestAPI
-import org.session.libsession.snode.utilities.await
import org.session.libsession.utilities.Address
import org.session.libsession.utilities.DecodedAudio
import org.session.libsession.utilities.DownloadUtilities
@@ -167,7 +166,7 @@ class AttachmentDownloadJob @AssistedInject constructor(
Log.d("AttachmentDownloadJob", "downloading open group attachment")
val url = attachment.url.toHttpUrlOrNull()!!
val fileID = url.pathSegments.last()
- OpenGroupApi.download(fileID, room = threadRecipient.address.room, server = threadRecipient.address.serverUrl).await()
+ OpenGroupApi.download(fileID, room = threadRecipient.address.room, server = threadRecipient.address.serverUrl)
}
tempFile = createTempFile().also { file ->
diff --git a/app/src/main/java/org/session/libsession/messaging/jobs/AttachmentUploadJob.kt b/app/src/main/java/org/session/libsession/messaging/jobs/AttachmentUploadJob.kt
index 20a497eaba..86db6428fa 100644
--- a/app/src/main/java/org/session/libsession/messaging/jobs/AttachmentUploadJob.kt
+++ b/app/src/main/java/org/session/libsession/messaging/jobs/AttachmentUploadJob.kt
@@ -80,8 +80,8 @@ class AttachmentUploadJob @AssistedInject constructor(
}
handleSuccess(dispatcherName, attachment, keyAndResult.first, keyAndResult.second)
} else {
- val keyAndResult = upload(attachment, FileServerApi.FILE_SERVER_URL, true) {
- FileServerApi.upload(it).map { it.fileId }
+ val keyAndResult = upload(attachment, FileServerApi.FILE_SERVER_URL, true) { file ->
+ FileServerApi.upload(file).map { it.fileId }.await()
}
handleSuccess(dispatcherName, attachment, keyAndResult.first, keyAndResult.second)
}
@@ -94,7 +94,7 @@ class AttachmentUploadJob @AssistedInject constructor(
}
}
- private suspend fun upload(attachment: SignalServiceAttachmentStream, server: String, encrypt: Boolean, upload: (ByteArray) -> Promise): Pair {
+ private suspend fun upload(attachment: SignalServiceAttachmentStream, server: String, encrypt: Boolean, upload: suspend (ByteArray) -> String): Pair {
// Key
val key = if (encrypt) Util.getSecretBytes(64) else ByteArray(0)
// Length
@@ -120,7 +120,7 @@ class AttachmentUploadJob @AssistedInject constructor(
drb.writeTo(b)
val data = b.readByteArray()
// Upload the data
- val id = upload(data).await()
+ val id = upload(data)
val digest = drb.transmittedDigest
// Return
return Pair(key, UploadResult(id, "${server}/file/$id", digest))
diff --git a/app/src/main/java/org/session/libsession/messaging/jobs/BatchMessageReceiveJob.kt b/app/src/main/java/org/session/libsession/messaging/jobs/BatchMessageReceiveJob.kt
index fc1bbfac42..484a95ca64 100644
--- a/app/src/main/java/org/session/libsession/messaging/jobs/BatchMessageReceiveJob.kt
+++ b/app/src/main/java/org/session/libsession/messaging/jobs/BatchMessageReceiveJob.kt
@@ -253,7 +253,7 @@ class BatchMessageReceiveJob @AssistedInject constructor(
}
is UnsendRequest -> {
- val deletedMessage = receivedMessageHandler.handleUnsendRequest(message)
+ val deletedMessage = receivedMessageHandler.handleUnsendRequest(message, threadId)
// If we removed a message then ensure it isn't in the 'messageIds'
if (deletedMessage != null) {
diff --git a/app/src/main/java/org/session/libsession/messaging/jobs/InviteContactsJob.kt b/app/src/main/java/org/session/libsession/messaging/jobs/InviteContactsJob.kt
index e94134bd9a..1a4c5cc9f9 100644
--- a/app/src/main/java/org/session/libsession/messaging/jobs/InviteContactsJob.kt
+++ b/app/src/main/java/org/session/libsession/messaging/jobs/InviteContactsJob.kt
@@ -16,7 +16,6 @@ import org.session.libsession.messaging.sending_receiving.MessageSender
import org.session.libsession.messaging.utilities.Data
import org.session.libsession.messaging.utilities.MessageAuthentication.buildGroupInviteSignature
import org.session.libsession.snode.SnodeAPI
-import org.session.libsession.snode.utilities.await
import org.session.libsession.utilities.getGroup
import org.session.libsignal.protos.SignalServiceProtos.DataMessage.GroupUpdateInviteMessage
import org.session.libsignal.protos.SignalServiceProtos.DataMessage.GroupUpdateMessage
@@ -78,7 +77,6 @@ class InviteContactsJob(val groupSessionId: String, val memberSessionIds: Array<
}
MessageSender.sendNonDurably(update, Destination.Contact(memberSessionId), false)
- .await()
}
}
}
diff --git a/app/src/main/java/org/session/libsession/messaging/jobs/MessageSendJob.kt b/app/src/main/java/org/session/libsession/messaging/jobs/MessageSendJob.kt
index 44395deca3..8cdc660584 100644
--- a/app/src/main/java/org/session/libsession/messaging/jobs/MessageSendJob.kt
+++ b/app/src/main/java/org/session/libsession/messaging/jobs/MessageSendJob.kt
@@ -20,7 +20,6 @@ import org.session.libsession.messaging.messages.Message
import org.session.libsession.messaging.messages.visible.VisibleMessage
import org.session.libsession.messaging.sending_receiving.MessageSender
import org.session.libsession.messaging.utilities.Data
-import org.session.libsession.snode.utilities.await
import org.session.libsession.utilities.ConfigFactoryProtocol
import org.session.libsession.utilities.ConfigUpdateNotification
import org.session.libsignal.utilities.AccountId
@@ -97,7 +96,7 @@ class MessageSendJob @AssistedInject constructor(
.waitForGroupEncryptionKeys(AccountId(destination.publicKey))
}
- MessageSender.sendNonDurably(this@MessageSendJob.message, destination, isSync).await()
+ MessageSender.sendNonDurably(this@MessageSendJob.message, destination, isSync)
}
this.handleSuccess(dispatcherName)
diff --git a/app/src/main/java/org/session/libsession/messaging/open_groups/OpenGroupApi.kt b/app/src/main/java/org/session/libsession/messaging/open_groups/OpenGroupApi.kt
index 7692f118ce..3d650db223 100644
--- a/app/src/main/java/org/session/libsession/messaging/open_groups/OpenGroupApi.kt
+++ b/app/src/main/java/org/session/libsession/messaging/open_groups/OpenGroupApi.kt
@@ -5,17 +5,14 @@ import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.core.type.TypeReference
import com.fasterxml.jackson.databind.PropertyNamingStrategy
import com.fasterxml.jackson.databind.annotation.JsonNaming
-import com.fasterxml.jackson.databind.type.TypeFactory
-import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.flow.MutableSharedFlow
+import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.decodeFromStream
import network.loki.messenger.libsession_util.ED25519
import network.loki.messenger.libsession_util.Hash
import network.loki.messenger.libsession_util.util.BlindKeyAPI
-import nl.komponents.kovenant.Promise
-import nl.komponents.kovenant.functional.map
import okhttp3.Headers.Companion.toHeaders
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.MediaType.Companion.toMediaType
@@ -24,7 +21,6 @@ import org.session.libsession.messaging.MessagingModuleConfiguration
import org.session.libsession.snode.OnionRequestAPI
import org.session.libsession.snode.OnionResponse
import org.session.libsession.snode.SnodeAPI
-import org.session.libsession.snode.utilities.asyncPromise
import org.session.libsession.snode.utilities.await
import org.session.libsignal.utilities.AccountId
import org.session.libsignal.utilities.Base64.encodeBytes
@@ -40,9 +36,6 @@ import org.session.libsignal.utilities.JsonUtil
import org.session.libsignal.utilities.Log
import java.security.SecureRandom
import java.util.concurrent.TimeUnit
-import kotlin.collections.component1
-import kotlin.collections.component2
-import kotlin.collections.set
object OpenGroupApi {
val defaultRooms = MutableSharedFlow>(replay = 1)
@@ -215,12 +208,16 @@ object OpenGroupApi {
val index: Long = 0
)
+ @Serializable
data class AddReactionResponse(
+ @SerialName("seqno")
val seqNo: Long,
val added: Boolean
)
+ @Serializable
data class DeleteReactionResponse(
+ @SerialName("seqno")
val seqNo: Long,
val removed: Boolean
)
@@ -283,24 +280,23 @@ object OpenGroupApi {
return RequestBody.create("application/json".toMediaType(), parametersAsJSON)
}
- private fun getResponseBody(
+ private suspend fun getResponseBody(
request: Request,
signRequest: Boolean = true,
serverPubKeyHex: String? = null
- ): Promise {
- return send(request, signRequest = signRequest, serverPubKeyHex = serverPubKeyHex).map { response ->
- response.body ?: throw Error.ParsingFailed
- }
+ ): ByteArraySlice {
+ val response = send(request, signRequest = signRequest, serverPubKeyHex = serverPubKeyHex)
+
+ return response.body ?: throw Error.ParsingFailed
}
- private fun getResponseBodyJson(
+ private suspend fun getResponseBodyJson(
request: Request,
signRequest: Boolean = true,
serverPubKeyHex: String? = null
- ): Promise