Surface send poll start API from rust sdk (#1140)
Rust api added in: https://github.com/matrix-org/matrix-rust-sdk/pull/2391 Closes https://github.com/vector-im/element-meta/issues/2010
This commit is contained in:
parent
3712e48d39
commit
f5fd505bc2
4 changed files with 67 additions and 1 deletions
|
|
@ -27,6 +27,7 @@ import io.element.android.libraries.matrix.api.media.FileInfo
|
||||||
import io.element.android.libraries.matrix.api.media.ImageInfo
|
import io.element.android.libraries.matrix.api.media.ImageInfo
|
||||||
import io.element.android.libraries.matrix.api.media.MediaUploadHandler
|
import io.element.android.libraries.matrix.api.media.MediaUploadHandler
|
||||||
import io.element.android.libraries.matrix.api.media.VideoInfo
|
import io.element.android.libraries.matrix.api.media.VideoInfo
|
||||||
|
import io.element.android.libraries.matrix.api.poll.PollKind
|
||||||
import io.element.android.libraries.matrix.api.room.location.AssetType
|
import io.element.android.libraries.matrix.api.room.location.AssetType
|
||||||
import io.element.android.libraries.matrix.api.timeline.MatrixTimeline
|
import io.element.android.libraries.matrix.api.timeline.MatrixTimeline
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
|
@ -141,6 +142,21 @@ interface MatrixRoom : Closeable {
|
||||||
assetType: AssetType? = null,
|
assetType: AssetType? = null,
|
||||||
): Result<Unit>
|
): Result<Unit>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a poll in the room.
|
||||||
|
*
|
||||||
|
* @param question The question to ask.
|
||||||
|
* @param answers The list of answers.
|
||||||
|
* @param maxSelections The maximum number of answers that can be selected.
|
||||||
|
* @param pollKind The kind of poll to create.
|
||||||
|
*/
|
||||||
|
suspend fun createPoll(
|
||||||
|
question: String,
|
||||||
|
answers: List<String>,
|
||||||
|
maxSelections: Int,
|
||||||
|
pollKind: PollKind,
|
||||||
|
): Result<Unit>
|
||||||
|
|
||||||
override fun close() = destroy()
|
override fun close() = destroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,3 +23,8 @@ fun RustPollKind.map(): PollKind = when (this) {
|
||||||
RustPollKind.DISCLOSED -> PollKind.Disclosed
|
RustPollKind.DISCLOSED -> PollKind.Disclosed
|
||||||
RustPollKind.UNDISCLOSED -> PollKind.Undisclosed
|
RustPollKind.UNDISCLOSED -> PollKind.Undisclosed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun PollKind.toInner(): RustPollKind = when (this) {
|
||||||
|
PollKind.Disclosed -> RustPollKind.DISCLOSED
|
||||||
|
PollKind.Undisclosed -> RustPollKind.UNDISCLOSED
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ import io.element.android.libraries.matrix.api.media.FileInfo
|
||||||
import io.element.android.libraries.matrix.api.media.ImageInfo
|
import io.element.android.libraries.matrix.api.media.ImageInfo
|
||||||
import io.element.android.libraries.matrix.api.media.MediaUploadHandler
|
import io.element.android.libraries.matrix.api.media.MediaUploadHandler
|
||||||
import io.element.android.libraries.matrix.api.media.VideoInfo
|
import io.element.android.libraries.matrix.api.media.VideoInfo
|
||||||
|
import io.element.android.libraries.matrix.api.poll.PollKind
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
|
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
|
||||||
import io.element.android.libraries.matrix.api.room.MessageEventType
|
import io.element.android.libraries.matrix.api.room.MessageEventType
|
||||||
|
|
@ -41,6 +42,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.EventType
|
||||||
import io.element.android.libraries.matrix.impl.core.toProgressWatcher
|
import io.element.android.libraries.matrix.impl.core.toProgressWatcher
|
||||||
import io.element.android.libraries.matrix.impl.media.MediaUploadHandlerImpl
|
import io.element.android.libraries.matrix.impl.media.MediaUploadHandlerImpl
|
||||||
import io.element.android.libraries.matrix.impl.media.map
|
import io.element.android.libraries.matrix.impl.media.map
|
||||||
|
import io.element.android.libraries.matrix.impl.poll.toInner
|
||||||
import io.element.android.libraries.matrix.impl.room.location.toInner
|
import io.element.android.libraries.matrix.impl.room.location.toInner
|
||||||
import io.element.android.libraries.matrix.impl.timeline.RustMatrixTimeline
|
import io.element.android.libraries.matrix.impl.timeline.RustMatrixTimeline
|
||||||
import io.element.android.libraries.matrix.impl.util.destroyAll
|
import io.element.android.libraries.matrix.impl.util.destroyAll
|
||||||
|
|
@ -378,7 +380,24 @@ class RustMatrixRoom(
|
||||||
description = description,
|
description = description,
|
||||||
zoomLevel = zoomLevel?.toUByte(),
|
zoomLevel = zoomLevel?.toUByte(),
|
||||||
assetType = assetType?.toInner(),
|
assetType = assetType?.toInner(),
|
||||||
txnId = genTransactionId()
|
txnId = genTransactionId(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun createPoll(
|
||||||
|
question: String,
|
||||||
|
answers: List<String>,
|
||||||
|
maxSelections: Int,
|
||||||
|
pollKind: PollKind,
|
||||||
|
): Result<Unit> = withContext(roomDispatcher) {
|
||||||
|
runCatching {
|
||||||
|
innerRoom.createPoll(
|
||||||
|
question = question,
|
||||||
|
answers = answers,
|
||||||
|
maxSelections = maxSelections.toUByte(),
|
||||||
|
pollKind = pollKind.toInner(),
|
||||||
|
txnId = genTransactionId(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ import io.element.android.libraries.matrix.api.media.FileInfo
|
||||||
import io.element.android.libraries.matrix.api.media.ImageInfo
|
import io.element.android.libraries.matrix.api.media.ImageInfo
|
||||||
import io.element.android.libraries.matrix.api.media.MediaUploadHandler
|
import io.element.android.libraries.matrix.api.media.MediaUploadHandler
|
||||||
import io.element.android.libraries.matrix.api.media.VideoInfo
|
import io.element.android.libraries.matrix.api.media.VideoInfo
|
||||||
|
import io.element.android.libraries.matrix.api.poll.PollKind
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
|
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
|
||||||
import io.element.android.libraries.matrix.api.room.MessageEventType
|
import io.element.android.libraries.matrix.api.room.MessageEventType
|
||||||
|
|
@ -83,6 +84,7 @@ class FakeMatrixRoom(
|
||||||
private var forwardEventResult = Result.success(Unit)
|
private var forwardEventResult = Result.success(Unit)
|
||||||
private var reportContentResult = Result.success(Unit)
|
private var reportContentResult = Result.success(Unit)
|
||||||
private var sendLocationResult = Result.success(Unit)
|
private var sendLocationResult = Result.success(Unit)
|
||||||
|
private var createPollResult = Result.success(Unit)
|
||||||
private var progressCallbackValues = emptyList<Pair<Long, Long>>()
|
private var progressCallbackValues = emptyList<Pair<Long, Long>>()
|
||||||
val editMessageCalls = mutableListOf<String>()
|
val editMessageCalls = mutableListOf<String>()
|
||||||
|
|
||||||
|
|
@ -104,6 +106,9 @@ class FakeMatrixRoom(
|
||||||
private val _sentLocations = mutableListOf<SendLocationInvocation>()
|
private val _sentLocations = mutableListOf<SendLocationInvocation>()
|
||||||
val sentLocations: List<SendLocationInvocation> = _sentLocations
|
val sentLocations: List<SendLocationInvocation> = _sentLocations
|
||||||
|
|
||||||
|
private val _createPollInvocations = mutableListOf<CreatePollInvocation>()
|
||||||
|
val createPollInvocations: List<CreatePollInvocation> = _createPollInvocations
|
||||||
|
|
||||||
var invitedUserId: UserId? = null
|
var invitedUserId: UserId? = null
|
||||||
private set
|
private set
|
||||||
|
|
||||||
|
|
@ -305,6 +310,16 @@ class FakeMatrixRoom(
|
||||||
return sendLocationResult
|
return sendLocationResult
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun createPoll(
|
||||||
|
question: String,
|
||||||
|
answers: List<String>,
|
||||||
|
maxSelections: Int,
|
||||||
|
pollKind: PollKind
|
||||||
|
): Result<Unit> = simulateLongTask {
|
||||||
|
_createPollInvocations.add(CreatePollInvocation(question, answers, maxSelections, pollKind))
|
||||||
|
return createPollResult
|
||||||
|
}
|
||||||
|
|
||||||
fun givenLeaveRoomError(throwable: Throwable?) {
|
fun givenLeaveRoomError(throwable: Throwable?) {
|
||||||
this.leaveRoomError = throwable
|
this.leaveRoomError = throwable
|
||||||
}
|
}
|
||||||
|
|
@ -397,6 +412,10 @@ class FakeMatrixRoom(
|
||||||
sendLocationResult = result
|
sendLocationResult = result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun givenCreatePollResult(result: Result<Unit>) {
|
||||||
|
createPollResult = result
|
||||||
|
}
|
||||||
|
|
||||||
fun givenProgressCallbackValues(values: List<Pair<Long, Long>>) {
|
fun givenProgressCallbackValues(values: List<Pair<Long, Long>>) {
|
||||||
progressCallbackValues = values
|
progressCallbackValues = values
|
||||||
}
|
}
|
||||||
|
|
@ -409,3 +428,10 @@ data class SendLocationInvocation(
|
||||||
val zoomLevel: Int?,
|
val zoomLevel: Int?,
|
||||||
val assetType: AssetType?,
|
val assetType: AssetType?,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
data class CreatePollInvocation(
|
||||||
|
val question: String,
|
||||||
|
val answers: List<String>,
|
||||||
|
val maxSelections: Int,
|
||||||
|
val pollKind: PollKind,
|
||||||
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue