about summary refs log tree commit diff
path: root/LibMatrix
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-04-23 23:39:17 +0200
committerRory& <root@rory.gay>2025-04-23 23:39:56 +0200
commit50f8db5284c344512ecf010bbe58857b69c5535f (patch)
tree176041be5a0e2f7a96e34c8a877d8cc16b6f81e0 /LibMatrix
parentUpdate devtestbot to use bot utils (diff)
downloadLibMatrix-50f8db5284c344512ecf010bbe58857b69c5535f.tar.xz
Allow early return in SyncHelper, trim access token if path used, fix shutdown of command listener
Diffstat (limited to 'LibMatrix')
-rw-r--r--LibMatrix/Helpers/SyncHelper.cs23
-rw-r--r--LibMatrix/Helpers/SyncStateResolver.cs2
2 files changed, 18 insertions, 7 deletions
diff --git a/LibMatrix/Helpers/SyncHelper.cs b/LibMatrix/Helpers/SyncHelper.cs

index bdbd0b4..abbf541 100644 --- a/LibMatrix/Helpers/SyncHelper.cs +++ b/LibMatrix/Helpers/SyncHelper.cs
@@ -80,7 +80,7 @@ public class SyncHelper(AuthenticatedHomeserverGeneric homeserver, ILogger? logg _filterIsDirty = false; } - public async Task<SyncResponse?> SyncAsync(CancellationToken? cancellationToken = null) { + public async Task<SyncResponse?> SyncAsync(CancellationToken? cancellationToken = null, bool noDelay = false) { if (homeserver is null) { Console.WriteLine("Null passed as homeserver for SyncHelper!"); throw new ArgumentNullException(nameof(homeserver), "Null passed as homeserver for SyncHelper!"); @@ -91,7 +91,7 @@ public class SyncHelper(AuthenticatedHomeserverGeneric homeserver, ILogger? logg throw new ArgumentNullException(nameof(homeserver.ClientHttpClient), "Null passed as homeserver for SyncHelper!"); } - if (storageProvider is null) return await SyncAsyncInternal(cancellationToken); + if (storageProvider is null) return await SyncAsyncInternal(cancellationToken, noDelay); var key = Since ?? "init"; if (await storageProvider.ObjectExistsAsync(key)) { @@ -103,13 +103,13 @@ public class SyncHelper(AuthenticatedHomeserverGeneric homeserver, ILogger? logg } } - var sync = await SyncAsyncInternal(cancellationToken); + var sync = await SyncAsyncInternal(cancellationToken, noDelay); // Ditto here. if (sync is not null && sync.NextBatch != Since) await storageProvider.SaveObjectAsync(key, sync); return sync; } - private async Task<SyncResponse?> SyncAsyncInternal(CancellationToken? cancellationToken = null) { + private async Task<SyncResponse?> SyncAsyncInternal(CancellationToken? cancellationToken = null, bool noDelay = false) { var sw = Stopwatch.StartNew(); if (_filterIsDirty) await UpdateFilterAsync(); @@ -138,8 +138,11 @@ public class SyncHelper(AuthenticatedHomeserverGeneric homeserver, ILogger? logg } var timeToWait = MinimumDelay.Subtract(sw.Elapsed); - if (timeToWait.TotalMilliseconds > 0) + if (!noDelay && timeToWait.TotalMilliseconds > 0) { + logger?.LogWarning("SyncAsyncInternal: Waiting {delay}", timeToWait); await Task.Delay(timeToWait); + } + return resp; } catch (TaskCanceledException) { @@ -157,10 +160,18 @@ public class SyncHelper(AuthenticatedHomeserverGeneric homeserver, ILogger? logg public async IAsyncEnumerable<SyncResponse> EnumerateSyncAsync(CancellationToken? cancellationToken = null) { while (!cancellationToken?.IsCancellationRequested ?? true) { - var sync = await SyncAsync(cancellationToken); + var sw = Stopwatch.StartNew(); + var sync = await SyncAsync(cancellationToken, noDelay: true); if (sync is null) continue; if (!string.IsNullOrWhiteSpace(sync.NextBatch)) Since = sync.NextBatch; yield return sync; + + + var timeToWait = MinimumDelay.Subtract(sw.Elapsed); + if (timeToWait.TotalMilliseconds > 0) { + logger?.LogWarning("EnumerateSyncAsync: Waiting {delay}", timeToWait); + await Task.Delay(timeToWait); + } } } diff --git a/LibMatrix/Helpers/SyncStateResolver.cs b/LibMatrix/Helpers/SyncStateResolver.cs
index a8f5615..f111c79 100644 --- a/LibMatrix/Helpers/SyncStateResolver.cs +++ b/LibMatrix/Helpers/SyncStateResolver.cs
@@ -46,7 +46,7 @@ public class SyncStateResolver(AuthenticatedHomeserverGeneric homeserver, ILogge _syncHelper.Filter = Filter; _syncHelper.FullState = FullState; - var sync = await _syncHelper.SyncAsync(cancellationToken); + var sync = await _syncHelper.SyncAsync(cancellationToken, noDelay: false); if (sync is null) return await ContinueAsync(cancellationToken); if (MergedState is null) MergedState = sync;