1 files changed, 25 insertions, 2 deletions
diff --git a/ModerationClient/ViewModels/ClientViewModel.cs b/ModerationClient/ViewModels/ClientViewModel.cs
 index a2da5be..378c0de 100644
--- a/ModerationClient/ViewModels/ClientViewModel.cs
+++ b/ModerationClient/ViewModels/ClientViewModel.cs
@@ -6,6 +6,8 @@ using System.Diagnostics;
 using System.Diagnostics.CodeAnalysis;
 using System.IO;
 using System.Linq;
+using System.Net;
+using System.Net.Http;
 using System.Text.Json;
 using System.Threading;
 using System.Threading.Tasks;
@@ -15,8 +17,10 @@ using ArcaneLibs.Extensions;
 using LibMatrix;
 using LibMatrix.EventTypes.Spec.State;
 using LibMatrix.EventTypes.Spec.State.RoomInfo;
+using LibMatrix.Filters;
 using LibMatrix.Helpers;
 using LibMatrix.Responses;
+using LibMatrix.Services;
 using Microsoft.Extensions.Logging;
 using Microsoft.Extensions.Logging.Abstractions;
 using ModerationClient.Models.SpaceTreeNodes;
@@ -90,9 +94,13 @@ public partial class ClientViewModel : ViewModelBase {
             var ssr = new SyncStateResolver(_authService.Homeserver, _logger, storageProvider: store);
             Console.WriteLine("Created sync state resolver...");
             Status = "Optimising sync store, please wait... Creating new snapshot...";
+            var sw = Stopwatch.StartNew();
             await ssr.OptimiseStore((remaining, total) => {
-                if (remaining % (remaining / 10) == 0)
+                // if (remaining % (remaining / 10) == 0)
+                if (sw.ElapsedMilliseconds > 100) {
                     Status = $"Optimising sync store, please wait... {remaining}/{total} remaining...";
+                    sw.Restart();
+                }
             });
             Status = "Optimising sync store, please wait... Deleting old intermediate snapshots...";
             await ssr.RemoveOldSnapshots();
@@ -110,6 +118,21 @@ public partial class ClientViewModel : ViewModelBase {
         Status = "Doing initial sync...";
         var currentSyncRes = "init";
         var lastGc = DateTime.Now;
+        int syncGatewayTimeouts = 0;
+        // var filter = new SyncFilter() {
+        //     Room = new SyncFilter.RoomFilter() {
+        //         Rooms = []
+        //     }
+        // };
+        //
+        // sh.Filter = filter;
+        
+        sh.ExceptionHandlers.Add(async (ex) => {
+            if (ex is HttpRequestException { StatusCode: HttpStatusCode.GatewayTimeout }) {
+                syncGatewayTimeouts++;
+                Status = $"Got {syncGatewayTimeouts} sync gateway timeouts...";
+            }
+        });
         await foreach (var res in sh.EnumerateSyncAsync()) {
             var sw = Stopwatch.StartNew();
             //log thing
@@ -150,7 +173,7 @@ public partial class ClientViewModel : ViewModelBase {
             Console.WriteLine($"Processed sync {currentSyncRes} in {sw.ElapsedMilliseconds}ms (applied in: {applySw.ElapsedMilliseconds}ms)");
             if (Paused) {
                 Status = "Sync loop interrupted... Press pause/break to resume.";
-                while (Paused) await Task.Delay(1000);
+                while (Paused) await Task.Delay(100);
             }
             else Status = $"Syncing... {unoptimised++} unoptimised sync responses, last={currentSyncRes}...";
 
  |