Sending queue : adjust to match the latest rust api
This commit is contained in:
parent
bdd6a7959a
commit
cd18e5a981
10 changed files with 169 additions and 123 deletions
|
|
@ -41,7 +41,7 @@ import dagger.assisted.AssistedInject
|
|||
import im.vector.app.features.analytics.plan.JoinedRoom
|
||||
import io.element.android.anvilannotations.ContributesNode
|
||||
import io.element.android.appnav.loggedin.LoggedInNode
|
||||
import io.element.android.appnav.loggedin.SendingQueue
|
||||
import io.element.android.appnav.loggedin.SendQueues
|
||||
import io.element.android.appnav.room.RoomFlowNode
|
||||
import io.element.android.appnav.room.RoomNavigationTarget
|
||||
import io.element.android.appnav.room.joined.JoinedRoomLoadedFlowNode
|
||||
|
|
@ -103,7 +103,7 @@ class LoggedInFlowNode @AssistedInject constructor(
|
|||
private val roomDirectoryEntryPoint: RoomDirectoryEntryPoint,
|
||||
private val shareEntryPoint: ShareEntryPoint,
|
||||
private val matrixClient: MatrixClient,
|
||||
private val sendingQueue: SendingQueue,
|
||||
private val sendingQueue: SendQueues,
|
||||
snackbarDispatcher: SnackbarDispatcher,
|
||||
) : BaseFlowNode<LoggedInFlowNode.NavTarget>(
|
||||
backstack = BackStack(
|
||||
|
|
|
|||
|
|
@ -22,44 +22,39 @@ import io.element.android.features.networkmonitor.api.NetworkStatus
|
|||
import io.element.android.libraries.di.SessionScope
|
||||
import io.element.android.libraries.di.SingleIn
|
||||
import io.element.android.libraries.matrix.api.MatrixClient
|
||||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import timber.log.Timber
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
import javax.inject.Inject
|
||||
|
||||
private const val SENDING_QUEUE_MIN_RETRY_DELAY = 250L
|
||||
|
||||
@VisibleForTesting
|
||||
const val SENDING_QUEUE_MAX_RETRY_DELAY = 5000L
|
||||
const val SENDING_QUEUE_RETRY_DELAY = 1500L
|
||||
|
||||
@SingleIn(SessionScope::class)
|
||||
class SendingQueue @Inject constructor(
|
||||
class SendQueues @Inject constructor(
|
||||
private val matrixClient: MatrixClient,
|
||||
private val networkMonitor: NetworkMonitor,
|
||||
) {
|
||||
private val retryCount = AtomicInteger(0)
|
||||
|
||||
fun launchIn(coroutineScope: CoroutineScope) {
|
||||
combine(
|
||||
networkMonitor.connectivity,
|
||||
matrixClient.sendingQueueStatus(),
|
||||
) { networkStatus, isSendingQueueEnabled ->
|
||||
Pair(networkStatus, isSendingQueueEnabled)
|
||||
}.onEach { (networkStatus, isSendingQueueEnabled) ->
|
||||
Timber.d("Network status: $networkStatus, isSendingQueueEnabled: $isSendingQueueEnabled")
|
||||
if (networkStatus == NetworkStatus.Online && !isSendingQueueEnabled) {
|
||||
val retryDelay =
|
||||
(SENDING_QUEUE_MIN_RETRY_DELAY * retryCount.incrementAndGet()).coerceIn(SENDING_QUEUE_MIN_RETRY_DELAY, SENDING_QUEUE_MAX_RETRY_DELAY)
|
||||
Timber.d("Retry enabling sending queue in $retryDelay ms")
|
||||
delay(retryDelay)
|
||||
} else {
|
||||
retryCount.set(0)
|
||||
networkMonitor.connectivity
|
||||
.onEach { networkStatus ->
|
||||
matrixClient.setAllSendQueuesEnabled(enabled = networkStatus == NetworkStatus.Online)
|
||||
}
|
||||
matrixClient.setSendingQueueEnabled(enabled = networkStatus == NetworkStatus.Online)
|
||||
}.launchIn(coroutineScope)
|
||||
.launchIn(coroutineScope)
|
||||
|
||||
matrixClient.sendQueueDisabledFlow()
|
||||
.onEach { roomId: RoomId ->
|
||||
Timber.d("Send queue disabled for room $roomId")
|
||||
if (networkMonitor.connectivity.value == NetworkStatus.Online) {
|
||||
delay(SENDING_QUEUE_RETRY_DELAY)
|
||||
matrixClient.getRoom(roomId)?.use { room ->
|
||||
room.setSendQueueEnabled(enabled = true)
|
||||
}
|
||||
}
|
||||
}.launchIn(coroutineScope)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue