about summary refs log tree commit diff
path: root/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/ClientSyncWrapper.cs
blob: 16051b8b707f0db6cf333891c35f04399dc2204e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System.Collections.ObjectModel;
using ArcaneLibs;
using LibMatrix;
using LibMatrix.Helpers;
using LibMatrix.Homeservers;
using LibMatrix.Responses;
using MatrixUtils.Abstractions;

namespace MatrixUtils.Web.Pages.Client.ClientComponents;

public class ClientSyncWrapper(AuthenticatedHomeserverGeneric homeserver) : NotifyPropertyChanged {
    private SyncHelper _syncHelper = new SyncHelper(homeserver) {
        MinimumDelay = TimeSpan.FromMilliseconds(2000),
        IsInitialSync = false
    };
    private string _status = "Loading...";

    public ObservableCollection<StateEvent> AccountData { get; set; } = new();
    public ObservableCollection<RoomInfo> Rooms { get; set; } = new();

    public string Status {
        get => _status;
        set => SetField(ref _status, value);
    }

    public async Task Start() {
        Task.Yield();
        var resp = _syncHelper.EnumerateSyncAsync();
        Status = $"[{DateTime.Now:s}] Syncing...";
        await foreach (var response in resp) {
            Task.Yield();
            Status = $"[{DateTime.Now:s}] {response.Rooms?.Join?.Count ?? 0 + response.Rooms?.Invite?.Count ?? 0 + response.Rooms?.Leave?.Count ?? 0} rooms, {response.AccountData?.Events?.Count ?? 0} account data, {response.ToDevice?.Events?.Count ?? 0} to-device, {response.DeviceLists?.Changed?.Count ?? 0} device lists, {response.Presence?.Events?.Count ?? 0} presence updates";
            await HandleSyncResponse(response);
            await Task.Yield();
        }
    }

    private async Task HandleSyncResponse(SyncResponse resp) {
        
    }
}