From d9f1d3fc85d93075b1c0d1f34d90b723803755aa Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 17 Oct 2018 14:46:36 +0200 Subject: [PATCH] Sync : save token --- .../internal/events/sync/SyncModule.kt | 6 ++++- .../internal/events/sync/SyncRequest.kt | 2 +- .../internal/events/sync/SyncTokenStore.kt | 26 +++++++++++++++++++ .../internal/events/sync/job/SyncThread.kt | 7 +++-- 4 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/events/sync/SyncTokenStore.kt diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/events/sync/SyncModule.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/events/sync/SyncModule.kt index 3c545172..03bcea54 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/events/sync/SyncModule.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/events/sync/SyncModule.kt @@ -30,7 +30,11 @@ class SyncModule : Module { } scope(DefaultSession.SCOPE) { - SyncThread(get(), get()) + SyncTokenStore(get()) + } + + scope(DefaultSession.SCOPE) { + SyncThread(get(), get(), get()) } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/events/sync/SyncRequest.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/events/sync/SyncRequest.kt index 69a034d8..0048ae1b 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/events/sync/SyncRequest.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/events/sync/SyncRequest.kt @@ -46,7 +46,7 @@ class SyncRequest(private val syncAPI: SyncAPI, Failure.Unknown(RuntimeException("Sync response shouln't be null")) }.flatMap { try { - syncResponseHandler.handleResponse(it, null, false) + syncResponseHandler.handleResponse(it, token, false) Either.right(it) } catch (exception: Exception) { Either.Left(Failure.Unknown(exception)) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/events/sync/SyncTokenStore.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/events/sync/SyncTokenStore.kt new file mode 100644 index 00000000..46df7257 --- /dev/null +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/events/sync/SyncTokenStore.kt @@ -0,0 +1,26 @@ +package im.vector.matrix.android.internal.events.sync + +import im.vector.matrix.android.internal.database.model.SyncEntity +import io.realm.Realm +import io.realm.RealmConfiguration + +class SyncTokenStore(private val realmConfiguration: RealmConfiguration) { + + fun getLastToken(): String? { + val realm = Realm.getInstance(realmConfiguration) + val token = realm.where(SyncEntity::class.java).findFirst()?.nextBatch + realm.close() + return token + } + + fun saveToken(token: String?) { + val realm = Realm.getInstance(realmConfiguration) + realm.executeTransaction { + val sync = SyncEntity(token) + it.insertOrUpdate(sync) + } + realm.close() + } + + +} \ No newline at end of file diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/events/sync/job/SyncThread.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/events/sync/job/SyncThread.kt index 623517be..b865e711 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/events/sync/job/SyncThread.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/events/sync/job/SyncThread.kt @@ -4,6 +4,7 @@ import im.vector.matrix.android.api.MatrixCallback import im.vector.matrix.android.api.failure.Failure import im.vector.matrix.android.api.util.Cancelable import im.vector.matrix.android.internal.events.sync.SyncRequest +import im.vector.matrix.android.internal.events.sync.SyncTokenStore import im.vector.matrix.android.internal.events.sync.data.SyncResponse import im.vector.matrix.android.internal.network.NetworkConnectivityChecker import timber.log.Timber @@ -12,7 +13,8 @@ import java.util.concurrent.CountDownLatch private const val RETRY_WAIT_TIME_MS = 10_000L class SyncThread(private val syncRequest: SyncRequest, - private val networkConnectivityChecker: NetworkConnectivityChecker + private val networkConnectivityChecker: NetworkConnectivityChecker, + private val syncTokenStore: SyncTokenStore ) : Thread(), NetworkConnectivityChecker.Listener { enum class State { @@ -25,7 +27,7 @@ class SyncThread(private val syncRequest: SyncRequest, private var state: State = State.IDLE private val lock = Object() - private var nextBatch: String? = null + private var nextBatch = syncTokenStore.getLastToken() private var cancelableRequest: Cancelable? = null fun restart() { @@ -75,6 +77,7 @@ class SyncThread(private val syncRequest: SyncRequest, cancelableRequest = syncRequest.execute(nextBatch, object : MatrixCallback { override fun onSuccess(data: SyncResponse) { nextBatch = data.nextBatch + syncTokenStore.saveToken(nextBatch) latch.countDown() }