@page "/Rooms/Create2" @using System.Text.Json @using System.Reflection @using ArcaneLibs @using ArcaneLibs.Extensions @using Blazored.LocalStorage @using LibMatrix @using LibMatrix.EventTypes.Spec.State.RoomInfo @using LibMatrix.Helpers @using LibMatrix.Responses @using MatrixUtils.Web.Classes.RoomCreationTemplates @using MatrixUtils.Web.Pages.Rooms.RoomCreateComponents @inject ILogger logger @* @* ReSharper disable once RedundantUsingDirective - Must not remove this, Rider marks this as "unused" when it's not */ *@

Room Manager - Create Room

@if (Ready) { @if (roomBuilder is RoomUpgradeBuilder roomUpgrade) { } else { @* *@ @* *@ @* *@ @* *@ } @* Initial states, should remain at bottom *@
Preset: *@ @* @if (Presets is null) { *@ @*

Presets is null!

*@ @* } *@ @* else { *@ @*

Support for presets is currently disabled!

*@ @* $1$ #1# *@ @* $1$ @foreach (var createRoomRequest in Presets) { #1# *@ @* $1$ #1# *@ @* $1$ } #1# *@ @* $1$ #1# *@ @* } *@ @*
Create room
RoomBuilder state Show null values
                @roomBuilder.ToJson(ignoreNull: !ShowNullInState)
            
} @if (_matrixException is not null) {
            @_matrixException.Message
        
} @code { #region State [Parameter, SupplyParameterFromQuery(Name = "previousRoomId")] public string? PreviousRoomId { get; set; } private bool ShowNullInState { get; set; } private bool Ready { get; set; } private RoomBuilder roomBuilder { get; set; } = new(); private AuthenticatedHomeserverGeneric? Homeserver { get; set; } private MatrixException? _matrixException { get; set; } #endregion #region Presets private Dictionary? Presets { get; set; } = new(); // private string RoomPreset { // get => Presets.ContainsValue(roomBuilder) ? Presets.First(x => x.Value == roomBuilder).Key : "Not a preset"; // set { // roomBuilder = Presets[value]; // JsonChanged(); // StateHasChanged(); // } // } #endregion protected override async Task OnInitializedAsync() { Homeserver = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (Homeserver is null) return; if (!string.IsNullOrWhiteSpace(PreviousRoomId)) { roomBuilder = new RoomUpgradeBuilder(Homeserver.GetRoom(PreviousRoomId)); } roomBuilder.ServerAcls.Allow = ["*"]; roomBuilder.ServerAcls.Deny = []; // foreach (var x in Assembly.GetExecutingAssembly().GetTypes().Where(x => x.IsClass && !x.IsAbstract && x.GetInterfaces().Contains(typeof(IRoomCreationTemplate))).ToList()) { // Console.WriteLine($"Found room creation template in class: {x.FullName}"); // var instance = (IRoomCreationTemplate)Activator.CreateInstance(x); // Presets[instance.Name] = instance.CreateRoomRequest; // } // // Presets = Presets.OrderBy(x => x.Key).ToDictionary(x => x.Key, x => x.Value); // if (!Presets.ContainsKey("Default")) { // Console.WriteLine($"No default room found in {Presets.Count} presets: {string.Join(", ", Presets.Keys)}"); // } // else RoomPreset = "Default"; Ready = true; StateHasChanged(); if (roomBuilder is RoomUpgradeBuilder roomUpgrade) { await roomUpgrade.ImportAsync().ConfigureAwait(false); StateHasChanged(); } } protected override bool ShouldRender() { if (roomBuilder.Type == "") roomBuilder.Type = null; // Reset to null if empty, so it doesn't get sent as an empty string var result = base.ShouldRender(); logger.LogInformation("ShouldRender: " + result); return result; } private async Task CreateRoom() { Console.WriteLine("Create room"); Console.WriteLine(roomBuilder.ToJson()); roomBuilder.AdditionalCreationContent["gay.rory.created_using"] = "Rory&::MatrixUtils (https://mru.rory.gay)"; try { var newRoom = await roomBuilder.Create(Homeserver); } catch (MatrixException e) { _matrixException = e; } } }