diff --git a/MatrixUtils.Web/Pages/Dev/DevOptions.razor b/MatrixUtils.Web/Pages/Dev/DevOptions.razor
index 7b646d1..33e577f 100644
--- a/MatrixUtils.Web/Pages/Dev/DevOptions.razor
+++ b/MatrixUtils.Web/Pages/Dev/DevOptions.razor
@@ -2,7 +2,6 @@
@using ArcaneLibs.Extensions
@using System.Text
@using System.Text.Json
-@using Microsoft.JSInterop
@inject NavigationManager NavigationManager
@inject IJSRuntime JSRuntime
@inject TieredStorageService TieredStorage
@@ -20,6 +19,10 @@
<span>Export local storage: </span>
<button @onclick="@ExportLocalStorage">Export</button>
</p>
+<details>
+ <summary>Manage local sessions</summary>
+
+</details>
@if (userSettings is not null) {
<InputCheckbox @bind-Value="@userSettings.DeveloperSettings.EnableLogViewers" @oninput="@LogStuff"></InputCheckbox>
@@ -36,9 +39,9 @@
@code {
- private RMUStorageWrapper.Settings? userSettings { get; set; }
+ private RmuSessionStore.Settings? userSettings { get; set; }
protected override async Task OnInitializedAsync() {
- // userSettings = await TieredStorage.DataStorageProvider.LoadObjectAsync<RMUStorageWrapper.Settings>("rmu.settings");
+ // userSettings = await TieredStorage.DataStorageProvider.LoadObjectAsync<RmuSessionStore.Settings>("rmu.settings");
await base.OnInitializedAsync();
}
diff --git a/MatrixUtils.Web/Pages/Dev/DevUtilities.razor b/MatrixUtils.Web/Pages/Dev/DevUtilities.razor
index bf5a396..3b2d533 100644
--- a/MatrixUtils.Web/Pages/Dev/DevUtilities.razor
+++ b/MatrixUtils.Web/Pages/Dev/DevUtilities.razor
@@ -4,6 +4,7 @@
<h3>Debug Tools</h3>
<hr/>
+<LinkButton href="/Dev/WellKnownRes">Well known res tests</LinkButton>
@if (Rooms.Count == 0) {
<p>You are not in any rooms!</p>
@* <p>Loading progress: @checkedRoomCount/@totalRoomCount</p> *@
@@ -38,7 +39,7 @@ else {
protected override async Task OnInitializedAsync() {
await base.OnInitializedAsync();
- hs = await RMUStorage.GetCurrentSessionOrNavigate();
+ hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true);
if (hs == null) return;
Rooms = (await hs.GetJoinedRooms()).Select(x => x.RoomId).ToList();
Console.WriteLine("Fetched joined rooms!");
diff --git a/MatrixUtils.Web/Pages/Dev/ModalTest.razor b/MatrixUtils.Web/Pages/Dev/ModalTest.razor
new file mode 100644
index 0000000..665f548
--- /dev/null
+++ b/MatrixUtils.Web/Pages/Dev/ModalTest.razor
@@ -0,0 +1,12 @@
+@page "/Dev/ModalTest"
+
+<PageTitle>Modal test</PageTitle>
+
+<h3>Rory&::MatrixUtils - Modal test</h3>
+<hr/>
+@for (int i = 0; i < 10; i++)
+{
+ <ModalWindow X="i*75" Y="i*75">
+ <h1>Hello, world!</h1>
+ </ModalWindow>
+}
diff --git a/MatrixUtils.Web/Pages/Dev/WellKnownRes.razor b/MatrixUtils.Web/Pages/Dev/WellKnownRes.razor
new file mode 100644
index 0000000..1906dd8
--- /dev/null
+++ b/MatrixUtils.Web/Pages/Dev/WellKnownRes.razor
@@ -0,0 +1,123 @@
+@page "/Dev/WellKnownRes"
+@using ArcaneLibs.Extensions
+@using LibMatrix.Services.WellKnownResolver
+@using LibMatrix.Services.WellKnownResolver.WellKnownResolvers
+@inject HomeserverResolverService legacyResolver
+@inject WellKnownResolverService rewriteResolver
+@inject ClientWellKnownResolver rewriteClientResolver
+<h3>Known Homeserver List</h3>
+<hr/>
+
+<span>Room ID: <FancyTextBox @bind-Value="@RoomId"/><LinkButton OnClick="@Execute">Execute</LinkButton></span>
+
+<span>Stats:</span><br/>
+<span>Server count: @entries.Count</span><br/>
+<span>Client server resolution rate (N/O/T): @entries.Count(x => x.HasClientWellKnown)/@entries.Count(x => !string.IsNullOrWhiteSpace(x.LegacyResolutionResult?.Client))/@entries.Count</span>
+<br/>
+<span>Server server resolution rate (N/T): @entries.Count(x => x.HasServerWellKnown)/@entries.Count</span><br/>
+<span>Support resolution rate (N/T): @entries.Count(x => x.HasSupportWellKnown)/@entries.Count</span><br/>
+
+<table class="table-bordered">
+ <thead>
+ <td>Homeserver</td>
+ <td>Client API</td>
+ <td>Server API</td>
+ <td>Has support record</td>
+ </thead>
+ @foreach (var entry in entries) {
+ <tr>
+ <td>@entry.Homeserver</td>
+ <td style="background-color: @GetClientColor(entry)">
+ <span>L: @entry.LegacyResolutionResult?.Client</span><br/>
+ <span>R: @entry.WellKnownResolutionResult?.ClientWellKnown?.Content?.Homeserver.BaseUrl</span>
+ </td>
+ <td style="background-color: @GetServerColor(entry)">
+ <span>L: @entry.LegacyResolutionResult?.Server</span><br/>
+ <span>R: @entry.WellKnownResolutionResult?.ServerWellKnown?.Content?.Homeserver</span>
+ </td>
+ <td>@(entry.HasSupportWellKnown ? "Y" : "X")</td>
+ </tr>
+ <tr>
+ <td colspan="6">
+ <details>
+ <pre>@(entry.WellKnownResolutionResult?.ToJson() ?? "null")</pre>
+ </details>
+ </td>
+ </tr>
+ }
+</table>
+
+@code {
+ private List<TableEntry> entries = new();
+
+ [SupplyParameterFromQuery]
+ public string? RoomId { get; set; }
+
+ AuthenticatedHomeserverGeneric? hs { get; set; }
+
+ protected override async Task OnInitializedAsync() {
+ hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true);
+ if (hs is null) return;
+
+ if (RoomId is not null) {
+ await Execute();
+ }
+ }
+
+ private class TableEntry {
+ public required string Homeserver { get; set; }
+ public HomeserverResolverService.WellKnownUris? LegacyResolutionResult { get; set; }
+ public WellKnownResolverService.WellKnownRecords? WellKnownResolutionResult { get; set; }
+
+ public bool HasClientWellKnown => WellKnownResolutionResult?.ClientWellKnown is { Content.Homeserver.BaseUrl: { Length: > 0 } };
+ public bool HasServerWellKnown => WellKnownResolutionResult?.ServerWellKnown is { Content.Homeserver.Length: > 0 };
+ public bool HasSupportWellKnown => WellKnownResolutionResult?.SupportWellKnown?.Content is not null and not { SupportPage: null, Contacts: null or { Count: 0 } };
+ }
+
+ private async Task Execute() {
+ var members = await hs!.GetRoom(RoomId!).GetMembersListAsync();
+ var homeservers = members.Select(x => x.StateKey!.Split(':', 2)[1]).Distinct().ToList();
+ var entries = new List<TableEntry>();
+ foreach (var homeserver in homeservers) {
+ var e = new TableEntry() { Homeserver = homeserver };
+ _ = TryResolveLegacy(e);
+ _ = TryFullResolveRewrite(e);
+ entries.Add(e);
+ }
+
+ this.entries = entries;
+ StateHasChanged();
+ }
+
+ private async Task TryResolveLegacy(TableEntry entry) {
+ try {
+ var cTask = legacyResolver.ResolveHomeserverFromWellKnown(entry.Homeserver, enableServer: false);
+ var sTask = legacyResolver.ResolveHomeserverFromWellKnown(entry.Homeserver, enableClient: false);
+ entry.LegacyResolutionResult = (await cTask);
+ entry.LegacyResolutionResult.Server = (await sTask).Server;
+ StateHasChanged();
+ }
+ catch { }
+ }
+
+ private async Task TryFullResolveRewrite(TableEntry entry) {
+ try {
+ entry.WellKnownResolutionResult = await rewriteResolver.TryResolveWellKnownRecords(entry.Homeserver);
+ StateHasChanged();
+ }
+ catch { }
+ }
+
+ private string GetClientColor(TableEntry entry) {
+ if (entry.LegacyResolutionResult?.Client == entry.WellKnownResolutionResult?.ClientWellKnown?.Content?.Homeserver?.BaseUrl && entry.WellKnownResolutionResult?.ClientWellKnown?.Content?.Homeserver?.BaseUrl == null) return "#333333";
+ if (entry.LegacyResolutionResult?.Client == entry.WellKnownResolutionResult?.ClientWellKnown?.Content?.Homeserver?.BaseUrl?.TrimEnd('/')) return "#008800";
+ return "#ff0000";
+ }
+
+ private string GetServerColor(TableEntry entry) {
+ if (entry.LegacyResolutionResult?.Server == entry.WellKnownResolutionResult?.ServerWellKnown?.Content?.Homeserver && entry.WellKnownResolutionResult?.ServerWellKnown?.Content?.Homeserver == null) return "#333333";
+ if (entry.LegacyResolutionResult?.Server == entry.WellKnownResolutionResult?.ServerWellKnown?.Content?.Homeserver.TrimEnd('/')) return "#008800";
+ return "#ff0000";
+ }
+
+}
\ No newline at end of file
|