Merge remote-tracking branch 'origin/develop' into feature/fre/create_room_flow_persist_data

This commit is contained in:
Florian Renaud 2023-04-13 23:45:33 +02:00
commit 33bac15b44
29 changed files with 629 additions and 15 deletions

View file

@ -20,7 +20,11 @@ import io.element.android.libraries.matrix.api.BuildConfig
import java.io.Serializable
@JvmInline
value class RoomId(val value: String) : Serializable
value class RoomId(val value: String) : Serializable {
override fun toString(): String {
return value
}
}
fun String.asRoomId() = if (BuildConfig.DEBUG && !MatrixPatterns.isRoomId(this)) {
error("`$this` is not a valid room Id")

View file

@ -20,7 +20,11 @@ import io.element.android.libraries.matrix.api.BuildConfig
import java.io.Serializable
@JvmInline
value class UserId(val value: String) : Serializable
value class UserId(val value: String) : Serializable {
override fun toString(): String {
return value
}
}
fun String.asUserId() = if (BuildConfig.DEBUG && !MatrixPatterns.isUserId(this)) {
error("`$this` is not a valid user Id")

View file

@ -19,8 +19,14 @@ package io.element.android.libraries.matrix.api.permalink
import io.element.android.libraries.matrix.api.config.MatrixConfiguration
import io.element.android.libraries.matrix.api.core.MatrixPatterns
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.UserId
object PermalinkBuilder {
private const val ROOM_PATH = "room/"
private const val USER_PATH = "user/"
private const val GROUP_PATH = "group/"
private val permalinkBaseUrl get() = (MatrixConfiguration.clientPermalinkBaseUrl ?: MatrixConfiguration.matrixToPermalinkBaseUrl).also {
var baseUrl = it
if (!baseUrl.endsWith("/")) {
@ -31,6 +37,21 @@ object PermalinkBuilder {
}
}
fun permalinkForUser(userId: UserId): Result<String> {
return if (MatrixPatterns.isUserId(userId.value)) {
val url = buildString {
append(permalinkBaseUrl)
if (!isMatrixTo()) {
append(USER_PATH)
}
append(userId.value)
}
Result.success(url)
} else {
Result.failure(PermalinkBuilderError.InvalidRoomAlias)
}
}
fun permalinkForRoomAlias(roomAlias: String): Result<String> {
return if (MatrixPatterns.isRoomAlias(roomAlias)) {
Result.success(permalinkForRoomAliasOrId(roomAlias))
@ -49,10 +70,18 @@ object PermalinkBuilder {
private fun permalinkForRoomAliasOrId(value: String): String {
val id = escapeId(value)
return permalinkBaseUrl + id
return buildString {
append(permalinkBaseUrl)
if (!isMatrixTo()) {
append(ROOM_PATH)
}
append(id)
}
}
private fun escapeId(value: String) = value.replace("/", "%2F")
private fun isMatrixTo(): Boolean = permalinkBaseUrl.startsWith(MatrixConfiguration.matrixToPermalinkBaseUrl)
}
sealed class PermalinkBuilderError : Throwable() {

View file

@ -18,6 +18,7 @@ package io.element.android.libraries.matrix.api.room
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.timeline.MatrixTimeline
import kotlinx.coroutines.flow.Flow
import java.io.Closeable
@ -38,6 +39,8 @@ interface MatrixRoom: Closeable {
suspend fun memberCount(): Int
fun getMember(userId: UserId): RoomMember?
fun syncUpdateFlow(): Flow<Long>
fun timeline(): MatrixTimeline

View file

@ -16,6 +16,10 @@
package io.element.android.libraries.matrix.api.room
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
@Parcelize
data class RoomMember(
val userId: String,
val displayName: String?,
@ -23,9 +27,11 @@ data class RoomMember(
val membership: RoomMembershipState,
val isNameAmbiguous: Boolean,
val powerLevel: Long,
val normalizedPowerLevel: Long
)
val normalizedPowerLevel: Long,
val isIgnored: Boolean,
) : Parcelable
enum class RoomMembershipState {
@Parcelize
enum class RoomMembershipState : Parcelable {
BAN, INVITE, JOIN, KNOCK, LEAVE
}