about summary refs log tree commit diff
path: root/LibMatrix/Helpers/SyncProcessors/SimpleSyncProcessors.cs
blob: 5981cb52861de31b2d9381a55d77b126faee18c6 (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
42
43
44
45
46
47
using System.Diagnostics;
using LibMatrix.Responses;

namespace LibMatrix.Helpers.SyncProcessors;

public class SimpleSyncProcessors {
    public static SyncResponse? FillRoomIds(SyncResponse? resp) {
        var sw = Stopwatch.StartNew();
        if (resp is not { Rooms: not null }) return resp;
        if (resp.Rooms.Join is { Count: > 0 })
            Parallel.ForEach(resp.Rooms.Join, (roomEntry) => {
                var (id, data) = roomEntry;
                if (data.AccountData is { Events.Count: > 0 })
                    Parallel.ForEach(data.AccountData.Events, evt => evt.RoomId = id);
                if (data.Ephemeral is { Events.Count: > 0 })
                    Parallel.ForEach(data.Ephemeral.Events, evt => evt.RoomId = id);
                if (data.Timeline is { Events.Count: > 0 })
                    Parallel.ForEach(data.Timeline.Events, evt => evt.RoomId = id);
                if (data.State is { Events.Count: > 0 })
                    Parallel.ForEach(data.State.Events, evt => evt.RoomId = id);
                if (data.StateAfter is { Events.Count: > 0 })
                    Parallel.ForEach(data.StateAfter.Events, evt => evt.RoomId = id);
            });
        if (resp.Rooms.Leave is { Count: > 0 })
            Parallel.ForEach(resp.Rooms.Leave, (roomEntry) => {
                var (id, data) = roomEntry;
                if (data.AccountData is { Events.Count: > 0 })
                    Parallel.ForEach(data.AccountData.Events, evt => evt.RoomId = id);
                if (data.Timeline is { Events.Count: > 0 })
                    Parallel.ForEach(data.Timeline.Events, evt => evt.RoomId = id);
                if (data.State is { Events.Count: > 0 })
                    Parallel.ForEach(data.State.Events, evt => evt.RoomId = id);
                if (data.StateAfter is { Events.Count: > 0 })
                    Parallel.ForEach(data.StateAfter.Events, evt => evt.RoomId = id);
            });
        if (resp.Rooms.Invite is { Count: > 0 })
            Parallel.ForEach(resp.Rooms.Invite, (roomEntry) => {
                var (id, data) = roomEntry;
                if (data.InviteState is { Events.Count: > 0 })
                    Parallel.ForEach(data.InviteState.Events, evt => evt.RoomId = id);
            });

        Console.WriteLine($"SimpleSyncProcessors.FillRoomIds took {sw.Elapsed}");

        return resp;
    }
}