@page "/SpaceDebug" @using LibMatrix.Filters @using LibMatrix.Helpers

SpaceDebug


@Status

Has parent:
@foreach (var (roomId, parents) in SpaceParents) {

@roomId's parents

} Space children: @foreach (var (roomId, children) in SpaceChildren) {

@roomId's children

} @code { private string _status = "Loading..."; public string Status { get => _status; set { _status = value; StateHasChanged(); } } public Dictionary> SpaceChildren { get; set; } = new(); public Dictionary> SpaceParents { get; set; } = new(); protected override async Task OnInitializedAsync() { Status = "Getting homeserver..."; var hs = await MRUStorage.GetCurrentSessionOrNavigate(); if (hs is null) return; var syncHelper = new SyncHelper(hs) { Filter = new SyncFilter() { Presence = new(0), Room = new() { AccountData = new(limit: 0), Ephemeral = new(limit: 0), State = new(limit: 1000, types: new() { "m.space.child", "m.space.parent" }), Timeline = new(limit: 0) }, AccountData = new(limit: 0) } }; Status = "Syncing..."; var syncs = syncHelper.EnumerateSyncAsync(); await foreach (var sync in syncs) { if (sync is null) { Status = "Sync failed"; continue; } if (sync.Rooms is null) { Status = "No rooms in sync..."; break; } if (sync.Rooms.Join is null) { Status = "No joined rooms in sync..."; break; } if (sync.Rooms.Join.Count == 0) { Status = "Joined rooms list was empty..."; break; } // nextBatch = sync.NextBatch; foreach (var (roomId, data) in sync.Rooms!.Join!) { data.State?.Events?.ForEach(e => { if (e.Type == "m.space.child") { if (!SpaceChildren.ContainsKey(roomId)) SpaceChildren[roomId] = new(); if (e.RawContent is null) e.StateKey += " (null)"; else if (e.RawContent.Count == 0) e.StateKey += " (empty)"; SpaceChildren[roomId].Add(e.StateKey); } if (e.Type == "m.space.parent") { if (!SpaceParents.ContainsKey(roomId)) SpaceParents[roomId] = new(); if (e.RawContent is null) e.StateKey += " (null)"; else if (e.RawContent.Count == 0) e.StateKey += " (empty)"; SpaceParents[roomId].Add(e.StateKey); } }); } Status = $"Synced {sync.Rooms.Join.Count} rooms, found {SpaceChildren.Count} spaces, {SpaceParents.Count} parents"; } Status = $"Synced: found {SpaceChildren.Count}->{SpaceChildren.Sum(x => x.Value.Count)} spaces, {SpaceParents.Count}->{SpaceParents.Sum(x => x.Value.Count)} parents!"; await base.OnInitializedAsync(); } }