diff options
author | Emma [it/its]@Rory& <root@rory.gay> | 2024-01-24 02:28:54 +0100 |
---|---|---|
committer | Emma [it/its]@Rory& <root@rory.gay> | 2024-01-24 02:28:54 +0100 |
commit | bf2da30c7ae9d4c15a5e22f3ee0b1bae2ca66e46 (patch) | |
tree | c375a53ef850e33d8721abb0f68b34eb10afed08 /LibMatrix | |
parent | Abstract FederationClient from RemoteHomeserver (diff) | |
download | LibMatrix-bf2da30c7ae9d4c15a5e22f3ee0b1bae2ca66e46.tar.xz |
MessageBuilder extensions
Diffstat (limited to '')
-rw-r--r-- | LibMatrix.EventTypes/LibMatrix.EventTypes.csproj | 4 | ||||
-rw-r--r-- | LibMatrix/Helpers/MessageBuilder.cs | 50 | ||||
-rw-r--r-- | LibMatrix/LibMatrix.csproj | 4 | ||||
-rw-r--r-- | LibMatrix/Services/ServiceInstaller.cs | 2 |
4 files changed, 47 insertions, 13 deletions
diff --git a/LibMatrix.EventTypes/LibMatrix.EventTypes.csproj b/LibMatrix.EventTypes/LibMatrix.EventTypes.csproj index a242125..1c38825 100644 --- a/LibMatrix.EventTypes/LibMatrix.EventTypes.csproj +++ b/LibMatrix.EventTypes/LibMatrix.EventTypes.csproj @@ -11,8 +11,8 @@ <!-- This is dangerous, but eases development since locking the version will drift out of sync without noticing, which causes build errors due to missing functions. Using the NuGet version in development is annoying due to delays between pushing and being able to consume. - If you want to use a time-appropriate version of the library, recursively clone https://cgit.rory.gay/matrix/MatrixRoomUtils.git - instead, since this will be locked by the MatrixRoomUtils project, which contains both LibMatrix and ArcaneLibs as a submodule. --> + If you want to use a time-appropriate version of the library, recursively clone https://cgit.rory.gay/matrix/MatrixUtils.git + instead, since this will be locked by the MatrixUtils project, which contains both LibMatrix and ArcaneLibs as a submodule. --> <PackageReference Condition="!Exists('..\ArcaneLibs\ArcaneLibs\ArcaneLibs.csproj')" Include="ArcaneLibs" Version="*-preview*"/> </ItemGroup> diff --git a/LibMatrix/Helpers/MessageBuilder.cs b/LibMatrix/Helpers/MessageBuilder.cs index 7715462..250187a 100644 --- a/LibMatrix/Helpers/MessageBuilder.cs +++ b/LibMatrix/Helpers/MessageBuilder.cs @@ -11,6 +11,37 @@ public class MessageBuilder(string msgType = "m.text", string format = "org.matr public RoomMessageEventContent Build() => Content; + public MessageBuilder WithBody(string body) { + Content.Body += body; + Content.FormattedBody += body; + return this; + } + + public MessageBuilder WithHtmlTag(string tag, string body, Dictionary<string, string>? attributes = null) { + Content.Body += body; + Content.FormattedBody += $"<{tag}"; + if (attributes != null) { + foreach (var (key, value) in attributes) { + Content.FormattedBody += $" {key}=\"{value}\""; + } + } + Content.FormattedBody += $">{body}</{tag}>"; + return this; + } + + public MessageBuilder WithHtmlTag(string tag, Action<MessageBuilder> bodyBuilder, Dictionary<string, string>? attributes = null) { + Content.FormattedBody += $"<{tag}"; + if (attributes != null) { + foreach (var (key, value) in attributes) { + Content.FormattedBody += $" {key}=\"{value}\""; + } + } + Content.FormattedBody += ">"; + bodyBuilder(this); + Content.FormattedBody += $"</{tag}>"; + return this; + } + public MessageBuilder WithColoredBody(string color, string body) { Content.Body += body; Content.FormattedBody += $"<font color=\"{color}\">{body}</font>"; @@ -25,14 +56,17 @@ public class MessageBuilder(string msgType = "m.text", string format = "org.matr } public MessageBuilder WithRainbowString(string text, byte skip = 1, int offset = 0, double lengthFactor = 255.0, bool useLength = true) { - if (useLength) { - lengthFactor = text.Length; - } - RainbowEnumerator enumerator = new(skip, offset, lengthFactor); - for (int i = 0; i < text.Length; i++) { - var (r, g, b) = enumerator.Next(); - Content.FormattedBody += $"<font color=\"#{r:X2}{g:X2}{b:X2}\">{text[i]}</font>"; - } + // if (useLength) { + // lengthFactor = text.Length; + // } + // HslaColorInterpolator interpolator = new((0, 255, 128, 255), (255, 255, 128, 255)); + // // RainbowEnumerator enumerator = new(skip, offset, lengthFactor); + // for (int i = 0; i < text.Length; i++) { + // // var (r, g, b) = enumerator.Next(); + // // var (r,g,b,a) = interpolator.Interpolate((i+offset) * skip, lengthFactor).ToRgba(); + // // Console.WriteLine($"RBA: {r} {g} {b} {a}"); + // // Content.FormattedBody += $"<font color=\"#{r:X2}{g:X2}{b:X2}\">{text[i]}</font>"; + // } return this; } diff --git a/LibMatrix/LibMatrix.csproj b/LibMatrix/LibMatrix.csproj index a2ee327..16e43f5 100644 --- a/LibMatrix/LibMatrix.csproj +++ b/LibMatrix/LibMatrix.csproj @@ -21,8 +21,8 @@ <!-- This is dangerous, but eases development since locking the version will drift out of sync without noticing, which causes build errors due to missing functions. Using the NuGet version in development is annoying due to delays between pushing and being able to consume. - If you want to use a time-appropriate version of the library, recursively clone https://cgit.rory.gay/matrix/MatrixRoomUtils.git - instead, since this will be locked by the MatrixRoomUtils project, which contains both LibMatrix and ArcaneLibs as a submodule. --> + If you want to use a time-appropriate version of the library, recursively clone https://cgit.rory.gay/matrix/MatrixUtils.git + instead, since this will be locked by the MatrixUtils project, which contains both LibMatrix and ArcaneLibs as a submodule. --> <PackageReference Condition="!Exists('..\ArcaneLibs\ArcaneLibs\ArcaneLibs.csproj')" Include="ArcaneLibs" Version="*-preview*"/> <ProjectReference Include="..\LibMatrix.EventTypes\LibMatrix.EventTypes.csproj" /> </ItemGroup> diff --git a/LibMatrix/Services/ServiceInstaller.cs b/LibMatrix/Services/ServiceInstaller.cs index ad5bedc..358dc2a 100644 --- a/LibMatrix/Services/ServiceInstaller.cs +++ b/LibMatrix/Services/ServiceInstaller.cs @@ -7,7 +7,7 @@ public static class ServiceInstaller { public static IServiceCollection AddRoryLibMatrixServices(this IServiceCollection services, RoryLibMatrixConfiguration? config = null) { //Check required services // if (!services.Any(x => x.ServiceType == typeof(TieredStorageService))) - // throw new Exception("[MRUCore/DI] No TieredStorageService has been registered!"); + // throw new Exception("[RMUCore/DI] No TieredStorageService has been registered!"); //Add config services.AddSingleton(config ?? new RoryLibMatrixConfiguration()); |