|
|
@ -20,14 +20,14 @@ import io.element.android.libraries.core.coroutine.CoroutineDispatchers |
|
|
|
import io.element.android.libraries.matrix.api.MatrixClient |
|
|
|
import io.element.android.libraries.matrix.api.MatrixClient |
|
|
|
import io.element.android.libraries.matrix.api.core.RoomId |
|
|
|
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.core.UserId |
|
|
|
|
|
|
|
import io.element.android.libraries.matrix.api.media.MediaResolver |
|
|
|
|
|
|
|
import io.element.android.libraries.matrix.api.room.MatrixRoom |
|
|
|
|
|
|
|
import io.element.android.libraries.matrix.api.room.RoomSummaryDataSource |
|
|
|
import io.element.android.libraries.matrix.impl.media.RustMediaResolver |
|
|
|
import io.element.android.libraries.matrix.impl.media.RustMediaResolver |
|
|
|
import io.element.android.libraries.matrix.impl.room.RustMatrixRoom |
|
|
|
import io.element.android.libraries.matrix.impl.room.RustMatrixRoom |
|
|
|
import io.element.android.libraries.matrix.impl.room.RustRoomSummaryDataSource |
|
|
|
import io.element.android.libraries.matrix.impl.room.RustRoomSummaryDataSource |
|
|
|
import io.element.android.libraries.matrix.impl.sync.SlidingSyncObserverProxy |
|
|
|
import io.element.android.libraries.matrix.impl.sync.SlidingSyncObserverProxy |
|
|
|
import io.element.android.libraries.sessionstorage.api.SessionStore |
|
|
|
import io.element.android.libraries.sessionstorage.api.SessionStore |
|
|
|
import io.element.android.libraries.matrix.api.media.MediaResolver |
|
|
|
|
|
|
|
import io.element.android.libraries.matrix.api.room.MatrixRoom |
|
|
|
|
|
|
|
import io.element.android.libraries.matrix.api.room.RoomSummaryDataSource |
|
|
|
|
|
|
|
import kotlinx.coroutines.CoroutineScope |
|
|
|
import kotlinx.coroutines.CoroutineScope |
|
|
|
import kotlinx.coroutines.withContext |
|
|
|
import kotlinx.coroutines.withContext |
|
|
|
import org.matrix.rustcomponents.sdk.Client |
|
|
|
import org.matrix.rustcomponents.sdk.Client |
|
|
@ -38,6 +38,7 @@ import org.matrix.rustcomponents.sdk.SlidingSyncMode |
|
|
|
import org.matrix.rustcomponents.sdk.SlidingSyncRequestListFilters |
|
|
|
import org.matrix.rustcomponents.sdk.SlidingSyncRequestListFilters |
|
|
|
import org.matrix.rustcomponents.sdk.SlidingSyncViewBuilder |
|
|
|
import org.matrix.rustcomponents.sdk.SlidingSyncViewBuilder |
|
|
|
import org.matrix.rustcomponents.sdk.TaskHandle |
|
|
|
import org.matrix.rustcomponents.sdk.TaskHandle |
|
|
|
|
|
|
|
import org.matrix.rustcomponents.sdk.use |
|
|
|
import timber.log.Timber |
|
|
|
import timber.log.Timber |
|
|
|
import java.io.File |
|
|
|
import java.io.File |
|
|
|
import java.util.concurrent.atomic.AtomicBoolean |
|
|
|
import java.util.concurrent.atomic.AtomicBoolean |
|
|
@ -94,7 +95,9 @@ class RustMatrixClient constructor( |
|
|
|
.sendUpdatesForItems(true) |
|
|
|
.sendUpdatesForItems(true) |
|
|
|
.syncMode(mode = SlidingSyncMode.SELECTIVE) |
|
|
|
.syncMode(mode = SlidingSyncMode.SELECTIVE) |
|
|
|
.addRange(0u, 20u) |
|
|
|
.addRange(0u, 20u) |
|
|
|
.build() |
|
|
|
.use { |
|
|
|
|
|
|
|
it.build() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private val slidingSync = client |
|
|
|
private val slidingSync = client |
|
|
|
.slidingSync() |
|
|
|
.slidingSync() |
|
|
@ -102,10 +105,12 @@ class RustMatrixClient constructor( |
|
|
|
.withCommonExtensions() |
|
|
|
.withCommonExtensions() |
|
|
|
.coldCache("ElementX") |
|
|
|
.coldCache("ElementX") |
|
|
|
.addView(visibleRoomsView) |
|
|
|
.addView(visibleRoomsView) |
|
|
|
.build() |
|
|
|
.use { |
|
|
|
|
|
|
|
it.build() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private val slidingSyncObserverProxy = SlidingSyncObserverProxy(coroutineScope) |
|
|
|
private val slidingSyncObserverProxy = SlidingSyncObserverProxy(coroutineScope) |
|
|
|
private val roomSummaryDataSource: RustRoomSummaryDataSource = |
|
|
|
private val rustRoomSummaryDataSource: RustRoomSummaryDataSource = |
|
|
|
RustRoomSummaryDataSource( |
|
|
|
RustRoomSummaryDataSource( |
|
|
|
slidingSyncObserverProxy.updateSummaryFlow, |
|
|
|
slidingSyncObserverProxy.updateSummaryFlow, |
|
|
|
slidingSync, |
|
|
|
slidingSync, |
|
|
@ -113,6 +118,10 @@ class RustMatrixClient constructor( |
|
|
|
dispatchers, |
|
|
|
dispatchers, |
|
|
|
::onRestartSync |
|
|
|
::onRestartSync |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override val roomSummaryDataSource: RoomSummaryDataSource |
|
|
|
|
|
|
|
get() = rustRoomSummaryDataSource |
|
|
|
|
|
|
|
|
|
|
|
private var slidingSyncObserverToken: TaskHandle? = null |
|
|
|
private var slidingSyncObserverToken: TaskHandle? = null |
|
|
|
|
|
|
|
|
|
|
|
private val mediaResolver = RustMediaResolver(this) |
|
|
|
private val mediaResolver = RustMediaResolver(this) |
|
|
@ -120,7 +129,7 @@ class RustMatrixClient constructor( |
|
|
|
|
|
|
|
|
|
|
|
init { |
|
|
|
init { |
|
|
|
client.setDelegate(clientDelegate) |
|
|
|
client.setDelegate(clientDelegate) |
|
|
|
roomSummaryDataSource.init() |
|
|
|
rustRoomSummaryDataSource.init() |
|
|
|
slidingSync.setObserver(slidingSyncObserverProxy) |
|
|
|
slidingSync.setObserver(slidingSyncObserverProxy) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -141,8 +150,6 @@ class RustMatrixClient constructor( |
|
|
|
) |
|
|
|
) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun roomSummaryDataSource(): RoomSummaryDataSource = roomSummaryDataSource |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun mediaResolver(): MediaResolver = mediaResolver |
|
|
|
override fun mediaResolver(): MediaResolver = mediaResolver |
|
|
|
|
|
|
|
|
|
|
|
override fun startSync() { |
|
|
|
override fun startSync() { |
|
|
@ -154,15 +161,17 @@ class RustMatrixClient constructor( |
|
|
|
|
|
|
|
|
|
|
|
override fun stopSync() { |
|
|
|
override fun stopSync() { |
|
|
|
if (isSyncing.compareAndSet(true, false)) { |
|
|
|
if (isSyncing.compareAndSet(true, false)) { |
|
|
|
slidingSyncObserverToken?.cancel() |
|
|
|
slidingSyncObserverToken?.use { it.cancel() } |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun close() { |
|
|
|
private fun close() { |
|
|
|
stopSync() |
|
|
|
stopSync() |
|
|
|
slidingSync.setObserver(null) |
|
|
|
slidingSync.setObserver(null) |
|
|
|
roomSummaryDataSource.close() |
|
|
|
rustRoomSummaryDataSource.close() |
|
|
|
client.setDelegate(null) |
|
|
|
client.setDelegate(null) |
|
|
|
|
|
|
|
visibleRoomsView.destroy() |
|
|
|
|
|
|
|
slidingSync.destroy() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override suspend fun logout() = withContext(dispatchers.io) { |
|
|
|
override suspend fun logout() = withContext(dispatchers.io) { |
|
|
@ -172,6 +181,7 @@ class RustMatrixClient constructor( |
|
|
|
} catch (failure: Throwable) { |
|
|
|
} catch (failure: Throwable) { |
|
|
|
Timber.e(failure, "Fail to call logout on HS. Still delete local files.") |
|
|
|
Timber.e(failure, "Fail to call logout on HS. Still delete local files.") |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
client.destroy() |
|
|
|
baseDirectory.deleteSessionDirectory(userID = client.userId()) |
|
|
|
baseDirectory.deleteSessionDirectory(userID = client.userId()) |
|
|
|
sessionStore.removeSession(client.userId()) |
|
|
|
sessionStore.removeSession(client.userId()) |
|
|
|
} |
|
|
|
} |
|
|
|