From c443e79d29ea45191ad8a4bee313d26f703c8d02 Mon Sep 17 00:00:00 2001 From: Krille Date: Thu, 14 Dec 2023 09:13:48 +0100 Subject: [PATCH] fix: Increase timeout for initial sync from 10 seconds to 2 minutes This fixes the response timeout for the initial sync and sets it to 2 minutes instead of 10 seconds. This should increase the speed for the initial sync especially for large accounts. This change also adds some documentation in the code about what timeout does what. --- lib/src/client.dart | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/src/client.dart b/lib/src/client.dart index 9cacf73e..d7dd3ac6 100644 --- a/lib/src/client.dart +++ b/lib/src/client.dart @@ -1695,7 +1695,12 @@ class Client extends MatrixApi { } Object? syncError; await _checkSyncFilter(); + + // The timeout we send to the server for the sync loop. It says to the + // server that we want to receive an empty sync response after this + // amount of time if nothing happens. timeout ??= const Duration(seconds: 30); + final syncRequest = sync( filter: syncFilterId, since: prevBatch, @@ -1711,8 +1716,15 @@ class Client extends MatrixApi { }); _currentSyncId = syncRequest.hashCode; onSyncStatus.add(SyncStatusUpdate(SyncStatus.waitingForResponse)); - final syncResp = - await syncRequest.timeout(timeout + const Duration(seconds: 10)); + + // The timeout for the response from the server. If we do not set a sync + // timeout (for initial sync) we give the server a longer time to + // responde. + final responseTimeout = timeout == Duration.zero + ? const Duration(minutes: 2) + : timeout + const Duration(seconds: 10); + + final syncResp = await syncRequest.timeout(responseTimeout); onSyncStatus.add(SyncStatusUpdate(SyncStatus.processing)); if (syncResp == null) throw syncError ?? 'Unknown sync error'; if (_currentSyncId != syncRequest.hashCode) {