mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-03-21 05:38:49 +03:00
Join room by roomId or room alias
This commit is contained in:
parent
87021dd6ec
commit
eec65fb622
9 changed files with 27 additions and 19 deletions
matrix-sdk-android-rx/src/main/java/im/vector/matrix/rx
matrix-sdk-android/src/main/java/im/vector/matrix/android
api/session/room
internal/session/room
|
@ -95,10 +95,10 @@ class RxSession(private val session: Session) {
|
||||||
session.searchUsersDirectory(search, limit, excludedUserIds, it)
|
session.searchUsersDirectory(search, limit, excludedUserIds, it)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun joinRoom(roomId: String,
|
fun joinRoom(roomIdOrAlias: String,
|
||||||
reason: String? = null,
|
reason: String? = null,
|
||||||
viaServers: List<String> = emptyList()): Single<Unit> = singleBuilder {
|
viaServers: List<String> = emptyList()): Single<Unit> = singleBuilder {
|
||||||
session.joinRoom(roomId, reason, viaServers, it)
|
session.joinRoom(roomIdOrAlias, reason, viaServers, it)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getRoomIdByAlias(roomAlias: String,
|
fun getRoomIdByAlias(roomAlias: String,
|
||||||
|
|
|
@ -35,9 +35,9 @@ interface RoomDirectoryService {
|
||||||
callback: MatrixCallback<PublicRoomsResponse>): Cancelable
|
callback: MatrixCallback<PublicRoomsResponse>): Cancelable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Join a room by id
|
* Join a room by id, or room alias
|
||||||
*/
|
*/
|
||||||
fun joinRoom(roomId: String,
|
fun joinRoom(roomIdOrAlias: String,
|
||||||
reason: String? = null,
|
reason: String? = null,
|
||||||
callback: MatrixCallback<Unit>): Cancelable
|
callback: MatrixCallback<Unit>): Cancelable
|
||||||
|
|
||||||
|
|
|
@ -36,11 +36,11 @@ interface RoomService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Join a room by id
|
* Join a room by id
|
||||||
* @param roomId the roomId of the room to join
|
* @param roomIdOrAlias the roomId or the room alias of the room to join
|
||||||
* @param reason optional reason for joining the room
|
* @param reason optional reason for joining the room
|
||||||
* @param viaServers the servers to attempt to join the room through. One of the servers must be participating in the room.
|
* @param viaServers the servers to attempt to join the room through. One of the servers must be participating in the room.
|
||||||
*/
|
*/
|
||||||
fun joinRoom(roomId: String,
|
fun joinRoom(roomIdOrAlias: String,
|
||||||
reason: String? = null,
|
reason: String? = null,
|
||||||
viaServers: List<String> = emptyList(),
|
viaServers: List<String> = emptyList(),
|
||||||
callback: MatrixCallback<Unit>): Cancelable
|
callback: MatrixCallback<Unit>): Cancelable
|
||||||
|
|
|
@ -21,5 +21,10 @@ import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
@JsonClass(generateAdapter = true)
|
@JsonClass(generateAdapter = true)
|
||||||
internal data class CreateRoomResponse(
|
internal data class CreateRoomResponse(
|
||||||
@Json(name = "room_id") var roomId: String? = null
|
/**
|
||||||
|
* Required. The created room's ID.
|
||||||
|
*/
|
||||||
|
@Json(name = "room_id") var roomId: String
|
||||||
)
|
)
|
||||||
|
|
||||||
|
internal typealias JoinRoomResponse = CreateRoomResponse
|
||||||
|
|
|
@ -44,9 +44,9 @@ internal class DefaultRoomDirectoryService @Inject constructor(private val getPu
|
||||||
.executeBy(taskExecutor)
|
.executeBy(taskExecutor)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun joinRoom(roomId: String, reason: String?, callback: MatrixCallback<Unit>): Cancelable {
|
override fun joinRoom(roomIdOrAlias: String, reason: String?, callback: MatrixCallback<Unit>): Cancelable {
|
||||||
return joinRoomTask
|
return joinRoomTask
|
||||||
.configureWith(JoinRoomTask.Params(roomId, reason)) {
|
.configureWith(JoinRoomTask.Params(roomIdOrAlias, reason)) {
|
||||||
this.callback = callback
|
this.callback = callback
|
||||||
}
|
}
|
||||||
.executeBy(taskExecutor)
|
.executeBy(taskExecutor)
|
||||||
|
|
|
@ -139,9 +139,9 @@ internal class DefaultRoomService @Inject constructor(
|
||||||
.executeBy(taskExecutor)
|
.executeBy(taskExecutor)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun joinRoom(roomId: String, reason: String?, viaServers: List<String>, callback: MatrixCallback<Unit>): Cancelable {
|
override fun joinRoom(roomIdOrAlias: String, reason: String?, viaServers: List<String>, callback: MatrixCallback<Unit>): Cancelable {
|
||||||
return joinRoomTask
|
return joinRoomTask
|
||||||
.configureWith(JoinRoomTask.Params(roomId, reason, viaServers)) {
|
.configureWith(JoinRoomTask.Params(roomIdOrAlias, reason, viaServers)) {
|
||||||
this.callback = callback
|
this.callback = callback
|
||||||
}
|
}
|
||||||
.executeBy(taskExecutor)
|
.executeBy(taskExecutor)
|
||||||
|
|
|
@ -20,6 +20,7 @@ import im.vector.matrix.android.api.session.events.model.Content
|
||||||
import im.vector.matrix.android.api.session.events.model.Event
|
import im.vector.matrix.android.api.session.events.model.Event
|
||||||
import im.vector.matrix.android.api.session.room.model.create.CreateRoomParams
|
import im.vector.matrix.android.api.session.room.model.create.CreateRoomParams
|
||||||
import im.vector.matrix.android.api.session.room.model.create.CreateRoomResponse
|
import im.vector.matrix.android.api.session.room.model.create.CreateRoomResponse
|
||||||
|
import im.vector.matrix.android.api.session.room.model.create.JoinRoomResponse
|
||||||
import im.vector.matrix.android.api.session.room.model.roomdirectory.PublicRoomsParams
|
import im.vector.matrix.android.api.session.room.model.roomdirectory.PublicRoomsParams
|
||||||
import im.vector.matrix.android.api.session.room.model.roomdirectory.PublicRoomsResponse
|
import im.vector.matrix.android.api.session.room.model.roomdirectory.PublicRoomsResponse
|
||||||
import im.vector.matrix.android.api.session.room.model.thirdparty.ThirdPartyProtocol
|
import im.vector.matrix.android.api.session.room.model.thirdparty.ThirdPartyProtocol
|
||||||
|
@ -223,13 +224,13 @@ internal interface RoomAPI {
|
||||||
* Join the given room.
|
* Join the given room.
|
||||||
*
|
*
|
||||||
* @param roomIdOrAlias the room id or alias
|
* @param roomIdOrAlias the room id or alias
|
||||||
* @param server_name the servers to attempt to join the room through
|
* @param viaServers the servers to attempt to join the room through
|
||||||
* @param params the request body
|
* @param params the request body
|
||||||
*/
|
*/
|
||||||
@POST(NetworkConstants.URI_API_PREFIX_PATH_R0 + "join/{roomIdOrAlias}")
|
@POST(NetworkConstants.URI_API_PREFIX_PATH_R0 + "join/{roomIdOrAlias}")
|
||||||
fun join(@Path("roomIdOrAlias") roomIdOrAlias: String,
|
fun join(@Path("roomIdOrAlias") roomIdOrAlias: String,
|
||||||
@Query("server_name") viaServers: List<String>,
|
@Query("server_name") viaServers: List<String>,
|
||||||
@Body params: Map<String, String?>): Call<Unit>
|
@Body params: Map<String, String?>): Call<JoinRoomResponse>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Leave the given room.
|
* Leave the given room.
|
||||||
|
|
|
@ -66,7 +66,7 @@ internal class DefaultCreateRoomTask @Inject constructor(
|
||||||
val createRoomResponse = executeRequest<CreateRoomResponse>(eventBus) {
|
val createRoomResponse = executeRequest<CreateRoomResponse>(eventBus) {
|
||||||
apiCall = roomAPI.createRoom(createRoomParams)
|
apiCall = roomAPI.createRoom(createRoomParams)
|
||||||
}
|
}
|
||||||
val roomId = createRoomResponse.roomId!!
|
val roomId = createRoomResponse.roomId
|
||||||
// Wait for room to come back from the sync (but it can maybe be in the DB if the sync response is received before)
|
// Wait for room to come back from the sync (but it can maybe be in the DB if the sync response is received before)
|
||||||
try {
|
try {
|
||||||
awaitNotEmptyResult(realmConfiguration, TimeUnit.MINUTES.toMillis(1L)) { realm ->
|
awaitNotEmptyResult(realmConfiguration, TimeUnit.MINUTES.toMillis(1L)) { realm ->
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
package im.vector.matrix.android.internal.session.room.membership.joining
|
package im.vector.matrix.android.internal.session.room.membership.joining
|
||||||
|
|
||||||
import im.vector.matrix.android.api.session.room.failure.JoinRoomFailure
|
import im.vector.matrix.android.api.session.room.failure.JoinRoomFailure
|
||||||
|
import im.vector.matrix.android.api.session.room.model.create.JoinRoomResponse
|
||||||
import im.vector.matrix.android.internal.database.awaitNotEmptyResult
|
import im.vector.matrix.android.internal.database.awaitNotEmptyResult
|
||||||
import im.vector.matrix.android.internal.database.model.RoomEntity
|
import im.vector.matrix.android.internal.database.model.RoomEntity
|
||||||
import im.vector.matrix.android.internal.database.model.RoomEntityFields
|
import im.vector.matrix.android.internal.database.model.RoomEntityFields
|
||||||
|
@ -33,7 +34,7 @@ import javax.inject.Inject
|
||||||
|
|
||||||
internal interface JoinRoomTask : Task<JoinRoomTask.Params, Unit> {
|
internal interface JoinRoomTask : Task<JoinRoomTask.Params, Unit> {
|
||||||
data class Params(
|
data class Params(
|
||||||
val roomId: String,
|
val roomIdOrAlias: String,
|
||||||
val reason: String?,
|
val reason: String?,
|
||||||
val viaServers: List<String> = emptyList()
|
val viaServers: List<String> = emptyList()
|
||||||
)
|
)
|
||||||
|
@ -48,19 +49,20 @@ internal class DefaultJoinRoomTask @Inject constructor(
|
||||||
) : JoinRoomTask {
|
) : JoinRoomTask {
|
||||||
|
|
||||||
override suspend fun execute(params: JoinRoomTask.Params) {
|
override suspend fun execute(params: JoinRoomTask.Params) {
|
||||||
executeRequest<Unit>(eventBus) {
|
val joinRoomResponse = executeRequest<JoinRoomResponse>(eventBus) {
|
||||||
apiCall = roomAPI.join(params.roomId, params.viaServers, mapOf("reason" to params.reason))
|
apiCall = roomAPI.join(params.roomIdOrAlias, params.viaServers, mapOf("reason" to params.reason))
|
||||||
}
|
}
|
||||||
// Wait for room to come back from the sync (but it can maybe be in the DB is the sync response is received before)
|
// Wait for room to come back from the sync (but it can maybe be in the DB is the sync response is received before)
|
||||||
|
val roomId = joinRoomResponse.roomId
|
||||||
try {
|
try {
|
||||||
awaitNotEmptyResult(realmConfiguration, TimeUnit.MINUTES.toMillis(1L)) { realm ->
|
awaitNotEmptyResult(realmConfiguration, TimeUnit.MINUTES.toMillis(1L)) { realm ->
|
||||||
realm.where(RoomEntity::class.java)
|
realm.where(RoomEntity::class.java)
|
||||||
.equalTo(RoomEntityFields.ROOM_ID, params.roomId)
|
.equalTo(RoomEntityFields.ROOM_ID, roomId)
|
||||||
}
|
}
|
||||||
} catch (exception: TimeoutCancellationException) {
|
} catch (exception: TimeoutCancellationException) {
|
||||||
throw JoinRoomFailure.JoinedWithTimeout
|
throw JoinRoomFailure.JoinedWithTimeout
|
||||||
}
|
}
|
||||||
setReadMarkers(params.roomId)
|
setReadMarkers(roomId)
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun setReadMarkers(roomId: String) {
|
private suspend fun setReadMarkers(roomId: String) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue