From ce7be6bbdf0edf069cb50aee64df187609893b92 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Sat, 17 Jun 2023 20:58:51 +0200 Subject: Start refactor --- MatrixRoomUtils.Core/AuthenticatedHomeServer.cs | 77 ++++++++++-- .../Filters/LocalRoomQueryFilter.cs | 28 +++++ MatrixRoomUtils.Core/Interfaces/IHomeServer.cs | 2 +- .../Interfaces/IStorageProvider.cs | 15 +++ .../Responses/Admin/AdminRoomDeleteRequest.cs | 18 +++ .../Responses/Admin/AdminRoomListingResult.cs | 12 +- MatrixRoomUtils.Core/RuntimeCache.cs | 2 +- .../Classes/LocalStorageProviderService.cs | 5 + MatrixRoomUtils.Web/Classes/LocalStorageWrapper.cs | 10 +- MatrixRoomUtils.Web/Pages/HSAdmin/RoomQuery.razor | 115 ++++++++++++++++-- .../Pages/HSAdmin/RoomQuery.razor.css | 0 MatrixRoomUtils.Web/Pages/ModalTest.razor | 102 ++++++++++++++++ MatrixRoomUtils.Web/Program.cs | 5 + .../SessionStorageProviderService.cs | 1 + MatrixRoomUtils.Web/Shared/ModalWindow.razor | 130 ++++++++++++++++++++ MatrixRoomUtils.Web/wwwroot/css/app.css | 5 + .../wwwroot/css/jetbrains-mono/jetbrains-mono.css | 133 +++++++++++++++++++++ .../css/jetbrains-mono/ttf/JetBrainsMono-Bold.ttf | Bin 0 -> 277828 bytes .../ttf/JetBrainsMono-BoldItalic.ttf | Bin 0 -> 279832 bytes .../jetbrains-mono/ttf/JetBrainsMono-ExtraBold.ttf | Bin 0 -> 279404 bytes .../ttf/JetBrainsMono-ExtraBoldItalic.ttf | Bin 0 -> 281616 bytes .../ttf/JetBrainsMono-ExtraLight.ttf | Bin 0 -> 274144 bytes .../ttf/JetBrainsMono-ExtraLightItalic.ttf | Bin 0 -> 274240 bytes .../jetbrains-mono/ttf/JetBrainsMono-Italic.ttf | Bin 0 -> 276840 bytes .../css/jetbrains-mono/ttf/JetBrainsMono-Light.ttf | Bin 0 -> 276452 bytes .../ttf/JetBrainsMono-LightItalic.ttf | Bin 0 -> 277104 bytes .../jetbrains-mono/ttf/JetBrainsMono-Medium.ttf | Bin 0 -> 273860 bytes .../ttf/JetBrainsMono-MediumItalic.ttf | Bin 0 -> 276804 bytes .../jetbrains-mono/ttf/JetBrainsMono-Regular.ttf | Bin 0 -> 273900 bytes .../jetbrains-mono/ttf/JetBrainsMono-SemiBold.ttf | Bin 0 -> 277092 bytes .../ttf/JetBrainsMono-SemiBoldItalic.ttf | Bin 0 -> 279828 bytes .../css/jetbrains-mono/ttf/JetBrainsMono-Thin.ttf | Bin 0 -> 270112 bytes .../ttf/JetBrainsMono-ThinItalic.ttf | Bin 0 -> 272984 bytes .../jetbrains-mono/ttf/JetBrainsMonoNL-Bold.ttf | Bin 0 -> 210988 bytes .../ttf/JetBrainsMonoNL-BoldItalic.ttf | Bin 0 -> 214132 bytes .../ttf/JetBrainsMonoNL-ExtraBold.ttf | Bin 0 -> 213372 bytes .../ttf/JetBrainsMonoNL-ExtraBoldItalic.ttf | Bin 0 -> 215456 bytes .../ttf/JetBrainsMonoNL-ExtraLight.ttf | Bin 0 -> 209072 bytes .../ttf/JetBrainsMonoNL-ExtraLightItalic.ttf | Bin 0 -> 209884 bytes .../jetbrains-mono/ttf/JetBrainsMonoNL-Italic.ttf | Bin 0 -> 211624 bytes .../jetbrains-mono/ttf/JetBrainsMonoNL-Light.ttf | Bin 0 -> 210840 bytes .../ttf/JetBrainsMonoNL-LightItalic.ttf | Bin 0 -> 212320 bytes .../jetbrains-mono/ttf/JetBrainsMonoNL-Medium.ttf | Bin 0 -> 208276 bytes .../ttf/JetBrainsMonoNL-MediumItalic.ttf | Bin 0 -> 211604 bytes .../jetbrains-mono/ttf/JetBrainsMonoNL-Regular.ttf | Bin 0 -> 208576 bytes .../ttf/JetBrainsMonoNL-SemiBold.ttf | Bin 0 -> 209864 bytes .../ttf/JetBrainsMonoNL-SemiBoldItalic.ttf | Bin 0 -> 214032 bytes .../jetbrains-mono/ttf/JetBrainsMonoNL-Thin.ttf | Bin 0 -> 206004 bytes .../ttf/JetBrainsMonoNL-ThinItalic.ttf | Bin 0 -> 209124 bytes .../variable/JetBrainsMono-Italic[wght].ttf | Bin 0 -> 308888 bytes .../variable/JetBrainsMono[wght].ttf | Bin 0 -> 303144 bytes .../webfonts/JetBrainsMono-Bold.woff2 | Bin 0 -> 94588 bytes .../webfonts/JetBrainsMono-BoldItalic.woff2 | Bin 0 -> 98152 bytes .../webfonts/JetBrainsMono-ExtraBold.woff2 | Bin 0 -> 93692 bytes .../webfonts/JetBrainsMono-ExtraBoldItalic.woff2 | Bin 0 -> 96864 bytes .../webfonts/JetBrainsMono-ExtraLight.woff2 | Bin 0 -> 92712 bytes .../webfonts/JetBrainsMono-ExtraLightItalic.woff2 | Bin 0 -> 95816 bytes .../webfonts/JetBrainsMono-Italic.woff2 | Bin 0 -> 95864 bytes .../webfonts/JetBrainsMono-Light.woff2 | Bin 0 -> 93856 bytes .../webfonts/JetBrainsMono-LightItalic.woff2 | Bin 0 -> 97280 bytes .../webfonts/JetBrainsMono-Medium.woff2 | Bin 0 -> 93824 bytes .../webfonts/JetBrainsMono-MediumItalic.woff2 | Bin 0 -> 97808 bytes .../webfonts/JetBrainsMono-Regular.woff2 | Bin 0 -> 92164 bytes .../webfonts/JetBrainsMono-SemiBold.woff2 | Bin 0 -> 94472 bytes .../webfonts/JetBrainsMono-SemiBoldItalic.woff2 | Bin 0 -> 98124 bytes .../webfonts/JetBrainsMono-Thin.woff2 | Bin 0 -> 90612 bytes .../webfonts/JetBrainsMono-ThinItalic.woff2 | Bin 0 -> 94316 bytes MatrixRoomUtils.Web/wwwroot/index.html | 6 + MatrixRoomUtils.sln.DotSettings.user | 6 + 69 files changed, 640 insertions(+), 32 deletions(-) create mode 100644 MatrixRoomUtils.Core/Filters/LocalRoomQueryFilter.cs create mode 100644 MatrixRoomUtils.Core/Interfaces/IStorageProvider.cs create mode 100644 MatrixRoomUtils.Core/Responses/Admin/AdminRoomDeleteRequest.cs create mode 100644 MatrixRoomUtils.Web/Classes/LocalStorageProviderService.cs create mode 100644 MatrixRoomUtils.Web/Pages/HSAdmin/RoomQuery.razor.css create mode 100644 MatrixRoomUtils.Web/Pages/ModalTest.razor create mode 100644 MatrixRoomUtils.Web/SessionStorageProviderService.cs create mode 100644 MatrixRoomUtils.Web/Shared/ModalWindow.razor create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/jetbrains-mono.css create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Bold.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-BoldItalic.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ExtraBold.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ExtraBoldItalic.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ExtraLight.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ExtraLightItalic.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Italic.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Light.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-LightItalic.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Medium.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-MediumItalic.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Regular.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-SemiBold.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-SemiBoldItalic.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Thin.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ThinItalic.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Bold.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-BoldItalic.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ExtraBold.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ExtraBoldItalic.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ExtraLight.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ExtraLightItalic.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Italic.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Light.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-LightItalic.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Medium.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-MediumItalic.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Regular.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-SemiBold.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-SemiBoldItalic.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Thin.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ThinItalic.ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/variable/JetBrainsMono-Italic[wght].ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/variable/JetBrainsMono[wght].ttf create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Bold.woff2 create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-BoldItalic.woff2 create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ExtraBold.woff2 create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ExtraBoldItalic.woff2 create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ExtraLight.woff2 create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ExtraLightItalic.woff2 create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Italic.woff2 create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Light.woff2 create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-LightItalic.woff2 create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Medium.woff2 create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-MediumItalic.woff2 create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Regular.woff2 create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-SemiBold.woff2 create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-SemiBoldItalic.woff2 create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Thin.woff2 create mode 100644 MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ThinItalic.woff2 create mode 100644 MatrixRoomUtils.sln.DotSettings.user diff --git a/MatrixRoomUtils.Core/AuthenticatedHomeServer.cs b/MatrixRoomUtils.Core/AuthenticatedHomeServer.cs index ee6be72..7e5650f 100644 --- a/MatrixRoomUtils.Core/AuthenticatedHomeServer.cs +++ b/MatrixRoomUtils.Core/AuthenticatedHomeServer.cs @@ -3,6 +3,7 @@ using System.Net.Http.Json; using System.Text.Json; using System.Text.Json.Nodes; using MatrixRoomUtils.Core.Extensions; +using MatrixRoomUtils.Core.Filters; using MatrixRoomUtils.Core.Interfaces; using MatrixRoomUtils.Core.Responses; using MatrixRoomUtils.Core.Responses.Admin; @@ -73,7 +74,7 @@ public class AuthenticatedHomeServer : IHomeServer { public HomeserverAdminApi(AuthenticatedHomeServer authenticatedHomeServer) => _authenticatedHomeServer = authenticatedHomeServer; - public async IAsyncEnumerable SearchRoomsAsync(int limit = int.MaxValue, string orderBy = "name", string dir = "f", string? searchTerm = null, string? contentSearch = null) { + public async IAsyncEnumerable SearchRoomsAsync(int limit = int.MaxValue, string orderBy = "name", string dir = "f", string? searchTerm = null, LocalRoomQueryFilter? localFilter = null) { AdminRoomListingResult? res = null; var i = 0; int? totalRooms = null; @@ -89,16 +90,72 @@ public class AuthenticatedHomeServer : IHomeServer { totalRooms ??= res?.TotalRooms; Console.WriteLine(res.ToJson(false)); foreach (var room in res.Rooms) { - if (contentSearch != null && !string.IsNullOrEmpty(contentSearch) && - !( - room.Name?.Contains(contentSearch, StringComparison.InvariantCultureIgnoreCase) == true || - room.CanonicalAlias?.Contains(contentSearch, StringComparison.InvariantCultureIgnoreCase) == true || - room.Creator?.Contains(contentSearch, StringComparison.InvariantCultureIgnoreCase) == true - ) - ) { - totalRooms--; - continue; + if (localFilter != null) { + if (!room.RoomId.Contains(localFilter.RoomIdContains)) { + totalRooms--; + continue; + } + if (!room.Name?.Contains(localFilter.NameContains) == true) { + totalRooms--; + continue; + } + if (!room.CanonicalAlias?.Contains(localFilter.CanonicalAliasContains) == true) { + totalRooms--; + continue; + } + if (!room.Version.Contains(localFilter.VersionContains)) { + totalRooms--; + continue; + } + if (!room.Creator.Contains(localFilter.CreatorContains)) { + totalRooms--; + continue; + } + if (!room.Encryption?.Contains(localFilter.EncryptionContains) == true) { + totalRooms--; + continue; + } + if (!room.JoinRules?.Contains(localFilter.JoinRulesContains) == true) { + totalRooms--; + continue; + } + if(!room.GuestAccess?.Contains(localFilter.GuestAccessContains) == true) { + totalRooms--; + continue; + } + if(!room.HistoryVisibility?.Contains(localFilter.HistoryVisibilityContains) == true) { + totalRooms--; + continue; + } + + if(localFilter.CheckFederation && room.Federatable != localFilter.Federatable) { + totalRooms--; + continue; + } + if(localFilter.CheckPublic && room.Public != localFilter.Public) { + totalRooms--; + continue; + } + + if(room.JoinedMembers < localFilter.JoinedMembersGreaterThan || room.JoinedMembers > localFilter.JoinedMembersLessThan) { + totalRooms--; + continue; + } + if(room.JoinedLocalMembers < localFilter.JoinedLocalMembersGreaterThan || room.JoinedLocalMembers > localFilter.JoinedLocalMembersLessThan) { + totalRooms--; + continue; + } } + // if (contentSearch != null && !string.IsNullOrEmpty(contentSearch) && + // !( + // room.Name?.Contains(contentSearch, StringComparison.InvariantCultureIgnoreCase) == true || + // room.CanonicalAlias?.Contains(contentSearch, StringComparison.InvariantCultureIgnoreCase) == true || + // room.Creator?.Contains(contentSearch, StringComparison.InvariantCultureIgnoreCase) == true + // ) + // ) { + // totalRooms--; + // continue; + // } i++; yield return room; diff --git a/MatrixRoomUtils.Core/Filters/LocalRoomQueryFilter.cs b/MatrixRoomUtils.Core/Filters/LocalRoomQueryFilter.cs new file mode 100644 index 0000000..65c7baa --- /dev/null +++ b/MatrixRoomUtils.Core/Filters/LocalRoomQueryFilter.cs @@ -0,0 +1,28 @@ +namespace MatrixRoomUtils.Core.Filters; + +public class LocalRoomQueryFilter { + public string RoomIdContains { get; set; } = ""; + public string NameContains { get; set; } = ""; + public string CanonicalAliasContains { get; set; } = ""; + public string VersionContains { get; set; } = ""; + public string CreatorContains { get; set; } = ""; + public string EncryptionContains { get; set; } = ""; + public string JoinRulesContains { get; set; } = ""; + public string GuestAccessContains { get; set; } = ""; + public string HistoryVisibilityContains { get; set; } = ""; + + public bool Federatable { get; set; } = true; + public bool Public { get; set; } = true; + + public int JoinedMembersGreaterThan { get; set; } = 0; + public int JoinedMembersLessThan { get; set; } = int.MaxValue; + + public int JoinedLocalMembersGreaterThan { get; set; } = 0; + public int JoinedLocalMembersLessThan { get; set; } = int.MaxValue; + public int StateEventsGreaterThan { get; set; } = 0; + public int StateEventsLessThan { get; set; } = int.MaxValue; + + + public bool CheckFederation { get; set; } + public bool CheckPublic { get; set; } +} \ No newline at end of file diff --git a/MatrixRoomUtils.Core/Interfaces/IHomeServer.cs b/MatrixRoomUtils.Core/Interfaces/IHomeServer.cs index 9a9ba7a..a808c3d 100644 --- a/MatrixRoomUtils.Core/Interfaces/IHomeServer.cs +++ b/MatrixRoomUtils.Core/Interfaces/IHomeServer.cs @@ -21,7 +21,7 @@ public class IHomeServer { private async Task _resolveHomeserverFromWellKnown(string homeserver) { if (RuntimeCache.HomeserverResolutionCache.Count == 0) { - Console.WriteLine("No cached homeservers, resolving..."); + // Console.WriteLine("No cached homeservers, resolving..."); await Task.Delay(Random.Shared.Next(1000, 5000)); } diff --git a/MatrixRoomUtils.Core/Interfaces/IStorageProvider.cs b/MatrixRoomUtils.Core/Interfaces/IStorageProvider.cs new file mode 100644 index 0000000..e1a066e --- /dev/null +++ b/MatrixRoomUtils.Core/Interfaces/IStorageProvider.cs @@ -0,0 +1,15 @@ +public interface IStorageProvider { + // save + public async Task SaveAll() { + Console.WriteLine($"StorageProvider<{GetType().Name}> does not implement Save()!"); + } + + public async Task SaveObject(string key, T value) { + Console.WriteLine($"StorageProvider<{GetType().Name}> does not implement SaveObject(key, value)!"); + } + + // delete + public async Task DeleteObject(string key) { + Console.WriteLine($"StorageProvider<{GetType().Name}> does not implement DeleteObject(key)!"); + } +} \ No newline at end of file diff --git a/MatrixRoomUtils.Core/Responses/Admin/AdminRoomDeleteRequest.cs b/MatrixRoomUtils.Core/Responses/Admin/AdminRoomDeleteRequest.cs new file mode 100644 index 0000000..5605329 --- /dev/null +++ b/MatrixRoomUtils.Core/Responses/Admin/AdminRoomDeleteRequest.cs @@ -0,0 +1,18 @@ +using System.Text.Json.Serialization; + +namespace MatrixRoomUtils.Core.Responses.Admin; + +public class AdminRoomDeleteRequest { + [JsonPropertyName("new_room_user_id")] + public string? NewRoomUserId { get; set; } + [JsonPropertyName("room_name")] + public string? RoomName { get; set; } + [JsonPropertyName("block")] + public bool Block { get; set; } + [JsonPropertyName("purge")] + public bool Purge { get; set; } + [JsonPropertyName("message")] + public string? Message { get; set; } + [JsonPropertyName("force_purge")] + public bool ForcePurge { get; set; } +} \ No newline at end of file diff --git a/MatrixRoomUtils.Core/Responses/Admin/AdminRoomListingResult.cs b/MatrixRoomUtils.Core/Responses/Admin/AdminRoomListingResult.cs index 37bb3ba..d6da859 100644 --- a/MatrixRoomUtils.Core/Responses/Admin/AdminRoomListingResult.cs +++ b/MatrixRoomUtils.Core/Responses/Admin/AdminRoomListingResult.cs @@ -23,10 +23,10 @@ public class AdminRoomListingResult { public string RoomId { get; set; } [JsonPropertyName("name")] - public string Name { get; set; } + public string? Name { get; set; } [JsonPropertyName("canonical_alias")] - public string CanonicalAlias { get; set; } + public string? CanonicalAlias { get; set; } [JsonPropertyName("joined_members")] public int JoinedMembers { get; set; } @@ -41,7 +41,7 @@ public class AdminRoomListingResult { public string Creator { get; set; } [JsonPropertyName("encryption")] - public string Encryption { get; set; } + public string? Encryption { get; set; } [JsonPropertyName("federatable")] public bool Federatable { get; set; } @@ -50,13 +50,13 @@ public class AdminRoomListingResult { public bool Public { get; set; } [JsonPropertyName("join_rules")] - public string JoinRules { get; set; } + public string? JoinRules { get; set; } [JsonPropertyName("guest_access")] - public string GuestAccess { get; set; } + public string? GuestAccess { get; set; } [JsonPropertyName("history_visibility")] - public string HistoryVisibility { get; set; } + public string? HistoryVisibility { get; set; } [JsonPropertyName("state_events")] public int StateEvents { get; set; } diff --git a/MatrixRoomUtils.Core/RuntimeCache.cs b/MatrixRoomUtils.Core/RuntimeCache.cs index a2fcf40..db71ee5 100644 --- a/MatrixRoomUtils.Core/RuntimeCache.cs +++ b/MatrixRoomUtils.Core/RuntimeCache.cs @@ -27,7 +27,7 @@ public class RuntimeCache { public static Dictionary> GenericResponseCache { get; set; } = new(); - public static Action Save { get; set; } = () => { Console.WriteLine("RuntimeCache.Save() was called, but no callback was set!"); }; + public static Task Save { get; set; } = new Task(() => { Console.WriteLine("RuntimeCache.Save() was called, but no callback was set!"); }); public static Action SaveObject { get; set; } = (key, value) => { Console.WriteLine($"RuntimeCache.SaveObject({key}, {value}) was called, but no callback was set!"); }; public static Action RemoveObject { get; set; } = key => { Console.WriteLine($"RuntimeCache.RemoveObject({key}) was called, but no callback was set!"); }; } diff --git a/MatrixRoomUtils.Web/Classes/LocalStorageProviderService.cs b/MatrixRoomUtils.Web/Classes/LocalStorageProviderService.cs new file mode 100644 index 0000000..0c3deec --- /dev/null +++ b/MatrixRoomUtils.Web/Classes/LocalStorageProviderService.cs @@ -0,0 +1,5 @@ +namespace MatrixRoomUtils.Web.Classes; + +public class LocalStorageProviderService : IStorageProvider { + +} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Classes/LocalStorageWrapper.cs b/MatrixRoomUtils.Web/Classes/LocalStorageWrapper.cs index 4e7117d..b7da78a 100644 --- a/MatrixRoomUtils.Web/Classes/LocalStorageWrapper.cs +++ b/MatrixRoomUtils.Web/Classes/LocalStorageWrapper.cs @@ -10,11 +10,13 @@ public class LocalStorageWrapper { //some basic logic public static async Task InitialiseRuntimeVariables(ILocalStorageService localStorage) { //RuntimeCache stuff - async void Save() => await SaveToLocalStorage(localStorage); - + async Task Save() => await SaveToLocalStorage(localStorage); + async Task SaveObject(string key, object obj) => await localStorage.SetItemAsync(key, obj); + async Task RemoveObject(string key) => await localStorage.RemoveItemAsync(key); + RuntimeCache.Save = Save; - RuntimeCache.SaveObject = async (key, obj) => await localStorage.SetItemAsync(key, obj); - RuntimeCache.RemoveObject = async key => await localStorage.RemoveItemAsync(key); + RuntimeCache.SaveObject = SaveObject; + RuntimeCache.RemoveObject = RemoveObject; if (RuntimeCache.LastUsedToken != null) { Console.WriteLine("Access token is not null, creating authenticated home server"); Console.WriteLine($"Homeserver cache: {RuntimeCache.HomeserverResolutionCache.Count} entries"); diff --git a/MatrixRoomUtils.Web/Pages/HSAdmin/RoomQuery.razor b/MatrixRoomUtils.Web/Pages/HSAdmin/RoomQuery.razor index a62362b..1fe13bd 100644 --- a/MatrixRoomUtils.Web/Pages/HSAdmin/RoomQuery.razor +++ b/MatrixRoomUtils.Web/Pages/HSAdmin/RoomQuery.razor @@ -1,12 +1,13 @@ @page "/HSAdmin/RoomQuery" @using MatrixRoomUtils.Core.Extensions +@using MatrixRoomUtils.Core.Filters @using MatrixRoomUtils.Core.Responses.Admin +@using MatrixRoomUtils.Web.Shared.SimpleComponents +

Homeserver Administration - Room Query


- -


+
+ + Local filtering (slow) + + +
+ String contains + Room ID: + Room name: + Canonical alias: + Creator: + Room version: + Encryption algorithm: + Join rules: + Guest access: + History visibility: + + Optional checks + + Is federated: + @if (Filter.CheckFederation) { + + } + + + Is public: + @if (Filter.CheckPublic) { + + } + + + Ranges + + state events + + + members + + + local members + +
+

@if (Results.Count > 0) {

Found @Results.Count rooms

+
+ TSV data (copy/paste) +
+            
+                @foreach (var res in Results) {
+                    
+                        
+                        
+                        
+                        
+                    
+                }
+            
@res.RoomId@("\t")@res.CanonicalAlias@("\t")@res.Creator@("\t")@res.Name
+
+
} @foreach (var res in Results) { @@ -27,20 +86,58 @@

@if (!string.IsNullOrWhiteSpace(res.CanonicalAlias)) { - @res.CanonicalAlias (@res.RoomId)
+ @res.CanonicalAlias (@res.RoomId) +
} else { - @res.RoomId
+ @res.RoomId +
} @if (!string.IsNullOrWhiteSpace(res.Creator)) { - Created by
+ Created by +
}

@res.StateEvents state events
@res.JoinedMembers members, of which @res.JoinedLocalMembers are on this server +
+ Full result data +
@res.ToJson(ignoreNull: true)
+
} + + @code { [Parameter] @@ -51,10 +148,6 @@ [SupplyParameterFromQuery(Name = "name_search")] public string SearchTerm { get; set; } - [Parameter] - [SupplyParameterFromQuery(Name = "content_search")] - public string ContentSearchTerm { get; set; } - [Parameter] [SupplyParameterFromQuery(Name = "ascending")] public bool Ascending { get; set; } @@ -63,6 +156,8 @@ private string Status { get; set; } + public LocalRoomQueryFilter Filter { get; set; } = new(); + protected override async Task OnParametersSetAsync() { if (Ascending == null) Ascending = true; @@ -71,7 +166,7 @@ private async Task Search() { Results.Clear(); - var searchRooms = RuntimeCache.CurrentHomeServer.Admin.SearchRoomsAsync(orderBy: OrderBy!, dir: Ascending ? "f" : "b", searchTerm: SearchTerm, contentSearch: ContentSearchTerm).GetAsyncEnumerator(); + var searchRooms = RuntimeCache.CurrentHomeServer.Admin.SearchRoomsAsync(orderBy: OrderBy!, dir: Ascending ? "f" : "b", searchTerm: SearchTerm, localFilter: Filter).GetAsyncEnumerator(); while (await searchRooms.MoveNextAsync()) { var room = searchRooms.Current; Console.WriteLine("Hit: " + room.ToJson(false)); diff --git a/MatrixRoomUtils.Web/Pages/HSAdmin/RoomQuery.razor.css b/MatrixRoomUtils.Web/Pages/HSAdmin/RoomQuery.razor.css new file mode 100644 index 0000000..e69de29 diff --git a/MatrixRoomUtils.Web/Pages/ModalTest.razor b/MatrixRoomUtils.Web/Pages/ModalTest.razor new file mode 100644 index 0000000..d031dc2 --- /dev/null +++ b/MatrixRoomUtils.Web/Pages/ModalTest.razor @@ -0,0 +1,102 @@ +@page "/ModalTest" +@inject IJSRuntime JsRuntime +

ModalTest

+ +@foreach (var (key, value) in _windowInfos) { + @* @value.Content *@ +} +@for (int i = 0; i < 5; i++) { + var i1 = i; + + @for (int j = 0; j < i1; j++) { +

@j

+ } +
+} + +@code { + + private Dictionary _windowInfos = new Dictionary(); + + private class WindowInfo { + public double X; + public double Y; + public string Title; + public RenderFragment Content; + } + + protected override async Task OnInitializedAsync() { + double _x = 2; + double _xv = 20; + double _y = 0; + double multiplier = 1; + + await LocalStorageWrapper.LoadFromLocalStorage(LocalStorage); + //var rooms = await RuntimeCache.CurrentHomeServer.GetJoinedRooms(); + + //rooms.ForEach(async room => { + // var name = await room.GetNameAsync(); + // _windowInfos.Add(_windowInfos.Count, new WindowInfo() { X = _x, Y = _y, Title = name}); + // _x += 20; + // _y += 20; + // var dimension = await JsRuntime.InvokeAsync("getWindowDimensions"); + // if (_x > dimension.Width - 100) _x %= dimension.Width - 100; + // if (_y > dimension.Height - 50) _y %= dimension.Height - 50; + // StateHasChanged(); + //}); + + for (int i = 0; i < 200; i++) { + var i1 = i; + _windowInfos.Add(_windowInfos.Count, new WindowInfo() { + X = _x, + Y = _y, + Title = "Win" + i1, + Content = builder => { + builder.OpenComponent(0); + builder.AddAttribute(1, "X", _x); + builder.AddAttribute(2, "Y", _y); + builder.AddAttribute(3, "Title", "Win" + i1); + builder.AddAttribute(4, "ChildContent", (RenderFragment)(builder2 => { + builder2.OpenElement(0, "h1"); + builder2.AddContent(1, "Hello " + i1); + builder2.CloseElement(); + })); + builder.CloseComponent(); + } + }); + //_x += _xv /= 1000/System.Math.Sqrt((double)_windowInfos.Count)*_windowInfos.Count.ToString().Length*multiplier; + _y += 20; + _x += 20; + var dimension = await JsRuntime.InvokeAsync("getWindowDimensions"); + if (_x > dimension.Width - 100) _x %= dimension.Width - 100; + if (_y > dimension.Height - 50) { + _y %= dimension.Height - 50; + _xv = 20; + } + if ( + (_windowInfos.Count < 10 && _windowInfos.Count % 2 == 0) || + (_windowInfos.Count < 100 && _windowInfos.Count % 10 == 0) || + (_windowInfos.Count < 1000 && _windowInfos.Count % 50 == 0) || + (_windowInfos.Count < 10000 && _windowInfos.Count % 100 == 0) + ) { + StateHasChanged(); + await Task.Delay(25); + } + if(_windowInfos.Count > 750) multiplier = 2; + if(_windowInfos.Count > 1500) multiplier = 3; + + } + + await base.OnInitializedAsync(); + } + + private void OnCloseClicked(int i1) { + Console.WriteLine("Close clicked on " + i1); + } + + public class WindowDimension { + public int Width { get; set; } + public int Height { get; set; } + } + +} diff --git a/MatrixRoomUtils.Web/Program.cs b/MatrixRoomUtils.Web/Program.cs index 164f746..8ea8742 100644 --- a/MatrixRoomUtils.Web/Program.cs +++ b/MatrixRoomUtils.Web/Program.cs @@ -2,6 +2,7 @@ using System.Text.Json; using System.Text.Json.Serialization; using Blazored.LocalStorage; using MatrixRoomUtils.Web; +using MatrixRoomUtils.Web.Classes; using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; @@ -20,4 +21,8 @@ builder.Services.AddBlazoredLocalStorage(config => { config.JsonSerializerOptions.WriteIndented = false; }); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); +builder.Services.AddSingleton>(); + await builder.Build().RunAsync(); \ No newline at end of file diff --git a/MatrixRoomUtils.Web/SessionStorageProviderService.cs b/MatrixRoomUtils.Web/SessionStorageProviderService.cs new file mode 100644 index 0000000..82372ff --- /dev/null +++ b/MatrixRoomUtils.Web/SessionStorageProviderService.cs @@ -0,0 +1 @@ +public class SessionStorageProviderService { } \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Shared/ModalWindow.razor b/MatrixRoomUtils.Web/Shared/ModalWindow.razor new file mode 100644 index 0000000..75c2933 --- /dev/null +++ b/MatrixRoomUtils.Web/Shared/ModalWindow.razor @@ -0,0 +1,130 @@ +
+
+ @Title + +
+
+ @ChildContent +
+
+ + + +@code { + + [Parameter] + public RenderFragment? ChildContent { get; set; } + + [Parameter] + public string Title { get; set; } = "Untitled window"; + + [Parameter] + public double X { get; set; } = 60; + + [Parameter] + public double Y { get; set; } = 60; + + [Parameter] + public Action OnCloseClicked { get; set; } + + + private double _x = 60; + private double _y = 60; + + protected override void OnInitialized() { + _x = X; + _y = Y; + } + + private void WindowDrag(DragEventArgs obj) { + Console.WriteLine("Drag: " + obj.ToJson()); + + _x += obj.MovementX; + _y += obj.MovementY; + + StateHasChanged(); + } + + private bool isDragging = false; + private double dragX = 0; + private double dragY = 0; + private void MouseDown(MouseEventArgs obj) { + isDragging = true; + dragX = obj.ClientX; + dragY = obj.ClientY; + } + + private void MouseUp(MouseEventArgs obj) { + isDragging = false; + } + + private void MouseMove(MouseEventArgs obj) { + if (isDragging) { + _x += obj.ClientX - dragX; + _y += obj.ClientY - dragY; + dragX = obj.ClientX; + dragY = obj.ClientY; + StateHasChanged(); + } + } + +} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/wwwroot/css/app.css b/MatrixRoomUtils.Web/wwwroot/css/app.css index 245566a..cb7ba63 100644 --- a/MatrixRoomUtils.Web/wwwroot/css/app.css +++ b/MatrixRoomUtils.Web/wwwroot/css/app.css @@ -1,4 +1,5 @@ @import url('open-iconic/font/css/open-iconic-bootstrap.min.css'); +@import url('jetbrains-mono/jetbrains-mono.css'); article > h3:first-child { padding-top: 24px; @@ -114,3 +115,7 @@ a, .btn-link { .loading-progress-text:after { content: var(--blazor-load-percentage-text, "Loading"); } + +pre { + font-family: JetBrainsMono, var(--bs-font-monospace); +} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/jetbrains-mono.css b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/jetbrains-mono.css new file mode 100644 index 0000000..aa98602 --- /dev/null +++ b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/jetbrains-mono.css @@ -0,0 +1,133 @@ +/* source: https://gist.github.com/aasmpro/95776294ecf48bd7d0562504bad848ea */ + +/* normal fonts */ + +@font-face { + font-family: JetBrainsMono; + font-style: normal; + font-weight: 100; + src: url("./ttf/JetBrainsMono-Thin.ttf") format("truetype"); + src: url("./webfonts/JetBrainsMono-Thin.woff2") format("woff2"); +} + +@font-face { + font-family: JetBrainsMono; + font-style: normal; + font-weight: 200; + src: url("./ttf/JetBrainsMono-ExtraLight.ttf") format("truetype"); + src: url("./webfonts/JetBrainsMono-ExtraLight.woff2") format("woff2"); +} + +@font-face { + font-family: JetBrainsMono; + font-style: normal; + font-weight: 300; + src: url("./ttf/JetBrainsMono-Light.ttf") format("truetype"); + src: url("./webfonts/JetBrainsMono-Light.woff2") format("woff2"); +} + +@font-face { + font-family: JetBrainsMono; + font-style: normal; + font-weight: 400; + src: url("./ttf/JetBrainsMono-Regular.ttf") format("truetype"); + src: url("./webfonts/JetBrainsMono-Regular.woff2") format("woff2"); +} + +@font-face { + font-family: JetBrainsMono; + font-style: normal; + font-weight: 500; + src: url("./ttf/JetBrainsMono-Medium.ttf") format("truetype"); + src: url("./webfonts/JetBrainsMono-Medium.woff2") format("woff2"); +} + +@font-face { + font-family: JetBrainsMono; + font-style: normal; + font-weight: 600; + src: url("./ttf/JetBrainsMono-SemiBold.ttf") format("truetype"); + src: url("./webfonts/JetBrainsMono-SemiBold.woff2") format("woff2"); +} + +@font-face { + font-family: JetBrainsMono; + font-style: normal; + font-weight: 700; + src: url("./ttf/JetBrainsMono-Bold.ttf") format("truetype"); + src: url("./webfonts/JetBrainsMono-Bold.woff2") format("woff2"); +} + +@font-face { + font-family: JetBrainsMono; + font-style: normal; + font-weight: 800; + src: url("./ttf/JetBrainsMono-ExtraBold.ttf") format("truetype"); + src: url("./webfonts/JetBrainsMono-ExtraBold.woff2") format("woff2"); +} + +/* italic fonts */ + +@font-face { + font-family: JetBrainsMono; + font-style: italic; + font-weight: 100; + src: url("./ttf/JetBrainsMono-ThinItalic.ttf") format("truetype"); + src: url("./webfonts/JetBrainsMono-ThinItalic.woff2") format("woff2"); +} + +@font-face { + font-family: JetBrainsMono; + font-style: italic; + font-weight: 200; + src: url("./ttf/JetBrainsMono-ExtraLightItalic.ttf") format("truetype"); + src: url("./webfonts/JetBrainsMono-ExtraLightItalic.woff2") format("woff2"); +} + +@font-face { + font-family: JetBrainsMono; + font-style: italic; + font-weight: 300; + src: url("./ttf/JetBrainsMono-LightItalic.ttf") format("truetype"); + src: url("./webfonts/JetBrainsMono-LightItalic.woff2") format("woff2"); +} + +@font-face { + font-family: JetBrainsMono; + font-style: italic; + font-weight: 400; + src: url("./ttf/JetBrainsMono-Italic.ttf") format("truetype"); + src: url("./webfonts/JetBrainsMono-Italic.woff2") format("woff2"); +} + +@font-face { + font-family: JetBrainsMono; + font-style: italic; + font-weight: 500; + src: url("./ttf/JetBrainsMono-MediumItalic.ttf") format("truetype"); + src: url("./webfonts/JetBrainsMono-MediumItalic.woff2") format("woff2"); +} + +@font-face { + font-family: JetBrainsMono; + font-style: italic; + font-weight: 600; + src: url("./ttf/JetBrainsMono-SemiBoldItalic.ttf") format("truetype"); + src: url("./webfonts/JetBrainsMono-SemiBoldItalic.woff2") format("woff2"); +} + +@font-face { + font-family: JetBrainsMono; + font-style: italic; + font-weight: 700; + src: url("./ttf/JetBrainsMono-BoldItalic.ttf") format("truetype"); + src: url("./webfonts/JetBrainsMono-BoldItalic.woff2") format("woff2"); +} + +@font-face { + font-family: JetBrainsMono; + font-style: italic; + font-weight: 800; + src: url("./ttf/JetBrainsMono-ExtraBoldItalic.ttf") format("truetype"); + src: url("./webfonts/JetBrainsMono-ExtraBoldItalic.woff2") format("woff2"); +} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Bold.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Bold.ttf new file mode 100644 index 0000000..8c93043 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Bold.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-BoldItalic.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-BoldItalic.ttf new file mode 100644 index 0000000..1ddf216 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-BoldItalic.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ExtraBold.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ExtraBold.ttf new file mode 100644 index 0000000..435d7a7 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ExtraBold.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ExtraBoldItalic.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ExtraBoldItalic.ttf new file mode 100644 index 0000000..79e616e Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ExtraBoldItalic.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ExtraLight.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ExtraLight.ttf new file mode 100644 index 0000000..c131cbf Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ExtraLight.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ExtraLightItalic.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ExtraLightItalic.ttf new file mode 100644 index 0000000..a768985 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ExtraLightItalic.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Italic.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Italic.ttf new file mode 100644 index 0000000..ccc9d6a Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Italic.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Light.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Light.ttf new file mode 100644 index 0000000..15f15a2 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Light.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-LightItalic.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-LightItalic.ttf new file mode 100644 index 0000000..506208f Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-LightItalic.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Medium.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Medium.ttf new file mode 100644 index 0000000..9767115 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Medium.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-MediumItalic.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-MediumItalic.ttf new file mode 100644 index 0000000..415a9e3 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-MediumItalic.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Regular.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Regular.ttf new file mode 100644 index 0000000..dff66cc Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Regular.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-SemiBold.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-SemiBold.ttf new file mode 100644 index 0000000..a70e69b Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-SemiBold.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-SemiBoldItalic.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-SemiBoldItalic.ttf new file mode 100644 index 0000000..968602e Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-SemiBoldItalic.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Thin.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Thin.ttf new file mode 100644 index 0000000..7dbe2ac Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-Thin.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ThinItalic.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ThinItalic.ttf new file mode 100644 index 0000000..c6ad6c2 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMono-ThinItalic.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Bold.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Bold.ttf new file mode 100644 index 0000000..f78f84f Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Bold.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-BoldItalic.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-BoldItalic.ttf new file mode 100644 index 0000000..9fb8c83 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-BoldItalic.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ExtraBold.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ExtraBold.ttf new file mode 100644 index 0000000..fe5be6a Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ExtraBold.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ExtraBoldItalic.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ExtraBoldItalic.ttf new file mode 100644 index 0000000..59fc980 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ExtraBoldItalic.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ExtraLight.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ExtraLight.ttf new file mode 100644 index 0000000..6da7b75 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ExtraLight.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ExtraLightItalic.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ExtraLightItalic.ttf new file mode 100644 index 0000000..5733efc Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ExtraLightItalic.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Italic.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Italic.ttf new file mode 100644 index 0000000..4e9c380 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Italic.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Light.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Light.ttf new file mode 100644 index 0000000..0b79b0c Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Light.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-LightItalic.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-LightItalic.ttf new file mode 100644 index 0000000..b5e0842 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-LightItalic.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Medium.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Medium.ttf new file mode 100644 index 0000000..1454372 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Medium.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-MediumItalic.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-MediumItalic.ttf new file mode 100644 index 0000000..8d63c6c Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-MediumItalic.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Regular.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Regular.ttf new file mode 100644 index 0000000..70d2ec9 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Regular.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-SemiBold.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-SemiBold.ttf new file mode 100644 index 0000000..ce60a88 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-SemiBold.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-SemiBoldItalic.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-SemiBoldItalic.ttf new file mode 100644 index 0000000..3b3f8f6 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-SemiBoldItalic.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Thin.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Thin.ttf new file mode 100644 index 0000000..bea837e Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-Thin.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ThinItalic.ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ThinItalic.ttf new file mode 100644 index 0000000..f0bfed7 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/ttf/JetBrainsMonoNL-ThinItalic.ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/variable/JetBrainsMono-Italic[wght].ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/variable/JetBrainsMono-Italic[wght].ttf new file mode 100644 index 0000000..5414835 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/variable/JetBrainsMono-Italic[wght].ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/variable/JetBrainsMono[wght].ttf b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/variable/JetBrainsMono[wght].ttf new file mode 100644 index 0000000..b60e77f Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/variable/JetBrainsMono[wght].ttf differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Bold.woff2 b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Bold.woff2 new file mode 100644 index 0000000..4917f43 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Bold.woff2 differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-BoldItalic.woff2 b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-BoldItalic.woff2 new file mode 100644 index 0000000..536d3f7 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-BoldItalic.woff2 differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ExtraBold.woff2 b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ExtraBold.woff2 new file mode 100644 index 0000000..8f88c54 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ExtraBold.woff2 differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ExtraBoldItalic.woff2 b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ExtraBoldItalic.woff2 new file mode 100644 index 0000000..d1478ba Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ExtraBoldItalic.woff2 differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ExtraLight.woff2 b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ExtraLight.woff2 new file mode 100644 index 0000000..b97239f Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ExtraLight.woff2 differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ExtraLightItalic.woff2 b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ExtraLightItalic.woff2 new file mode 100644 index 0000000..be01aac Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ExtraLightItalic.woff2 differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Italic.woff2 b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Italic.woff2 new file mode 100644 index 0000000..d60c270 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Italic.woff2 differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Light.woff2 b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Light.woff2 new file mode 100644 index 0000000..6538498 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Light.woff2 differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-LightItalic.woff2 b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-LightItalic.woff2 new file mode 100644 index 0000000..66ca3d2 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-LightItalic.woff2 differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Medium.woff2 b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Medium.woff2 new file mode 100644 index 0000000..669d04c Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Medium.woff2 differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-MediumItalic.woff2 b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-MediumItalic.woff2 new file mode 100644 index 0000000..80cfd15 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-MediumItalic.woff2 differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Regular.woff2 b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Regular.woff2 new file mode 100644 index 0000000..40da427 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Regular.woff2 differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-SemiBold.woff2 b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-SemiBold.woff2 new file mode 100644 index 0000000..5ead7b0 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-SemiBold.woff2 differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-SemiBoldItalic.woff2 b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-SemiBoldItalic.woff2 new file mode 100644 index 0000000..c5dd294 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-SemiBoldItalic.woff2 differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Thin.woff2 b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Thin.woff2 new file mode 100644 index 0000000..17270e4 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-Thin.woff2 differ diff --git a/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ThinItalic.woff2 b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ThinItalic.woff2 new file mode 100644 index 0000000..a643215 Binary files /dev/null and b/MatrixRoomUtils.Web/wwwroot/css/jetbrains-mono/webfonts/JetBrainsMono-ThinItalic.woff2 differ diff --git a/MatrixRoomUtils.Web/wwwroot/index.html b/MatrixRoomUtils.Web/wwwroot/index.html index f268ac4..9c9e7d0 100644 --- a/MatrixRoomUtils.Web/wwwroot/index.html +++ b/MatrixRoomUtils.Web/wwwroot/index.html @@ -36,6 +36,12 @@ console.log("Element is not an HTMLElement", element); } } + function getWindowDimensions() { + return { + width: window.innerWidth, + height: window.innerHeight + }; + } diff --git a/MatrixRoomUtils.sln.DotSettings.user b/MatrixRoomUtils.sln.DotSettings.user new file mode 100644 index 0000000..07d0701 --- /dev/null +++ b/MatrixRoomUtils.sln.DotSettings.user @@ -0,0 +1,6 @@ + + ShowAndRun + + + + \ No newline at end of file -- cgit 1.4.1