This commit is contained in:
HueByte
2026-07-16 03:54:30 +00:00
parent 35bf05433e
commit 9944e86ee3
71 changed files with 14161 additions and 884 deletions
@@ -319,6 +319,66 @@ Class CommandHandler <a class="header-action link-secondary" title="View source
<h3 id="EchoHub_Client_Commands_CommandHandler_OnChangeRoomPassword" data-uid="EchoHub.Client.Commands.CommandHandler.OnChangeRoomPassword">
OnChangeRoomPassword
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public event Func&lt;string, string, Task&gt;? OnChangeRoomPassword</code></pre>
</div>
<h4 class="section">Event Type</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-3">Func</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <span class="xref">Task</span>&gt;</dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_Commands_CommandHandler_OnClearAttachments" data-uid="EchoHub.Client.Commands.CommandHandler.OnClearAttachments">
OnClearAttachments
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public event Func&lt;Task&gt;? OnClearAttachments</code></pre>
</div>
<h4 class="section">Event Type</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-1">Func</a>&lt;<span class="xref">Task</span>&gt;</dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_Commands_CommandHandler_OnHelp" data-uid="EchoHub.Client.Commands.CommandHandler.OnHelp"> <h3 id="EchoHub_Client_Commands_CommandHandler_OnHelp" data-uid="EchoHub.Client.Commands.CommandHandler.OnHelp">
OnHelp OnHelp
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
@@ -358,7 +418,7 @@ Class CommandHandler <a class="header-action link-secondary" title="View source
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public event Func&lt;string, Task&gt;? OnJoinChannel</code></pre> <pre><code class="lang-csharp hljs">public event Func&lt;string, string?, Task&gt;? OnJoinChannel</code></pre>
</div> </div>
@@ -368,7 +428,7 @@ Class CommandHandler <a class="header-action link-secondary" title="View source
<h4 class="section">Event Type</h4> <h4 class="section">Event Type</h4>
<dl class="parameters"> <dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <span class="xref">Task</span>&gt;</dt> <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-3">Func</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <span class="xref">Task</span>&gt;</dt>
<dd></dd> <dd></dd>
</dl> </dl>
@@ -649,6 +709,36 @@ Class CommandHandler <a class="header-action link-secondary" title="View source
<h3 id="EchoHub_Client_Commands_CommandHandler_OnSetAsciiSize" data-uid="EchoHub.Client.Commands.CommandHandler.OnSetAsciiSize">
OnSetAsciiSize
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public event Func&lt;string, Task&gt;? OnSetAsciiSize</code></pre>
</div>
<h4 class="section">Event Type</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <span class="xref">Task</span>&gt;</dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_Commands_CommandHandler_OnSetAvatar" data-uid="EchoHub.Client.Commands.CommandHandler.OnSetAvatar"> <h3 id="EchoHub_Client_Commands_CommandHandler_OnSetAvatar" data-uid="EchoHub.Client.Commands.CommandHandler.OnSetAvatar">
OnSetAvatar OnSetAvatar
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
@@ -709,6 +799,36 @@ Class CommandHandler <a class="header-action link-secondary" title="View source
<h3 id="EchoHub_Client_Commands_CommandHandler_OnSetDownloadPath" data-uid="EchoHub.Client.Commands.CommandHandler.OnSetDownloadPath">
OnSetDownloadPath
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public event Func&lt;string, Task&gt;? OnSetDownloadPath</code></pre>
</div>
<h4 class="section">Event Type</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <span class="xref">Task</span>&gt;</dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_Commands_CommandHandler_OnSetNick" data-uid="EchoHub.Client.Commands.CommandHandler.OnSetNick"> <h3 id="EchoHub_Client_Commands_CommandHandler_OnSetNick" data-uid="EchoHub.Client.Commands.CommandHandler.OnSetNick">
OnSetNick OnSetNick
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
@@ -213,6 +213,39 @@ Class ClientConfig <a class="header-action link-secondary" title="View source"
<a id="EchoHub_Client_Config_ClientConfig_DefaultAsciiSize_" data-uid="EchoHub.Client.Config.ClientConfig.DefaultAsciiSize*"></a>
<h3 id="EchoHub_Client_Config_ClientConfig_DefaultAsciiSize" data-uid="EchoHub.Client.Config.ClientConfig.DefaultAsciiSize">
DefaultAsciiSize
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>ASCII-art rendering size for images you attach: &quot;s&quot; (40×40), &quot;m&quot; (80×80), or &quot;l&quot; (120×120).
Applies to copy-paste/drag-drop attachments, which have no per-file size flag.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string DefaultAsciiSize { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_ClientConfig_DefaultPreset_" data-uid="EchoHub.Client.Config.ClientConfig.DefaultPreset*"></a> <a id="EchoHub_Client_Config_ClientConfig_DefaultPreset_" data-uid="EchoHub.Client.Config.ClientConfig.DefaultPreset*"></a>
<h3 id="EchoHub_Client_Config_ClientConfig_DefaultPreset" data-uid="EchoHub.Client.Config.ClientConfig.DefaultPreset"> <h3 id="EchoHub_Client_Config_ClientConfig_DefaultPreset" data-uid="EchoHub.Client.Config.ClientConfig.DefaultPreset">
@@ -244,6 +277,39 @@ Class ClientConfig <a class="header-action link-secondary" title="View source"
<a id="EchoHub_Client_Config_ClientConfig_DownloadPath_" data-uid="EchoHub.Client.Config.ClientConfig.DownloadPath*"></a>
<h3 id="EchoHub_Client_Config_ClientConfig_DownloadPath" data-uid="EchoHub.Client.Config.ClientConfig.DownloadPath">
DownloadPath
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Folder where downloaded attachments and saved images are written. When null, the
OS Downloads folder is used. Set via the native folder picker or <code>/downloadpath</code>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? DownloadPath { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_ClientConfig_Notifications_" data-uid="EchoHub.Client.Config.ClientConfig.Notifications*"></a> <a id="EchoHub_Client_Config_ClientConfig_Notifications_" data-uid="EchoHub.Client.Config.ClientConfig.Notifications*"></a>
<h3 id="EchoHub_Client_Config_ClientConfig_Notifications" data-uid="EchoHub.Client.Config.ClientConfig.Notifications"> <h3 id="EchoHub_Client_Config_ClientConfig_Notifications" data-uid="EchoHub.Client.Config.ClientConfig.Notifications">
@@ -182,6 +182,40 @@ Class SavedServer <a class="header-action link-secondary" title="View source" h
</h2> </h2>
<a id="EchoHub_Client_Config_SavedServer_ChannelKeys_" data-uid="EchoHub.Client.Config.SavedServer.ChannelKeys*"></a>
<h3 id="EchoHub_Client_Config_SavedServer_ChannelKeys" data-uid="EchoHub.Client.Config.SavedServer.ChannelKeys">
ChannelKeys
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Cached room content keys for end-to-end encrypted channels on this server,
keyed by channel name (base64). Like RefreshToken, these live only on the
user's machine — the server never sees them.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Dictionary&lt;string, string&gt; ChannelKeys { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">Dictionary</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_SavedServer_LastConnected_" data-uid="EchoHub.Client.Config.SavedServer.LastConnected*"></a> <a id="EchoHub_Client_Config_SavedServer_LastConnected_" data-uid="EchoHub.Client.Config.SavedServer.LastConnected*"></a>
<h3 id="EchoHub_Client_Config_SavedServer_LastConnected" data-uid="EchoHub.Client.Config.SavedServer.LastConnected"> <h3 id="EchoHub_Client_Config_SavedServer_LastConnected" data-uid="EchoHub.Client.Config.SavedServer.LastConnected">
+130 -45
View File
@@ -365,8 +365,8 @@ Class ApiClient <a class="header-action link-secondary" title="View source" hre
<a id="EchoHub_Client_Services_ApiClient_CreateChannelAsync_" data-uid="EchoHub.Client.Services.ApiClient.CreateChannelAsync*"></a> <a id="EchoHub_Client_Services_ApiClient_CreateChannelAsync_" data-uid="EchoHub.Client.Services.ApiClient.CreateChannelAsync*"></a>
<h3 id="EchoHub_Client_Services_ApiClient_CreateChannelAsync_System_String_System_String_System_Boolean_" data-uid="EchoHub.Client.Services.ApiClient.CreateChannelAsync(System.String,System.String,System.Boolean)"> <h3 id="EchoHub_Client_Services_ApiClient_CreateChannelAsync_System_String_System_String_System_Boolean_System_String_System_String_System_String_" data-uid="EchoHub.Client.Services.ApiClient.CreateChannelAsync(System.String,System.String,System.Boolean,System.String,System.String,System.String)">
CreateChannelAsync(string, string?, bool) CreateChannelAsync(string, string?, bool, string?, string?, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ApiClient.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ApiClient.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -374,7 +374,7 @@ Class ApiClient <a class="header-action link-secondary" title="View source" hre
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task&lt;ChannelDto?&gt; CreateChannelAsync(string name, string? topic = null, bool isPublic = true)</code></pre> <pre><code class="lang-csharp hljs">public Task&lt;ChannelDto?&gt; CreateChannelAsync(string name, string? topic = null, bool isPublic = true, string? password = null, string? encryptionSalt = null, string? wrappedRoomKey = null)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -385,6 +385,12 @@ Class ApiClient <a class="header-action link-secondary" title="View source" hre
<dd></dd> <dd></dd>
<dt><code>isPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt> <dt><code>isPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd> <dd></dd>
<dt><code>password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>encryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>wrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl> </dl>
<h4 class="section">Returns</h4> <h4 class="section">Returns</h4>
@@ -539,6 +545,44 @@ Class ApiClient <a class="header-action link-secondary" title="View source" hre
<a id="EchoHub_Client_Services_ApiClient_GetChannelCryptoAsync_" data-uid="EchoHub.Client.Services.ApiClient.GetChannelCryptoAsync*"></a>
<h3 id="EchoHub_Client_Services_ApiClient_GetChannelCryptoAsync_System_String_" data-uid="EchoHub.Client.Services.ApiClient.GetChannelCryptoAsync(System.String)">
GetChannelCryptoAsync(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ApiClient.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Fetches a channel's public crypto metadata (whether it's E2E-encrypted and its
key-derivation salt). Returns null when the channel doesn't exist.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task&lt;ChannelCryptoDto?&gt; GetChannelCryptoAsync(string channelName)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs">ChannelCryptoDto</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_ApiClient_GetChannelsAsync_" data-uid="EchoHub.Client.Services.ApiClient.GetChannelsAsync*"></a> <a id="EchoHub_Client_Services_ApiClient_GetChannelsAsync_" data-uid="EchoHub.Client.Services.ApiClient.GetChannelsAsync*"></a>
<h3 id="EchoHub_Client_Services_ApiClient_GetChannelsAsync" data-uid="EchoHub.Client.Services.ApiClient.GetChannelsAsync"> <h3 id="EchoHub_Client_Services_ApiClient_GetChannelsAsync" data-uid="EchoHub.Client.Services.ApiClient.GetChannelsAsync">
@@ -991,6 +1035,89 @@ Used by EchoHubConnection for SignalR token provider.</p>
<a id="EchoHub_Client_Services_ApiClient_RekeyChannelAsync_" data-uid="EchoHub.Client.Services.ApiClient.RekeyChannelAsync*"></a>
<h3 id="EchoHub_Client_Services_ApiClient_RekeyChannelAsync_System_String_EchoHub_Core_DTOs_RekeyChannelRequest_" data-uid="EchoHub.Client.Services.ApiClient.RekeyChannelAsync(System.String,EchoHub.Core.DTOs.RekeyChannelRequest)">
RekeyChannelAsync(string, RekeyChannelRequest)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ApiClient.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task&lt;ChannelDto?&gt; RekeyChannelAsync(string channelName, RekeyChannelRequest request)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>request</code> <a class="xref" href="../core/EchoHub.Core.DTOs.RekeyChannelRequest.html">RekeyChannelRequest</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs">ChannelDto</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_ApiClient_SendMessageWithAttachmentsAsync_" data-uid="EchoHub.Client.Services.ApiClient.SendMessageWithAttachmentsAsync*"></a>
<h3 id="EchoHub_Client_Services_ApiClient_SendMessageWithAttachmentsAsync_System_String_System_String_System_Collections_Generic_IReadOnlyList_EchoHub_Client_Services_OutgoingAttachment__System_String_" data-uid="EchoHub.Client.Services.ApiClient.SendMessageWithAttachmentsAsync(System.String,System.String,System.Collections.Generic.IReadOnlyList{EchoHub.Client.Services.OutgoingAttachment},System.String)">
SendMessageWithAttachmentsAsync(string, string, IReadOnlyList&lt;OutgoingAttachment&gt;, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ApiClient.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Sends one message with optional text and one or more file attachments.
For end-to-end encrypted channels each attachment carries a declared kind and a
room-encrypted preview (empty when none); the caption is likewise room-encrypted.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task&lt;MessageDto?&gt; SendMessageWithAttachmentsAsync(string channelName, string content, IReadOnlyList&lt;OutgoingAttachment&gt; attachments, string? size = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>content</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>attachments</code> <span class="xref">IReadOnlyList</span>&lt;<a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html">OutgoingAttachment</a>&gt;</dt>
<dd></dd>
<dt><code>size</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs">MessageDto</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_ApiClient_SendUrlAsync_" data-uid="EchoHub.Client.Services.ApiClient.SendUrlAsync*"></a> <a id="EchoHub_Client_Services_ApiClient_SendUrlAsync_" data-uid="EchoHub.Client.Services.ApiClient.SendUrlAsync*"></a>
<h3 id="EchoHub_Client_Services_ApiClient_SendUrlAsync_System_String_System_String_System_String_" data-uid="EchoHub.Client.Services.ApiClient.SendUrlAsync(System.String,System.String,System.String)"> <h3 id="EchoHub_Client_Services_ApiClient_SendUrlAsync_System_String_System_String_System_String_" data-uid="EchoHub.Client.Services.ApiClient.SendUrlAsync(System.String,System.String,System.String)">
@@ -1215,48 +1342,6 @@ Used by EchoHubConnection for SignalR token provider.</p>
<a id="EchoHub_Client_Services_ApiClient_UploadFileAsync_" data-uid="EchoHub.Client.Services.ApiClient.UploadFileAsync*"></a>
<h3 id="EchoHub_Client_Services_ApiClient_UploadFileAsync_System_String_System_IO_Stream_System_String_System_String_" data-uid="EchoHub.Client.Services.ApiClient.UploadFileAsync(System.String,System.IO.Stream,System.String,System.String)">
UploadFileAsync(string, Stream, string, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ApiClient.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task&lt;MessageDto?&gt; UploadFileAsync(string channelName, Stream fileStream, string fileName, string? size = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>fileStream</code> <span class="xref">Stream</span></dt>
<dd></dd>
<dt><code>fileName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>size</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs">MessageDto</a>&gt;</dt>
<dd></dd>
</dl>
<h2 class="section" id="events">Events <h2 class="section" id="events">Events
</h2> </h2>
@@ -0,0 +1,275 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ChannelPasswordRequiredException | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ChannelPasswordRequiredException | EchoHub Documentation ">
<meta name="description" content="Thrown when joining a channel fails because a password is required or incorrect. The UI catches this to prompt the user and retry.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_ChannelPasswordRequiredException.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.ChannelPasswordRequiredException%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.ChannelPasswordRequiredException">
<h1 id="EchoHub_Client_Services_ChannelPasswordRequiredException" data-uid="EchoHub.Client.Services.ChannelPasswordRequiredException" class="text-break">
Class ChannelPasswordRequiredException <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Thrown when joining a channel fails because a password is required or incorrect.
The UI catches this to prompt the user and retry.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class ChannelPasswordRequiredException : Exception</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception">Exception</a></div>
<div><span class="xref">ChannelPasswordRequiredException</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.getbaseexception">Exception.GetBaseException()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.tostring">Exception.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.gettype">Exception.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.targetsite">Exception.TargetSite</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.message">Exception.Message</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.data">Exception.Data</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.innerexception">Exception.InnerException</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.helplink">Exception.HelpLink</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.source">Exception.Source</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.hresult">Exception.HResult</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.stacktrace">Exception.StackTrace</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_ChannelPasswordRequiredException__ctor_" data-uid="EchoHub.Client.Services.ChannelPasswordRequiredException.#ctor*"></a>
<h3 id="EchoHub_Client_Services_ChannelPasswordRequiredException__ctor_System_String_System_String_" data-uid="EchoHub.Client.Services.ChannelPasswordRequiredException.#ctor(System.String,System.String)">
ChannelPasswordRequiredException(string, string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ChannelPasswordRequiredException(string channelName, string message)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>message</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Services_ChannelPasswordRequiredException_ChannelName_" data-uid="EchoHub.Client.Services.ChannelPasswordRequiredException.ChannelName*"></a>
<h3 id="EchoHub_Client_Services_ChannelPasswordRequiredException_ChannelName" data-uid="EchoHub.Client.Services.ChannelPasswordRequiredException.ChannelName">
ChannelName
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string ChannelName { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,219 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ClipboardFiles | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ClipboardFiles | EchoHub Documentation ">
<meta name="description" content="Reads file paths that live on the OS clipboard as a file list (e.g. after copying a file in Explorer/Finder/Nautilus), which terminals do not paste as text. Lets Ctrl+V attach a copied file directly instead of requiring the user to paste a raw path.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_ClipboardFiles.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.ClipboardFiles%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.ClipboardFiles">
<h1 id="EchoHub_Client_Services_ClipboardFiles" data-uid="EchoHub.Client.Services.ClipboardFiles" class="text-break">
Class ClipboardFiles <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClipboardFiles.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Reads file paths that live on the OS clipboard as a <em>file list</em> (e.g. after copying a file in
Explorer/Finder/Nautilus), which terminals do not paste as text. Lets Ctrl+V attach a copied
file directly instead of requiring the user to paste a raw path.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class ClipboardFiles</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ClipboardFiles</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_ClipboardFiles_TryGetFiles_" data-uid="EchoHub.Client.Services.ClipboardFiles.TryGetFiles*"></a>
<h3 id="EchoHub_Client_Services_ClipboardFiles_TryGetFiles_System_Collections_Generic_List_System_String___" data-uid="EchoHub.Client.Services.ClipboardFiles.TryGetFiles(System.Collections.Generic.List{System.String}@)">
TryGetFiles(out List&lt;string&gt;)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClipboardFiles.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool TryGetFiles(out List&lt;string&gt; files)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>files</code> <span class="xref">List</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClipboardFiles.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -157,8 +157,8 @@ Class EchoHubConnection <a class="header-action link-secondary" title="View sou
<a id="EchoHub_Client_Services_EchoHubConnection__ctor_" data-uid="EchoHub.Client.Services.EchoHubConnection.#ctor*"></a> <a id="EchoHub_Client_Services_EchoHubConnection__ctor_" data-uid="EchoHub.Client.Services.EchoHubConnection.#ctor*"></a>
<h3 id="EchoHub_Client_Services_EchoHubConnection__ctor_System_String_EchoHub_Client_Services_ApiClient_EchoHub_Client_Services_ClientEncryptionService_" data-uid="EchoHub.Client.Services.EchoHubConnection.#ctor(System.String,EchoHub.Client.Services.ApiClient,EchoHub.Client.Services.ClientEncryptionService)"> <h3 id="EchoHub_Client_Services_EchoHubConnection__ctor_System_String_EchoHub_Client_Services_ApiClient_EchoHub_Client_Services_ClientEncryptionService_EchoHub_Client_Services_RoomKeyStore_" data-uid="EchoHub.Client.Services.EchoHubConnection.#ctor(System.String,EchoHub.Client.Services.ApiClient,EchoHub.Client.Services.ClientEncryptionService,EchoHub.Client.Services.RoomKeyStore)">
EchoHubConnection(string, ApiClient, ClientEncryptionService) EchoHubConnection(string, ApiClient, ClientEncryptionService, RoomKeyStore)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -166,7 +166,7 @@ Class EchoHubConnection <a class="header-action link-secondary" title="View sou
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public EchoHubConnection(string serverUrl, ApiClient apiClient, ClientEncryptionService encryption)</code></pre> <pre><code class="lang-csharp hljs">public EchoHubConnection(string serverUrl, ApiClient apiClient, ClientEncryptionService encryption, RoomKeyStore roomKeys)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -177,6 +177,8 @@ Class EchoHubConnection <a class="header-action link-secondary" title="View sou
<dd></dd> <dd></dd>
<dt><code>encryption</code> <a class="xref" href="EchoHub.Client.Services.ClientEncryptionService.html">ClientEncryptionService</a></dt> <dt><code>encryption</code> <a class="xref" href="EchoHub.Client.Services.ClientEncryptionService.html">ClientEncryptionService</a></dt>
<dd></dd> <dd></dd>
<dt><code>roomKeys</code> <a class="xref" href="EchoHub.Client.Services.RoomKeyStore.html">RoomKeyStore</a></dt>
<dd></dd>
</dl> </dl>
@@ -190,6 +192,40 @@ Class EchoHubConnection <a class="header-action link-secondary" title="View sou
<h2 class="section" id="fields">Fields
</h2>
<h3 id="EchoHub_Client_Services_EchoHubConnection_LockedMessagePlaceholder" data-uid="EchoHub.Client.Services.EchoHubConnection.LockedMessagePlaceholder">
LockedMessagePlaceholder
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const string LockedMessagePlaceholder = &quot;[encrypted — rejoin this channel with its passphrase to unlock]&quot;</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties <h2 class="section" id="properties">Properties
</h2> </h2>
@@ -400,8 +436,8 @@ Class EchoHubConnection <a class="header-action link-secondary" title="View sou
<a id="EchoHub_Client_Services_EchoHubConnection_JoinChannelAsync_" data-uid="EchoHub.Client.Services.EchoHubConnection.JoinChannelAsync*"></a> <a id="EchoHub_Client_Services_EchoHubConnection_JoinChannelAsync_" data-uid="EchoHub.Client.Services.EchoHubConnection.JoinChannelAsync*"></a>
<h3 id="EchoHub_Client_Services_EchoHubConnection_JoinChannelAsync_System_String_" data-uid="EchoHub.Client.Services.EchoHubConnection.JoinChannelAsync(System.String)"> <h3 id="EchoHub_Client_Services_EchoHubConnection_JoinChannelAsync_System_String_System_String_" data-uid="EchoHub.Client.Services.EchoHubConnection.JoinChannelAsync(System.String,System.String)">
JoinChannelAsync(string) JoinChannelAsync(string, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -409,18 +445,20 @@ Class EchoHubConnection <a class="header-action link-secondary" title="View sou
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task&lt;List&lt;MessageDto&gt;&gt; JoinChannelAsync(string channelName)</code></pre> <pre><code class="lang-csharp hljs">public Task&lt;JoinOutcome&gt; JoinChannelAsync(string channelName, string? password = null)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
<dl class="parameters"> <dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt> <dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd> <dd></dd>
<dt><code>password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl> </dl>
<h4 class="section">Returns</h4> <h4 class="section">Returns</h4>
<dl class="parameters"> <dl class="parameters">
<dt><span class="xref">Task</span>&lt;<span class="xref">List</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs">MessageDto</a>&gt;&gt;</dt> <dt><span class="xref">Task</span>&lt;<a class="xref" href="EchoHub.Client.Services.JoinOutcome.html">JoinOutcome</a>&gt;</dt>
<dd></dd> <dd></dd>
</dl> </dl>
@@ -0,0 +1,524 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class FolderPickResult | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class FolderPickResult | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_FolderPickResult.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.FolderPickResult%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.FolderPickResult">
<h1 id="EchoHub_Client_Services_FolderPickResult" data-uid="EchoHub.Client.Services.FolderPickResult" class="text-break">
Class FolderPickResult <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed record FolderPickResult : IEquatable&lt;FolderPickResult&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">FolderPickResult</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Client.Services.FolderPickResult.html">FolderPickResult</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_FolderPickResult__ctor_" data-uid="EchoHub.Client.Services.FolderPickResult.#ctor*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult__ctor_EchoHub_Client_Services_PickerOutcome_System_String_" data-uid="EchoHub.Client.Services.FolderPickResult.#ctor(EchoHub.Client.Services.PickerOutcome,System.String)">
FolderPickResult(PickerOutcome, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public FolderPickResult(PickerOutcome Outcome, string? Path)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Outcome</code> <a class="xref" href="EchoHub.Client.Services.PickerOutcome.html">PickerOutcome</a></dt>
<dd></dd>
<dt><code>Path</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Services_FolderPickResult_Outcome_" data-uid="EchoHub.Client.Services.FolderPickResult.Outcome*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_Outcome" data-uid="EchoHub.Client.Services.FolderPickResult.Outcome">
Outcome
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public PickerOutcome Outcome { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.Services.PickerOutcome.html">PickerOutcome</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_FolderPickResult_Path_" data-uid="EchoHub.Client.Services.FolderPickResult.Path*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_Path" data-uid="EchoHub.Client.Services.FolderPickResult.Path">
Path
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? Path { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_FolderPickResult_Deconstruct_" data-uid="EchoHub.Client.Services.FolderPickResult.Deconstruct*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_Deconstruct_EchoHub_Client_Services_PickerOutcome__System_String__" data-uid="EchoHub.Client.Services.FolderPickResult.Deconstruct(EchoHub.Client.Services.PickerOutcome@,System.String@)">
Deconstruct(out PickerOutcome, out string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out PickerOutcome Outcome, out string? Path)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Outcome</code> <a class="xref" href="EchoHub.Client.Services.PickerOutcome.html">PickerOutcome</a></dt>
<dd></dd>
<dt><code>Path</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_FolderPickResult_Equals_" data-uid="EchoHub.Client.Services.FolderPickResult.Equals*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_Equals_EchoHub_Client_Services_FolderPickResult_" data-uid="EchoHub.Client.Services.FolderPickResult.Equals(EchoHub.Client.Services.FolderPickResult)">
Equals(FolderPickResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool Equals(FolderPickResult? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Client.Services.FolderPickResult.html">FolderPickResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_FolderPickResult_Equals_" data-uid="EchoHub.Client.Services.FolderPickResult.Equals*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_Equals_System_Object_" data-uid="EchoHub.Client.Services.FolderPickResult.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_FolderPickResult_GetHashCode_" data-uid="EchoHub.Client.Services.FolderPickResult.GetHashCode*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_GetHashCode" data-uid="EchoHub.Client.Services.FolderPickResult.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_FolderPickResult_ToString_" data-uid="EchoHub.Client.Services.FolderPickResult.ToString*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_ToString" data-uid="EchoHub.Client.Services.FolderPickResult.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Client_Services_FolderPickResult_op_Equality_" data-uid="EchoHub.Client.Services.FolderPickResult.op_Equality*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_op_Equality_EchoHub_Client_Services_FolderPickResult_EchoHub_Client_Services_FolderPickResult_" data-uid="EchoHub.Client.Services.FolderPickResult.op_Equality(EchoHub.Client.Services.FolderPickResult,EchoHub.Client.Services.FolderPickResult)">
operator ==(FolderPickResult?, FolderPickResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(FolderPickResult? left, FolderPickResult? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.Services.FolderPickResult.html">FolderPickResult</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.Services.FolderPickResult.html">FolderPickResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_FolderPickResult_op_Inequality_" data-uid="EchoHub.Client.Services.FolderPickResult.op_Inequality*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_op_Inequality_EchoHub_Client_Services_FolderPickResult_EchoHub_Client_Services_FolderPickResult_" data-uid="EchoHub.Client.Services.FolderPickResult.op_Inequality(EchoHub.Client.Services.FolderPickResult,EchoHub.Client.Services.FolderPickResult)">
operator !=(FolderPickResult?, FolderPickResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(FolderPickResult? left, FolderPickResult? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.Services.FolderPickResult.html">FolderPickResult</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.Services.FolderPickResult.html">FolderPickResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,563 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class JoinOutcome | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class JoinOutcome | EchoHub Documentation ">
<meta name="description" content="Result of joining a channel: decrypted history plus, for end-to-end encrypted channels, the key envelope needed to unlock the room content key.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_JoinOutcome.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.JoinOutcome%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.JoinOutcome">
<h1 id="EchoHub_Client_Services_JoinOutcome" data-uid="EchoHub.Client.Services.JoinOutcome" class="text-break">
Class JoinOutcome <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Result of joining a channel: decrypted history plus, for end-to-end encrypted
channels, the key envelope needed to unlock the room content key.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed record JoinOutcome : IEquatable&lt;JoinOutcome&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">JoinOutcome</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Client.Services.JoinOutcome.html">JoinOutcome</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_JoinOutcome__ctor_" data-uid="EchoHub.Client.Services.JoinOutcome.#ctor*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome__ctor_System_Collections_Generic_List_EchoHub_Core_DTOs_MessageDto__System_String_System_String_" data-uid="EchoHub.Client.Services.JoinOutcome.#ctor(System.Collections.Generic.List{EchoHub.Core.DTOs.MessageDto},System.String,System.String)">
JoinOutcome(List&lt;MessageDto&gt;, string?, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Result of joining a channel: decrypted history plus, for end-to-end encrypted
channels, the key envelope needed to unlock the room content key.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public JoinOutcome(List&lt;MessageDto&gt; History, string? EncryptionSalt, string? WrappedRoomKey)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>History</code> <span class="xref">List</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs">MessageDto</a>&gt;</dt>
<dd></dd>
<dt><code>EncryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>WrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Services_JoinOutcome_EncryptionSalt_" data-uid="EchoHub.Client.Services.JoinOutcome.EncryptionSalt*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_EncryptionSalt" data-uid="EchoHub.Client.Services.JoinOutcome.EncryptionSalt">
EncryptionSalt
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? EncryptionSalt { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_JoinOutcome_History_" data-uid="EchoHub.Client.Services.JoinOutcome.History*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_History" data-uid="EchoHub.Client.Services.JoinOutcome.History">
History
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;MessageDto&gt; History { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">List</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs">MessageDto</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_JoinOutcome_WrappedRoomKey_" data-uid="EchoHub.Client.Services.JoinOutcome.WrappedRoomKey*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_WrappedRoomKey" data-uid="EchoHub.Client.Services.JoinOutcome.WrappedRoomKey">
WrappedRoomKey
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? WrappedRoomKey { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_JoinOutcome_Deconstruct_" data-uid="EchoHub.Client.Services.JoinOutcome.Deconstruct*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_Deconstruct_System_Collections_Generic_List_EchoHub_Core_DTOs_MessageDto___System_String__System_String__" data-uid="EchoHub.Client.Services.JoinOutcome.Deconstruct(System.Collections.Generic.List{EchoHub.Core.DTOs.MessageDto}@,System.String@,System.String@)">
Deconstruct(out List&lt;MessageDto&gt;, out string?, out string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out List&lt;MessageDto&gt; History, out string? EncryptionSalt, out string? WrappedRoomKey)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>History</code> <span class="xref">List</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs">MessageDto</a>&gt;</dt>
<dd></dd>
<dt><code>EncryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>WrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_JoinOutcome_Equals_" data-uid="EchoHub.Client.Services.JoinOutcome.Equals*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_Equals_EchoHub_Client_Services_JoinOutcome_" data-uid="EchoHub.Client.Services.JoinOutcome.Equals(EchoHub.Client.Services.JoinOutcome)">
Equals(JoinOutcome?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool Equals(JoinOutcome? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Client.Services.JoinOutcome.html">JoinOutcome</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_JoinOutcome_Equals_" data-uid="EchoHub.Client.Services.JoinOutcome.Equals*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_Equals_System_Object_" data-uid="EchoHub.Client.Services.JoinOutcome.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_JoinOutcome_GetHashCode_" data-uid="EchoHub.Client.Services.JoinOutcome.GetHashCode*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_GetHashCode" data-uid="EchoHub.Client.Services.JoinOutcome.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_JoinOutcome_ToString_" data-uid="EchoHub.Client.Services.JoinOutcome.ToString*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_ToString" data-uid="EchoHub.Client.Services.JoinOutcome.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Client_Services_JoinOutcome_op_Equality_" data-uid="EchoHub.Client.Services.JoinOutcome.op_Equality*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_op_Equality_EchoHub_Client_Services_JoinOutcome_EchoHub_Client_Services_JoinOutcome_" data-uid="EchoHub.Client.Services.JoinOutcome.op_Equality(EchoHub.Client.Services.JoinOutcome,EchoHub.Client.Services.JoinOutcome)">
operator ==(JoinOutcome?, JoinOutcome?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(JoinOutcome? left, JoinOutcome? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.Services.JoinOutcome.html">JoinOutcome</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.Services.JoinOutcome.html">JoinOutcome</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_JoinOutcome_op_Inequality_" data-uid="EchoHub.Client.Services.JoinOutcome.op_Inequality*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_op_Inequality_EchoHub_Client_Services_JoinOutcome_EchoHub_Client_Services_JoinOutcome_" data-uid="EchoHub.Client.Services.JoinOutcome.op_Inequality(EchoHub.Client.Services.JoinOutcome,EchoHub.Client.Services.JoinOutcome)">
operator !=(JoinOutcome?, JoinOutcome?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(JoinOutcome? left, JoinOutcome? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.Services.JoinOutcome.html">JoinOutcome</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.Services.JoinOutcome.html">JoinOutcome</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,219 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class NativeFolderPicker | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class NativeFolderPicker | EchoHub Documentation ">
<meta name="description" content="Opens the OS-native folder chooser (Windows Explorer, macOS Finder, Linux GTK/KDE) by shelling out, so the TUI doesn&#39;t need a GUI toolkit reference. Returns when no native dialog can run, so callers can fall back to a configured path.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_NativeFolderPicker.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.NativeFolderPicker%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.NativeFolderPicker">
<h1 id="EchoHub_Client_Services_NativeFolderPicker" data-uid="EchoHub.Client.Services.NativeFolderPicker" class="text-break">
Class NativeFolderPicker <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Opens the OS-native folder chooser (Windows Explorer, macOS Finder, Linux GTK/KDE) by shelling
out, so the TUI doesn't need a GUI toolkit reference. Returns <a class="xref" href="EchoHub.Client.Services.PickerOutcome.html#EchoHub_Client_Services_PickerOutcome_Unavailable">Unavailable</a>
when no native dialog can run, so callers can fall back to a configured path.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class NativeFolderPicker</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">NativeFolderPicker</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_NativeFolderPicker_PickFolderAsync_" data-uid="EchoHub.Client.Services.NativeFolderPicker.PickFolderAsync*"></a>
<h3 id="EchoHub_Client_Services_NativeFolderPicker_PickFolderAsync_System_String_" data-uid="EchoHub.Client.Services.NativeFolderPicker.PickFolderAsync(System.String)">
PickFolderAsync(string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static Task&lt;FolderPickResult&gt; PickFolderAsync(string? initialDir)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>initialDir</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;<a class="xref" href="EchoHub.Client.Services.FolderPickResult.html">FolderPickResult</a>&gt;</dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,602 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class OutgoingAttachment | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class OutgoingAttachment | EchoHub Documentation ">
<meta name="description" content="One file to upload as part of a message. For end-to-end encrypted channels the stream is already ciphertext, is set (image/audio/file), and holds the room-encrypted ASCII art for images. For normal channels only and are set.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_OutgoingAttachment.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.OutgoingAttachment%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.OutgoingAttachment">
<h1 id="EchoHub_Client_Services_OutgoingAttachment" data-uid="EchoHub.Client.Services.OutgoingAttachment" class="text-break">
Class OutgoingAttachment <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>One file to upload as part of a message. For end-to-end encrypted channels the stream
is already ciphertext, <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_DeclaredKind">DeclaredKind</a> is set (image/audio/file), and
<a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_EncryptedPreview">EncryptedPreview</a> holds the room-encrypted ASCII art for images.
For normal channels only <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_Stream">Stream</a> and <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_FileName">FileName</a> are set.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed record OutgoingAttachment : IEquatable&lt;OutgoingAttachment&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">OutgoingAttachment</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html">OutgoingAttachment</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_OutgoingAttachment__ctor_" data-uid="EchoHub.Client.Services.OutgoingAttachment.#ctor*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment__ctor_System_IO_Stream_System_String_System_String_System_String_" data-uid="EchoHub.Client.Services.OutgoingAttachment.#ctor(System.IO.Stream,System.String,System.String,System.String)">
OutgoingAttachment(Stream, string, string?, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>One file to upload as part of a message. For end-to-end encrypted channels the stream
is already ciphertext, <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_DeclaredKind">DeclaredKind</a> is set (image/audio/file), and
<a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_EncryptedPreview">EncryptedPreview</a> holds the room-encrypted ASCII art for images.
For normal channels only <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_Stream">Stream</a> and <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_FileName">FileName</a> are set.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public OutgoingAttachment(Stream Stream, string FileName, string? DeclaredKind = null, string? EncryptedPreview = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Stream</code> <span class="xref">Stream</span></dt>
<dd></dd>
<dt><code>FileName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>DeclaredKind</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>EncryptedPreview</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Services_OutgoingAttachment_DeclaredKind_" data-uid="EchoHub.Client.Services.OutgoingAttachment.DeclaredKind*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_DeclaredKind" data-uid="EchoHub.Client.Services.OutgoingAttachment.DeclaredKind">
DeclaredKind
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? DeclaredKind { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_OutgoingAttachment_EncryptedPreview_" data-uid="EchoHub.Client.Services.OutgoingAttachment.EncryptedPreview*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_EncryptedPreview" data-uid="EchoHub.Client.Services.OutgoingAttachment.EncryptedPreview">
EncryptedPreview
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? EncryptedPreview { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_OutgoingAttachment_FileName_" data-uid="EchoHub.Client.Services.OutgoingAttachment.FileName*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_FileName" data-uid="EchoHub.Client.Services.OutgoingAttachment.FileName">
FileName
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string FileName { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_OutgoingAttachment_Stream_" data-uid="EchoHub.Client.Services.OutgoingAttachment.Stream*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_Stream" data-uid="EchoHub.Client.Services.OutgoingAttachment.Stream">
Stream
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Stream Stream { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">Stream</span></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_OutgoingAttachment_Deconstruct_" data-uid="EchoHub.Client.Services.OutgoingAttachment.Deconstruct*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_Deconstruct_System_IO_Stream__System_String__System_String__System_String__" data-uid="EchoHub.Client.Services.OutgoingAttachment.Deconstruct(System.IO.Stream@,System.String@,System.String@,System.String@)">
Deconstruct(out Stream, out string, out string?, out string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out Stream Stream, out string FileName, out string? DeclaredKind, out string? EncryptedPreview)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Stream</code> <span class="xref">Stream</span></dt>
<dd></dd>
<dt><code>FileName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>DeclaredKind</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>EncryptedPreview</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_OutgoingAttachment_Equals_" data-uid="EchoHub.Client.Services.OutgoingAttachment.Equals*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_Equals_EchoHub_Client_Services_OutgoingAttachment_" data-uid="EchoHub.Client.Services.OutgoingAttachment.Equals(EchoHub.Client.Services.OutgoingAttachment)">
Equals(OutgoingAttachment?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool Equals(OutgoingAttachment? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html">OutgoingAttachment</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_OutgoingAttachment_Equals_" data-uid="EchoHub.Client.Services.OutgoingAttachment.Equals*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_Equals_System_Object_" data-uid="EchoHub.Client.Services.OutgoingAttachment.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_OutgoingAttachment_GetHashCode_" data-uid="EchoHub.Client.Services.OutgoingAttachment.GetHashCode*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_GetHashCode" data-uid="EchoHub.Client.Services.OutgoingAttachment.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_OutgoingAttachment_ToString_" data-uid="EchoHub.Client.Services.OutgoingAttachment.ToString*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_ToString" data-uid="EchoHub.Client.Services.OutgoingAttachment.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Client_Services_OutgoingAttachment_op_Equality_" data-uid="EchoHub.Client.Services.OutgoingAttachment.op_Equality*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_op_Equality_EchoHub_Client_Services_OutgoingAttachment_EchoHub_Client_Services_OutgoingAttachment_" data-uid="EchoHub.Client.Services.OutgoingAttachment.op_Equality(EchoHub.Client.Services.OutgoingAttachment,EchoHub.Client.Services.OutgoingAttachment)">
operator ==(OutgoingAttachment?, OutgoingAttachment?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(OutgoingAttachment? left, OutgoingAttachment? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html">OutgoingAttachment</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html">OutgoingAttachment</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_OutgoingAttachment_op_Inequality_" data-uid="EchoHub.Client.Services.OutgoingAttachment.op_Inequality*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_op_Inequality_EchoHub_Client_Services_OutgoingAttachment_EchoHub_Client_Services_OutgoingAttachment_" data-uid="EchoHub.Client.Services.OutgoingAttachment.op_Inequality(EchoHub.Client.Services.OutgoingAttachment,EchoHub.Client.Services.OutgoingAttachment)">
operator !=(OutgoingAttachment?, OutgoingAttachment?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(OutgoingAttachment? left, OutgoingAttachment? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html">OutgoingAttachment</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html">OutgoingAttachment</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,159 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Enum PickerOutcome | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Enum PickerOutcome | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_PickerOutcome.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.PickerOutcome%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.PickerOutcome">
<h1 id="EchoHub_Client_Services_PickerOutcome" data-uid="EchoHub.Client.Services.PickerOutcome" class="text-break">
Enum PickerOutcome <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public enum PickerOutcome</code></pre>
</div>
<h2 id="fields">Fields
</h2>
<dl class="parameters">
<dt id="EchoHub_Client_Services_PickerOutcome_Cancelled"><code>Cancelled = 1</code></dt>
<dd><p>The native dialog ran but the user cancelled it.</p>
</dd>
<dt id="EchoHub_Client_Services_PickerOutcome_Chosen"><code>Chosen = 0</code></dt>
<dd><p>The user picked a folder (<a class="xref" href="EchoHub.Client.Services.FolderPickResult.html#EchoHub_Client_Services_FolderPickResult_Path">Path</a> is set).</p>
</dd>
<dt id="EchoHub_Client_Services_PickerOutcome_Unavailable"><code>Unavailable = 2</code></dt>
<dd><p>No native picker is available on this machine (headless, missing tool, etc.).</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,407 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class RoomKeyStore | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class RoomKeyStore | EchoHub Documentation ">
<meta name="description" content="Holds room content keys for end-to-end encrypted channels: in-memory for the active session, persisted per-server in the client config (like saved sessions) so users don&#39;t retype the passphrase every launch. Keys never leave this machine.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_RoomKeyStore.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.RoomKeyStore%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.RoomKeyStore">
<h1 id="EchoHub_Client_Services_RoomKeyStore" data-uid="EchoHub.Client.Services.RoomKeyStore" class="text-break">
Class RoomKeyStore <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Holds room content keys for end-to-end encrypted channels: in-memory for the
active session, persisted per-server in the client config (like saved sessions)
so users don't retype the passphrase every launch. Keys never leave this machine.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class RoomKeyStore</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">RoomKeyStore</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_RoomKeyStore__ctor_" data-uid="EchoHub.Client.Services.RoomKeyStore.#ctor*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore__ctor" data-uid="EchoHub.Client.Services.RoomKeyStore.#ctor">
RoomKeyStore()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public RoomKeyStore()</code></pre>
</div>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_RoomKeyStore_Clear_" data-uid="EchoHub.Client.Services.RoomKeyStore.Clear*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore_Clear" data-uid="EchoHub.Client.Services.RoomKeyStore.Clear">
Clear()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Clear()</code></pre>
</div>
<a id="EchoHub_Client_Services_RoomKeyStore_HasKey_" data-uid="EchoHub.Client.Services.RoomKeyStore.HasKey*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore_HasKey_System_String_" data-uid="EchoHub.Client.Services.RoomKeyStore.HasKey(System.String)">
HasKey(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool HasKey(string channelName)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_RoomKeyStore_LoadForServer_" data-uid="EchoHub.Client.Services.RoomKeyStore.LoadForServer*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore_LoadForServer_System_String_" data-uid="EchoHub.Client.Services.RoomKeyStore.LoadForServer(System.String)">
LoadForServer(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Binds the store to a server and loads that server's cached keys from config.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void LoadForServer(string serverUrl)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>serverUrl</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_RoomKeyStore_RemoveKey_" data-uid="EchoHub.Client.Services.RoomKeyStore.RemoveKey*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore_RemoveKey_System_String_" data-uid="EchoHub.Client.Services.RoomKeyStore.RemoveKey(System.String)">
RemoveKey(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void RemoveKey(string channelName)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_RoomKeyStore_StoreKey_" data-uid="EchoHub.Client.Services.RoomKeyStore.StoreKey*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore_StoreKey_System_String_System_Byte___" data-uid="EchoHub.Client.Services.RoomKeyStore.StoreKey(System.String,System.Byte[])">
StoreKey(string, byte[])
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Stores a key for the session and persists it to the server's config entry.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void StoreKey(string channelName, byte[] key)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_RoomKeyStore_TryGetKey_" data-uid="EchoHub.Client.Services.RoomKeyStore.TryGetKey*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore_TryGetKey_System_String_System_Byte____" data-uid="EchoHub.Client.Services.RoomKeyStore.TryGetKey(System.String,System.Byte[]@)">
TryGetKey(string, out byte[])
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool TryGetKey(string channelName, out byte[] key)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
+52
View File
@@ -112,24 +112,69 @@ Runs async work on a background thread and routes exceptions to the UI.</p>
<dt><a class="xref" href="EchoHub.Client.Services.BackupInfo.html">BackupInfo</a></dt> <dt><a class="xref" href="EchoHub.Client.Services.BackupInfo.html">BackupInfo</a></dt>
<dd></dd> <dd></dd>
</dl> </dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.ChannelPasswordRequiredException.html">ChannelPasswordRequiredException</a></dt>
<dd><p>Thrown when joining a channel fails because a password is required or incorrect.
The UI catches this to prompt the user and retry.</p>
</dd>
</dl>
<dl class="jumplist"> <dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.ClientEncryptionService.html">ClientEncryptionService</a></dt> <dt><a class="xref" href="EchoHub.Client.Services.ClientEncryptionService.html">ClientEncryptionService</a></dt>
<dd><p>Client-side encryption service. Uses the same AES-256-GCM format as the server <dd><p>Client-side encryption service. Uses the same AES-256-GCM format as the server
so messages are encrypted end-to-end between client and server.</p> so messages are encrypted end-to-end between client and server.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.ClipboardFiles.html">ClipboardFiles</a></dt>
<dd><p>Reads file paths that live on the OS clipboard as a <em>file list</em> (e.g. after copying a file in
Explorer/Finder/Nautilus), which terminals do not paste as text. Lets Ctrl+V attach a copied
file directly instead of requiring the user to paste a raw path.</p>
</dd> </dd>
</dl> </dl>
<dl class="jumplist"> <dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.EchoHubConnection.html">EchoHubConnection</a></dt> <dt><a class="xref" href="EchoHub.Client.Services.EchoHubConnection.html">EchoHubConnection</a></dt>
<dd></dd> <dd></dd>
</dl> </dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.FolderPickResult.html">FolderPickResult</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.JoinOutcome.html">JoinOutcome</a></dt>
<dd><p>Result of joining a channel: decrypted history plus, for end-to-end encrypted
channels, the key envelope needed to unlock the room content key.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.NativeFolderPicker.html">NativeFolderPicker</a></dt>
<dd><p>Opens the OS-native folder chooser (Windows Explorer, macOS Finder, Linux GTK/KDE) by shelling
out, so the TUI doesn't need a GUI toolkit reference. Returns <a class="xref" href="EchoHub.Client.Services.PickerOutcome.html#EchoHub_Client_Services_PickerOutcome_Unavailable">Unavailable</a>
when no native dialog can run, so callers can fall back to a configured path.</p>
</dd>
</dl>
<dl class="jumplist"> <dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.NotificationSoundService.html">NotificationSoundService</a></dt> <dt><a class="xref" href="EchoHub.Client.Services.NotificationSoundService.html">NotificationSoundService</a></dt>
<dd></dd> <dd></dd>
</dl> </dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html">OutgoingAttachment</a></dt>
<dd><p>One file to upload as part of a message. For end-to-end encrypted channels the stream
is already ciphertext, <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_DeclaredKind">DeclaredKind</a> is set (image/audio/file), and
<a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_EncryptedPreview">EncryptedPreview</a> holds the room-encrypted ASCII art for images.
For normal channels only <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_Stream">Stream</a> and <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_FileName">FileName</a> are set.</p>
</dd>
</dl>
<dl class="jumplist"> <dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.PathSetup.html">PathSetup</a></dt> <dt><a class="xref" href="EchoHub.Client.Services.PathSetup.html">PathSetup</a></dt>
<dd><p>Ensures the application's directory is on the system PATH so users <dd><p>Ensures the application's directory is on the system PATH so users
can run 'echohub' from any terminal session.</p> can run 'echohub' from any terminal session.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.RoomKeyStore.html">RoomKeyStore</a></dt>
<dd><p>Holds room content keys for end-to-end encrypted channels: in-memory for the
active session, persisted per-server in the client config (like saved sessions)
so users don't retype the passphrase every launch. Keys never leave this machine.</p>
</dd> </dd>
</dl> </dl>
<dl class="jumplist"> <dl class="jumplist">
@@ -142,6 +187,13 @@ Backup location: ~/.echohub/update-backup/</p>
<dt><a class="xref" href="EchoHub.Client.Services.UpdateChecker.html">UpdateChecker</a></dt> <dt><a class="xref" href="EchoHub.Client.Services.UpdateChecker.html">UpdateChecker</a></dt>
<dd></dd> <dd></dd>
</dl> </dl>
<h3 id="enums">
Enums
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.PickerOutcome.html">PickerOutcome</a></dt>
<dd></dd>
</dl>
</article> </article>
+31 -31
View File
@@ -247,6 +247,37 @@ Class ChatLine <a class="header-action link-secondary" title="View source" href
<a id="EchoHub_Client_UI_Chat_ChatLine_AttachmentKind_" data-uid="EchoHub.Client.UI.Chat.ChatLine.AttachmentKind*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_AttachmentKind" data-uid="EchoHub.Client.UI.Chat.ChatLine.AttachmentKind">
AttachmentKind
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public AttachmentKind? AttachmentKind { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/AttachmentKind.cs">AttachmentKind</a>?</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_AttachmentUrl_" data-uid="EchoHub.Client.UI.Chat.ChatLine.AttachmentUrl*"></a> <a id="EchoHub_Client_UI_Chat_ChatLine_AttachmentUrl_" data-uid="EchoHub.Client.UI.Chat.ChatLine.AttachmentUrl*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_AttachmentUrl" data-uid="EchoHub.Client.UI.Chat.ChatLine.AttachmentUrl"> <h3 id="EchoHub_Client_UI_Chat_ChatLine_AttachmentUrl" data-uid="EchoHub.Client.UI.Chat.ChatLine.AttachmentUrl">
@@ -465,37 +496,6 @@ Class ChatLine <a class="header-action link-secondary" title="View source" href
<a id="EchoHub_Client_UI_Chat_ChatLine_Type_" data-uid="EchoHub.Client.UI.Chat.ChatLine.Type*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_Type" data-uid="EchoHub.Client.UI.Chat.ChatLine.Type">
Type
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public MessageType? Type { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/MessageType.cs">MessageType</a>?</dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods <h2 class="section" id="methods">Methods
</h2> </h2>
@@ -0,0 +1,249 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ChannelPasswordDialog | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ChannelPasswordDialog | EchoHub Documentation ">
<meta name="description" content="Prompts for a channel password when joining a protected channel. Returns the entered password, or null if the user cancels.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_ChannelPasswordDialog.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.ChannelPasswordDialog%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.ChannelPasswordDialog">
<h1 id="EchoHub_Client_UI_Dialogs_ChannelPasswordDialog" data-uid="EchoHub.Client.UI.Dialogs.ChannelPasswordDialog" class="text-break">
Class ChannelPasswordDialog <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ChannelPasswordDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Prompts for a channel password when joining a protected channel.
Returns the entered password, or null if the user cancels.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class ChannelPasswordDialog</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ChannelPasswordDialog</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Dialogs_ChannelPasswordDialog__ctor_" data-uid="EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ChannelPasswordDialog__ctor" data-uid="EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.#ctor">
ChannelPasswordDialog()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ChannelPasswordDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ChannelPasswordDialog()</code></pre>
</div>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Dialogs_ChannelPasswordDialog_Show_" data-uid="EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.Show*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ChannelPasswordDialog_Show_Terminal_Gui_App_IApplication_System_String_System_String_" data-uid="EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.Show(Terminal.Gui.App.IApplication,System.String,System.String)">
Show(IApplication, string, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ChannelPasswordDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string? Show(IApplication app, string channelName, string? message = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>app</code> <span class="xref">IApplication</span></dt>
<dd></dd>
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>message</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ChannelPasswordDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -182,8 +182,8 @@ Class CreateChannelResult <a class="header-action link-secondary" title="View s
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult__ctor_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.#ctor*"></a> <a id="EchoHub_Client_UI_Dialogs_CreateChannelResult__ctor_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult__ctor_System_String_System_String_System_Boolean_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.#ctor(System.String,System.String,System.Boolean)"> <h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult__ctor_System_String_System_String_System_Boolean_System_String_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.#ctor(System.String,System.String,System.Boolean,System.String)">
CreateChannelResult(string, string?, bool) CreateChannelResult(string, string?, bool, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -191,7 +191,7 @@ Class CreateChannelResult <a class="header-action link-secondary" title="View s
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public CreateChannelResult(string Name, string? Topic, bool IsPublic)</code></pre> <pre><code class="lang-csharp hljs">public CreateChannelResult(string Name, string? Topic, bool IsPublic, string? Password)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -202,6 +202,8 @@ Class CreateChannelResult <a class="header-action link-secondary" title="View s
<dd></dd> <dd></dd>
<dt><code>IsPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt> <dt><code>IsPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd> <dd></dd>
<dt><code>Password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl> </dl>
@@ -312,6 +314,37 @@ Class CreateChannelResult <a class="header-action link-secondary" title="View s
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Password_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Password*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Password" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Password">
Password
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? Password { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Topic_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Topic*"></a> <a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Topic_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Topic*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Topic" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Topic"> <h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Topic" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Topic">
@@ -349,8 +382,8 @@ Class CreateChannelResult <a class="header-action link-secondary" title="View s
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Deconstruct_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Deconstruct*"></a> <a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Deconstruct_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Deconstruct*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Deconstruct_System_String__System_String__System_Boolean__" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Deconstruct(System.String@,System.String@,System.Boolean@)"> <h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Deconstruct_System_String__System_String__System_Boolean__System_String__" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Deconstruct(System.String@,System.String@,System.Boolean@,System.String@)">
Deconstruct(out string, out string?, out bool) Deconstruct(out string, out string?, out bool, out string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -358,7 +391,7 @@ Class CreateChannelResult <a class="header-action link-secondary" title="View s
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out string Name, out string? Topic, out bool IsPublic)</code></pre> <pre><code class="lang-csharp hljs">public void Deconstruct(out string Name, out string? Topic, out bool IsPublic, out string? Password)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -369,6 +402,8 @@ Class CreateChannelResult <a class="header-action link-secondary" title="View s
<dd></dd> <dd></dd>
<dt><code>IsPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt> <dt><code>IsPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd> <dd></dd>
<dt><code>Password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl> </dl>
@@ -98,6 +98,12 @@ Classes
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.AudioPlayerDialog.html">AudioPlayerDialog</a></dt> <dt><a class="xref" href="EchoHub.Client.UI.Dialogs.AudioPlayerDialog.html">AudioPlayerDialog</a></dt>
<dd></dd> <dd></dd>
</dl> </dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.html">ChannelPasswordDialog</a></dt>
<dd><p>Prompts for a channel password when joining a protected channel.
Returns the entered password, or null if the user cancels.</p>
</dd>
</dl>
<dl class="jumplist"> <dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.ConnectDialog.html">ConnectDialog</a></dt> <dt><a class="xref" href="EchoHub.Client.UI.Dialogs.ConnectDialog.html">ConnectDialog</a></dt>
<dd><p>A Terminal.Gui dialog for entering server connection and authentication details. <dd><p>A Terminal.Gui dialog for entering server connection and authentication details.
@@ -0,0 +1,266 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class DroppedFileParser | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class DroppedFileParser | EchoHub Documentation ">
<meta name="description" content="Recognizes a dragged-and-dropped file (or files) that a terminal delivers into the input as an absolute path. Terminals differ: some paste the whole path at once, others send it character by character; either way this checks whether the current input text resolves to existing file(s).">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Helpers_DroppedFileParser.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Helpers.DroppedFileParser%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Helpers.DroppedFileParser">
<h1 id="EchoHub_Client_UI_Helpers_DroppedFileParser" data-uid="EchoHub.Client.UI.Helpers.DroppedFileParser" class="text-break">
Class DroppedFileParser <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/DroppedFileParser.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Helpers.html">Helpers</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Recognizes a dragged-and-dropped file (or files) that a terminal delivers into the input as an
absolute path. Terminals differ: some paste the whole path at once, others send it character by
character; either way this checks whether the current input text resolves to existing file(s).</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class DroppedFileParser</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">DroppedFileParser</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Helpers_DroppedFileParser_LooksLikePath_" data-uid="EchoHub.Client.UI.Helpers.DroppedFileParser.LooksLikePath*"></a>
<h3 id="EchoHub_Client_UI_Helpers_DroppedFileParser_LooksLikePath_System_String_" data-uid="EchoHub.Client.UI.Helpers.DroppedFileParser.LooksLikePath(System.String)">
LooksLikePath(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/DroppedFileParser.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Cheap pre-check so callers only stat the filesystem when the input plausibly holds a path:
a quoted path, a Windows drive path (<code>X:&lt;/code&gt;/<code>X:/</code>), a UNC path (<code>\</code>), or a
POSIX absolute path (<code>/</code>). Normal chat text never starts this way.</code></p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool LooksLikePath(string text)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>text</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Helpers_DroppedFileParser_TryGetFiles_" data-uid="EchoHub.Client.UI.Helpers.DroppedFileParser.TryGetFiles*"></a>
<h3 id="EchoHub_Client_UI_Helpers_DroppedFileParser_TryGetFiles_System_String_System_Collections_Generic_List_System_String___System_Func_System_String_System_Boolean__" data-uid="EchoHub.Client.UI.Helpers.DroppedFileParser.TryGetFiles(System.String,System.Collections.Generic.List{System.String}@,System.Func{System.String,System.Boolean})">
TryGetFiles(string, out List&lt;string&gt;, Func&lt;string, bool&gt;?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/DroppedFileParser.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Returns true when <code class="paramref">text</code> resolves to one or more existing files.
Handles a single path (quoted or not, possibly containing spaces) and multiple
space-separated (optionally quoted) paths. <code class="paramref">fileExists</code> is injectable
for testing; production passes <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">Exists(string)</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool TryGetFiles(string text, out List&lt;string&gt; files, Func&lt;string, bool&gt;? fileExists = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>text</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>files</code> <span class="xref">List</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
<dt><code>fileExists</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>&gt;</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/DroppedFileParser.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -94,6 +94,13 @@
<h3 id="classes"> <h3 id="classes">
Classes Classes
</h3> </h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Helpers.DroppedFileParser.html">DroppedFileParser</a></dt>
<dd><p>Recognizes a dragged-and-dropped file (or files) that a terminal delivers into the input as an
absolute path. Terminals differ: some paste the whole path at once, others send it character by
character; either way this checks whether the current input text resolves to existing file(s).</p>
</dd>
</dl>
<dl class="jumplist"> <dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Helpers.EmojiHelper.html">EmojiHelper</a></dt> <dt><a class="xref" href="EchoHub.Client.UI.Helpers.EmojiHelper.html">EmojiHelper</a></dt>
<dd><p>Converts emoji grapheme clusters to text shortcodes for safe TUI rendering. <dd><p>Converts emoji grapheme clusters to text shortcodes for safe TUI rendering.
@@ -459,8 +459,8 @@ Active channel gets a &gt; indicator, unread channels are bright with a count ba
<a id="EchoHub_Client_UI_ListSources_ChannelListSource_Update_" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.Update*"></a> <a id="EchoHub_Client_UI_ListSources_ChannelListSource_Update_" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.Update*"></a>
<h3 id="EchoHub_Client_UI_ListSources_ChannelListSource_Update_System_Collections_Generic_List_System_String__System_Collections_Generic_Dictionary_System_String_System_Int32__System_String_" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.Update(System.Collections.Generic.List{System.String},System.Collections.Generic.Dictionary{System.String,System.Int32},System.String)"> <h3 id="EchoHub_Client_UI_ListSources_ChannelListSource_Update_System_Collections_Generic_List_System_String__System_Collections_Generic_Dictionary_System_String_System_Int32__System_String_System_Collections_Generic_IReadOnlySet_System_String__" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.Update(System.Collections.Generic.List{System.String},System.Collections.Generic.Dictionary{System.String,System.Int32},System.String,System.Collections.Generic.IReadOnlySet{System.String})">
Update(List&lt;string&gt;, Dictionary&lt;string, int&gt;, string) Update(List&lt;string&gt;, Dictionary&lt;string, int&gt;, string, IReadOnlySet&lt;string&gt;?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -468,7 +468,7 @@ Active channel gets a &gt; indicator, unread channels are bright with a count ba
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Update(List&lt;string&gt; channels, Dictionary&lt;string, int&gt; unread, string activeChannel)</code></pre> <pre><code class="lang-csharp hljs">public void Update(List&lt;string&gt; channels, Dictionary&lt;string, int&gt; unread, string activeChannel, IReadOnlySet&lt;string&gt;? protectedChannels = null)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -479,6 +479,8 @@ Active channel gets a &gt; indicator, unread channels are bright with a count ba
<dd></dd> <dd></dd>
<dt><code>activeChannel</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt> <dt><code>activeChannel</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd> <dd></dd>
<dt><code>protectedChannels</code> <span class="xref">IReadOnlySet</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl> </dl>
+102 -3
View File
@@ -943,8 +943,8 @@ Call after theme changes to refresh colors.</p>
<a id="EchoHub_Client_UI_MainWindow_EnsureChannelInList_" data-uid="EchoHub.Client.UI.MainWindow.EnsureChannelInList*"></a> <a id="EchoHub_Client_UI_MainWindow_EnsureChannelInList_" data-uid="EchoHub.Client.UI.MainWindow.EnsureChannelInList*"></a>
<h3 id="EchoHub_Client_UI_MainWindow_EnsureChannelInList_System_String_System_Nullable_System_Boolean__" data-uid="EchoHub.Client.UI.MainWindow.EnsureChannelInList(System.String,System.Nullable{System.Boolean})"> <h3 id="EchoHub_Client_UI_MainWindow_EnsureChannelInList_System_String_System_Nullable_System_Boolean__System_Nullable_System_Boolean__" data-uid="EchoHub.Client.UI.MainWindow.EnsureChannelInList(System.String,System.Nullable{System.Boolean},System.Nullable{System.Boolean})">
EnsureChannelInList(string, bool?) EnsureChannelInList(string, bool?, bool?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/MainWindow.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/MainWindow.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -953,7 +953,7 @@ Call after theme changes to refresh colors.</p>
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public void EnsureChannelInList(string channelName, bool? isPublic = null)</code></pre> <pre><code class="lang-csharp hljs">public void EnsureChannelInList(string channelName, bool? isPublic = null, bool? isProtected = null)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -962,6 +962,8 @@ Call after theme changes to refresh colors.</p>
<dd></dd> <dd></dd>
<dt><code>isPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>?</dt> <dt><code>isPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>?</dt>
<dd></dd> <dd></dd>
<dt><code>isProtected</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>?</dt>
<dd></dd>
</dl> </dl>
@@ -1191,6 +1193,41 @@ Call after theme changes to refresh colors.</p>
<a id="EchoHub_Client_UI_MainWindow_SetStagedAttachments_" data-uid="EchoHub.Client.UI.MainWindow.SetStagedAttachments*"></a>
<h3 id="EchoHub_Client_UI_MainWindow_SetStagedAttachments_System_Collections_Generic_IReadOnlyList_System_String__System_String_" data-uid="EchoHub.Client.UI.MainWindow.SetStagedAttachments(System.Collections.Generic.IReadOnlyList{System.String},System.String)">
SetStagedAttachments(IReadOnlyList&lt;string&gt;, string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/MainWindow.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Updates the attachment staging indicator shown on the input frame's title, including the
current ASCII-art size for images. Passing an empty list restores the default hint.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void SetStagedAttachments(IReadOnlyList&lt;string&gt; fileNames, string asciiSizeLabel)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>fileNames</code> <span class="xref">IReadOnlyList</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
<dt><code>asciiSizeLabel</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_MainWindow_ShowError_" data-uid="EchoHub.Client.UI.MainWindow.ShowError*"></a> <a id="EchoHub_Client_UI_MainWindow_ShowError_" data-uid="EchoHub.Client.UI.MainWindow.ShowError*"></a>
<h3 id="EchoHub_Client_UI_MainWindow_ShowError_System_String_" data-uid="EchoHub.Client.UI.MainWindow.ShowError(System.String)"> <h3 id="EchoHub_Client_UI_MainWindow_ShowError_System_String_" data-uid="EchoHub.Client.UI.MainWindow.ShowError(System.String)">
@@ -1568,6 +1605,37 @@ Call after theme changes to refresh colors.</p>
<h3 id="EchoHub_Client_UI_MainWindow_OnDeleteMessageRequested" data-uid="EchoHub.Client.UI.MainWindow.OnDeleteMessageRequested">
OnDeleteMessageRequested
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/MainWindow.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Fired when the user presses Delete on the selected message. Parameter is the message id.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public event Action&lt;Guid&gt;? OnDeleteMessageRequested</code></pre>
</div>
<h4 class="section">Event Type</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.action-1">Action</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.guid">Guid</a>&gt;</dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_MainWindow_OnDisconnectRequested" data-uid="EchoHub.Client.UI.MainWindow.OnDisconnectRequested"> <h3 id="EchoHub_Client_UI_MainWindow_OnDisconnectRequested" data-uid="EchoHub.Client.UI.MainWindow.OnDisconnectRequested">
OnDisconnectRequested OnDisconnectRequested
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/MainWindow.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/MainWindow.cs"><i class="bi bi-code-slash"></i></a>
@@ -1630,6 +1698,37 @@ Call after theme changes to refresh colors.</p>
<h3 id="EchoHub_Client_UI_MainWindow_OnImageSaveRequested" data-uid="EchoHub.Client.UI.MainWindow.OnImageSaveRequested">
OnImageSaveRequested
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/MainWindow.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Fired when the user activates an image's &quot;[save original]&quot; line. Parameters: attachmentUrl, fileName.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public event Action&lt;string, string&gt;? OnImageSaveRequested</code></pre>
</div>
<h4 class="section">Event Type</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.action-2">Action</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_MainWindow_OnLoadMoreRequested" data-uid="EchoHub.Client.UI.MainWindow.OnLoadMoreRequested"> <h3 id="EchoHub_Client_UI_MainWindow_OnLoadMoreRequested" data-uid="EchoHub.Client.UI.MainWindow.OnLoadMoreRequested">
OnLoadMoreRequested OnLoadMoreRequested
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/MainWindow.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/MainWindow.cs"><i class="bi bi-code-slash"></i></a>
@@ -453,6 +453,36 @@ Class HubConstants <a class="header-action link-secondary" title="View source"
<h3 id="EchoHub_Core_Constants_HubConstants_MaxAttachmentsPerMessage" data-uid="EchoHub.Core.Constants.HubConstants.MaxAttachmentsPerMessage">
MaxAttachmentsPerMessage
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Constants/HubConstants.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const int MaxAttachmentsPerMessage = 10</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Core_Constants_HubConstants_MaxAudioFileSizeBytes" data-uid="EchoHub.Core.Constants.HubConstants.MaxAudioFileSizeBytes"> <h3 id="EchoHub_Core_Constants_HubConstants_MaxAudioFileSizeBytes" data-uid="EchoHub.Core.Constants.HubConstants.MaxAudioFileSizeBytes">
MaxAudioFileSizeBytes MaxAudioFileSizeBytes
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Constants/HubConstants.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Constants/HubConstants.cs"><i class="bi bi-code-slash"></i></a>
@@ -393,6 +393,36 @@ Class ValidationConstants <a class="header-action link-secondary" title="View s
<h3 id="EchoHub_Core_Constants_ValidationConstants_MinChannelPasswordLength" data-uid="EchoHub.Core.Constants.ValidationConstants.MinChannelPasswordLength">
MinChannelPasswordLength
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Constants/ValidationConstants.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const int MinChannelPasswordLength = 3</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Core_Constants_ValidationConstants_UsernamePattern" data-uid="EchoHub.Core.Constants.ValidationConstants.UsernamePattern"> <h3 id="EchoHub_Core_Constants_ValidationConstants_UsernamePattern" data-uid="EchoHub.Core.Constants.ValidationConstants.UsernamePattern">
UsernamePattern UsernamePattern
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Constants/ValidationConstants.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Constants/ValidationConstants.cs"><i class="bi bi-code-slash"></i></a>
@@ -182,8 +182,8 @@ Class ChannelListItem <a class="header-action link-secondary" title="View sourc
<a id="EchoHub_Core_Contracts_ChannelListItem__ctor_" data-uid="EchoHub.Core.Contracts.ChannelListItem.#ctor*"></a> <a id="EchoHub_Core_Contracts_ChannelListItem__ctor_" data-uid="EchoHub.Core.Contracts.ChannelListItem.#ctor*"></a>
<h3 id="EchoHub_Core_Contracts_ChannelListItem__ctor_System_String_System_String_System_Int32_" data-uid="EchoHub.Core.Contracts.ChannelListItem.#ctor(System.String,System.String,System.Int32)"> <h3 id="EchoHub_Core_Contracts_ChannelListItem__ctor_System_String_System_String_System_Int32_System_Boolean_System_Boolean_" data-uid="EchoHub.Core.Contracts.ChannelListItem.#ctor(System.String,System.String,System.Int32,System.Boolean,System.Boolean)">
ChannelListItem(string, string?, int) ChannelListItem(string, string?, int, bool, bool)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChannelService.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChannelService.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -191,7 +191,7 @@ Class ChannelListItem <a class="header-action link-secondary" title="View sourc
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public ChannelListItem(string Name, string? Topic, int OnlineCount)</code></pre> <pre><code class="lang-csharp hljs">public ChannelListItem(string Name, string? Topic, int OnlineCount, bool IsPublic = true, bool IsProtected = false)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -202,6 +202,10 @@ Class ChannelListItem <a class="header-action link-secondary" title="View sourc
<dd></dd> <dd></dd>
<dt><code>OnlineCount</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt> <dt><code>OnlineCount</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd> <dd></dd>
<dt><code>IsPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>IsProtected</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl> </dl>
@@ -250,6 +254,68 @@ Class ChannelListItem <a class="header-action link-secondary" title="View sourc
<a id="EchoHub_Core_Contracts_ChannelListItem_IsProtected_" data-uid="EchoHub.Core.Contracts.ChannelListItem.IsProtected*"></a>
<h3 id="EchoHub_Core_Contracts_ChannelListItem_IsProtected" data-uid="EchoHub.Core.Contracts.ChannelListItem.IsProtected">
IsProtected
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChannelService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsProtected { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Contracts_ChannelListItem_IsPublic_" data-uid="EchoHub.Core.Contracts.ChannelListItem.IsPublic*"></a>
<h3 id="EchoHub_Core_Contracts_ChannelListItem_IsPublic" data-uid="EchoHub.Core.Contracts.ChannelListItem.IsPublic">
IsPublic
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChannelService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsPublic { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Contracts_ChannelListItem_Name_" data-uid="EchoHub.Core.Contracts.ChannelListItem.Name*"></a> <a id="EchoHub_Core_Contracts_ChannelListItem_Name_" data-uid="EchoHub.Core.Contracts.ChannelListItem.Name*"></a>
<h3 id="EchoHub_Core_Contracts_ChannelListItem_Name" data-uid="EchoHub.Core.Contracts.ChannelListItem.Name"> <h3 id="EchoHub_Core_Contracts_ChannelListItem_Name" data-uid="EchoHub.Core.Contracts.ChannelListItem.Name">
@@ -349,8 +415,8 @@ Class ChannelListItem <a class="header-action link-secondary" title="View sourc
<a id="EchoHub_Core_Contracts_ChannelListItem_Deconstruct_" data-uid="EchoHub.Core.Contracts.ChannelListItem.Deconstruct*"></a> <a id="EchoHub_Core_Contracts_ChannelListItem_Deconstruct_" data-uid="EchoHub.Core.Contracts.ChannelListItem.Deconstruct*"></a>
<h3 id="EchoHub_Core_Contracts_ChannelListItem_Deconstruct_System_String__System_String__System_Int32__" data-uid="EchoHub.Core.Contracts.ChannelListItem.Deconstruct(System.String@,System.String@,System.Int32@)"> <h3 id="EchoHub_Core_Contracts_ChannelListItem_Deconstruct_System_String__System_String__System_Int32__System_Boolean__System_Boolean__" data-uid="EchoHub.Core.Contracts.ChannelListItem.Deconstruct(System.String@,System.String@,System.Int32@,System.Boolean@,System.Boolean@)">
Deconstruct(out string, out string?, out int) Deconstruct(out string, out string?, out int, out bool, out bool)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChannelService.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChannelService.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -358,7 +424,7 @@ Class ChannelListItem <a class="header-action link-secondary" title="View sourc
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out string Name, out string? Topic, out int OnlineCount)</code></pre> <pre><code class="lang-csharp hljs">public void Deconstruct(out string Name, out string? Topic, out int OnlineCount, out bool IsPublic, out bool IsProtected)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -369,6 +435,10 @@ Class ChannelListItem <a class="header-action link-secondary" title="View sourc
<dd></dd> <dd></dd>
<dt><code>OnlineCount</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt> <dt><code>OnlineCount</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd> <dd></dd>
<dt><code>IsPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>IsProtected</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl> </dl>
@@ -122,8 +122,8 @@ Interface IChannelService <a class="header-action link-secondary" title="View s
<a id="EchoHub_Core_Contracts_IChannelService_CreateChannelAsync_" data-uid="EchoHub.Core.Contracts.IChannelService.CreateChannelAsync*"></a> <a id="EchoHub_Core_Contracts_IChannelService_CreateChannelAsync_" data-uid="EchoHub.Core.Contracts.IChannelService.CreateChannelAsync*"></a>
<h3 id="EchoHub_Core_Contracts_IChannelService_CreateChannelAsync_System_Guid_System_String_System_String_System_Boolean_" data-uid="EchoHub.Core.Contracts.IChannelService.CreateChannelAsync(System.Guid,System.String,System.String,System.Boolean)"> <h3 id="EchoHub_Core_Contracts_IChannelService_CreateChannelAsync_System_Guid_System_String_System_String_System_Boolean_System_String_System_String_System_String_" data-uid="EchoHub.Core.Contracts.IChannelService.CreateChannelAsync(System.Guid,System.String,System.String,System.Boolean,System.String,System.String,System.String)">
CreateChannelAsync(Guid, string, string?, bool) CreateChannelAsync(Guid, string, string?, bool, string?, string?, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChannelService.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChannelService.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -131,7 +131,7 @@ Interface IChannelService <a class="header-action link-secondary" title="View s
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">Task&lt;ChannelOperationResult&gt; CreateChannelAsync(Guid creatorUserId, string name, string? topic, bool isPublic)</code></pre> <pre><code class="lang-csharp hljs">Task&lt;ChannelOperationResult&gt; CreateChannelAsync(Guid creatorUserId, string name, string? topic, bool isPublic, string? password = null, string? encryptionSalt = null, string? wrappedRoomKey = null)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -144,6 +144,12 @@ Interface IChannelService <a class="header-action link-secondary" title="View s
<dd></dd> <dd></dd>
<dt><code>isPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt> <dt><code>isPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd> <dd></dd>
<dt><code>password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>encryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>wrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl> </dl>
<h4 class="section">Returns</h4> <h4 class="section">Returns</h4>
@@ -202,8 +208,8 @@ Interface IChannelService <a class="header-action link-secondary" title="View s
<a id="EchoHub_Core_Contracts_IChannelService_EnsureChannelMembershipAsync_" data-uid="EchoHub.Core.Contracts.IChannelService.EnsureChannelMembershipAsync*"></a> <a id="EchoHub_Core_Contracts_IChannelService_EnsureChannelMembershipAsync_" data-uid="EchoHub.Core.Contracts.IChannelService.EnsureChannelMembershipAsync*"></a>
<h3 id="EchoHub_Core_Contracts_IChannelService_EnsureChannelMembershipAsync_System_Guid_System_String_" data-uid="EchoHub.Core.Contracts.IChannelService.EnsureChannelMembershipAsync(System.Guid,System.String)"> <h3 id="EchoHub_Core_Contracts_IChannelService_EnsureChannelMembershipAsync_System_Guid_System_String_System_String_" data-uid="EchoHub.Core.Contracts.IChannelService.EnsureChannelMembershipAsync(System.Guid,System.String,System.String)">
EnsureChannelMembershipAsync(Guid, string) EnsureChannelMembershipAsync(Guid, string, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChannelService.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChannelService.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -211,7 +217,7 @@ Interface IChannelService <a class="header-action link-secondary" title="View s
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">Task&lt;(bool Success, string? Error)&gt; EnsureChannelMembershipAsync(Guid userId, string channelName)</code></pre> <pre><code class="lang-csharp hljs">Task&lt;(bool Success, string? Error, bool PasswordRequired)&gt; EnsureChannelMembershipAsync(Guid userId, string channelName, string? password = null)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -220,11 +226,13 @@ Interface IChannelService <a class="header-action link-secondary" title="View s
<dd></dd> <dd></dd>
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt> <dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd> <dd></dd>
<dt><code>password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl> </dl>
<h4 class="section">Returns</h4> <h4 class="section">Returns</h4>
<dl class="parameters"> <dl class="parameters">
<dt><span class="xref">Task</span>&lt;(<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.boolean,system.string-.success">Success</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.boolean,system.string-.error">Error</a>)&gt;</dt> <dt><span class="xref">Task</span>&lt;(<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.boolean,system.string,system.boolean-.success">Success</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.boolean,system.string,system.boolean-.error">Error</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.boolean,system.string,system.boolean-.passwordrequired">PasswordRequired</a>)&gt;</dt>
<dd></dd> <dd></dd>
</dl> </dl>
@@ -274,6 +282,78 @@ Interface IChannelService <a class="header-action link-secondary" title="View s
<a id="EchoHub_Core_Contracts_IChannelService_GetChannelCryptoAsync_" data-uid="EchoHub.Core.Contracts.IChannelService.GetChannelCryptoAsync*"></a>
<h3 id="EchoHub_Core_Contracts_IChannelService_GetChannelCryptoAsync_System_String_" data-uid="EchoHub.Core.Contracts.IChannelService.GetChannelCryptoAsync(System.String)">
GetChannelCryptoAsync(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChannelService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">Task&lt;ChannelCryptoDto?&gt; GetChannelCryptoAsync(string channelName)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;<a class="xref" href="EchoHub.Core.DTOs.ChannelCryptoDto.html">ChannelCryptoDto</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Contracts_IChannelService_GetChannelKeyEnvelopeAsync_" data-uid="EchoHub.Core.Contracts.IChannelService.GetChannelKeyEnvelopeAsync*"></a>
<h3 id="EchoHub_Core_Contracts_IChannelService_GetChannelKeyEnvelopeAsync_System_String_" data-uid="EchoHub.Core.Contracts.IChannelService.GetChannelKeyEnvelopeAsync(System.String)">
GetChannelKeyEnvelopeAsync(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChannelService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">Task&lt;(string? EncryptionSalt, string? WrappedRoomKey)&gt; GetChannelKeyEnvelopeAsync(string channelName)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;(<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.string,system.string-.encryptionsalt">EncryptionSalt</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.string,system.string-.wrappedroomkey">WrappedRoomKey</a>)&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Contracts_IChannelService_GetChannelListAsync_" data-uid="EchoHub.Core.Contracts.IChannelService.GetChannelListAsync*"></a> <a id="EchoHub_Core_Contracts_IChannelService_GetChannelListAsync_" data-uid="EchoHub.Core.Contracts.IChannelService.GetChannelListAsync*"></a>
<h3 id="EchoHub_Core_Contracts_IChannelService_GetChannelListAsync" data-uid="EchoHub.Core.Contracts.IChannelService.GetChannelListAsync"> <h3 id="EchoHub_Core_Contracts_IChannelService_GetChannelListAsync" data-uid="EchoHub.Core.Contracts.IChannelService.GetChannelListAsync">
@@ -381,6 +461,92 @@ Interface IChannelService <a class="header-action link-secondary" title="View s
<a id="EchoHub_Core_Contracts_IChannelService_RekeyChannelAsync_" data-uid="EchoHub.Core.Contracts.IChannelService.RekeyChannelAsync*"></a>
<h3 id="EchoHub_Core_Contracts_IChannelService_RekeyChannelAsync_System_Guid_System_String_System_String_System_String_System_String_System_String_" data-uid="EchoHub.Core.Contracts.IChannelService.RekeyChannelAsync(System.Guid,System.String,System.String,System.String,System.String,System.String)">
RekeyChannelAsync(Guid, string, string, string, string, string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChannelService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">Task&lt;ChannelOperationResult&gt; RekeyChannelAsync(Guid callerUserId, string channelName, string oldPassword, string newPassword, string newEncryptionSalt, string newWrappedRoomKey)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>callerUserId</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.guid">Guid</a></dt>
<dd></dd>
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>oldPassword</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>newPassword</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>newEncryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>newWrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;<a class="xref" href="EchoHub.Core.DTOs.ChannelOperationResult.html">ChannelOperationResult</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Contracts_IChannelService_SetChannelPasswordAsync_" data-uid="EchoHub.Core.Contracts.IChannelService.SetChannelPasswordAsync*"></a>
<h3 id="EchoHub_Core_Contracts_IChannelService_SetChannelPasswordAsync_System_Guid_System_String_System_String_" data-uid="EchoHub.Core.Contracts.IChannelService.SetChannelPasswordAsync(System.Guid,System.String,System.String)">
SetChannelPasswordAsync(Guid, string, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChannelService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">Task&lt;ChannelOperationResult&gt; SetChannelPasswordAsync(Guid callerUserId, string channelName, string? password)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>callerUserId</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.guid">Guid</a></dt>
<dd></dd>
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;<a class="xref" href="EchoHub.Core.DTOs.ChannelOperationResult.html">ChannelOperationResult</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Contracts_IChannelService_UpdateTopicAsync_" data-uid="EchoHub.Core.Contracts.IChannelService.UpdateTopicAsync*"></a> <a id="EchoHub_Core_Contracts_IChannelService_UpdateTopicAsync_" data-uid="EchoHub.Core.Contracts.IChannelService.UpdateTopicAsync*"></a>
<h3 id="EchoHub_Core_Contracts_IChannelService_UpdateTopicAsync_System_Guid_System_String_System_String_" data-uid="EchoHub.Core.Contracts.IChannelService.UpdateTopicAsync(System.Guid,System.String,System.String)"> <h3 id="EchoHub_Core_Contracts_IChannelService_UpdateTopicAsync_System_Guid_System_String_System_String_" data-uid="EchoHub.Core.Contracts.IChannelService.UpdateTopicAsync(System.Guid,System.String,System.String)">
@@ -310,8 +310,8 @@ Interface IChatService <a class="header-action link-secondary" title="View sour
<a id="EchoHub_Core_Contracts_IChatService_JoinChannelAsync_" data-uid="EchoHub.Core.Contracts.IChatService.JoinChannelAsync*"></a> <a id="EchoHub_Core_Contracts_IChatService_JoinChannelAsync_" data-uid="EchoHub.Core.Contracts.IChatService.JoinChannelAsync*"></a>
<h3 id="EchoHub_Core_Contracts_IChatService_JoinChannelAsync_System_String_System_Guid_System_String_System_String_" data-uid="EchoHub.Core.Contracts.IChatService.JoinChannelAsync(System.String,System.Guid,System.String,System.String)"> <h3 id="EchoHub_Core_Contracts_IChatService_JoinChannelAsync_System_String_System_Guid_System_String_System_String_System_String_" data-uid="EchoHub.Core.Contracts.IChatService.JoinChannelAsync(System.String,System.Guid,System.String,System.String,System.String)">
JoinChannelAsync(string, Guid, string, string) JoinChannelAsync(string, Guid, string, string, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChatService.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChatService.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -319,7 +319,7 @@ Interface IChatService <a class="header-action link-secondary" title="View sour
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">Task&lt;(List&lt;MessageDto&gt; History, string? Error)&gt; JoinChannelAsync(string connectionId, Guid userId, string username, string channelName)</code></pre> <pre><code class="lang-csharp hljs">Task&lt;(List&lt;MessageDto&gt; History, string? Error, bool PasswordRequired)&gt; JoinChannelAsync(string connectionId, Guid userId, string username, string channelName, string? password = null)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -332,11 +332,13 @@ Interface IChatService <a class="header-action link-secondary" title="View sour
<dd></dd> <dd></dd>
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt> <dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd> <dd></dd>
<dt><code>password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl> </dl>
<h4 class="section">Returns</h4> <h4 class="section">Returns</h4>
<dl class="parameters"> <dl class="parameters">
<dt><span class="xref">Task</span>&lt;(<span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Core.DTOs.MessageDto.html">MessageDto</a>&gt; <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.collections.generic.list-echohub.core.dtos.messagedto-,system.string-.history">History</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.collections.generic.list-echohub.core.dtos.messagedto-,system.string-.error">Error</a>)&gt;</dt> <dt><span class="xref">Task</span>&lt;(<span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Core.DTOs.MessageDto.html">MessageDto</a>&gt; <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.collections.generic.list-echohub.core.dtos.messagedto-,system.string,system.boolean-.history">History</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.collections.generic.list-echohub.core.dtos.messagedto-,system.string,system.boolean-.error">Error</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.collections.generic.list-echohub.core.dtos.messagedto-,system.string,system.boolean-.passwordrequired">PasswordRequired</a>)&gt;</dt>
<dd></dd> <dd></dd>
</dl> </dl>
@@ -0,0 +1,736 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class AttachmentDto | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class AttachmentDto | EchoHub Documentation ">
<meta name="description" content="A file attached to a message. holds the color-tag art for images (null otherwise). For end-to-end encrypted channels the content behind and the preview are ciphertext the server cannot read.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Core_DTOs_AttachmentDto.md&amp;value=---%0Auid%3A%20EchoHub.Core.DTOs.AttachmentDto%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Core.DTOs.AttachmentDto">
<h1 id="EchoHub_Core_DTOs_AttachmentDto" data-uid="EchoHub.Core.DTOs.AttachmentDto" class="text-break">
Class AttachmentDto <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Core.html">Core</a>.<a class="xref" href="EchoHub.Core.DTOs.html">DTOs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Core.dll</dd></dl>
</div>
<div class="markdown summary"><p>A file attached to a message. <a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html#EchoHub_Core_DTOs_AttachmentDto_AsciiPreview">AsciiPreview</a> holds the color-tag art for
images (null otherwise). For end-to-end encrypted channels the content behind
<a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html#EchoHub_Core_DTOs_AttachmentDto_Url">Url</a> and the preview are ciphertext the server cannot read.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public record AttachmentDto : IEquatable&lt;AttachmentDto&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">AttachmentDto</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html">AttachmentDto</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Core_DTOs_AttachmentDto__ctor_" data-uid="EchoHub.Core.DTOs.AttachmentDto.#ctor*"></a>
<h3 id="EchoHub_Core_DTOs_AttachmentDto__ctor_EchoHub_Core_DTOs_AttachmentDto_" data-uid="EchoHub.Core.DTOs.AttachmentDto.#ctor(EchoHub.Core.DTOs.AttachmentDto)">
AttachmentDto(AttachmentDto)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected AttachmentDto(AttachmentDto original)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>original</code> <a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html">AttachmentDto</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_AttachmentDto__ctor_" data-uid="EchoHub.Core.DTOs.AttachmentDto.#ctor*"></a>
<h3 id="EchoHub_Core_DTOs_AttachmentDto__ctor_EchoHub_Core_Models_AttachmentKind_System_String_System_String_System_Int64_System_String_" data-uid="EchoHub.Core.DTOs.AttachmentDto.#ctor(EchoHub.Core.Models.AttachmentKind,System.String,System.String,System.Int64,System.String)">
AttachmentDto(AttachmentKind, string, string, long, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>A file attached to a message. <a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html#EchoHub_Core_DTOs_AttachmentDto_AsciiPreview">AsciiPreview</a> holds the color-tag art for
images (null otherwise). For end-to-end encrypted channels the content behind
<a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html#EchoHub_Core_DTOs_AttachmentDto_Url">Url</a> and the preview are ciphertext the server cannot read.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public AttachmentDto(AttachmentKind Kind, string Url, string FileName, long FileSize, string? AsciiPreview = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Kind</code> <a class="xref" href="EchoHub.Core.Models.AttachmentKind.html">AttachmentKind</a></dt>
<dd></dd>
<dt><code>Url</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>FileName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>FileSize</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int64">long</a></dt>
<dd></dd>
<dt><code>AsciiPreview</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Core_DTOs_AttachmentDto_AsciiPreview_" data-uid="EchoHub.Core.DTOs.AttachmentDto.AsciiPreview*"></a>
<h3 id="EchoHub_Core_DTOs_AttachmentDto_AsciiPreview" data-uid="EchoHub.Core.DTOs.AttachmentDto.AsciiPreview">
AsciiPreview
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? AsciiPreview { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_AttachmentDto_EqualityContract_" data-uid="EchoHub.Core.DTOs.AttachmentDto.EqualityContract*"></a>
<h3 id="EchoHub_Core_DTOs_AttachmentDto_EqualityContract" data-uid="EchoHub.Core.DTOs.AttachmentDto.EqualityContract">
EqualityContract
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual Type EqualityContract { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.type">Type</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_AttachmentDto_FileName_" data-uid="EchoHub.Core.DTOs.AttachmentDto.FileName*"></a>
<h3 id="EchoHub_Core_DTOs_AttachmentDto_FileName" data-uid="EchoHub.Core.DTOs.AttachmentDto.FileName">
FileName
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string FileName { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_AttachmentDto_FileSize_" data-uid="EchoHub.Core.DTOs.AttachmentDto.FileSize*"></a>
<h3 id="EchoHub_Core_DTOs_AttachmentDto_FileSize" data-uid="EchoHub.Core.DTOs.AttachmentDto.FileSize">
FileSize
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public long FileSize { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int64">long</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_AttachmentDto_Kind_" data-uid="EchoHub.Core.DTOs.AttachmentDto.Kind*"></a>
<h3 id="EchoHub_Core_DTOs_AttachmentDto_Kind" data-uid="EchoHub.Core.DTOs.AttachmentDto.Kind">
Kind
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public AttachmentKind Kind { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Core.Models.AttachmentKind.html">AttachmentKind</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_AttachmentDto_Url_" data-uid="EchoHub.Core.DTOs.AttachmentDto.Url*"></a>
<h3 id="EchoHub_Core_DTOs_AttachmentDto_Url" data-uid="EchoHub.Core.DTOs.AttachmentDto.Url">
Url
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Url { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Core_DTOs_AttachmentDto_Deconstruct_" data-uid="EchoHub.Core.DTOs.AttachmentDto.Deconstruct*"></a>
<h3 id="EchoHub_Core_DTOs_AttachmentDto_Deconstruct_EchoHub_Core_Models_AttachmentKind__System_String__System_String__System_Int64__System_String__" data-uid="EchoHub.Core.DTOs.AttachmentDto.Deconstruct(EchoHub.Core.Models.AttachmentKind@,System.String@,System.String@,System.Int64@,System.String@)">
Deconstruct(out AttachmentKind, out string, out string, out long, out string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out AttachmentKind Kind, out string Url, out string FileName, out long FileSize, out string? AsciiPreview)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Kind</code> <a class="xref" href="EchoHub.Core.Models.AttachmentKind.html">AttachmentKind</a></dt>
<dd></dd>
<dt><code>Url</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>FileName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>FileSize</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int64">long</a></dt>
<dd></dd>
<dt><code>AsciiPreview</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_AttachmentDto_Equals_" data-uid="EchoHub.Core.DTOs.AttachmentDto.Equals*"></a>
<h3 id="EchoHub_Core_DTOs_AttachmentDto_Equals_EchoHub_Core_DTOs_AttachmentDto_" data-uid="EchoHub.Core.DTOs.AttachmentDto.Equals(EchoHub.Core.DTOs.AttachmentDto)">
Equals(AttachmentDto?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual bool Equals(AttachmentDto? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html">AttachmentDto</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_AttachmentDto_Equals_" data-uid="EchoHub.Core.DTOs.AttachmentDto.Equals*"></a>
<h3 id="EchoHub_Core_DTOs_AttachmentDto_Equals_System_Object_" data-uid="EchoHub.Core.DTOs.AttachmentDto.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_AttachmentDto_GetHashCode_" data-uid="EchoHub.Core.DTOs.AttachmentDto.GetHashCode*"></a>
<h3 id="EchoHub_Core_DTOs_AttachmentDto_GetHashCode" data-uid="EchoHub.Core.DTOs.AttachmentDto.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_AttachmentDto_PrintMembers_" data-uid="EchoHub.Core.DTOs.AttachmentDto.PrintMembers*"></a>
<h3 id="EchoHub_Core_DTOs_AttachmentDto_PrintMembers_System_Text_StringBuilder_" data-uid="EchoHub.Core.DTOs.AttachmentDto.PrintMembers(System.Text.StringBuilder)">
PrintMembers(StringBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual bool PrintMembers(StringBuilder builder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>builder</code> <span class="xref">StringBuilder</span></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_AttachmentDto_ToString_" data-uid="EchoHub.Core.DTOs.AttachmentDto.ToString*"></a>
<h3 id="EchoHub_Core_DTOs_AttachmentDto_ToString" data-uid="EchoHub.Core.DTOs.AttachmentDto.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Core_DTOs_AttachmentDto_op_Equality_" data-uid="EchoHub.Core.DTOs.AttachmentDto.op_Equality*"></a>
<h3 id="EchoHub_Core_DTOs_AttachmentDto_op_Equality_EchoHub_Core_DTOs_AttachmentDto_EchoHub_Core_DTOs_AttachmentDto_" data-uid="EchoHub.Core.DTOs.AttachmentDto.op_Equality(EchoHub.Core.DTOs.AttachmentDto,EchoHub.Core.DTOs.AttachmentDto)">
operator ==(AttachmentDto?, AttachmentDto?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(AttachmentDto? left, AttachmentDto? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html">AttachmentDto</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html">AttachmentDto</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_AttachmentDto_op_Inequality_" data-uid="EchoHub.Core.DTOs.AttachmentDto.op_Inequality*"></a>
<h3 id="EchoHub_Core_DTOs_AttachmentDto_op_Inequality_EchoHub_Core_DTOs_AttachmentDto_EchoHub_Core_DTOs_AttachmentDto_" data-uid="EchoHub.Core.DTOs.AttachmentDto.op_Inequality(EchoHub.Core.DTOs.AttachmentDto,EchoHub.Core.DTOs.AttachmentDto)">
operator !=(AttachmentDto?, AttachmentDto?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(AttachmentDto? left, AttachmentDto? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html">AttachmentDto</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html">AttachmentDto</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,629 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ChannelCryptoDto | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ChannelCryptoDto | EchoHub Documentation ">
<meta name="description" content="Public crypto metadata for a channel — enough for a client to derive its join credential from a passphrase. Never includes the wrapped room key.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Core_DTOs_ChannelCryptoDto.md&amp;value=---%0Auid%3A%20EchoHub.Core.DTOs.ChannelCryptoDto%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Core.DTOs.ChannelCryptoDto">
<h1 id="EchoHub_Core_DTOs_ChannelCryptoDto" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto" class="text-break">
Class ChannelCryptoDto <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Core.html">Core</a>.<a class="xref" href="EchoHub.Core.DTOs.html">DTOs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Core.dll</dd></dl>
</div>
<div class="markdown summary"><p>Public crypto metadata for a channel — enough for a client to derive its join
credential from a passphrase. Never includes the wrapped room key.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public record ChannelCryptoDto : IEquatable&lt;ChannelCryptoDto&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ChannelCryptoDto</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Core.DTOs.ChannelCryptoDto.html">ChannelCryptoDto</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Core_DTOs_ChannelCryptoDto__ctor_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.#ctor*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelCryptoDto__ctor_EchoHub_Core_DTOs_ChannelCryptoDto_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.#ctor(EchoHub.Core.DTOs.ChannelCryptoDto)">
ChannelCryptoDto(ChannelCryptoDto)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected ChannelCryptoDto(ChannelCryptoDto original)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>original</code> <a class="xref" href="EchoHub.Core.DTOs.ChannelCryptoDto.html">ChannelCryptoDto</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_ChannelCryptoDto__ctor_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.#ctor*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelCryptoDto__ctor_System_Boolean_System_String_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.#ctor(System.Boolean,System.String)">
ChannelCryptoDto(bool, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Public crypto metadata for a channel — enough for a client to derive its join
credential from a passphrase. Never includes the wrapped room key.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ChannelCryptoDto(bool IsEncrypted, string? EncryptionSalt)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>IsEncrypted</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>EncryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Core_DTOs_ChannelCryptoDto_EncryptionSalt_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.EncryptionSalt*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelCryptoDto_EncryptionSalt" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.EncryptionSalt">
EncryptionSalt
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? EncryptionSalt { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_ChannelCryptoDto_EqualityContract_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.EqualityContract*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelCryptoDto_EqualityContract" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.EqualityContract">
EqualityContract
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual Type EqualityContract { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.type">Type</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_ChannelCryptoDto_IsEncrypted_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.IsEncrypted*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelCryptoDto_IsEncrypted" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.IsEncrypted">
IsEncrypted
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsEncrypted { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Core_DTOs_ChannelCryptoDto_Deconstruct_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.Deconstruct*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelCryptoDto_Deconstruct_System_Boolean__System_String__" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.Deconstruct(System.Boolean@,System.String@)">
Deconstruct(out bool, out string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out bool IsEncrypted, out string? EncryptionSalt)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>IsEncrypted</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>EncryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_ChannelCryptoDto_Equals_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.Equals*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelCryptoDto_Equals_EchoHub_Core_DTOs_ChannelCryptoDto_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.Equals(EchoHub.Core.DTOs.ChannelCryptoDto)">
Equals(ChannelCryptoDto?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual bool Equals(ChannelCryptoDto? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Core.DTOs.ChannelCryptoDto.html">ChannelCryptoDto</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_ChannelCryptoDto_Equals_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.Equals*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelCryptoDto_Equals_System_Object_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_ChannelCryptoDto_GetHashCode_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.GetHashCode*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelCryptoDto_GetHashCode" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_ChannelCryptoDto_PrintMembers_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.PrintMembers*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelCryptoDto_PrintMembers_System_Text_StringBuilder_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.PrintMembers(System.Text.StringBuilder)">
PrintMembers(StringBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual bool PrintMembers(StringBuilder builder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>builder</code> <span class="xref">StringBuilder</span></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_ChannelCryptoDto_ToString_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.ToString*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelCryptoDto_ToString" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Core_DTOs_ChannelCryptoDto_op_Equality_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.op_Equality*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelCryptoDto_op_Equality_EchoHub_Core_DTOs_ChannelCryptoDto_EchoHub_Core_DTOs_ChannelCryptoDto_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.op_Equality(EchoHub.Core.DTOs.ChannelCryptoDto,EchoHub.Core.DTOs.ChannelCryptoDto)">
operator ==(ChannelCryptoDto?, ChannelCryptoDto?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(ChannelCryptoDto? left, ChannelCryptoDto? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Core.DTOs.ChannelCryptoDto.html">ChannelCryptoDto</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Core.DTOs.ChannelCryptoDto.html">ChannelCryptoDto</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_ChannelCryptoDto_op_Inequality_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.op_Inequality*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelCryptoDto_op_Inequality_EchoHub_Core_DTOs_ChannelCryptoDto_EchoHub_Core_DTOs_ChannelCryptoDto_" data-uid="EchoHub.Core.DTOs.ChannelCryptoDto.op_Inequality(EchoHub.Core.DTOs.ChannelCryptoDto,EchoHub.Core.DTOs.ChannelCryptoDto)">
operator !=(ChannelCryptoDto?, ChannelCryptoDto?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(ChannelCryptoDto? left, ChannelCryptoDto? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Core.DTOs.ChannelCryptoDto.html">ChannelCryptoDto</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Core.DTOs.ChannelCryptoDto.html">ChannelCryptoDto</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
+76 -6
View File
@@ -182,8 +182,8 @@ Class ChannelDto <a class="header-action link-secondary" title="View source" hr
<a id="EchoHub_Core_DTOs_ChannelDto__ctor_" data-uid="EchoHub.Core.DTOs.ChannelDto.#ctor*"></a> <a id="EchoHub_Core_DTOs_ChannelDto__ctor_" data-uid="EchoHub.Core.DTOs.ChannelDto.#ctor*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelDto__ctor_System_Guid_System_String_System_String_System_Boolean_System_Int32_System_DateTimeOffset_" data-uid="EchoHub.Core.DTOs.ChannelDto.#ctor(System.Guid,System.String,System.String,System.Boolean,System.Int32,System.DateTimeOffset)"> <h3 id="EchoHub_Core_DTOs_ChannelDto__ctor_System_Guid_System_String_System_String_System_Boolean_System_Int32_System_DateTimeOffset_System_Boolean_System_Boolean_" data-uid="EchoHub.Core.DTOs.ChannelDto.#ctor(System.Guid,System.String,System.String,System.Boolean,System.Int32,System.DateTimeOffset,System.Boolean,System.Boolean)">
ChannelDto(Guid, string, string?, bool, int, DateTimeOffset) ChannelDto(Guid, string, string?, bool, int, DateTimeOffset, bool, bool)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -191,7 +191,7 @@ Class ChannelDto <a class="header-action link-secondary" title="View source" hr
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public ChannelDto(Guid Id, string Name, string? Topic, bool IsPublic, int MessageCount, DateTimeOffset CreatedAt)</code></pre> <pre><code class="lang-csharp hljs">public ChannelDto(Guid Id, string Name, string? Topic, bool IsPublic, int MessageCount, DateTimeOffset CreatedAt, bool IsProtected = false, bool IsEncrypted = false)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -208,6 +208,10 @@ Class ChannelDto <a class="header-action link-secondary" title="View source" hr
<dd></dd> <dd></dd>
<dt><code>CreatedAt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.datetimeoffset">DateTimeOffset</a></dt> <dt><code>CreatedAt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.datetimeoffset">DateTimeOffset</a></dt>
<dd></dd> <dd></dd>
<dt><code>IsProtected</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>IsEncrypted</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl> </dl>
@@ -318,6 +322,68 @@ Class ChannelDto <a class="header-action link-secondary" title="View source" hr
<a id="EchoHub_Core_DTOs_ChannelDto_IsEncrypted_" data-uid="EchoHub.Core.DTOs.ChannelDto.IsEncrypted*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelDto_IsEncrypted" data-uid="EchoHub.Core.DTOs.ChannelDto.IsEncrypted">
IsEncrypted
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsEncrypted { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_ChannelDto_IsProtected_" data-uid="EchoHub.Core.DTOs.ChannelDto.IsProtected*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelDto_IsProtected" data-uid="EchoHub.Core.DTOs.ChannelDto.IsProtected">
IsProtected
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsProtected { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_ChannelDto_IsPublic_" data-uid="EchoHub.Core.DTOs.ChannelDto.IsPublic*"></a> <a id="EchoHub_Core_DTOs_ChannelDto_IsPublic_" data-uid="EchoHub.Core.DTOs.ChannelDto.IsPublic*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelDto_IsPublic" data-uid="EchoHub.Core.DTOs.ChannelDto.IsPublic"> <h3 id="EchoHub_Core_DTOs_ChannelDto_IsPublic" data-uid="EchoHub.Core.DTOs.ChannelDto.IsPublic">
@@ -448,8 +514,8 @@ Class ChannelDto <a class="header-action link-secondary" title="View source" hr
<a id="EchoHub_Core_DTOs_ChannelDto_Deconstruct_" data-uid="EchoHub.Core.DTOs.ChannelDto.Deconstruct*"></a> <a id="EchoHub_Core_DTOs_ChannelDto_Deconstruct_" data-uid="EchoHub.Core.DTOs.ChannelDto.Deconstruct*"></a>
<h3 id="EchoHub_Core_DTOs_ChannelDto_Deconstruct_System_Guid__System_String__System_String__System_Boolean__System_Int32__System_DateTimeOffset__" data-uid="EchoHub.Core.DTOs.ChannelDto.Deconstruct(System.Guid@,System.String@,System.String@,System.Boolean@,System.Int32@,System.DateTimeOffset@)"> <h3 id="EchoHub_Core_DTOs_ChannelDto_Deconstruct_System_Guid__System_String__System_String__System_Boolean__System_Int32__System_DateTimeOffset__System_Boolean__System_Boolean__" data-uid="EchoHub.Core.DTOs.ChannelDto.Deconstruct(System.Guid@,System.String@,System.String@,System.Boolean@,System.Int32@,System.DateTimeOffset@,System.Boolean@,System.Boolean@)">
Deconstruct(out Guid, out string, out string?, out bool, out int, out DateTimeOffset) Deconstruct(out Guid, out string, out string?, out bool, out int, out DateTimeOffset, out bool, out bool)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -457,7 +523,7 @@ Class ChannelDto <a class="header-action link-secondary" title="View source" hr
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out Guid Id, out string Name, out string? Topic, out bool IsPublic, out int MessageCount, out DateTimeOffset CreatedAt)</code></pre> <pre><code class="lang-csharp hljs">public void Deconstruct(out Guid Id, out string Name, out string? Topic, out bool IsPublic, out int MessageCount, out DateTimeOffset CreatedAt, out bool IsProtected, out bool IsEncrypted)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -474,6 +540,10 @@ Class ChannelDto <a class="header-action link-secondary" title="View source" hr
<dd></dd> <dd></dd>
<dt><code>CreatedAt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.datetimeoffset">DateTimeOffset</a></dt> <dt><code>CreatedAt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.datetimeoffset">DateTimeOffset</a></dt>
<dd></dd> <dd></dd>
<dt><code>IsProtected</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>IsEncrypted</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl> </dl>
@@ -182,8 +182,8 @@ Class CreateChannelRequest <a class="header-action link-secondary" title="View
<a id="EchoHub_Core_DTOs_CreateChannelRequest__ctor_" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.#ctor*"></a> <a id="EchoHub_Core_DTOs_CreateChannelRequest__ctor_" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.#ctor*"></a>
<h3 id="EchoHub_Core_DTOs_CreateChannelRequest__ctor_System_String_System_String_System_Boolean_" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.#ctor(System.String,System.String,System.Boolean)"> <h3 id="EchoHub_Core_DTOs_CreateChannelRequest__ctor_System_String_System_String_System_Boolean_System_String_System_String_System_String_" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.#ctor(System.String,System.String,System.Boolean,System.String,System.String,System.String)">
CreateChannelRequest(string, string?, bool) CreateChannelRequest(string, string?, bool, string?, string?, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -191,7 +191,7 @@ Class CreateChannelRequest <a class="header-action link-secondary" title="View
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public CreateChannelRequest(string Name, string? Topic = null, bool IsPublic = true)</code></pre> <pre><code class="lang-csharp hljs">public CreateChannelRequest(string Name, string? Topic = null, bool IsPublic = true, string? Password = null, string? EncryptionSalt = null, string? WrappedRoomKey = null)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -202,6 +202,12 @@ Class CreateChannelRequest <a class="header-action link-secondary" title="View
<dd></dd> <dd></dd>
<dt><code>IsPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt> <dt><code>IsPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd> <dd></dd>
<dt><code>Password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>EncryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>WrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl> </dl>
@@ -219,6 +225,37 @@ Class CreateChannelRequest <a class="header-action link-secondary" title="View
</h2> </h2>
<a id="EchoHub_Core_DTOs_CreateChannelRequest_EncryptionSalt_" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.EncryptionSalt*"></a>
<h3 id="EchoHub_Core_DTOs_CreateChannelRequest_EncryptionSalt" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.EncryptionSalt">
EncryptionSalt
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? EncryptionSalt { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_CreateChannelRequest_EqualityContract_" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.EqualityContract*"></a> <a id="EchoHub_Core_DTOs_CreateChannelRequest_EqualityContract_" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.EqualityContract*"></a>
<h3 id="EchoHub_Core_DTOs_CreateChannelRequest_EqualityContract" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.EqualityContract"> <h3 id="EchoHub_Core_DTOs_CreateChannelRequest_EqualityContract" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.EqualityContract">
@@ -312,6 +349,37 @@ Class CreateChannelRequest <a class="header-action link-secondary" title="View
<a id="EchoHub_Core_DTOs_CreateChannelRequest_Password_" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.Password*"></a>
<h3 id="EchoHub_Core_DTOs_CreateChannelRequest_Password" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.Password">
Password
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? Password { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_CreateChannelRequest_Topic_" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.Topic*"></a> <a id="EchoHub_Core_DTOs_CreateChannelRequest_Topic_" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.Topic*"></a>
<h3 id="EchoHub_Core_DTOs_CreateChannelRequest_Topic" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.Topic"> <h3 id="EchoHub_Core_DTOs_CreateChannelRequest_Topic" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.Topic">
@@ -343,14 +411,10 @@ Class CreateChannelRequest <a class="header-action link-secondary" title="View
<h2 class="section" id="methods">Methods <a id="EchoHub_Core_DTOs_CreateChannelRequest_WrappedRoomKey_" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.WrappedRoomKey*"></a>
</h2>
<h3 id="EchoHub_Core_DTOs_CreateChannelRequest_WrappedRoomKey" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.WrappedRoomKey">
<a id="EchoHub_Core_DTOs_CreateChannelRequest_Deconstruct_" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.Deconstruct*"></a> WrappedRoomKey
<h3 id="EchoHub_Core_DTOs_CreateChannelRequest_Deconstruct_System_String__System_String__System_Boolean__" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.Deconstruct(System.String@,System.String@,System.Boolean@)">
Deconstruct(out string, out string?, out bool)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -358,7 +422,42 @@ Class CreateChannelRequest <a class="header-action link-secondary" title="View
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out string Name, out string? Topic, out bool IsPublic)</code></pre> <pre><code class="lang-csharp hljs">public string? WrappedRoomKey { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Core_DTOs_CreateChannelRequest_Deconstruct_" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.Deconstruct*"></a>
<h3 id="EchoHub_Core_DTOs_CreateChannelRequest_Deconstruct_System_String__System_String__System_Boolean__System_String__System_String__System_String__" data-uid="EchoHub.Core.DTOs.CreateChannelRequest.Deconstruct(System.String@,System.String@,System.Boolean@,System.String@,System.String@,System.String@)">
Deconstruct(out string, out string?, out bool, out string?, out string?, out string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out string Name, out string? Topic, out bool IsPublic, out string? Password, out string? EncryptionSalt, out string? WrappedRoomKey)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -369,6 +468,12 @@ Class CreateChannelRequest <a class="header-action link-secondary" title="View
<dd></dd> <dd></dd>
<dt><code>IsPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt> <dt><code>IsPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd> <dd></dd>
<dt><code>Password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>EncryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>WrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl> </dl>
+116 -11
View File
@@ -182,8 +182,8 @@ Class JoinChannelResult <a class="header-action link-secondary" title="View sou
<a id="EchoHub_Core_DTOs_JoinChannelResult__ctor_" data-uid="EchoHub.Core.DTOs.JoinChannelResult.#ctor*"></a> <a id="EchoHub_Core_DTOs_JoinChannelResult__ctor_" data-uid="EchoHub.Core.DTOs.JoinChannelResult.#ctor*"></a>
<h3 id="EchoHub_Core_DTOs_JoinChannelResult__ctor_System_Boolean_System_Collections_Generic_List_EchoHub_Core_DTOs_MessageDto__System_String_" data-uid="EchoHub.Core.DTOs.JoinChannelResult.#ctor(System.Boolean,System.Collections.Generic.List{EchoHub.Core.DTOs.MessageDto},System.String)"> <h3 id="EchoHub_Core_DTOs_JoinChannelResult__ctor_System_Boolean_System_Collections_Generic_List_EchoHub_Core_DTOs_MessageDto__System_String_System_Boolean_System_String_System_String_" data-uid="EchoHub.Core.DTOs.JoinChannelResult.#ctor(System.Boolean,System.Collections.Generic.List{EchoHub.Core.DTOs.MessageDto},System.String,System.Boolean,System.String,System.String)">
JoinChannelResult(bool, List&lt;MessageDto&gt;, string?) JoinChannelResult(bool, List&lt;MessageDto&gt;, string?, bool, string?, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -191,7 +191,7 @@ Class JoinChannelResult <a class="header-action link-secondary" title="View sou
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public JoinChannelResult(bool Success, List&lt;MessageDto&gt; History, string? Error = null)</code></pre> <pre><code class="lang-csharp hljs">public JoinChannelResult(bool Success, List&lt;MessageDto&gt; History, string? Error = null, bool PasswordRequired = false, string? EncryptionSalt = null, string? WrappedRoomKey = null)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -202,6 +202,12 @@ Class JoinChannelResult <a class="header-action link-secondary" title="View sou
<dd></dd> <dd></dd>
<dt><code>Error</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt> <dt><code>Error</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd> <dd></dd>
<dt><code>PasswordRequired</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>EncryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>WrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl> </dl>
@@ -219,6 +225,37 @@ Class JoinChannelResult <a class="header-action link-secondary" title="View sou
</h2> </h2>
<a id="EchoHub_Core_DTOs_JoinChannelResult_EncryptionSalt_" data-uid="EchoHub.Core.DTOs.JoinChannelResult.EncryptionSalt*"></a>
<h3 id="EchoHub_Core_DTOs_JoinChannelResult_EncryptionSalt" data-uid="EchoHub.Core.DTOs.JoinChannelResult.EncryptionSalt">
EncryptionSalt
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? EncryptionSalt { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_JoinChannelResult_EqualityContract_" data-uid="EchoHub.Core.DTOs.JoinChannelResult.EqualityContract*"></a> <a id="EchoHub_Core_DTOs_JoinChannelResult_EqualityContract_" data-uid="EchoHub.Core.DTOs.JoinChannelResult.EqualityContract*"></a>
<h3 id="EchoHub_Core_DTOs_JoinChannelResult_EqualityContract" data-uid="EchoHub.Core.DTOs.JoinChannelResult.EqualityContract"> <h3 id="EchoHub_Core_DTOs_JoinChannelResult_EqualityContract" data-uid="EchoHub.Core.DTOs.JoinChannelResult.EqualityContract">
@@ -312,6 +349,37 @@ Class JoinChannelResult <a class="header-action link-secondary" title="View sou
<a id="EchoHub_Core_DTOs_JoinChannelResult_PasswordRequired_" data-uid="EchoHub.Core.DTOs.JoinChannelResult.PasswordRequired*"></a>
<h3 id="EchoHub_Core_DTOs_JoinChannelResult_PasswordRequired" data-uid="EchoHub.Core.DTOs.JoinChannelResult.PasswordRequired">
PasswordRequired
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool PasswordRequired { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_JoinChannelResult_Success_" data-uid="EchoHub.Core.DTOs.JoinChannelResult.Success*"></a> <a id="EchoHub_Core_DTOs_JoinChannelResult_Success_" data-uid="EchoHub.Core.DTOs.JoinChannelResult.Success*"></a>
<h3 id="EchoHub_Core_DTOs_JoinChannelResult_Success" data-uid="EchoHub.Core.DTOs.JoinChannelResult.Success"> <h3 id="EchoHub_Core_DTOs_JoinChannelResult_Success" data-uid="EchoHub.Core.DTOs.JoinChannelResult.Success">
@@ -343,14 +411,10 @@ Class JoinChannelResult <a class="header-action link-secondary" title="View sou
<h2 class="section" id="methods">Methods <a id="EchoHub_Core_DTOs_JoinChannelResult_WrappedRoomKey_" data-uid="EchoHub.Core.DTOs.JoinChannelResult.WrappedRoomKey*"></a>
</h2>
<h3 id="EchoHub_Core_DTOs_JoinChannelResult_WrappedRoomKey" data-uid="EchoHub.Core.DTOs.JoinChannelResult.WrappedRoomKey">
<a id="EchoHub_Core_DTOs_JoinChannelResult_Deconstruct_" data-uid="EchoHub.Core.DTOs.JoinChannelResult.Deconstruct*"></a> WrappedRoomKey
<h3 id="EchoHub_Core_DTOs_JoinChannelResult_Deconstruct_System_Boolean__System_Collections_Generic_List_EchoHub_Core_DTOs_MessageDto___System_String__" data-uid="EchoHub.Core.DTOs.JoinChannelResult.Deconstruct(System.Boolean@,System.Collections.Generic.List{EchoHub.Core.DTOs.MessageDto}@,System.String@)">
Deconstruct(out bool, out List&lt;MessageDto&gt;, out string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -358,7 +422,42 @@ Class JoinChannelResult <a class="header-action link-secondary" title="View sou
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out bool Success, out List&lt;MessageDto&gt; History, out string? Error)</code></pre> <pre><code class="lang-csharp hljs">public string? WrappedRoomKey { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Core_DTOs_JoinChannelResult_Deconstruct_" data-uid="EchoHub.Core.DTOs.JoinChannelResult.Deconstruct*"></a>
<h3 id="EchoHub_Core_DTOs_JoinChannelResult_Deconstruct_System_Boolean__System_Collections_Generic_List_EchoHub_Core_DTOs_MessageDto___System_String__System_Boolean__System_String__System_String__" data-uid="EchoHub.Core.DTOs.JoinChannelResult.Deconstruct(System.Boolean@,System.Collections.Generic.List{EchoHub.Core.DTOs.MessageDto}@,System.String@,System.Boolean@,System.String@,System.String@)">
Deconstruct(out bool, out List&lt;MessageDto&gt;, out string?, out bool, out string?, out string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out bool Success, out List&lt;MessageDto&gt; History, out string? Error, out bool PasswordRequired, out string? EncryptionSalt, out string? WrappedRoomKey)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -369,6 +468,12 @@ Class JoinChannelResult <a class="header-action link-secondary" title="View sou
<dd></dd> <dd></dd>
<dt><code>Error</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt> <dt><code>Error</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd> <dd></dd>
<dt><code>PasswordRequired</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>EncryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>WrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl> </dl>
+13 -118
View File
@@ -182,8 +182,8 @@ Class MessageDto <a class="header-action link-secondary" title="View source" hr
<a id="EchoHub_Core_DTOs_MessageDto__ctor_" data-uid="EchoHub.Core.DTOs.MessageDto.#ctor*"></a> <a id="EchoHub_Core_DTOs_MessageDto__ctor_" data-uid="EchoHub.Core.DTOs.MessageDto.#ctor*"></a>
<h3 id="EchoHub_Core_DTOs_MessageDto__ctor_System_Guid_System_String_System_String_System_String_System_String_EchoHub_Core_Models_MessageType_System_String_System_String_System_DateTimeOffset_System_Nullable_System_Int64__System_Collections_Generic_List_EchoHub_Core_DTOs_EmbedDto__" data-uid="EchoHub.Core.DTOs.MessageDto.#ctor(System.Guid,System.String,System.String,System.String,System.String,EchoHub.Core.Models.MessageType,System.String,System.String,System.DateTimeOffset,System.Nullable{System.Int64},System.Collections.Generic.List{EchoHub.Core.DTOs.EmbedDto})"> <h3 id="EchoHub_Core_DTOs_MessageDto__ctor_System_Guid_System_String_System_String_System_String_System_String_System_DateTimeOffset_System_Collections_Generic_List_EchoHub_Core_DTOs_AttachmentDto__System_Collections_Generic_List_EchoHub_Core_DTOs_EmbedDto__" data-uid="EchoHub.Core.DTOs.MessageDto.#ctor(System.Guid,System.String,System.String,System.String,System.String,System.DateTimeOffset,System.Collections.Generic.List{EchoHub.Core.DTOs.AttachmentDto},System.Collections.Generic.List{EchoHub.Core.DTOs.EmbedDto})">
MessageDto(Guid, string, string, string?, string, MessageType, string?, string?, DateTimeOffset, long?, List&lt;EmbedDto&gt;?) MessageDto(Guid, string, string, string?, string, DateTimeOffset, List&lt;AttachmentDto&gt;?, List&lt;EmbedDto&gt;?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -191,7 +191,7 @@ Class MessageDto <a class="header-action link-secondary" title="View source" hr
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public MessageDto(Guid Id, string Content, string SenderUsername, string? SenderNicknameColor, string ChannelName, MessageType Type, string? AttachmentUrl, string? AttachmentFileName, DateTimeOffset SentAt, long? AttachmentFileSize = null, List&lt;EmbedDto&gt;? Embeds = null)</code></pre> <pre><code class="lang-csharp hljs">public MessageDto(Guid Id, string Content, string SenderUsername, string? SenderNicknameColor, string ChannelName, DateTimeOffset SentAt, List&lt;AttachmentDto&gt;? Attachments = null, List&lt;EmbedDto&gt;? Embeds = null)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -206,15 +206,9 @@ Class MessageDto <a class="header-action link-secondary" title="View source" hr
<dd></dd> <dd></dd>
<dt><code>ChannelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt> <dt><code>ChannelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd> <dd></dd>
<dt><code>Type</code> <a class="xref" href="EchoHub.Core.Models.MessageType.html">MessageType</a></dt>
<dd></dd>
<dt><code>AttachmentUrl</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>AttachmentFileName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>SentAt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.datetimeoffset">DateTimeOffset</a></dt> <dt><code>SentAt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.datetimeoffset">DateTimeOffset</a></dt>
<dd></dd> <dd></dd>
<dt><code>AttachmentFileSize</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int64">long</a>?</dt> <dt><code>Attachments</code> <span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html">AttachmentDto</a>&gt;</dt>
<dd></dd> <dd></dd>
<dt><code>Embeds</code> <span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Core.DTOs.EmbedDto.html">EmbedDto</a>&gt;</dt> <dt><code>Embeds</code> <span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Core.DTOs.EmbedDto.html">EmbedDto</a>&gt;</dt>
<dd></dd> <dd></dd>
@@ -235,10 +229,10 @@ Class MessageDto <a class="header-action link-secondary" title="View source" hr
</h2> </h2>
<a id="EchoHub_Core_DTOs_MessageDto_AttachmentFileName_" data-uid="EchoHub.Core.DTOs.MessageDto.AttachmentFileName*"></a> <a id="EchoHub_Core_DTOs_MessageDto_Attachments_" data-uid="EchoHub.Core.DTOs.MessageDto.Attachments*"></a>
<h3 id="EchoHub_Core_DTOs_MessageDto_AttachmentFileName" data-uid="EchoHub.Core.DTOs.MessageDto.AttachmentFileName"> <h3 id="EchoHub_Core_DTOs_MessageDto_Attachments" data-uid="EchoHub.Core.DTOs.MessageDto.Attachments">
AttachmentFileName Attachments
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -246,7 +240,7 @@ Class MessageDto <a class="header-action link-secondary" title="View source" hr
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? AttachmentFileName { get; init; }</code></pre> <pre><code class="lang-csharp hljs">public List&lt;AttachmentDto&gt;? Attachments { get; init; }</code></pre>
</div> </div>
@@ -255,69 +249,7 @@ Class MessageDto <a class="header-action link-secondary" title="View source" hr
<h4 class="section">Property Value</h4> <h4 class="section">Property Value</h4>
<dl class="parameters"> <dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt> <dt><span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html">AttachmentDto</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_MessageDto_AttachmentFileSize_" data-uid="EchoHub.Core.DTOs.MessageDto.AttachmentFileSize*"></a>
<h3 id="EchoHub_Core_DTOs_MessageDto_AttachmentFileSize" data-uid="EchoHub.Core.DTOs.MessageDto.AttachmentFileSize">
AttachmentFileSize
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public long? AttachmentFileSize { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int64">long</a>?</dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_MessageDto_AttachmentUrl_" data-uid="EchoHub.Core.DTOs.MessageDto.AttachmentUrl*"></a>
<h3 id="EchoHub_Core_DTOs_MessageDto_AttachmentUrl" data-uid="EchoHub.Core.DTOs.MessageDto.AttachmentUrl">
AttachmentUrl
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? AttachmentUrl { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd> <dd></dd>
</dl> </dl>
@@ -576,45 +508,14 @@ Class MessageDto <a class="header-action link-secondary" title="View source" hr
<a id="EchoHub_Core_DTOs_MessageDto_Type_" data-uid="EchoHub.Core.DTOs.MessageDto.Type*"></a>
<h3 id="EchoHub_Core_DTOs_MessageDto_Type" data-uid="EchoHub.Core.DTOs.MessageDto.Type">
Type
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public MessageType Type { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Core.Models.MessageType.html">MessageType</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods <h2 class="section" id="methods">Methods
</h2> </h2>
<a id="EchoHub_Core_DTOs_MessageDto_Deconstruct_" data-uid="EchoHub.Core.DTOs.MessageDto.Deconstruct*"></a> <a id="EchoHub_Core_DTOs_MessageDto_Deconstruct_" data-uid="EchoHub.Core.DTOs.MessageDto.Deconstruct*"></a>
<h3 id="EchoHub_Core_DTOs_MessageDto_Deconstruct_System_Guid__System_String__System_String__System_String__System_String__EchoHub_Core_Models_MessageType__System_String__System_String__System_DateTimeOffset__System_Nullable_System_Int64___System_Collections_Generic_List_EchoHub_Core_DTOs_EmbedDto___" data-uid="EchoHub.Core.DTOs.MessageDto.Deconstruct(System.Guid@,System.String@,System.String@,System.String@,System.String@,EchoHub.Core.Models.MessageType@,System.String@,System.String@,System.DateTimeOffset@,System.Nullable{System.Int64}@,System.Collections.Generic.List{EchoHub.Core.DTOs.EmbedDto}@)"> <h3 id="EchoHub_Core_DTOs_MessageDto_Deconstruct_System_Guid__System_String__System_String__System_String__System_String__System_DateTimeOffset__System_Collections_Generic_List_EchoHub_Core_DTOs_AttachmentDto___System_Collections_Generic_List_EchoHub_Core_DTOs_EmbedDto___" data-uid="EchoHub.Core.DTOs.MessageDto.Deconstruct(System.Guid@,System.String@,System.String@,System.String@,System.String@,System.DateTimeOffset@,System.Collections.Generic.List{EchoHub.Core.DTOs.AttachmentDto}@,System.Collections.Generic.List{EchoHub.Core.DTOs.EmbedDto}@)">
Deconstruct(out Guid, out string, out string, out string?, out string, out MessageType, out string?, out string?, out DateTimeOffset, out long?, out List&lt;EmbedDto&gt;?) Deconstruct(out Guid, out string, out string, out string?, out string, out DateTimeOffset, out List&lt;AttachmentDto&gt;?, out List&lt;EmbedDto&gt;?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -622,7 +523,7 @@ Class MessageDto <a class="header-action link-secondary" title="View source" hr
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out Guid Id, out string Content, out string SenderUsername, out string? SenderNicknameColor, out string ChannelName, out MessageType Type, out string? AttachmentUrl, out string? AttachmentFileName, out DateTimeOffset SentAt, out long? AttachmentFileSize, out List&lt;EmbedDto&gt;? Embeds)</code></pre> <pre><code class="lang-csharp hljs">public void Deconstruct(out Guid Id, out string Content, out string SenderUsername, out string? SenderNicknameColor, out string ChannelName, out DateTimeOffset SentAt, out List&lt;AttachmentDto&gt;? Attachments, out List&lt;EmbedDto&gt;? Embeds)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -637,15 +538,9 @@ Class MessageDto <a class="header-action link-secondary" title="View source" hr
<dd></dd> <dd></dd>
<dt><code>ChannelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt> <dt><code>ChannelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd> <dd></dd>
<dt><code>Type</code> <a class="xref" href="EchoHub.Core.Models.MessageType.html">MessageType</a></dt>
<dd></dd>
<dt><code>AttachmentUrl</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>AttachmentFileName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>SentAt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.datetimeoffset">DateTimeOffset</a></dt> <dt><code>SentAt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.datetimeoffset">DateTimeOffset</a></dt>
<dd></dd> <dd></dd>
<dt><code>AttachmentFileSize</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int64">long</a>?</dt> <dt><code>Attachments</code> <span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html">AttachmentDto</a>&gt;</dt>
<dd></dd> <dd></dd>
<dt><code>Embeds</code> <span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Core.DTOs.EmbedDto.html">EmbedDto</a>&gt;</dt> <dt><code>Embeds</code> <span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Core.DTOs.EmbedDto.html">EmbedDto</a>&gt;</dt>
<dd></dd> <dd></dd>
@@ -0,0 +1,699 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class RekeyChannelRequest | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class RekeyChannelRequest | EchoHub Documentation ">
<meta name="description" content="Passphrase change for an encrypted channel: the client proves knowledge of the old passphrase (old auth key), then supplies the re-wrapped room key under the new one.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Core_DTOs_RekeyChannelRequest.md&amp;value=---%0Auid%3A%20EchoHub.Core.DTOs.RekeyChannelRequest%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Core.DTOs.RekeyChannelRequest">
<h1 id="EchoHub_Core_DTOs_RekeyChannelRequest" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest" class="text-break">
Class RekeyChannelRequest <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Core.html">Core</a>.<a class="xref" href="EchoHub.Core.DTOs.html">DTOs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Core.dll</dd></dl>
</div>
<div class="markdown summary"><p>Passphrase change for an encrypted channel: the client proves knowledge of the old
passphrase (old auth key), then supplies the re-wrapped room key under the new one.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public record RekeyChannelRequest : IEquatable&lt;RekeyChannelRequest&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">RekeyChannelRequest</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Core.DTOs.RekeyChannelRequest.html">RekeyChannelRequest</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Core_DTOs_RekeyChannelRequest__ctor_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.#ctor*"></a>
<h3 id="EchoHub_Core_DTOs_RekeyChannelRequest__ctor_EchoHub_Core_DTOs_RekeyChannelRequest_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.#ctor(EchoHub.Core.DTOs.RekeyChannelRequest)">
RekeyChannelRequest(RekeyChannelRequest)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected RekeyChannelRequest(RekeyChannelRequest original)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>original</code> <a class="xref" href="EchoHub.Core.DTOs.RekeyChannelRequest.html">RekeyChannelRequest</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_RekeyChannelRequest__ctor_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.#ctor*"></a>
<h3 id="EchoHub_Core_DTOs_RekeyChannelRequest__ctor_System_String_System_String_System_String_System_String_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.#ctor(System.String,System.String,System.String,System.String)">
RekeyChannelRequest(string, string, string, string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Passphrase change for an encrypted channel: the client proves knowledge of the old
passphrase (old auth key), then supplies the re-wrapped room key under the new one.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public RekeyChannelRequest(string OldPassword, string NewPassword, string NewEncryptionSalt, string NewWrappedRoomKey)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>OldPassword</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>NewPassword</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>NewEncryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>NewWrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Core_DTOs_RekeyChannelRequest_EqualityContract_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.EqualityContract*"></a>
<h3 id="EchoHub_Core_DTOs_RekeyChannelRequest_EqualityContract" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.EqualityContract">
EqualityContract
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual Type EqualityContract { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.type">Type</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_RekeyChannelRequest_NewEncryptionSalt_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.NewEncryptionSalt*"></a>
<h3 id="EchoHub_Core_DTOs_RekeyChannelRequest_NewEncryptionSalt" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.NewEncryptionSalt">
NewEncryptionSalt
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string NewEncryptionSalt { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_RekeyChannelRequest_NewPassword_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.NewPassword*"></a>
<h3 id="EchoHub_Core_DTOs_RekeyChannelRequest_NewPassword" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.NewPassword">
NewPassword
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string NewPassword { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_RekeyChannelRequest_NewWrappedRoomKey_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.NewWrappedRoomKey*"></a>
<h3 id="EchoHub_Core_DTOs_RekeyChannelRequest_NewWrappedRoomKey" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.NewWrappedRoomKey">
NewWrappedRoomKey
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string NewWrappedRoomKey { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_RekeyChannelRequest_OldPassword_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.OldPassword*"></a>
<h3 id="EchoHub_Core_DTOs_RekeyChannelRequest_OldPassword" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.OldPassword">
OldPassword
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string OldPassword { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Core_DTOs_RekeyChannelRequest_Deconstruct_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.Deconstruct*"></a>
<h3 id="EchoHub_Core_DTOs_RekeyChannelRequest_Deconstruct_System_String__System_String__System_String__System_String__" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.Deconstruct(System.String@,System.String@,System.String@,System.String@)">
Deconstruct(out string, out string, out string, out string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out string OldPassword, out string NewPassword, out string NewEncryptionSalt, out string NewWrappedRoomKey)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>OldPassword</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>NewPassword</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>NewEncryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>NewWrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_RekeyChannelRequest_Equals_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.Equals*"></a>
<h3 id="EchoHub_Core_DTOs_RekeyChannelRequest_Equals_EchoHub_Core_DTOs_RekeyChannelRequest_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.Equals(EchoHub.Core.DTOs.RekeyChannelRequest)">
Equals(RekeyChannelRequest?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual bool Equals(RekeyChannelRequest? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Core.DTOs.RekeyChannelRequest.html">RekeyChannelRequest</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_RekeyChannelRequest_Equals_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.Equals*"></a>
<h3 id="EchoHub_Core_DTOs_RekeyChannelRequest_Equals_System_Object_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_RekeyChannelRequest_GetHashCode_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.GetHashCode*"></a>
<h3 id="EchoHub_Core_DTOs_RekeyChannelRequest_GetHashCode" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_RekeyChannelRequest_PrintMembers_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.PrintMembers*"></a>
<h3 id="EchoHub_Core_DTOs_RekeyChannelRequest_PrintMembers_System_Text_StringBuilder_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.PrintMembers(System.Text.StringBuilder)">
PrintMembers(StringBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual bool PrintMembers(StringBuilder builder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>builder</code> <span class="xref">StringBuilder</span></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_RekeyChannelRequest_ToString_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.ToString*"></a>
<h3 id="EchoHub_Core_DTOs_RekeyChannelRequest_ToString" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Core_DTOs_RekeyChannelRequest_op_Equality_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.op_Equality*"></a>
<h3 id="EchoHub_Core_DTOs_RekeyChannelRequest_op_Equality_EchoHub_Core_DTOs_RekeyChannelRequest_EchoHub_Core_DTOs_RekeyChannelRequest_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.op_Equality(EchoHub.Core.DTOs.RekeyChannelRequest,EchoHub.Core.DTOs.RekeyChannelRequest)">
operator ==(RekeyChannelRequest?, RekeyChannelRequest?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(RekeyChannelRequest? left, RekeyChannelRequest? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Core.DTOs.RekeyChannelRequest.html">RekeyChannelRequest</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Core.DTOs.RekeyChannelRequest.html">RekeyChannelRequest</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_DTOs_RekeyChannelRequest_op_Inequality_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.op_Inequality*"></a>
<h3 id="EchoHub_Core_DTOs_RekeyChannelRequest_op_Inequality_EchoHub_Core_DTOs_RekeyChannelRequest_EchoHub_Core_DTOs_RekeyChannelRequest_" data-uid="EchoHub.Core.DTOs.RekeyChannelRequest.op_Inequality(EchoHub.Core.DTOs.RekeyChannelRequest,EchoHub.Core.DTOs.RekeyChannelRequest)">
operator !=(RekeyChannelRequest?, RekeyChannelRequest?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(RekeyChannelRequest? left, RekeyChannelRequest? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Core.DTOs.RekeyChannelRequest.html">RekeyChannelRequest</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Core.DTOs.RekeyChannelRequest.html">RekeyChannelRequest</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
+19
View File
@@ -106,6 +106,13 @@ Classes
<dt><a class="xref" href="EchoHub.Core.DTOs.AssignRoleRequest.html">AssignRoleRequest</a></dt> <dt><a class="xref" href="EchoHub.Core.DTOs.AssignRoleRequest.html">AssignRoleRequest</a></dt>
<dd></dd> <dd></dd>
</dl> </dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html">AttachmentDto</a></dt>
<dd><p>A file attached to a message. <a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html#EchoHub_Core_DTOs_AttachmentDto_AsciiPreview">AsciiPreview</a> holds the color-tag art for
images (null otherwise). For end-to-end encrypted channels the content behind
<a class="xref" href="EchoHub.Core.DTOs.AttachmentDto.html#EchoHub_Core_DTOs_AttachmentDto_Url">Url</a> and the preview are ciphertext the server cannot read.</p>
</dd>
</dl>
<dl class="jumplist"> <dl class="jumplist">
<dt><a class="xref" href="EchoHub.Core.DTOs.AvatarUploadResponse.html">AvatarUploadResponse</a></dt> <dt><a class="xref" href="EchoHub.Core.DTOs.AvatarUploadResponse.html">AvatarUploadResponse</a></dt>
<dd></dd> <dd></dd>
@@ -114,6 +121,12 @@ Classes
<dt><a class="xref" href="EchoHub.Core.DTOs.BanRequest.html">BanRequest</a></dt> <dt><a class="xref" href="EchoHub.Core.DTOs.BanRequest.html">BanRequest</a></dt>
<dd></dd> <dd></dd>
</dl> </dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Core.DTOs.ChannelCryptoDto.html">ChannelCryptoDto</a></dt>
<dd><p>Public crypto metadata for a channel — enough for a client to derive its join
credential from a passphrase. Never includes the wrapped room key.</p>
</dd>
</dl>
<dl class="jumplist"> <dl class="jumplist">
<dt><a class="xref" href="EchoHub.Core.DTOs.ChannelDto.html">ChannelDto</a></dt> <dt><a class="xref" href="EchoHub.Core.DTOs.ChannelDto.html">ChannelDto</a></dt>
<dd></dd> <dd></dd>
@@ -174,6 +187,12 @@ Classes
<dt><a class="xref" href="EchoHub.Core.DTOs.RegisterRequest.html">RegisterRequest</a></dt> <dt><a class="xref" href="EchoHub.Core.DTOs.RegisterRequest.html">RegisterRequest</a></dt>
<dd></dd> <dd></dd>
</dl> </dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Core.DTOs.RekeyChannelRequest.html">RekeyChannelRequest</a></dt>
<dd><p>Passphrase change for an encrypted channel: the client proves knowledge of the old
passphrase (old auth key), then supplies the re-wrapped room key under the new one.</p>
</dd>
</dl>
<dl class="jumplist"> <dl class="jumplist">
<dt><a class="xref" href="EchoHub.Core.DTOs.SendMessageRequest.html">SendMessageRequest</a></dt> <dt><a class="xref" href="EchoHub.Core.DTOs.SendMessageRequest.html">SendMessageRequest</a></dt>
<dd></dd> <dd></dd>
@@ -0,0 +1,465 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class Attachment | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class Attachment | EchoHub Documentation ">
<meta name="description" content="A file attached to a message (image, audio, or any file). A message may carry zero or more attachments alongside its text content (Discord-style).">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Core_Models_Attachment.md&amp;value=---%0Auid%3A%20EchoHub.Core.Models.Attachment%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Core.Models.Attachment">
<h1 id="EchoHub_Core_Models_Attachment" data-uid="EchoHub.Core.Models.Attachment" class="text-break">
Class Attachment <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Attachment.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Core.html">Core</a>.<a class="xref" href="EchoHub.Core.Models.html">Models</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Core.dll</dd></dl>
</div>
<div class="markdown summary"><p>A file attached to a message (image, audio, or any file). A message may carry
zero or more attachments alongside its text content (Discord-style).</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class Attachment</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">Attachment</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Core_Models_Attachment__ctor_" data-uid="EchoHub.Core.Models.Attachment.#ctor*"></a>
<h3 id="EchoHub_Core_Models_Attachment__ctor" data-uid="EchoHub.Core.Models.Attachment.#ctor">
Attachment()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Attachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Attachment()</code></pre>
</div>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Core_Models_Attachment_AsciiPreview_" data-uid="EchoHub.Core.Models.Attachment.AsciiPreview*"></a>
<h3 id="EchoHub_Core_Models_Attachment_AsciiPreview" data-uid="EchoHub.Core.Models.Attachment.AsciiPreview">
AsciiPreview
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Attachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Rendered ASCII-art preview for images (color-tag format). Null for audio/files.
Stored encrypted-at-rest when database encryption is enabled, and room-encrypted
for end-to-end encrypted channels.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? AsciiPreview { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Models_Attachment_FileName_" data-uid="EchoHub.Core.Models.Attachment.FileName*"></a>
<h3 id="EchoHub_Core_Models_Attachment_FileName" data-uid="EchoHub.Core.Models.Attachment.FileName">
FileName
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Attachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public required string FileName { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Models_Attachment_FileSize_" data-uid="EchoHub.Core.Models.Attachment.FileSize*"></a>
<h3 id="EchoHub_Core_Models_Attachment_FileSize" data-uid="EchoHub.Core.Models.Attachment.FileSize">
FileSize
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Attachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Stored blob size in bytes (ciphertext size for encrypted channels).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public long FileSize { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int64">long</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Models_Attachment_Id_" data-uid="EchoHub.Core.Models.Attachment.Id*"></a>
<h3 id="EchoHub_Core_Models_Attachment_Id" data-uid="EchoHub.Core.Models.Attachment.Id">
Id
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Attachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Guid Id { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.guid">Guid</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Models_Attachment_Kind_" data-uid="EchoHub.Core.Models.Attachment.Kind*"></a>
<h3 id="EchoHub_Core_Models_Attachment_Kind" data-uid="EchoHub.Core.Models.Attachment.Kind">
Kind
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Attachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public AttachmentKind Kind { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Core.Models.AttachmentKind.html">AttachmentKind</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Models_Attachment_Message_" data-uid="EchoHub.Core.Models.Attachment.Message*"></a>
<h3 id="EchoHub_Core_Models_Attachment_Message" data-uid="EchoHub.Core.Models.Attachment.Message">
Message
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Attachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Message? Message { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Core.Models.Message.html">Message</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Models_Attachment_MessageId_" data-uid="EchoHub.Core.Models.Attachment.MessageId*"></a>
<h3 id="EchoHub_Core_Models_Attachment_MessageId" data-uid="EchoHub.Core.Models.Attachment.MessageId">
MessageId
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Attachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Guid MessageId { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.guid">Guid</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Models_Attachment_Url_" data-uid="EchoHub.Core.Models.Attachment.Url*"></a>
<h3 id="EchoHub_Core_Models_Attachment_Url" data-uid="EchoHub.Core.Models.Attachment.Url">
Url
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Attachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Relative download URL, e.g. <code>/api/files/{fileId}</code>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public required string Url { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Attachment.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,158 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Enum AttachmentKind | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Enum AttachmentKind | EchoHub Documentation ">
<meta name="description" content="The kind of a message attachment. Determines how the client renders it (ASCII preview for images, a play affordance for audio, a download line for files).">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Core_Models_AttachmentKind.md&amp;value=---%0Auid%3A%20EchoHub.Core.Models.AttachmentKind%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Core.Models.AttachmentKind">
<h1 id="EchoHub_Core_Models_AttachmentKind" data-uid="EchoHub.Core.Models.AttachmentKind" class="text-break">
Enum AttachmentKind <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/AttachmentKind.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Core.html">Core</a>.<a class="xref" href="EchoHub.Core.Models.html">Models</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Core.dll</dd></dl>
</div>
<div class="markdown summary"><p>The kind of a message attachment. Determines how the client renders it
(ASCII preview for images, a play affordance for audio, a download line for files).</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public enum AttachmentKind</code></pre>
</div>
<h2 id="fields">Fields
</h2>
<dl class="parameters">
<dt id="EchoHub_Core_Models_AttachmentKind_Audio"><code>Audio = 1</code></dt>
<dd></dd>
<dt id="EchoHub_Core_Models_AttachmentKind_File"><code>File = 2</code></dt>
<dd></dd>
<dt id="EchoHub_Core_Models_AttachmentKind_Image"><code>Image = 0</code></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/AttachmentKind.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
+93
View File
@@ -244,6 +244,37 @@ Class Channel <a class="header-action link-secondary" title="View source" href=
<a id="EchoHub_Core_Models_Channel_EncryptionSalt_" data-uid="EchoHub.Core.Models.Channel.EncryptionSalt*"></a>
<h3 id="EchoHub_Core_Models_Channel_EncryptionSalt" data-uid="EchoHub.Core.Models.Channel.EncryptionSalt">
EncryptionSalt
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Channel.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? EncryptionSalt { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Models_Channel_Id_" data-uid="EchoHub.Core.Models.Channel.Id*"></a> <a id="EchoHub_Core_Models_Channel_Id_" data-uid="EchoHub.Core.Models.Channel.Id*"></a>
<h3 id="EchoHub_Core_Models_Channel_Id" data-uid="EchoHub.Core.Models.Channel.Id"> <h3 id="EchoHub_Core_Models_Channel_Id" data-uid="EchoHub.Core.Models.Channel.Id">
@@ -368,6 +399,37 @@ Class Channel <a class="header-action link-secondary" title="View source" href=
<a id="EchoHub_Core_Models_Channel_PasswordHash_" data-uid="EchoHub.Core.Models.Channel.PasswordHash*"></a>
<h3 id="EchoHub_Core_Models_Channel_PasswordHash" data-uid="EchoHub.Core.Models.Channel.PasswordHash">
PasswordHash
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Channel.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? PasswordHash { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Models_Channel_Topic_" data-uid="EchoHub.Core.Models.Channel.Topic*"></a> <a id="EchoHub_Core_Models_Channel_Topic_" data-uid="EchoHub.Core.Models.Channel.Topic*"></a>
<h3 id="EchoHub_Core_Models_Channel_Topic" data-uid="EchoHub.Core.Models.Channel.Topic"> <h3 id="EchoHub_Core_Models_Channel_Topic" data-uid="EchoHub.Core.Models.Channel.Topic">
@@ -399,6 +461,37 @@ Class Channel <a class="header-action link-secondary" title="View source" href=
<a id="EchoHub_Core_Models_Channel_WrappedRoomKey_" data-uid="EchoHub.Core.Models.Channel.WrappedRoomKey*"></a>
<h3 id="EchoHub_Core_Models_Channel_WrappedRoomKey" data-uid="EchoHub.Core.Models.Channel.WrappedRoomKey">
WrappedRoomKey
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Channel.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? WrappedRoomKey { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
</article> </article>
+34 -1
View File
@@ -275,6 +275,38 @@ Class Message <a class="header-action link-secondary" title="View source" href=
<a id="EchoHub_Core_Models_Message_Attachments_" data-uid="EchoHub.Core.Models.Message.Attachments*"></a>
<h3 id="EchoHub_Core_Models_Message_Attachments" data-uid="EchoHub.Core.Models.Message.Attachments">
Attachments
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Message.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Files attached to this message. Empty for a plain text message.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;Attachment&gt; Attachments { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Core.Models.Attachment.html">Attachment</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Models_Message_Channel_" data-uid="EchoHub.Core.Models.Message.Channel*"></a> <a id="EchoHub_Core_Models_Message_Channel_" data-uid="EchoHub.Core.Models.Message.Channel*"></a>
<h3 id="EchoHub_Core_Models_Message_Channel" data-uid="EchoHub.Core.Models.Message.Channel"> <h3 id="EchoHub_Core_Models_Message_Channel" data-uid="EchoHub.Core.Models.Message.Channel">
@@ -344,7 +376,8 @@ Class Message <a class="header-action link-secondary" title="View source" href=
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Message.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Message.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
<div class="markdown level1 summary"></div> <div class="markdown level1 summary"><p>The message text/caption. May be empty when the message only carries attachments.</p>
</div>
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
+12
View File
@@ -94,6 +94,12 @@
<h3 id="classes"> <h3 id="classes">
Classes Classes
</h3> </h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Core.Models.Attachment.html">Attachment</a></dt>
<dd><p>A file attached to a message (image, audio, or any file). A message may carry
zero or more attachments alongside its text content (Discord-style).</p>
</dd>
</dl>
<dl class="jumplist"> <dl class="jumplist">
<dt><a class="xref" href="EchoHub.Core.Models.Channel.html">Channel</a></dt> <dt><a class="xref" href="EchoHub.Core.Models.Channel.html">Channel</a></dt>
<dd></dd> <dd></dd>
@@ -117,6 +123,12 @@ Classes
<h3 id="enums"> <h3 id="enums">
Enums Enums
</h3> </h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Core.Models.AttachmentKind.html">AttachmentKind</a></dt>
<dd><p>The kind of a message attachment. Determines how the client renders it
(ASCII preview for images, a play affordance for audio, a download line for files).</p>
</dd>
</dl>
<dl class="jumplist"> <dl class="jumplist">
<dt><a class="xref" href="EchoHub.Core.Models.MessageType.html">MessageType</a></dt> <dt><a class="xref" href="EchoHub.Core.Models.MessageType.html">MessageType</a></dt>
<dd></dd> <dd></dd>
@@ -0,0 +1,524 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class RoomCrypto.DerivedKeys | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class RoomCrypto.DerivedKeys | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Core_Security_RoomCrypto_DerivedKeys.md&amp;value=---%0Auid%3A%20EchoHub.Core.Security.RoomCrypto.DerivedKeys%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys">
<h1 id="EchoHub_Core_Security_RoomCrypto_DerivedKeys" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys" class="text-break">
Class RoomCrypto.DerivedKeys <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Core.html">Core</a>.<a class="xref" href="EchoHub.Core.Security.html">Security</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Core.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed record RoomCrypto.DerivedKeys : IEquatable&lt;RoomCrypto.DerivedKeys&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">RoomCrypto.DerivedKeys</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Core.Security.RoomCrypto.html">RoomCrypto</a>.<a class="xref" href="EchoHub.Core.Security.RoomCrypto.DerivedKeys.html">DerivedKeys</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Core_Security_RoomCrypto_DerivedKeys__ctor_" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.#ctor*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_DerivedKeys__ctor_System_String_System_Byte___" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.#ctor(System.String,System.Byte[])">
DerivedKeys(string, byte[])
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public DerivedKeys(string AuthKeyHex, byte[] KeyEncryptionKey)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>AuthKeyHex</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>KeyEncryptionKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_AuthKeyHex_" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.AuthKeyHex*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_AuthKeyHex" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.AuthKeyHex">
AuthKeyHex
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string AuthKeyHex { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_KeyEncryptionKey_" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.KeyEncryptionKey*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_KeyEncryptionKey" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.KeyEncryptionKey">
KeyEncryptionKey
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public byte[] KeyEncryptionKey { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_Deconstruct_" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.Deconstruct*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_Deconstruct_System_String__System_Byte____" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.Deconstruct(System.String@,System.Byte[]@)">
Deconstruct(out string, out byte[])
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out string AuthKeyHex, out byte[] KeyEncryptionKey)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>AuthKeyHex</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>KeyEncryptionKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_Equals_" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.Equals*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_Equals_EchoHub_Core_Security_RoomCrypto_DerivedKeys_" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.Equals(EchoHub.Core.Security.RoomCrypto.DerivedKeys)">
Equals(DerivedKeys?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool Equals(RoomCrypto.DerivedKeys? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Core.Security.RoomCrypto.html">RoomCrypto</a>.<a class="xref" href="EchoHub.Core.Security.RoomCrypto.DerivedKeys.html">DerivedKeys</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_Equals_" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.Equals*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_Equals_System_Object_" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_GetHashCode_" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.GetHashCode*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_GetHashCode" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_ToString_" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.ToString*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_ToString" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_op_Equality_" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.op_Equality*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_op_Equality_EchoHub_Core_Security_RoomCrypto_DerivedKeys_EchoHub_Core_Security_RoomCrypto_DerivedKeys_" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.op_Equality(EchoHub.Core.Security.RoomCrypto.DerivedKeys,EchoHub.Core.Security.RoomCrypto.DerivedKeys)">
operator ==(DerivedKeys?, DerivedKeys?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(RoomCrypto.DerivedKeys? left, RoomCrypto.DerivedKeys? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Core.Security.RoomCrypto.html">RoomCrypto</a>.<a class="xref" href="EchoHub.Core.Security.RoomCrypto.DerivedKeys.html">DerivedKeys</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Core.Security.RoomCrypto.html">RoomCrypto</a>.<a class="xref" href="EchoHub.Core.Security.RoomCrypto.DerivedKeys.html">DerivedKeys</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_op_Inequality_" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.op_Inequality*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_DerivedKeys_op_Inequality_EchoHub_Core_Security_RoomCrypto_DerivedKeys_EchoHub_Core_Security_RoomCrypto_DerivedKeys_" data-uid="EchoHub.Core.Security.RoomCrypto.DerivedKeys.op_Inequality(EchoHub.Core.Security.RoomCrypto.DerivedKeys,EchoHub.Core.Security.RoomCrypto.DerivedKeys)">
operator !=(DerivedKeys?, DerivedKeys?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(RoomCrypto.DerivedKeys? left, RoomCrypto.DerivedKeys? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Core.Security.RoomCrypto.html">RoomCrypto</a>.<a class="xref" href="EchoHub.Core.Security.RoomCrypto.DerivedKeys.html">DerivedKeys</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Core.Security.RoomCrypto.html">RoomCrypto</a>.<a class="xref" href="EchoHub.Core.Security.RoomCrypto.DerivedKeys.html">DerivedKeys</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,601 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class RoomCrypto | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class RoomCrypto | EchoHub Documentation ">
<meta name="description" content="Client-side envelope encryption for private (end-to-end encrypted) channels. Design: at creation the client generates a random 256-bit room content key (RCK) that encrypts all room content. The RCK is stored on the server wrapped (AES-GCM encrypted) by a key derived from the passphrase, next to a BCrypt hash of a separately derived auth key used as the join gate. The passphrase, the key-encryption key, and the RCK never leave the client, so the server can gate joins and count/measure content without being able to read it. Changing the passphrase only re-wraps the RCK — history is never re-encrypted. Derivation: PBKDF2-SHA256(passphrase, salt, 210000 iterations) → 64 bytes; first 32 bytes are the auth key (sent to the server as lowercase hex), last 32 bytes are the key-encryption key (never sent).">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Core_Security_RoomCrypto.md&amp;value=---%0Auid%3A%20EchoHub.Core.Security.RoomCrypto%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Core.Security.RoomCrypto">
<h1 id="EchoHub_Core_Security_RoomCrypto" data-uid="EchoHub.Core.Security.RoomCrypto" class="text-break">
Class RoomCrypto <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Core.html">Core</a>.<a class="xref" href="EchoHub.Core.Security.html">Security</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Core.dll</dd></dl>
</div>
<div class="markdown summary"><p>Client-side envelope encryption for private (end-to-end encrypted) channels.</p>
<p>Design: at creation the client generates a random 256-bit room content key (RCK)
that encrypts all room content. The RCK is stored on the server <em>wrapped</em>
(AES-GCM encrypted) by a key derived from the passphrase, next to a BCrypt hash
of a separately derived auth key used as the join gate. The passphrase, the
key-encryption key, and the RCK never leave the client, so the server can gate
joins and count/measure content without being able to read it. Changing the
passphrase only re-wraps the RCK — history is never re-encrypted.</p>
<p>Derivation: PBKDF2-SHA256(passphrase, salt, 210000 iterations) → 64 bytes;
first 32 bytes are the auth key (sent to the server as lowercase hex),
last 32 bytes are the key-encryption key (never sent).</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class RoomCrypto</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">RoomCrypto</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="fields">Fields
</h2>
<h3 id="EchoHub_Core_Security_RoomCrypto_CiphertextPrefix" data-uid="EchoHub.Core.Security.RoomCrypto.CiphertextPrefix">
CiphertextPrefix
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const string CiphertextPrefix = &quot;$RC1$&quot;</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Core_Security_RoomCrypto_DecryptBytes_" data-uid="EchoHub.Core.Security.RoomCrypto.DecryptBytes*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_DecryptBytes_System_Byte___System_Byte___" data-uid="EchoHub.Core.Security.RoomCrypto.DecryptBytes(System.Byte[],System.Byte[])">
DecryptBytes(byte[], byte[])
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Decrypts a blob produced by <a class="xref" href="EchoHub.Core.Security.RoomCrypto.html#EchoHub_Core_Security_RoomCrypto_EncryptBytes_System_Byte___System_Byte___">EncryptBytes(byte[], byte[])</a>. Throws <span class="xref">System.Security.Cryptography.CryptographicException</span> on key mismatch.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static byte[] DecryptBytes(byte[] blob, byte[] key)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>blob</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
<dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Security_RoomCrypto_DeriveKeys_" data-uid="EchoHub.Core.Security.RoomCrypto.DeriveKeys*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_DeriveKeys_System_String_System_Byte___" data-uid="EchoHub.Core.Security.RoomCrypto.DeriveKeys(System.String,System.Byte[])">
DeriveKeys(string, byte[])
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Derives the auth key (join gate credential) and key-encryption key from a passphrase.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static RoomCrypto.DerivedKeys DeriveKeys(string passphrase, byte[] salt)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>passphrase</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>salt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Core.Security.RoomCrypto.html">RoomCrypto</a>.<a class="xref" href="EchoHub.Core.Security.RoomCrypto.DerivedKeys.html">DerivedKeys</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Security_RoomCrypto_EncryptBytes_" data-uid="EchoHub.Core.Security.RoomCrypto.EncryptBytes*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_EncryptBytes_System_Byte___System_Byte___" data-uid="EchoHub.Core.Security.RoomCrypto.EncryptBytes(System.Byte[],System.Byte[])">
EncryptBytes(byte[], byte[])
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Encrypts a binary blob (file contents) with the room key: nonce||tag||ciphertext.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static byte[] EncryptBytes(byte[] plaintext, byte[] key)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>plaintext</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
<dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Security_RoomCrypto_EncryptText_" data-uid="EchoHub.Core.Security.RoomCrypto.EncryptText*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_EncryptText_System_String_System_Byte___" data-uid="EchoHub.Core.Security.RoomCrypto.EncryptText(System.String,System.Byte[])">
EncryptText(string, byte[])
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Encrypts UTF-8 text with the room key. Output: $RC1$base64(nonce||tag||ciphertext).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string EncryptText(string plaintext, byte[] key)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>plaintext</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Security_RoomCrypto_GenerateRoomKey_" data-uid="EchoHub.Core.Security.RoomCrypto.GenerateRoomKey*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_GenerateRoomKey" data-uid="EchoHub.Core.Security.RoomCrypto.GenerateRoomKey">
GenerateRoomKey()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static byte[] GenerateRoomKey()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Security_RoomCrypto_GenerateSalt_" data-uid="EchoHub.Core.Security.RoomCrypto.GenerateSalt*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_GenerateSalt" data-uid="EchoHub.Core.Security.RoomCrypto.GenerateSalt">
GenerateSalt()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static byte[] GenerateSalt()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Security_RoomCrypto_IsRoomCiphertext_" data-uid="EchoHub.Core.Security.RoomCrypto.IsRoomCiphertext*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_IsRoomCiphertext_System_String_" data-uid="EchoHub.Core.Security.RoomCrypto.IsRoomCiphertext(System.String)">
IsRoomCiphertext(string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool IsRoomCiphertext(string? content)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>content</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Security_RoomCrypto_TryDecryptText_" data-uid="EchoHub.Core.Security.RoomCrypto.TryDecryptText*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_TryDecryptText_System_String_System_Byte___System_String__" data-uid="EchoHub.Core.Security.RoomCrypto.TryDecryptText(System.String,System.Byte[],System.String@)">
TryDecryptText(string, byte[], out string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Decrypts text produced by <a class="xref" href="EchoHub.Core.Security.RoomCrypto.html#EchoHub_Core_Security_RoomCrypto_EncryptText_System_String_System_Byte___">EncryptText(string, byte[])</a>. Returns false when the input
is not room ciphertext or the key does not match.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool TryDecryptText(string content, byte[] key, out string plaintext)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>content</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
<dt><code>plaintext</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Security_RoomCrypto_TryUnwrapRoomKey_" data-uid="EchoHub.Core.Security.RoomCrypto.TryUnwrapRoomKey*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_TryUnwrapRoomKey_System_String_System_Byte___System_Byte____" data-uid="EchoHub.Core.Security.RoomCrypto.TryUnwrapRoomKey(System.String,System.Byte[],System.Byte[]@)">
TryUnwrapRoomKey(string, byte[], out byte[])
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Unwraps the stored room content key. Returns false when the KEK (passphrase) is wrong.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool TryUnwrapRoomKey(string wrappedRoomKey, byte[] kek, out byte[] roomKey)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>wrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>kek</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
<dt><code>roomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Core_Security_RoomCrypto_WrapRoomKey_" data-uid="EchoHub.Core.Security.RoomCrypto.WrapRoomKey*"></a>
<h3 id="EchoHub_Core_Security_RoomCrypto_WrapRoomKey_System_Byte___System_Byte___" data-uid="EchoHub.Core.Security.RoomCrypto.WrapRoomKey(System.Byte[],System.Byte[])">
WrapRoomKey(byte[], byte[])
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Wraps the room content key under the key-encryption key for server storage.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string WrapRoomKey(byte[] roomKey, byte[] kek)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>roomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
<dt><code>kek</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Security/RoomCrypto.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
+141
View File
@@ -0,0 +1,141 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace EchoHub.Core.Security | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace EchoHub.Core.Security | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Core.Security">
<h1 id="EchoHub_Core_Security" data-uid="EchoHub.Core.Security" class="text-break">Namespace EchoHub.Core.Security</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Core.Security.RoomCrypto.html">RoomCrypto</a></dt>
<dd><p>Client-side envelope encryption for private (end-to-end encrypted) channels.</p>
<p>Design: at creation the client generates a random 256-bit room content key (RCK)
that encrypts all room content. The RCK is stored on the server <em>wrapped</em>
(AES-GCM encrypted) by a key derived from the passphrase, next to a BCrypt hash
of a separately derived auth key used as the join gate. The passphrase, the
key-encryption key, and the RCK never leave the client, so the server can gate
joins and count/measure content without being able to read it. Changing the
passphrase only re-wraps the RCK — history is never re-encrypted.</p>
<p>Derivation: PBKDF2-SHA256(passphrase, salt, 210000 iterations) → 64 bytes;
first 32 bytes are the auth key (sent to the server as lowercase hex),
last 32 bytes are the key-encryption key (never sent).</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Core.Security.RoomCrypto.DerivedKeys.html">RoomCrypto.DerivedKeys</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -16,7 +16,7 @@
<meta name="docfx:rel" content="../../"> <meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Server_Services_FileValidationHelper.md&amp;value=---%0Auid%3A%20EchoHub.Server.Services.FileValidationHelper%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A"> <meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Core_Services_FileValidationHelper.md&amp;value=---%0Auid%3A%20EchoHub.Core.Services.FileValidationHelper%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article"> <meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;"> <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;"> <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
@@ -84,17 +84,17 @@
<nav id="breadcrumb"></nav> <nav id="breadcrumb"></nav>
</div> </div>
<article data-uid="EchoHub.Server.Services.FileValidationHelper"> <article data-uid="EchoHub.Core.Services.FileValidationHelper">
<h1 id="EchoHub_Server_Services_FileValidationHelper" data-uid="EchoHub.Server.Services.FileValidationHelper" class="text-break"> <h1 id="EchoHub_Core_Services_FileValidationHelper" data-uid="EchoHub.Core.Services.FileValidationHelper" class="text-break">
Class FileValidationHelper <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/FileValidationHelper.cs"><i class="bi bi-code-slash"></i></a> Class FileValidationHelper <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Services/FileValidationHelper.cs"><i class="bi bi-code-slash"></i></a>
</h1> </h1>
<div class="facts text-secondary"> <div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Server.html">Server</a>.<a class="xref" href="EchoHub.Server.Services.html">Services</a></dd></dl> <dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Core.html">Core</a>.<a class="xref" href="EchoHub.Core.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Server.dll</dd></dl> <dl><dt>Assembly</dt><dd>EchoHub.Core.dll</dd></dl>
</div> </div>
<div class="markdown summary"></div> <div class="markdown summary"></div>
@@ -152,11 +152,11 @@ Class FileValidationHelper <a class="header-action link-secondary" title="View
</h2> </h2>
<a id="EchoHub_Server_Services_FileValidationHelper_IsAudioFile_" data-uid="EchoHub.Server.Services.FileValidationHelper.IsAudioFile*"></a> <a id="EchoHub_Core_Services_FileValidationHelper_IsAudioFile_" data-uid="EchoHub.Core.Services.FileValidationHelper.IsAudioFile*"></a>
<h3 id="EchoHub_Server_Services_FileValidationHelper_IsAudioFile_System_String_" data-uid="EchoHub.Server.Services.FileValidationHelper.IsAudioFile(System.String)"> <h3 id="EchoHub_Core_Services_FileValidationHelper_IsAudioFile_System_String_" data-uid="EchoHub.Core.Services.FileValidationHelper.IsAudioFile(System.String)">
IsAudioFile(string) IsAudioFile(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/FileValidationHelper.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Services/FileValidationHelper.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
<div class="markdown level1 summary"><p>Checks whether the file name has a recognized audio extension.</p> <div class="markdown level1 summary"><p>Checks whether the file name has a recognized audio extension.</p>
@@ -189,11 +189,11 @@ Class FileValidationHelper <a class="header-action link-secondary" title="View
<a id="EchoHub_Server_Services_FileValidationHelper_IsValidImage_" data-uid="EchoHub.Server.Services.FileValidationHelper.IsValidImage*"></a> <a id="EchoHub_Core_Services_FileValidationHelper_IsValidImage_" data-uid="EchoHub.Core.Services.FileValidationHelper.IsValidImage*"></a>
<h3 id="EchoHub_Server_Services_FileValidationHelper_IsValidImage_System_IO_Stream_" data-uid="EchoHub.Server.Services.FileValidationHelper.IsValidImage(System.IO.Stream)"> <h3 id="EchoHub_Core_Services_FileValidationHelper_IsValidImage_System_IO_Stream_" data-uid="EchoHub.Core.Services.FileValidationHelper.IsValidImage(System.IO.Stream)">
IsValidImage(Stream) IsValidImage(Stream)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/FileValidationHelper.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Services/FileValidationHelper.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
<div class="markdown level1 summary"><p>Validates that a stream contains a recognized image format by checking magic bytes. <div class="markdown level1 summary"><p>Validates that a stream contains a recognized image format by checking magic bytes.
@@ -231,7 +231,7 @@ The stream position is reset to the beginning after validation.</p>
</article> </article>
<div class="contribution d-print-none"> <div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/FileValidationHelper.cs" class="edit-link">Edit this page</a> <a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Services/FileValidationHelper.cs" class="edit-link">Edit this page</a>
</div> </div>
@@ -16,7 +16,7 @@
<meta name="docfx:rel" content="../../"> <meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Server_Services_ImageToAsciiService.md&amp;value=---%0Auid%3A%20EchoHub.Server.Services.ImageToAsciiService%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A"> <meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Core_Services_ImageToAsciiService.md&amp;value=---%0Auid%3A%20EchoHub.Core.Services.ImageToAsciiService%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article"> <meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;"> <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;"> <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
@@ -84,17 +84,17 @@
<nav id="breadcrumb"></nav> <nav id="breadcrumb"></nav>
</div> </div>
<article data-uid="EchoHub.Server.Services.ImageToAsciiService"> <article data-uid="EchoHub.Core.Services.ImageToAsciiService">
<h1 id="EchoHub_Server_Services_ImageToAsciiService" data-uid="EchoHub.Server.Services.ImageToAsciiService" class="text-break"> <h1 id="EchoHub_Core_Services_ImageToAsciiService" data-uid="EchoHub.Core.Services.ImageToAsciiService" class="text-break">
Class ImageToAsciiService <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ImageToAsciiService.cs"><i class="bi bi-code-slash"></i></a> Class ImageToAsciiService <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Services/ImageToAsciiService.cs"><i class="bi bi-code-slash"></i></a>
</h1> </h1>
<div class="facts text-secondary"> <div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Server.html">Server</a>.<a class="xref" href="EchoHub.Server.Services.html">Services</a></dd></dl> <dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Core.html">Core</a>.<a class="xref" href="EchoHub.Core.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Server.dll</dd></dl> <dl><dt>Assembly</dt><dd>EchoHub.Core.dll</dd></dl>
</div> </div>
<div class="markdown summary"></div> <div class="markdown summary"></div>
@@ -152,11 +152,11 @@ Class ImageToAsciiService <a class="header-action link-secondary" title="View s
</h2> </h2>
<a id="EchoHub_Server_Services_ImageToAsciiService__ctor_" data-uid="EchoHub.Server.Services.ImageToAsciiService.#ctor*"></a> <a id="EchoHub_Core_Services_ImageToAsciiService__ctor_" data-uid="EchoHub.Core.Services.ImageToAsciiService.#ctor*"></a>
<h3 id="EchoHub_Server_Services_ImageToAsciiService__ctor" data-uid="EchoHub.Server.Services.ImageToAsciiService.#ctor"> <h3 id="EchoHub_Core_Services_ImageToAsciiService__ctor" data-uid="EchoHub.Core.Services.ImageToAsciiService.#ctor">
ImageToAsciiService() ImageToAsciiService()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ImageToAsciiService.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Services/ImageToAsciiService.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
<div class="markdown level1 summary"></div> <div class="markdown level1 summary"></div>
@@ -182,11 +182,11 @@ Class ImageToAsciiService <a class="header-action link-secondary" title="View s
</h2> </h2>
<a id="EchoHub_Server_Services_ImageToAsciiService_ConvertToAscii_" data-uid="EchoHub.Server.Services.ImageToAsciiService.ConvertToAscii*"></a> <a id="EchoHub_Core_Services_ImageToAsciiService_ConvertToAscii_" data-uid="EchoHub.Core.Services.ImageToAsciiService.ConvertToAscii*"></a>
<h3 id="EchoHub_Server_Services_ImageToAsciiService_ConvertToAscii_System_IO_Stream_System_Int32_System_Int32_" data-uid="EchoHub.Server.Services.ImageToAsciiService.ConvertToAscii(System.IO.Stream,System.Int32,System.Int32)"> <h3 id="EchoHub_Core_Services_ImageToAsciiService_ConvertToAscii_System_IO_Stream_System_Int32_System_Int32_" data-uid="EchoHub.Core.Services.ImageToAsciiService.ConvertToAscii(System.IO.Stream,System.Int32,System.Int32)">
ConvertToAscii(Stream, int, int) ConvertToAscii(Stream, int, int)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ImageToAsciiService.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Services/ImageToAsciiService.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
<div class="markdown level1 summary"><p>Converts an image to ASCII art using half-block characters (▀▄█) with <div class="markdown level1 summary"><p>Converts an image to ASCII art using half-block characters (▀▄█) with
@@ -227,11 +227,11 @@ Uses only printable ASCII — no terminal escape bytes.</p>
<a id="EchoHub_Server_Services_ImageToAsciiService_GetDimensions_" data-uid="EchoHub.Server.Services.ImageToAsciiService.GetDimensions*"></a> <a id="EchoHub_Core_Services_ImageToAsciiService_GetDimensions_" data-uid="EchoHub.Core.Services.ImageToAsciiService.GetDimensions*"></a>
<h3 id="EchoHub_Server_Services_ImageToAsciiService_GetDimensions_System_String_" data-uid="EchoHub.Server.Services.ImageToAsciiService.GetDimensions(System.String)"> <h3 id="EchoHub_Core_Services_ImageToAsciiService_GetDimensions_System_String_" data-uid="EchoHub.Core.Services.ImageToAsciiService.GetDimensions(System.String)">
GetDimensions(string?) GetDimensions(string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ImageToAsciiService.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Services/ImageToAsciiService.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
<div class="markdown level1 summary"><p>Returns (width, height) dimensions for the given size code. <div class="markdown level1 summary"><p>Returns (width, height) dimensions for the given size code.
@@ -269,7 +269,7 @@ s = small (40x40), m = medium/default (80x80), l = large (120x120).</p>
</article> </article>
<div class="contribution d-print-none"> <div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ImageToAsciiService.cs" class="edit-link">Edit this page</a> <a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Services/ImageToAsciiService.cs" class="edit-link">Edit this page</a>
</div> </div>
+130
View File
@@ -0,0 +1,130 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace EchoHub.Core.Services | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace EchoHub.Core.Services | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Core.Services">
<h1 id="EchoHub_Core_Services" data-uid="EchoHub.Core.Services" class="text-break">Namespace EchoHub.Core.Services</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Core.Services.FileValidationHelper.html">FileValidationHelper</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Core.Services.ImageToAsciiService.html">ImageToAsciiService</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -183,6 +183,36 @@ Class IrcNumericReply <a class="header-action link-secondary" title="View sourc
<h3 id="EchoHub_Server_Irc_IrcNumericReply_ERR_BADCHANNELKEY" data-uid="EchoHub.Server.Irc.IrcNumericReply.ERR_BADCHANNELKEY">
ERR_BADCHANNELKEY
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server.Irc/IrcNumericReply.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const string ERR_BADCHANNELKEY = &quot;475&quot;</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Server_Irc_IrcNumericReply_ERR_CANNOTSENDTOCHAN" data-uid="EchoHub.Server.Irc.IrcNumericReply.ERR_CANNOTSENDTOCHAN"> <h3 id="EchoHub_Server_Irc_IrcNumericReply_ERR_CANNOTSENDTOCHAN" data-uid="EchoHub.Server.Irc.IrcNumericReply.ERR_CANNOTSENDTOCHAN">
ERR_CANNOTSENDTOCHAN ERR_CANNOTSENDTOCHAN
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server.Irc/IrcNumericReply.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server.Irc/IrcNumericReply.cs"><i class="bi bi-code-slash"></i></a>
@@ -273,6 +303,36 @@ Class IrcNumericReply <a class="header-action link-secondary" title="View sourc
<h3 id="EchoHub_Server_Irc_IrcNumericReply_ERR_KEYSET" data-uid="EchoHub.Server.Irc.IrcNumericReply.ERR_KEYSET">
ERR_KEYSET
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server.Irc/IrcNumericReply.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const string ERR_KEYSET = &quot;467&quot;</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Server_Irc_IrcNumericReply_ERR_NEEDMOREPARAMS" data-uid="EchoHub.Server.Irc.IrcNumericReply.ERR_NEEDMOREPARAMS"> <h3 id="EchoHub_Server_Irc_IrcNumericReply_ERR_NEEDMOREPARAMS" data-uid="EchoHub.Server.Irc.IrcNumericReply.ERR_NEEDMOREPARAMS">
ERR_NEEDMOREPARAMS ERR_NEEDMOREPARAMS
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server.Irc/IrcNumericReply.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server.Irc/IrcNumericReply.cs"><i class="bi bi-code-slash"></i></a>
@@ -603,6 +663,36 @@ Class IrcNumericReply <a class="header-action link-secondary" title="View sourc
<h3 id="EchoHub_Server_Irc_IrcNumericReply_ERR_UNKNOWNMODE" data-uid="EchoHub.Server.Irc.IrcNumericReply.ERR_UNKNOWNMODE">
ERR_UNKNOWNMODE
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server.Irc/IrcNumericReply.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const string ERR_UNKNOWNMODE = &quot;472&quot;</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Server_Irc_IrcNumericReply_RPL_AWAY" data-uid="EchoHub.Server.Irc.IrcNumericReply.RPL_AWAY"> <h3 id="EchoHub_Server_Irc_IrcNumericReply_RPL_AWAY" data-uid="EchoHub.Server.Irc.IrcNumericReply.RPL_AWAY">
RPL_AWAY RPL_AWAY
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server.Irc/IrcNumericReply.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server.Irc/IrcNumericReply.cs"><i class="bi bi-code-slash"></i></a>
@@ -693,6 +783,36 @@ Class IrcNumericReply <a class="header-action link-secondary" title="View sourc
<h3 id="EchoHub_Server_Irc_IrcNumericReply_RPL_ENDOFBANLIST" data-uid="EchoHub.Server.Irc.IrcNumericReply.RPL_ENDOFBANLIST">
RPL_ENDOFBANLIST
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server.Irc/IrcNumericReply.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const string RPL_ENDOFBANLIST = &quot;368&quot;</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Server_Irc_IrcNumericReply_RPL_ENDOFMOTD" data-uid="EchoHub.Server.Irc.IrcNumericReply.RPL_ENDOFMOTD"> <h3 id="EchoHub_Server_Irc_IrcNumericReply_RPL_ENDOFMOTD" data-uid="EchoHub.Server.Irc.IrcNumericReply.RPL_ENDOFMOTD">
RPL_ENDOFMOTD RPL_ENDOFMOTD
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server.Irc/IrcNumericReply.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server.Irc/IrcNumericReply.cs"><i class="bi bi-code-slash"></i></a>
@@ -159,7 +159,7 @@ public class ChannelsController : ControllerBase</code></pre>
<a id="EchoHub_Server_Controllers_ChannelsController__ctor_" data-uid="EchoHub.Server.Controllers.ChannelsController.#ctor*"></a> <a id="EchoHub_Server_Controllers_ChannelsController__ctor_" data-uid="EchoHub.Server.Controllers.ChannelsController.#ctor*"></a>
<h3 id="EchoHub_Server_Controllers_ChannelsController__ctor_EchoHub_Core_Contracts_IChannelService_EchoHub_Server_Data_EchoHubDbContext_EchoHub_Server_Services_FileStorageService_EchoHub_Server_Services_ImageToAsciiService_System_Net_Http_IHttpClientFactory_EchoHub_Core_Contracts_IChatService_EchoHub_Core_Contracts_IMessageEncryptionService_" data-uid="EchoHub.Server.Controllers.ChannelsController.#ctor(EchoHub.Core.Contracts.IChannelService,EchoHub.Server.Data.EchoHubDbContext,EchoHub.Server.Services.FileStorageService,EchoHub.Server.Services.ImageToAsciiService,System.Net.Http.IHttpClientFactory,EchoHub.Core.Contracts.IChatService,EchoHub.Core.Contracts.IMessageEncryptionService)"> <h3 id="EchoHub_Server_Controllers_ChannelsController__ctor_EchoHub_Core_Contracts_IChannelService_EchoHub_Server_Data_EchoHubDbContext_EchoHub_Server_Services_FileStorageService_EchoHub_Core_Services_ImageToAsciiService_System_Net_Http_IHttpClientFactory_EchoHub_Core_Contracts_IChatService_EchoHub_Core_Contracts_IMessageEncryptionService_" data-uid="EchoHub.Server.Controllers.ChannelsController.#ctor(EchoHub.Core.Contracts.IChannelService,EchoHub.Server.Data.EchoHubDbContext,EchoHub.Server.Services.FileStorageService,EchoHub.Core.Services.ImageToAsciiService,System.Net.Http.IHttpClientFactory,EchoHub.Core.Contracts.IChatService,EchoHub.Core.Contracts.IMessageEncryptionService)">
ChannelsController(IChannelService, EchoHubDbContext, FileStorageService, ImageToAsciiService, IHttpClientFactory, IChatService, IMessageEncryptionService) ChannelsController(IChannelService, EchoHubDbContext, FileStorageService, ImageToAsciiService, IHttpClientFactory, IChatService, IMessageEncryptionService)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Controllers/ChannelsController.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Controllers/ChannelsController.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -179,7 +179,7 @@ public class ChannelsController : ControllerBase</code></pre>
<dd></dd> <dd></dd>
<dt><code>fileStorage</code> <a class="xref" href="EchoHub.Server.Services.FileStorageService.html">FileStorageService</a></dt> <dt><code>fileStorage</code> <a class="xref" href="EchoHub.Server.Services.FileStorageService.html">FileStorageService</a></dt>
<dd></dd> <dd></dd>
<dt><code>asciiService</code> <a class="xref" href="EchoHub.Server.Services.ImageToAsciiService.html">ImageToAsciiService</a></dt> <dt><code>asciiService</code> <a class="xref" href="../core/EchoHub.Core.Services.ImageToAsciiService.html">ImageToAsciiService</a></dt>
<dd></dd> <dd></dd>
<dt><code>httpClientFactory</code> <span class="xref">IHttpClientFactory</span></dt> <dt><code>httpClientFactory</code> <span class="xref">IHttpClientFactory</span></dt>
<dd></dd> <dd></dd>
@@ -278,6 +278,46 @@ public Task&lt;IActionResult&gt; DeleteChannel(string channel)</code></pre>
<a id="EchoHub_Server_Controllers_ChannelsController_GetChannelCrypto_" data-uid="EchoHub.Server.Controllers.ChannelsController.GetChannelCrypto*"></a>
<h3 id="EchoHub_Server_Controllers_ChannelsController_GetChannelCrypto_System_String_" data-uid="EchoHub.Server.Controllers.ChannelsController.GetChannelCrypto(System.String)">
GetChannelCrypto(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Controllers/ChannelsController.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Public crypto metadata for a channel: whether it is end-to-end encrypted and the
PBKDF2 salt clients need to derive their join credential. Never returns the
wrapped room key — that is only handed out after a successful join.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">[HttpGet(&quot;{channel}/crypto&quot;)]
public Task&lt;IActionResult&gt; GetChannelCrypto(string channel)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channel</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;<span class="xref">IActionResult</span>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Server_Controllers_ChannelsController_GetChannels_" data-uid="EchoHub.Server.Controllers.ChannelsController.GetChannels*"></a> <a id="EchoHub_Server_Controllers_ChannelsController_GetChannels_" data-uid="EchoHub.Server.Controllers.ChannelsController.GetChannels*"></a>
<h3 id="EchoHub_Server_Controllers_ChannelsController_GetChannels_System_Int32_System_Int32_" data-uid="EchoHub.Server.Controllers.ChannelsController.GetChannels(System.Int32,System.Int32)"> <h3 id="EchoHub_Server_Controllers_ChannelsController_GetChannels_System_Int32_System_Int32_" data-uid="EchoHub.Server.Controllers.ChannelsController.GetChannels(System.Int32,System.Int32)">
@@ -317,6 +357,95 @@ public Task&lt;IActionResult&gt; GetChannels(int offset = 0, int limit = 50)</co
<a id="EchoHub_Server_Controllers_ChannelsController_RekeyChannel_" data-uid="EchoHub.Server.Controllers.ChannelsController.RekeyChannel*"></a>
<h3 id="EchoHub_Server_Controllers_ChannelsController_RekeyChannel_System_String_EchoHub_Core_DTOs_RekeyChannelRequest_" data-uid="EchoHub.Server.Controllers.ChannelsController.RekeyChannel(System.String,EchoHub.Core.DTOs.RekeyChannelRequest)">
RekeyChannel(string, RekeyChannelRequest)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Controllers/ChannelsController.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Changes an encrypted channel's passphrase by re-wrapping its room key.
The caller proves knowledge of the old passphrase via the old auth key;
history is never re-encrypted (the room content key does not change).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">[HttpPost(&quot;{channel}/rekey&quot;)]
public Task&lt;IActionResult&gt; RekeyChannel(string channel, RekeyChannelRequest request)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channel</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>request</code> <a class="xref" href="../core/EchoHub.Core.DTOs.RekeyChannelRequest.html">RekeyChannelRequest</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;<span class="xref">IActionResult</span>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Server_Controllers_ChannelsController_SendMessageWithAttachments_" data-uid="EchoHub.Server.Controllers.ChannelsController.SendMessageWithAttachments*"></a>
<h3 id="EchoHub_Server_Controllers_ChannelsController_SendMessageWithAttachments_System_String_System_String_" data-uid="EchoHub.Server.Controllers.ChannelsController.SendMessageWithAttachments(System.String,System.String)">
SendMessageWithAttachments(string, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Controllers/ChannelsController.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Sends one message carrying optional text (<code>content</code> form field) plus zero or more
file attachments (Discord-style). For non-encrypted channels the server sniffs each file's
kind and renders ASCII previews for images. For end-to-end encrypted channels the client
uploads ciphertext blobs and declares each file's kind (<code>kind</code>) and pre-rendered,
room-encrypted preview (<code>preview</code>), aligned by file order — the server never inspects them.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">[HttpPost(&quot;{channel}/messages&quot;)]
[EnableRateLimiting(&quot;upload&quot;)]
[RequestSizeLimit(1048576000)]
[RequestFormLimits(MultipartBodyLengthLimit = 1048576000)]
public Task&lt;IActionResult&gt; SendMessageWithAttachments(string channel, string? size = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channel</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>size</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;<span class="xref">IActionResult</span>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Server_Controllers_ChannelsController_SendUrl_" data-uid="EchoHub.Server.Controllers.ChannelsController.SendUrl*"></a> <a id="EchoHub_Server_Controllers_ChannelsController_SendUrl_" data-uid="EchoHub.Server.Controllers.ChannelsController.SendUrl*"></a>
<h3 id="EchoHub_Server_Controllers_ChannelsController_SendUrl_System_String_EchoHub_Core_DTOs_SendUrlRequest_System_String_" data-uid="EchoHub.Server.Controllers.ChannelsController.SendUrl(System.String,EchoHub.Core.DTOs.SendUrlRequest,System.String)"> <h3 id="EchoHub_Server_Controllers_ChannelsController_SendUrl_System_String_EchoHub_Core_DTOs_SendUrlRequest_System_String_" data-uid="EchoHub.Server.Controllers.ChannelsController.SendUrl(System.String,EchoHub.Core.DTOs.SendUrlRequest,System.String)">
@@ -398,48 +527,6 @@ public Task&lt;IActionResult&gt; UpdateTopic(string channel, UpdateTopicRequest
<a id="EchoHub_Server_Controllers_ChannelsController_Upload_" data-uid="EchoHub.Server.Controllers.ChannelsController.Upload*"></a>
<h3 id="EchoHub_Server_Controllers_ChannelsController_Upload_System_String_System_String_" data-uid="EchoHub.Server.Controllers.ChannelsController.Upload(System.String,System.String)">
Upload(string, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Controllers/ChannelsController.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">[HttpPost(&quot;{channel}/upload&quot;)]
[EnableRateLimiting(&quot;upload&quot;)]
[RequestSizeLimit(104857600)]
[RequestFormLimits(MultipartBodyLengthLimit = 104857600)]
public Task&lt;IActionResult&gt; Upload(string channel, string? size = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channel</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>size</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;<span class="xref">IActionResult</span>&gt;</dt>
<dd></dd>
</dl>
</article> </article>
@@ -159,8 +159,8 @@ public class ModerationController : ControllerBase</code></pre>
<a id="EchoHub_Server_Controllers_ModerationController__ctor_" data-uid="EchoHub.Server.Controllers.ModerationController.#ctor*"></a> <a id="EchoHub_Server_Controllers_ModerationController__ctor_" data-uid="EchoHub.Server.Controllers.ModerationController.#ctor*"></a>
<h3 id="EchoHub_Server_Controllers_ModerationController__ctor_EchoHub_Server_Data_EchoHubDbContext_EchoHub_Core_Contracts_IChatService_EchoHub_Server_Services_PresenceTracker_System_Collections_Generic_IEnumerable_EchoHub_Core_Contracts_IChatBroadcaster__" data-uid="EchoHub.Server.Controllers.ModerationController.#ctor(EchoHub.Server.Data.EchoHubDbContext,EchoHub.Core.Contracts.IChatService,EchoHub.Server.Services.PresenceTracker,System.Collections.Generic.IEnumerable{EchoHub.Core.Contracts.IChatBroadcaster})"> <h3 id="EchoHub_Server_Controllers_ModerationController__ctor_EchoHub_Server_Data_EchoHubDbContext_EchoHub_Core_Contracts_IChatService_EchoHub_Server_Services_PresenceTracker_EchoHub_Server_Services_FileStorageService_System_Collections_Generic_IEnumerable_EchoHub_Core_Contracts_IChatBroadcaster__" data-uid="EchoHub.Server.Controllers.ModerationController.#ctor(EchoHub.Server.Data.EchoHubDbContext,EchoHub.Core.Contracts.IChatService,EchoHub.Server.Services.PresenceTracker,EchoHub.Server.Services.FileStorageService,System.Collections.Generic.IEnumerable{EchoHub.Core.Contracts.IChatBroadcaster})">
ModerationController(EchoHubDbContext, IChatService, PresenceTracker, IEnumerable&lt;IChatBroadcaster&gt;) ModerationController(EchoHubDbContext, IChatService, PresenceTracker, FileStorageService, IEnumerable&lt;IChatBroadcaster&gt;)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Controllers/ModerationController.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Controllers/ModerationController.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -168,7 +168,7 @@ public class ModerationController : ControllerBase</code></pre>
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public ModerationController(EchoHubDbContext db, IChatService chatService, PresenceTracker presenceTracker, IEnumerable&lt;IChatBroadcaster&gt; broadcasters)</code></pre> <pre><code class="lang-csharp hljs">public ModerationController(EchoHubDbContext db, IChatService chatService, PresenceTracker presenceTracker, FileStorageService fileStorage, IEnumerable&lt;IChatBroadcaster&gt; broadcasters)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -179,6 +179,8 @@ public class ModerationController : ControllerBase</code></pre>
<dd></dd> <dd></dd>
<dt><code>presenceTracker</code> <a class="xref" href="EchoHub.Server.Services.PresenceTracker.html">PresenceTracker</a></dt> <dt><code>presenceTracker</code> <a class="xref" href="EchoHub.Server.Services.PresenceTracker.html">PresenceTracker</a></dt>
<dd></dd> <dd></dd>
<dt><code>fileStorage</code> <a class="xref" href="EchoHub.Server.Services.FileStorageService.html">FileStorageService</a></dt>
<dd></dd>
<dt><code>broadcasters</code> <span class="xref">IEnumerable</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChatBroadcaster.cs">IChatBroadcaster</a>&gt;</dt> <dt><code>broadcasters</code> <span class="xref">IEnumerable</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Contracts/IChatBroadcaster.cs">IChatBroadcaster</a>&gt;</dt>
<dd></dd> <dd></dd>
</dl> </dl>
@@ -159,7 +159,7 @@ public class UsersController : ControllerBase</code></pre>
<a id="EchoHub_Server_Controllers_UsersController__ctor_" data-uid="EchoHub.Server.Controllers.UsersController.#ctor*"></a> <a id="EchoHub_Server_Controllers_UsersController__ctor_" data-uid="EchoHub.Server.Controllers.UsersController.#ctor*"></a>
<h3 id="EchoHub_Server_Controllers_UsersController__ctor_EchoHub_Core_Contracts_IUserService_EchoHub_Server_Services_ImageToAsciiService_" data-uid="EchoHub.Server.Controllers.UsersController.#ctor(EchoHub.Core.Contracts.IUserService,EchoHub.Server.Services.ImageToAsciiService)"> <h3 id="EchoHub_Server_Controllers_UsersController__ctor_EchoHub_Core_Contracts_IUserService_EchoHub_Core_Services_ImageToAsciiService_" data-uid="EchoHub.Server.Controllers.UsersController.#ctor(EchoHub.Core.Contracts.IUserService,EchoHub.Core.Services.ImageToAsciiService)">
UsersController(IUserService, ImageToAsciiService) UsersController(IUserService, ImageToAsciiService)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Controllers/UsersController.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Controllers/UsersController.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -175,7 +175,7 @@ public class UsersController : ControllerBase</code></pre>
<dl class="parameters"> <dl class="parameters">
<dt><code>userService</code> <a class="xref" href="../core/EchoHub.Core.Contracts.IUserService.html">IUserService</a></dt> <dt><code>userService</code> <a class="xref" href="../core/EchoHub.Core.Contracts.IUserService.html">IUserService</a></dt>
<dd></dd> <dd></dd>
<dt><code>asciiService</code> <a class="xref" href="EchoHub.Server.Services.ImageToAsciiService.html">ImageToAsciiService</a></dt> <dt><code>asciiService</code> <a class="xref" href="../core/EchoHub.Core.Services.ImageToAsciiService.html">ImageToAsciiService</a></dt>
<dd></dd> <dd></dd>
</dl> </dl>
@@ -195,6 +195,37 @@ Class EchoHubDbContext <a class="header-action link-secondary" title="View sour
</h2> </h2>
<a id="EchoHub_Server_Data_EchoHubDbContext_Attachments_" data-uid="EchoHub.Server.Data.EchoHubDbContext.Attachments*"></a>
<h3 id="EchoHub_Server_Data_EchoHubDbContext_Attachments" data-uid="EchoHub.Server.Data.EchoHubDbContext.Attachments">
Attachments
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/EchoHubDbContext.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public DbSet&lt;Attachment&gt; Attachments { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">DbSet</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/Attachment.cs">Attachment</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Server_Data_EchoHubDbContext_ChannelMemberships_" data-uid="EchoHub.Server.Data.EchoHubDbContext.ChannelMemberships*"></a> <a id="EchoHub_Server_Data_EchoHubDbContext_ChannelMemberships_" data-uid="EchoHub.Server.Data.EchoHubDbContext.ChannelMemberships*"></a>
<h3 id="EchoHub_Server_Data_EchoHubDbContext_ChannelMemberships" data-uid="EchoHub.Server.Data.EchoHubDbContext.ChannelMemberships"> <h3 id="EchoHub_Server_Data_EchoHubDbContext_ChannelMemberships" data-uid="EchoHub.Server.Data.EchoHubDbContext.ChannelMemberships">
@@ -0,0 +1,306 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class AddChannelEncryptionEnvelope | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class AddChannelEncryptionEnvelope | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Server_Data_Migrations_AddChannelEncryptionEnvelope.md&amp;value=---%0Auid%3A%20EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope">
<h1 id="EchoHub_Server_Data_Migrations_AddChannelEncryptionEnvelope" data-uid="EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope" class="text-break">
Class AddChannelEncryptionEnvelope <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260716012917_AddChannelEncryptionEnvelope.Designer.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Server.html">Server</a>.<a class="xref" href="EchoHub.Server.Data.html">Data</a>.<a class="xref" href="EchoHub.Server.Data.Migrations.html">Migrations</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Server.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">[DbContext(typeof(EchoHubDbContext))]
[Migration(&quot;20260716012917_AddChannelEncryptionEnvelope&quot;)]
public class AddChannelEncryptionEnvelope : Migration</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">Migration</span></div>
<div><span class="xref">AddChannelEncryptionEnvelope</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Server_Data_Migrations_AddChannelEncryptionEnvelope__ctor_" data-uid="EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope.#ctor*"></a>
<h3 id="EchoHub_Server_Data_Migrations_AddChannelEncryptionEnvelope__ctor" data-uid="EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope.#ctor">
AddChannelEncryptionEnvelope()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260716012917_AddChannelEncryptionEnvelope.Designer.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public AddChannelEncryptionEnvelope()</code></pre>
</div>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Server_Data_Migrations_AddChannelEncryptionEnvelope_BuildTargetModel_" data-uid="EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope.BuildTargetModel*"></a>
<h3 id="EchoHub_Server_Data_Migrations_AddChannelEncryptionEnvelope_BuildTargetModel_Microsoft_EntityFrameworkCore_ModelBuilder_" data-uid="EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope.BuildTargetModel(Microsoft.EntityFrameworkCore.ModelBuilder)">
BuildTargetModel(ModelBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260716012917_AddChannelEncryptionEnvelope.Designer.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected override void BuildTargetModel(ModelBuilder modelBuilder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>modelBuilder</code> <span class="xref">ModelBuilder</span></dt>
<dd></dd>
</dl>
<a id="EchoHub_Server_Data_Migrations_AddChannelEncryptionEnvelope_Down_" data-uid="EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope.Down*"></a>
<h3 id="EchoHub_Server_Data_Migrations_AddChannelEncryptionEnvelope_Down_Microsoft_EntityFrameworkCore_Migrations_MigrationBuilder_" data-uid="EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope.Down(Microsoft.EntityFrameworkCore.Migrations.MigrationBuilder)">
Down(MigrationBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260716012917_AddChannelEncryptionEnvelope.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected override void Down(MigrationBuilder migrationBuilder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>migrationBuilder</code> <span class="xref">MigrationBuilder</span></dt>
<dd></dd>
</dl>
<a id="EchoHub_Server_Data_Migrations_AddChannelEncryptionEnvelope_Up_" data-uid="EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope.Up*"></a>
<h3 id="EchoHub_Server_Data_Migrations_AddChannelEncryptionEnvelope_Up_Microsoft_EntityFrameworkCore_Migrations_MigrationBuilder_" data-uid="EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope.Up(Microsoft.EntityFrameworkCore.Migrations.MigrationBuilder)">
Up(MigrationBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260716012917_AddChannelEncryptionEnvelope.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected override void Up(MigrationBuilder migrationBuilder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>migrationBuilder</code> <span class="xref">MigrationBuilder</span></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260716012917_AddChannelEncryptionEnvelope.Designer.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,306 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class AddChannelPasswordHash | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class AddChannelPasswordHash | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Server_Data_Migrations_AddChannelPasswordHash.md&amp;value=---%0Auid%3A%20EchoHub.Server.Data.Migrations.AddChannelPasswordHash%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Server.Data.Migrations.AddChannelPasswordHash">
<h1 id="EchoHub_Server_Data_Migrations_AddChannelPasswordHash" data-uid="EchoHub.Server.Data.Migrations.AddChannelPasswordHash" class="text-break">
Class AddChannelPasswordHash <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260715232856_AddChannelPasswordHash.Designer.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Server.html">Server</a>.<a class="xref" href="EchoHub.Server.Data.html">Data</a>.<a class="xref" href="EchoHub.Server.Data.Migrations.html">Migrations</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Server.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">[DbContext(typeof(EchoHubDbContext))]
[Migration(&quot;20260715232856_AddChannelPasswordHash&quot;)]
public class AddChannelPasswordHash : Migration</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">Migration</span></div>
<div><span class="xref">AddChannelPasswordHash</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Server_Data_Migrations_AddChannelPasswordHash__ctor_" data-uid="EchoHub.Server.Data.Migrations.AddChannelPasswordHash.#ctor*"></a>
<h3 id="EchoHub_Server_Data_Migrations_AddChannelPasswordHash__ctor" data-uid="EchoHub.Server.Data.Migrations.AddChannelPasswordHash.#ctor">
AddChannelPasswordHash()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260715232856_AddChannelPasswordHash.Designer.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public AddChannelPasswordHash()</code></pre>
</div>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Server_Data_Migrations_AddChannelPasswordHash_BuildTargetModel_" data-uid="EchoHub.Server.Data.Migrations.AddChannelPasswordHash.BuildTargetModel*"></a>
<h3 id="EchoHub_Server_Data_Migrations_AddChannelPasswordHash_BuildTargetModel_Microsoft_EntityFrameworkCore_ModelBuilder_" data-uid="EchoHub.Server.Data.Migrations.AddChannelPasswordHash.BuildTargetModel(Microsoft.EntityFrameworkCore.ModelBuilder)">
BuildTargetModel(ModelBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260715232856_AddChannelPasswordHash.Designer.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected override void BuildTargetModel(ModelBuilder modelBuilder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>modelBuilder</code> <span class="xref">ModelBuilder</span></dt>
<dd></dd>
</dl>
<a id="EchoHub_Server_Data_Migrations_AddChannelPasswordHash_Down_" data-uid="EchoHub.Server.Data.Migrations.AddChannelPasswordHash.Down*"></a>
<h3 id="EchoHub_Server_Data_Migrations_AddChannelPasswordHash_Down_Microsoft_EntityFrameworkCore_Migrations_MigrationBuilder_" data-uid="EchoHub.Server.Data.Migrations.AddChannelPasswordHash.Down(Microsoft.EntityFrameworkCore.Migrations.MigrationBuilder)">
Down(MigrationBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260715232856_AddChannelPasswordHash.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected override void Down(MigrationBuilder migrationBuilder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>migrationBuilder</code> <span class="xref">MigrationBuilder</span></dt>
<dd></dd>
</dl>
<a id="EchoHub_Server_Data_Migrations_AddChannelPasswordHash_Up_" data-uid="EchoHub.Server.Data.Migrations.AddChannelPasswordHash.Up*"></a>
<h3 id="EchoHub_Server_Data_Migrations_AddChannelPasswordHash_Up_Microsoft_EntityFrameworkCore_Migrations_MigrationBuilder_" data-uid="EchoHub.Server.Data.Migrations.AddChannelPasswordHash.Up(Microsoft.EntityFrameworkCore.Migrations.MigrationBuilder)">
Up(MigrationBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260715232856_AddChannelPasswordHash.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected override void Up(MigrationBuilder migrationBuilder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>migrationBuilder</code> <span class="xref">MigrationBuilder</span></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260715232856_AddChannelPasswordHash.Designer.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,306 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class AddMessageAttachments | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class AddMessageAttachments | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Server_Data_Migrations_AddMessageAttachments.md&amp;value=---%0Auid%3A%20EchoHub.Server.Data.Migrations.AddMessageAttachments%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Server.Data.Migrations.AddMessageAttachments">
<h1 id="EchoHub_Server_Data_Migrations_AddMessageAttachments" data-uid="EchoHub.Server.Data.Migrations.AddMessageAttachments" class="text-break">
Class AddMessageAttachments <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260716020211_AddMessageAttachments.Designer.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Server.html">Server</a>.<a class="xref" href="EchoHub.Server.Data.html">Data</a>.<a class="xref" href="EchoHub.Server.Data.Migrations.html">Migrations</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Server.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">[DbContext(typeof(EchoHubDbContext))]
[Migration(&quot;20260716020211_AddMessageAttachments&quot;)]
public class AddMessageAttachments : Migration</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">Migration</span></div>
<div><span class="xref">AddMessageAttachments</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Server_Data_Migrations_AddMessageAttachments__ctor_" data-uid="EchoHub.Server.Data.Migrations.AddMessageAttachments.#ctor*"></a>
<h3 id="EchoHub_Server_Data_Migrations_AddMessageAttachments__ctor" data-uid="EchoHub.Server.Data.Migrations.AddMessageAttachments.#ctor">
AddMessageAttachments()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260716020211_AddMessageAttachments.Designer.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public AddMessageAttachments()</code></pre>
</div>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Server_Data_Migrations_AddMessageAttachments_BuildTargetModel_" data-uid="EchoHub.Server.Data.Migrations.AddMessageAttachments.BuildTargetModel*"></a>
<h3 id="EchoHub_Server_Data_Migrations_AddMessageAttachments_BuildTargetModel_Microsoft_EntityFrameworkCore_ModelBuilder_" data-uid="EchoHub.Server.Data.Migrations.AddMessageAttachments.BuildTargetModel(Microsoft.EntityFrameworkCore.ModelBuilder)">
BuildTargetModel(ModelBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260716020211_AddMessageAttachments.Designer.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected override void BuildTargetModel(ModelBuilder modelBuilder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>modelBuilder</code> <span class="xref">ModelBuilder</span></dt>
<dd></dd>
</dl>
<a id="EchoHub_Server_Data_Migrations_AddMessageAttachments_Down_" data-uid="EchoHub.Server.Data.Migrations.AddMessageAttachments.Down*"></a>
<h3 id="EchoHub_Server_Data_Migrations_AddMessageAttachments_Down_Microsoft_EntityFrameworkCore_Migrations_MigrationBuilder_" data-uid="EchoHub.Server.Data.Migrations.AddMessageAttachments.Down(Microsoft.EntityFrameworkCore.Migrations.MigrationBuilder)">
Down(MigrationBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260716020211_AddMessageAttachments.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected override void Down(MigrationBuilder migrationBuilder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>migrationBuilder</code> <span class="xref">MigrationBuilder</span></dt>
<dd></dd>
</dl>
<a id="EchoHub_Server_Data_Migrations_AddMessageAttachments_Up_" data-uid="EchoHub.Server.Data.Migrations.AddMessageAttachments.Up*"></a>
<h3 id="EchoHub_Server_Data_Migrations_AddMessageAttachments_Up_Microsoft_EntityFrameworkCore_Migrations_MigrationBuilder_" data-uid="EchoHub.Server.Data.Migrations.AddMessageAttachments.Up(Microsoft.EntityFrameworkCore.Migrations.MigrationBuilder)">
Up(MigrationBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260716020211_AddMessageAttachments.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected override void Up(MigrationBuilder migrationBuilder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>migrationBuilder</code> <span class="xref">MigrationBuilder</span></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Data/Migrations/20260716020211_AddMessageAttachments.Designer.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -98,6 +98,10 @@ Classes
<dt><a class="xref" href="EchoHub.Server.Data.Migrations.AddAttachmentFileSize.html">AddAttachmentFileSize</a></dt> <dt><a class="xref" href="EchoHub.Server.Data.Migrations.AddAttachmentFileSize.html">AddAttachmentFileSize</a></dt>
<dd></dd> <dd></dd>
</dl> </dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope.html">AddChannelEncryptionEnvelope</a></dt>
<dd></dd>
</dl>
<dl class="jumplist"> <dl class="jumplist">
<dt><a class="xref" href="EchoHub.Server.Data.Migrations.AddChannelIsPublic.html">AddChannelIsPublic</a></dt> <dt><a class="xref" href="EchoHub.Server.Data.Migrations.AddChannelIsPublic.html">AddChannelIsPublic</a></dt>
<dd></dd> <dd></dd>
@@ -106,10 +110,18 @@ Classes
<dt><a class="xref" href="EchoHub.Server.Data.Migrations.AddChannelMembership.html">AddChannelMembership</a></dt> <dt><a class="xref" href="EchoHub.Server.Data.Migrations.AddChannelMembership.html">AddChannelMembership</a></dt>
<dd></dd> <dd></dd>
</dl> </dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Server.Data.Migrations.AddChannelPasswordHash.html">AddChannelPasswordHash</a></dt>
<dd></dd>
</dl>
<dl class="jumplist"> <dl class="jumplist">
<dt><a class="xref" href="EchoHub.Server.Data.Migrations.AddEncryptionSupport.html">AddEncryptionSupport</a></dt> <dt><a class="xref" href="EchoHub.Server.Data.Migrations.AddEncryptionSupport.html">AddEncryptionSupport</a></dt>
<dd></dd> <dd></dd>
</dl> </dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Server.Data.Migrations.AddMessageAttachments.html">AddMessageAttachments</a></dt>
<dd></dd>
</dl>
<dl class="jumplist"> <dl class="jumplist">
<dt><a class="xref" href="EchoHub.Server.Data.Migrations.AddMessageEmbed.html">AddMessageEmbed</a></dt> <dt><a class="xref" href="EchoHub.Server.Data.Migrations.AddMessageEmbed.html">AddMessageEmbed</a></dt>
<dd></dd> <dd></dd>
+10 -6
View File
@@ -163,8 +163,8 @@ public class ChatHub : Hub&lt;IEchoHubClient&gt;, IDisposable</code></pre>
<a id="EchoHub_Server_Hubs_ChatHub__ctor_" data-uid="EchoHub.Server.Hubs.ChatHub.#ctor*"></a> <a id="EchoHub_Server_Hubs_ChatHub__ctor_" data-uid="EchoHub.Server.Hubs.ChatHub.#ctor*"></a>
<h3 id="EchoHub_Server_Hubs_ChatHub__ctor_EchoHub_Core_Contracts_IChatService_Microsoft_Extensions_Logging_ILogger_EchoHub_Server_Hubs_ChatHub__" data-uid="EchoHub.Server.Hubs.ChatHub.#ctor(EchoHub.Core.Contracts.IChatService,Microsoft.Extensions.Logging.ILogger{EchoHub.Server.Hubs.ChatHub})"> <h3 id="EchoHub_Server_Hubs_ChatHub__ctor_EchoHub_Core_Contracts_IChatService_EchoHub_Core_Contracts_IChannelService_Microsoft_Extensions_Logging_ILogger_EchoHub_Server_Hubs_ChatHub__" data-uid="EchoHub.Server.Hubs.ChatHub.#ctor(EchoHub.Core.Contracts.IChatService,EchoHub.Core.Contracts.IChannelService,Microsoft.Extensions.Logging.ILogger{EchoHub.Server.Hubs.ChatHub})">
ChatHub(IChatService, ILogger&lt;ChatHub&gt;) ChatHub(IChatService, IChannelService, ILogger&lt;ChatHub&gt;)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Hubs/ChatHub.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Hubs/ChatHub.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -172,13 +172,15 @@ public class ChatHub : Hub&lt;IEchoHubClient&gt;, IDisposable</code></pre>
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public ChatHub(IChatService chatService, ILogger&lt;ChatHub&gt; logger)</code></pre> <pre><code class="lang-csharp hljs">public ChatHub(IChatService chatService, IChannelService channelService, ILogger&lt;ChatHub&gt; logger)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
<dl class="parameters"> <dl class="parameters">
<dt><code>chatService</code> <a class="xref" href="../core/EchoHub.Core.Contracts.IChatService.html">IChatService</a></dt> <dt><code>chatService</code> <a class="xref" href="../core/EchoHub.Core.Contracts.IChatService.html">IChatService</a></dt>
<dd></dd> <dd></dd>
<dt><code>channelService</code> <a class="xref" href="../core/EchoHub.Core.Contracts.IChannelService.html">IChannelService</a></dt>
<dd></dd>
<dt><code>logger</code> <span class="xref">ILogger</span>&lt;<a class="xref" href="EchoHub.Server.Hubs.ChatHub.html">ChatHub</a>&gt;</dt> <dt><code>logger</code> <span class="xref">ILogger</span>&lt;<a class="xref" href="EchoHub.Server.Hubs.ChatHub.html">ChatHub</a>&gt;</dt>
<dd></dd> <dd></dd>
</dl> </dl>
@@ -276,8 +278,8 @@ public class ChatHub : Hub&lt;IEchoHubClient&gt;, IDisposable</code></pre>
<a id="EchoHub_Server_Hubs_ChatHub_JoinChannel_" data-uid="EchoHub.Server.Hubs.ChatHub.JoinChannel*"></a> <a id="EchoHub_Server_Hubs_ChatHub_JoinChannel_" data-uid="EchoHub.Server.Hubs.ChatHub.JoinChannel*"></a>
<h3 id="EchoHub_Server_Hubs_ChatHub_JoinChannel_System_String_" data-uid="EchoHub.Server.Hubs.ChatHub.JoinChannel(System.String)"> <h3 id="EchoHub_Server_Hubs_ChatHub_JoinChannel_System_String_System_String_" data-uid="EchoHub.Server.Hubs.ChatHub.JoinChannel(System.String,System.String)">
JoinChannel(string) JoinChannel(string, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Hubs/ChatHub.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Hubs/ChatHub.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -285,13 +287,15 @@ public class ChatHub : Hub&lt;IEchoHubClient&gt;, IDisposable</code></pre>
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task&lt;JoinChannelResult&gt; JoinChannel(string channelName)</code></pre> <pre><code class="lang-csharp hljs">public Task&lt;JoinChannelResult&gt; JoinChannel(string channelName, string? password = null)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
<dl class="parameters"> <dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt> <dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd> <dd></dd>
<dt><code>password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl> </dl>
<h4 class="section">Returns</h4> <h4 class="section">Returns</h4>
@@ -199,8 +199,8 @@ Class ChannelService <a class="header-action link-secondary" title="View source
<a id="EchoHub_Server_Services_ChannelService_CreateChannelAsync_" data-uid="EchoHub.Server.Services.ChannelService.CreateChannelAsync*"></a> <a id="EchoHub_Server_Services_ChannelService_CreateChannelAsync_" data-uid="EchoHub.Server.Services.ChannelService.CreateChannelAsync*"></a>
<h3 id="EchoHub_Server_Services_ChannelService_CreateChannelAsync_System_Guid_System_String_System_String_System_Boolean_" data-uid="EchoHub.Server.Services.ChannelService.CreateChannelAsync(System.Guid,System.String,System.String,System.Boolean)"> <h3 id="EchoHub_Server_Services_ChannelService_CreateChannelAsync_System_Guid_System_String_System_String_System_Boolean_System_String_System_String_System_String_" data-uid="EchoHub.Server.Services.ChannelService.CreateChannelAsync(System.Guid,System.String,System.String,System.Boolean,System.String,System.String,System.String)">
CreateChannelAsync(Guid, string, string?, bool) CreateChannelAsync(Guid, string, string?, bool, string?, string?, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ChannelService.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ChannelService.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -208,7 +208,7 @@ Class ChannelService <a class="header-action link-secondary" title="View source
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task&lt;ChannelOperationResult&gt; CreateChannelAsync(Guid creatorUserId, string name, string? topic, bool isPublic)</code></pre> <pre><code class="lang-csharp hljs">public Task&lt;ChannelOperationResult&gt; CreateChannelAsync(Guid creatorUserId, string name, string? topic, bool isPublic, string? password = null, string? encryptionSalt = null, string? wrappedRoomKey = null)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -221,6 +221,12 @@ Class ChannelService <a class="header-action link-secondary" title="View source
<dd></dd> <dd></dd>
<dt><code>isPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt> <dt><code>isPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd> <dd></dd>
<dt><code>password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>encryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>wrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl> </dl>
<h4 class="section">Returns</h4> <h4 class="section">Returns</h4>
@@ -279,8 +285,8 @@ Class ChannelService <a class="header-action link-secondary" title="View source
<a id="EchoHub_Server_Services_ChannelService_EnsureChannelMembershipAsync_" data-uid="EchoHub.Server.Services.ChannelService.EnsureChannelMembershipAsync*"></a> <a id="EchoHub_Server_Services_ChannelService_EnsureChannelMembershipAsync_" data-uid="EchoHub.Server.Services.ChannelService.EnsureChannelMembershipAsync*"></a>
<h3 id="EchoHub_Server_Services_ChannelService_EnsureChannelMembershipAsync_System_Guid_System_String_" data-uid="EchoHub.Server.Services.ChannelService.EnsureChannelMembershipAsync(System.Guid,System.String)"> <h3 id="EchoHub_Server_Services_ChannelService_EnsureChannelMembershipAsync_System_Guid_System_String_System_String_" data-uid="EchoHub.Server.Services.ChannelService.EnsureChannelMembershipAsync(System.Guid,System.String,System.String)">
EnsureChannelMembershipAsync(Guid, string) EnsureChannelMembershipAsync(Guid, string, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ChannelService.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ChannelService.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -288,7 +294,7 @@ Class ChannelService <a class="header-action link-secondary" title="View source
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task&lt;(bool Success, string? Error)&gt; EnsureChannelMembershipAsync(Guid userId, string channelName)</code></pre> <pre><code class="lang-csharp hljs">public Task&lt;(bool Success, string? Error, bool PasswordRequired)&gt; EnsureChannelMembershipAsync(Guid userId, string channelName, string? password = null)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -297,11 +303,13 @@ Class ChannelService <a class="header-action link-secondary" title="View source
<dd></dd> <dd></dd>
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt> <dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd> <dd></dd>
<dt><code>password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl> </dl>
<h4 class="section">Returns</h4> <h4 class="section">Returns</h4>
<dl class="parameters"> <dl class="parameters">
<dt><span class="xref">Task</span>&lt;(<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.boolean,system.string-.success">Success</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.boolean,system.string-.error">Error</a>)&gt;</dt> <dt><span class="xref">Task</span>&lt;(<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.boolean,system.string,system.boolean-.success">Success</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.boolean,system.string,system.boolean-.error">Error</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.boolean,system.string,system.boolean-.passwordrequired">PasswordRequired</a>)&gt;</dt>
<dd></dd> <dd></dd>
</dl> </dl>
@@ -351,6 +359,78 @@ Class ChannelService <a class="header-action link-secondary" title="View source
<a id="EchoHub_Server_Services_ChannelService_GetChannelCryptoAsync_" data-uid="EchoHub.Server.Services.ChannelService.GetChannelCryptoAsync*"></a>
<h3 id="EchoHub_Server_Services_ChannelService_GetChannelCryptoAsync_System_String_" data-uid="EchoHub.Server.Services.ChannelService.GetChannelCryptoAsync(System.String)">
GetChannelCryptoAsync(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ChannelService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task&lt;ChannelCryptoDto?&gt; GetChannelCryptoAsync(string channelName)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs">ChannelCryptoDto</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Server_Services_ChannelService_GetChannelKeyEnvelopeAsync_" data-uid="EchoHub.Server.Services.ChannelService.GetChannelKeyEnvelopeAsync*"></a>
<h3 id="EchoHub_Server_Services_ChannelService_GetChannelKeyEnvelopeAsync_System_String_" data-uid="EchoHub.Server.Services.ChannelService.GetChannelKeyEnvelopeAsync(System.String)">
GetChannelKeyEnvelopeAsync(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ChannelService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task&lt;(string? EncryptionSalt, string? WrappedRoomKey)&gt; GetChannelKeyEnvelopeAsync(string channelName)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;(<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.string,system.string-.encryptionsalt">EncryptionSalt</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.string,system.string-.wrappedroomkey">WrappedRoomKey</a>)&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Server_Services_ChannelService_GetChannelListAsync_" data-uid="EchoHub.Server.Services.ChannelService.GetChannelListAsync*"></a> <a id="EchoHub_Server_Services_ChannelService_GetChannelListAsync_" data-uid="EchoHub.Server.Services.ChannelService.GetChannelListAsync*"></a>
<h3 id="EchoHub_Server_Services_ChannelService_GetChannelListAsync" data-uid="EchoHub.Server.Services.ChannelService.GetChannelListAsync"> <h3 id="EchoHub_Server_Services_ChannelService_GetChannelListAsync" data-uid="EchoHub.Server.Services.ChannelService.GetChannelListAsync">
@@ -458,6 +538,99 @@ Class ChannelService <a class="header-action link-secondary" title="View source
<a id="EchoHub_Server_Services_ChannelService_RekeyChannelAsync_" data-uid="EchoHub.Server.Services.ChannelService.RekeyChannelAsync*"></a>
<h3 id="EchoHub_Server_Services_ChannelService_RekeyChannelAsync_System_Guid_System_String_System_String_System_String_System_String_System_String_" data-uid="EchoHub.Server.Services.ChannelService.RekeyChannelAsync(System.Guid,System.String,System.String,System.String,System.String,System.String)">
RekeyChannelAsync(Guid, string, string, string, string, string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ChannelService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Changes an encrypted channel's passphrase by swapping the join-gate hash and the
wrapped room key. The room content key itself never changes, so history stays
readable — the client re-wraps it under the new passphrase-derived key.
Creator only: admins cannot rekey a room whose passphrase they don't know.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task&lt;ChannelOperationResult&gt; RekeyChannelAsync(Guid callerUserId, string channelName, string oldPassword, string newPassword, string newEncryptionSalt, string newWrappedRoomKey)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>callerUserId</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.guid">Guid</a></dt>
<dd></dd>
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>oldPassword</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>newPassword</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>newEncryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>newWrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/CommonDtos.cs">ChannelOperationResult</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Server_Services_ChannelService_SetChannelPasswordAsync_" data-uid="EchoHub.Server.Services.ChannelService.SetChannelPasswordAsync*"></a>
<h3 id="EchoHub_Server_Services_ChannelService_SetChannelPasswordAsync_System_Guid_System_String_System_String_" data-uid="EchoHub.Server.Services.ChannelService.SetChannelPasswordAsync(System.Guid,System.String,System.String)">
SetChannelPasswordAsync(Guid, string, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ChannelService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Sets, changes, or clears (null) a channel's join password. Creator or admin only.
Not available on end-to-end encrypted channels — those change passphrase via
<a class="xref" href="EchoHub.Server.Services.ChannelService.html#EchoHub_Server_Services_ChannelService_RekeyChannelAsync_System_Guid_System_String_System_String_System_String_System_String_System_String_">RekeyChannelAsync(Guid, string, string, string, string, string)</a> so the room key envelope stays consistent.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task&lt;ChannelOperationResult&gt; SetChannelPasswordAsync(Guid callerUserId, string channelName, string? password)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>callerUserId</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.guid">Guid</a></dt>
<dd></dd>
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/CommonDtos.cs">ChannelOperationResult</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Server_Services_ChannelService_UpdateTopicAsync_" data-uid="EchoHub.Server.Services.ChannelService.UpdateTopicAsync*"></a> <a id="EchoHub_Server_Services_ChannelService_UpdateTopicAsync_" data-uid="EchoHub.Server.Services.ChannelService.UpdateTopicAsync*"></a>
<h3 id="EchoHub_Server_Services_ChannelService_UpdateTopicAsync_System_Guid_System_String_System_String_" data-uid="EchoHub.Server.Services.ChannelService.UpdateTopicAsync(System.Guid,System.String,System.String)"> <h3 id="EchoHub_Server_Services_ChannelService_UpdateTopicAsync_System_Guid_System_String_System_String_" data-uid="EchoHub.Server.Services.ChannelService.UpdateTopicAsync(System.Guid,System.String,System.String)">
@@ -160,8 +160,8 @@ Class ChatService <a class="header-action link-secondary" title="View source" h
<a id="EchoHub_Server_Services_ChatService__ctor_" data-uid="EchoHub.Server.Services.ChatService.#ctor*"></a> <a id="EchoHub_Server_Services_ChatService__ctor_" data-uid="EchoHub.Server.Services.ChatService.#ctor*"></a>
<h3 id="EchoHub_Server_Services_ChatService__ctor_Microsoft_Extensions_DependencyInjection_IServiceScopeFactory_EchoHub_Server_Services_PresenceTracker_System_Collections_Generic_IEnumerable_EchoHub_Core_Contracts_IChatBroadcaster__EchoHub_Server_Services_LinkEmbedService_EchoHub_Core_Contracts_IMessageEncryptionService_EchoHub_Core_Contracts_IChannelService_Microsoft_Extensions_Logging_ILogger_EchoHub_Server_Services_ChatService__" data-uid="EchoHub.Server.Services.ChatService.#ctor(Microsoft.Extensions.DependencyInjection.IServiceScopeFactory,EchoHub.Server.Services.PresenceTracker,System.Collections.Generic.IEnumerable{EchoHub.Core.Contracts.IChatBroadcaster},EchoHub.Server.Services.LinkEmbedService,EchoHub.Core.Contracts.IMessageEncryptionService,EchoHub.Core.Contracts.IChannelService,Microsoft.Extensions.Logging.ILogger{EchoHub.Server.Services.ChatService})"> <h3 id="EchoHub_Server_Services_ChatService__ctor_Microsoft_Extensions_DependencyInjection_IServiceScopeFactory_EchoHub_Server_Services_PresenceTracker_System_Collections_Generic_IEnumerable_EchoHub_Core_Contracts_IChatBroadcaster__EchoHub_Server_Services_LinkEmbedService_EchoHub_Core_Contracts_IMessageEncryptionService_EchoHub_Core_Contracts_IChannelService_EchoHub_Server_Services_FileStorageService_Microsoft_Extensions_Logging_ILogger_EchoHub_Server_Services_ChatService__" data-uid="EchoHub.Server.Services.ChatService.#ctor(Microsoft.Extensions.DependencyInjection.IServiceScopeFactory,EchoHub.Server.Services.PresenceTracker,System.Collections.Generic.IEnumerable{EchoHub.Core.Contracts.IChatBroadcaster},EchoHub.Server.Services.LinkEmbedService,EchoHub.Core.Contracts.IMessageEncryptionService,EchoHub.Core.Contracts.IChannelService,EchoHub.Server.Services.FileStorageService,Microsoft.Extensions.Logging.ILogger{EchoHub.Server.Services.ChatService})">
ChatService(IServiceScopeFactory, PresenceTracker, IEnumerable&lt;IChatBroadcaster&gt;, LinkEmbedService, IMessageEncryptionService, IChannelService, ILogger&lt;ChatService&gt;) ChatService(IServiceScopeFactory, PresenceTracker, IEnumerable&lt;IChatBroadcaster&gt;, LinkEmbedService, IMessageEncryptionService, IChannelService, FileStorageService, ILogger&lt;ChatService&gt;)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ChatService.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ChatService.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -169,7 +169,7 @@ Class ChatService <a class="header-action link-secondary" title="View source" h
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public ChatService(IServiceScopeFactory scopeFactory, PresenceTracker presenceTracker, IEnumerable&lt;IChatBroadcaster&gt; broadcasters, LinkEmbedService embedService, IMessageEncryptionService encryption, IChannelService channelService, ILogger&lt;ChatService&gt; logger)</code></pre> <pre><code class="lang-csharp hljs">public ChatService(IServiceScopeFactory scopeFactory, PresenceTracker presenceTracker, IEnumerable&lt;IChatBroadcaster&gt; broadcasters, LinkEmbedService embedService, IMessageEncryptionService encryption, IChannelService channelService, FileStorageService fileStorage, ILogger&lt;ChatService&gt; logger)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -186,6 +186,8 @@ Class ChatService <a class="header-action link-secondary" title="View source" h
<dd></dd> <dd></dd>
<dt><code>channelService</code> <a class="xref" href="../core/EchoHub.Core.Contracts.IChannelService.html">IChannelService</a></dt> <dt><code>channelService</code> <a class="xref" href="../core/EchoHub.Core.Contracts.IChannelService.html">IChannelService</a></dt>
<dd></dd> <dd></dd>
<dt><code>fileStorage</code> <a class="xref" href="EchoHub.Server.Services.FileStorageService.html">FileStorageService</a></dt>
<dd></dd>
<dt><code>logger</code> <span class="xref">ILogger</span>&lt;<a class="xref" href="EchoHub.Server.Services.ChatService.html">ChatService</a>&gt;</dt> <dt><code>logger</code> <span class="xref">ILogger</span>&lt;<a class="xref" href="EchoHub.Server.Services.ChatService.html">ChatService</a>&gt;</dt>
<dd></dd> <dd></dd>
</dl> </dl>
@@ -395,8 +397,8 @@ Class ChatService <a class="header-action link-secondary" title="View source" h
<a id="EchoHub_Server_Services_ChatService_JoinChannelAsync_" data-uid="EchoHub.Server.Services.ChatService.JoinChannelAsync*"></a> <a id="EchoHub_Server_Services_ChatService_JoinChannelAsync_" data-uid="EchoHub.Server.Services.ChatService.JoinChannelAsync*"></a>
<h3 id="EchoHub_Server_Services_ChatService_JoinChannelAsync_System_String_System_Guid_System_String_System_String_" data-uid="EchoHub.Server.Services.ChatService.JoinChannelAsync(System.String,System.Guid,System.String,System.String)"> <h3 id="EchoHub_Server_Services_ChatService_JoinChannelAsync_System_String_System_Guid_System_String_System_String_System_String_" data-uid="EchoHub.Server.Services.ChatService.JoinChannelAsync(System.String,System.Guid,System.String,System.String,System.String)">
JoinChannelAsync(string, Guid, string, string) JoinChannelAsync(string, Guid, string, string, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ChatService.cs"><i class="bi bi-code-slash"></i></a> <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/ChatService.cs"><i class="bi bi-code-slash"></i></a>
</h3> </h3>
@@ -404,7 +406,7 @@ Class ChatService <a class="header-action link-secondary" title="View source" h
<div class="markdown level1 conceptual"></div> <div class="markdown level1 conceptual"></div>
<div class="codewrapper"> <div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task&lt;(List&lt;MessageDto&gt; History, string? Error)&gt; JoinChannelAsync(string connectionId, Guid userId, string username, string channelName)</code></pre> <pre><code class="lang-csharp hljs">public Task&lt;(List&lt;MessageDto&gt; History, string? Error, bool PasswordRequired)&gt; JoinChannelAsync(string connectionId, Guid userId, string username, string channelName, string? password = null)</code></pre>
</div> </div>
<h4 class="section">Parameters</h4> <h4 class="section">Parameters</h4>
@@ -417,11 +419,13 @@ Class ChatService <a class="header-action link-secondary" title="View source" h
<dd></dd> <dd></dd>
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt> <dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd> <dd></dd>
<dt><code>password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl> </dl>
<h4 class="section">Returns</h4> <h4 class="section">Returns</h4>
<dl class="parameters"> <dl class="parameters">
<dt><span class="xref">Task</span>&lt;(<span class="xref">List</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs">MessageDto</a>&gt; <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.collections.generic.list-echohub.core.dtos.messagedto-,system.string-.history">History</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.collections.generic.list-echohub.core.dtos.messagedto-,system.string-.error">Error</a>)&gt;</dt> <dt><span class="xref">Task</span>&lt;(<span class="xref">List</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs">MessageDto</a>&gt; <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.collections.generic.list-echohub.core.dtos.messagedto-,system.string,system.boolean-.history">History</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.collections.generic.list-echohub.core.dtos.messagedto-,system.string,system.boolean-.error">Error</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.collections.generic.list-echohub.core.dtos.messagedto-,system.string,system.boolean-.passwordrequired">PasswordRequired</a>)&gt;</dt>
<dd></dd> <dd></dd>
</dl> </dl>
@@ -254,6 +254,39 @@ Class FileStorageService <a class="header-action link-secondary" title="View so
<a id="EchoHub_Server_Services_FileStorageService_GetStoredFileIds_" data-uid="EchoHub.Server.Services.FileStorageService.GetStoredFileIds*"></a>
<h3 id="EchoHub_Server_Services_FileStorageService_GetStoredFileIds" data-uid="EchoHub.Server.Services.FileStorageService.GetStoredFileIds">
GetStoredFileIds()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Server/Services/FileStorageService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Returns the set of stored file ids (filenames without extension) currently on disk.
One directory scan, so callers can bulk-check many attachments without a glob per file.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public HashSet&lt;string&gt; GetStoredFileIds()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">HashSet</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Server_Services_FileStorageService_SaveFileAsync_" data-uid="EchoHub.Server.Services.FileStorageService.SaveFileAsync*"></a> <a id="EchoHub_Server_Services_FileStorageService_SaveFileAsync_" data-uid="EchoHub.Server.Services.FileStorageService.SaveFileAsync*"></a>
<h3 id="EchoHub_Server_Services_FileStorageService_SaveFileAsync_System_IO_Stream_System_String_" data-uid="EchoHub.Server.Services.FileStorageService.SaveFileAsync(System.IO.Stream,System.String)"> <h3 id="EchoHub_Server_Services_FileStorageService_SaveFileAsync_System_IO_Stream_System_String_" data-uid="EchoHub.Server.Services.FileStorageService.SaveFileAsync(System.IO.Stream,System.String)">
@@ -278,7 +311,7 @@ Class FileStorageService <a class="header-action link-secondary" title="View so
<h4 class="section">Returns</h4> <h4 class="section">Returns</h4>
<dl class="parameters"> <dl class="parameters">
<dt><span class="xref">Task</span>&lt;(<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.string,system.string-.fileid">fileId</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.string,system.string-.filepath">filePath</a>)&gt;</dt> <dt><span class="xref">Task</span>&lt;(<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.string,system.string-.encryptionsalt">EncryptionSalt</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.string,system.string-.wrappedroomkey">WrappedRoomKey</a>)&gt;</dt>
<dd></dd> <dd></dd>
</dl> </dl>
-8
View File
@@ -118,14 +118,6 @@ status (success/failure code, conflicting hosts) for operator-facing endpoints.<
<dt><a class="xref" href="EchoHub.Server.Services.FileStorageService.html">FileStorageService</a></dt> <dt><a class="xref" href="EchoHub.Server.Services.FileStorageService.html">FileStorageService</a></dt>
<dd></dd> <dd></dd>
</dl> </dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Server.Services.FileValidationHelper.html">FileValidationHelper</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Server.Services.ImageToAsciiService.html">ImageToAsciiService</a></dt>
<dd></dd>
</dl>
<dl class="jumplist"> <dl class="jumplist">
<dt><a class="xref" href="EchoHub.Server.Services.LinkEmbedService.html">LinkEmbedService</a></dt> <dt><a class="xref" href="EchoHub.Server.Services.LinkEmbedService.html">LinkEmbedService</a></dt>
<dd></dd> <dd></dd>
+80 -6
View File
@@ -84,18 +84,42 @@
<li> <li>
<a href="client/EchoHub.Client.Services.BackupInfo.html" name="" title="BackupInfo">BackupInfo</a> <a href="client/EchoHub.Client.Services.BackupInfo.html" name="" title="BackupInfo">BackupInfo</a>
</li> </li>
<li>
<a href="client/EchoHub.Client.Services.ChannelPasswordRequiredException.html" name="" title="ChannelPasswordRequiredException">ChannelPasswordRequiredException</a>
</li>
<li> <li>
<a href="client/EchoHub.Client.Services.ClientEncryptionService.html" name="" title="ClientEncryptionService">ClientEncryptionService</a> <a href="client/EchoHub.Client.Services.ClientEncryptionService.html" name="" title="ClientEncryptionService">ClientEncryptionService</a>
</li> </li>
<li>
<a href="client/EchoHub.Client.Services.ClipboardFiles.html" name="" title="ClipboardFiles">ClipboardFiles</a>
</li>
<li> <li>
<a href="client/EchoHub.Client.Services.EchoHubConnection.html" name="" title="EchoHubConnection">EchoHubConnection</a> <a href="client/EchoHub.Client.Services.EchoHubConnection.html" name="" title="EchoHubConnection">EchoHubConnection</a>
</li> </li>
<li>
<a href="client/EchoHub.Client.Services.FolderPickResult.html" name="" title="FolderPickResult">FolderPickResult</a>
</li>
<li>
<a href="client/EchoHub.Client.Services.JoinOutcome.html" name="" title="JoinOutcome">JoinOutcome</a>
</li>
<li>
<a href="client/EchoHub.Client.Services.NativeFolderPicker.html" name="" title="NativeFolderPicker">NativeFolderPicker</a>
</li>
<li> <li>
<a href="client/EchoHub.Client.Services.NotificationSoundService.html" name="" title="NotificationSoundService">NotificationSoundService</a> <a href="client/EchoHub.Client.Services.NotificationSoundService.html" name="" title="NotificationSoundService">NotificationSoundService</a>
</li> </li>
<li>
<a href="client/EchoHub.Client.Services.OutgoingAttachment.html" name="" title="OutgoingAttachment">OutgoingAttachment</a>
</li>
<li> <li>
<a href="client/EchoHub.Client.Services.PathSetup.html" name="" title="PathSetup">PathSetup</a> <a href="client/EchoHub.Client.Services.PathSetup.html" name="" title="PathSetup">PathSetup</a>
</li> </li>
<li>
<a href="client/EchoHub.Client.Services.PickerOutcome.html" name="" title="PickerOutcome">PickerOutcome</a>
</li>
<li>
<a href="client/EchoHub.Client.Services.RoomKeyStore.html" name="" title="RoomKeyStore">RoomKeyStore</a>
</li>
<li> <li>
<a href="client/EchoHub.Client.Services.UpdateBackupService.html" name="" title="UpdateBackupService">UpdateBackupService</a> <a href="client/EchoHub.Client.Services.UpdateBackupService.html" name="" title="UpdateBackupService">UpdateBackupService</a>
</li> </li>
@@ -160,6 +184,9 @@
<li> <li>
<a href="client/EchoHub.Client.UI.Dialogs.AudioPlayerDialog.html" name="" title="AudioPlayerDialog">AudioPlayerDialog</a> <a href="client/EchoHub.Client.UI.Dialogs.AudioPlayerDialog.html" name="" title="AudioPlayerDialog">AudioPlayerDialog</a>
</li> </li>
<li>
<a href="client/EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.html" name="" title="ChannelPasswordDialog">ChannelPasswordDialog</a>
</li>
<li> <li>
<a href="client/EchoHub.Client.UI.Dialogs.ConnectDialog.html" name="" title="ConnectDialog">ConnectDialog</a> <a href="client/EchoHub.Client.UI.Dialogs.ConnectDialog.html" name="" title="ConnectDialog">ConnectDialog</a>
</li> </li>
@@ -212,6 +239,9 @@
<a href="client/EchoHub.Client.UI.Helpers.html" name="" title="EchoHub.Client.UI.Helpers">EchoHub.Client.UI.Helpers</a> <a href="client/EchoHub.Client.UI.Helpers.html" name="" title="EchoHub.Client.UI.Helpers">EchoHub.Client.UI.Helpers</a>
<ul class="nav level4"> <ul class="nav level4">
<li>
<a href="client/EchoHub.Client.UI.Helpers.DroppedFileParser.html" name="" title="DroppedFileParser">DroppedFileParser</a>
</li>
<li> <li>
<a href="client/EchoHub.Client.UI.Helpers.EmojiHelper.html" name="" title="EmojiHelper">EmojiHelper</a> <a href="client/EchoHub.Client.UI.Helpers.EmojiHelper.html" name="" title="EmojiHelper">EmojiHelper</a>
</li> </li>
@@ -315,12 +345,18 @@
<li> <li>
<a href="core/EchoHub.Core.DTOs.AssignRoleRequest.html" name="" title="AssignRoleRequest">AssignRoleRequest</a> <a href="core/EchoHub.Core.DTOs.AssignRoleRequest.html" name="" title="AssignRoleRequest">AssignRoleRequest</a>
</li> </li>
<li>
<a href="core/EchoHub.Core.DTOs.AttachmentDto.html" name="" title="AttachmentDto">AttachmentDto</a>
</li>
<li> <li>
<a href="core/EchoHub.Core.DTOs.AvatarUploadResponse.html" name="" title="AvatarUploadResponse">AvatarUploadResponse</a> <a href="core/EchoHub.Core.DTOs.AvatarUploadResponse.html" name="" title="AvatarUploadResponse">AvatarUploadResponse</a>
</li> </li>
<li> <li>
<a href="core/EchoHub.Core.DTOs.BanRequest.html" name="" title="BanRequest">BanRequest</a> <a href="core/EchoHub.Core.DTOs.BanRequest.html" name="" title="BanRequest">BanRequest</a>
</li> </li>
<li>
<a href="core/EchoHub.Core.DTOs.ChannelCryptoDto.html" name="" title="ChannelCryptoDto">ChannelCryptoDto</a>
</li>
<li> <li>
<a href="core/EchoHub.Core.DTOs.ChannelDto.html" name="" title="ChannelDto">ChannelDto</a> <a href="core/EchoHub.Core.DTOs.ChannelDto.html" name="" title="ChannelDto">ChannelDto</a>
</li> </li>
@@ -369,6 +405,9 @@
<li> <li>
<a href="core/EchoHub.Core.DTOs.RegisterRequest.html" name="" title="RegisterRequest">RegisterRequest</a> <a href="core/EchoHub.Core.DTOs.RegisterRequest.html" name="" title="RegisterRequest">RegisterRequest</a>
</li> </li>
<li>
<a href="core/EchoHub.Core.DTOs.RekeyChannelRequest.html" name="" title="RekeyChannelRequest">RekeyChannelRequest</a>
</li>
<li> <li>
<a href="core/EchoHub.Core.DTOs.SendMessageRequest.html" name="" title="SendMessageRequest">SendMessageRequest</a> <a href="core/EchoHub.Core.DTOs.SendMessageRequest.html" name="" title="SendMessageRequest">SendMessageRequest</a>
</li> </li>
@@ -409,6 +448,12 @@
<a href="core/EchoHub.Core.Models.html" name="" title="EchoHub.Core.Models">EchoHub.Core.Models</a> <a href="core/EchoHub.Core.Models.html" name="" title="EchoHub.Core.Models">EchoHub.Core.Models</a>
<ul class="nav level4"> <ul class="nav level4">
<li>
<a href="core/EchoHub.Core.Models.Attachment.html" name="" title="Attachment">Attachment</a>
</li>
<li>
<a href="core/EchoHub.Core.Models.AttachmentKind.html" name="" title="AttachmentKind">AttachmentKind</a>
</li>
<li> <li>
<a href="core/EchoHub.Core.Models.Channel.html" name="" title="Channel">Channel</a> <a href="core/EchoHub.Core.Models.Channel.html" name="" title="Channel">Channel</a>
</li> </li>
@@ -435,6 +480,32 @@
</li> </li>
</ul> </ul>
</li> </li>
<li>
<span class="expand-stub"></span>
<a href="core/EchoHub.Core.Security.html" name="" title="EchoHub.Core.Security">EchoHub.Core.Security</a>
<ul class="nav level4">
<li>
<a href="core/EchoHub.Core.Security.RoomCrypto.html" name="" title="RoomCrypto">RoomCrypto</a>
</li>
<li>
<a href="core/EchoHub.Core.Security.RoomCrypto.DerivedKeys.html" name="" title="RoomCrypto.DerivedKeys">RoomCrypto.DerivedKeys</a>
</li>
</ul>
</li>
<li>
<span class="expand-stub"></span>
<a href="core/EchoHub.Core.Services.html" name="" title="EchoHub.Core.Services">EchoHub.Core.Services</a>
<ul class="nav level4">
<li>
<a href="core/EchoHub.Core.Services.FileValidationHelper.html" name="" title="FileValidationHelper">FileValidationHelper</a>
</li>
<li>
<a href="core/EchoHub.Core.Services.ImageToAsciiService.html" name="" title="ImageToAsciiService">ImageToAsciiService</a>
</li>
</ul>
</li>
</ul> </ul>
</li> </li>
<li> <li>
@@ -512,15 +583,24 @@
<li> <li>
<a href="server/EchoHub.Server.Data.Migrations.AddAttachmentFileSize.html" name="" title="AddAttachmentFileSize">AddAttachmentFileSize</a> <a href="server/EchoHub.Server.Data.Migrations.AddAttachmentFileSize.html" name="" title="AddAttachmentFileSize">AddAttachmentFileSize</a>
</li> </li>
<li>
<a href="server/EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope.html" name="" title="AddChannelEncryptionEnvelope">AddChannelEncryptionEnvelope</a>
</li>
<li> <li>
<a href="server/EchoHub.Server.Data.Migrations.AddChannelIsPublic.html" name="" title="AddChannelIsPublic">AddChannelIsPublic</a> <a href="server/EchoHub.Server.Data.Migrations.AddChannelIsPublic.html" name="" title="AddChannelIsPublic">AddChannelIsPublic</a>
</li> </li>
<li> <li>
<a href="server/EchoHub.Server.Data.Migrations.AddChannelMembership.html" name="" title="AddChannelMembership">AddChannelMembership</a> <a href="server/EchoHub.Server.Data.Migrations.AddChannelMembership.html" name="" title="AddChannelMembership">AddChannelMembership</a>
</li> </li>
<li>
<a href="server/EchoHub.Server.Data.Migrations.AddChannelPasswordHash.html" name="" title="AddChannelPasswordHash">AddChannelPasswordHash</a>
</li>
<li> <li>
<a href="server/EchoHub.Server.Data.Migrations.AddEncryptionSupport.html" name="" title="AddEncryptionSupport">AddEncryptionSupport</a> <a href="server/EchoHub.Server.Data.Migrations.AddEncryptionSupport.html" name="" title="AddEncryptionSupport">AddEncryptionSupport</a>
</li> </li>
<li>
<a href="server/EchoHub.Server.Data.Migrations.AddMessageAttachments.html" name="" title="AddMessageAttachments">AddMessageAttachments</a>
</li>
<li> <li>
<a href="server/EchoHub.Server.Data.Migrations.AddMessageEmbed.html" name="" title="AddMessageEmbed">AddMessageEmbed</a> <a href="server/EchoHub.Server.Data.Migrations.AddMessageEmbed.html" name="" title="AddMessageEmbed">AddMessageEmbed</a>
</li> </li>
@@ -562,12 +642,6 @@
<li> <li>
<a href="server/EchoHub.Server.Services.FileStorageService.html" name="" title="FileStorageService">FileStorageService</a> <a href="server/EchoHub.Server.Services.FileStorageService.html" name="" title="FileStorageService">FileStorageService</a>
</li> </li>
<li>
<a href="server/EchoHub.Server.Services.FileValidationHelper.html" name="" title="FileValidationHelper">FileValidationHelper</a>
</li>
<li>
<a href="server/EchoHub.Server.Services.ImageToAsciiService.html" name="" title="ImageToAsciiService">ImageToAsciiService</a>
</li>
<li> <li>
<a href="server/EchoHub.Server.Services.LinkEmbedService.html" name="" title="LinkEmbedService">LinkEmbedService</a> <a href="server/EchoHub.Server.Services.LinkEmbedService.html" name="" title="LinkEmbedService">LinkEmbedService</a>
</li> </li>
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -127,7 +127,7 @@ TUI Client ──► WebSocket ──► ChatHub ─────┘
<ul> <ul>
<li><strong>UI</strong>: Main window, dialogs, chat renderer with ANSI color support</li> <li><strong>UI</strong>: Main window, dialogs, chat renderer with ANSI color support</li>
<li><strong>Services</strong>: API client with automatic token refresh, SignalR connection wrapper, audio playback (NetCoreAudio), automatic update checker (AlwaysUpToDate)</li> <li><strong>Services</strong>: API client with automatic token refresh, SignalR connection wrapper, audio playback (NetCoreAudio), automatic update checker (AlwaysUpToDate)</li>
<li><strong>Themes</strong>: 13 built-in color themes (including transparent theme with true terminal transparency)</li> <li><strong>Themes</strong>: 14 built-in color themes (including transparent dark/light themes with true terminal transparency)</li>
<li><strong>Config</strong>: Client configuration management with session persistence (&quot;Remember Me&quot; refresh tokens)</li> <li><strong>Config</strong>: Client configuration management with session persistence (&quot;Remember Me&quot; refresh tokens)</li>
</ul> </ul>
<h2 id="communication">Communication</h2> <h2 id="communication">Communication</h2>
+1
View File
@@ -90,6 +90,7 @@
<p>Release history for EchoHub.</p> <p>Release history for EchoHub.</p>
<h2 id="releases">Releases</h2> <h2 id="releases">Releases</h2>
<ul> <ul>
<li><a href="v0.2.12.html">v0.2.12</a> - End-to-End Encrypted Channels, IRC Channel Keys, Image Save &amp; Ctrl+W Crash Fix</li>
<li><a href="v0.2.11.html">v0.2.11</a> - EchoHubSpace Auth, Live Directory Updates &amp; Server Browser Metadata</li> <li><a href="v0.2.11.html">v0.2.11</a> - EchoHubSpace Auth, Live Directory Updates &amp; Server Browser Metadata</li>
<li><a href="v0.2.10.html">v0.2.10</a> - Command Palette, Infinite History Scroll &amp; Auto-Updater Fixes</li> <li><a href="v0.2.10.html">v0.2.10</a> - Command Palette, Infinite History Scroll &amp; Auto-Updater Fixes</li>
<li><a href="v0.2.9.html">v0.2.9</a> - Install Script &amp; Chocolatey Fixes</li> <li><a href="v0.2.9.html">v0.2.9</a> - Install Script &amp; Chocolatey Fixes</li>
+3
View File
@@ -15,6 +15,9 @@
<li> <li>
<a href="index.html" name="" title="Overview">Overview</a> <a href="index.html" name="" title="Overview">Overview</a>
</li> </li>
<li>
<a href="v0.2.12.html" name="" title="v0.2.12">v0.2.12</a>
</li>
<li> <li>
<a href="v0.2.11.html" name="" title="v0.2.11">v0.2.11</a> <a href="v0.2.11.html" name="" title="v0.2.11">v0.2.11</a>
</li> </li>
+1 -1
View File
@@ -1,2 +1,2 @@
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"v0.2.11","href":"v0.2.11.html","topicHref":"v0.2.11.html"},{"name":"v0.2.10","href":"v0.2.10.html","topicHref":"v0.2.10.html"},{"name":"v0.2.9","href":"v0.2.9.html","topicHref":"v0.2.9.html"},{"name":"v0.2.8","href":"v0.2.8.html","topicHref":"v0.2.8.html"},{"name":"v0.2.7","href":"v0.2.7.html","topicHref":"v0.2.7.html"},{"name":"v0.2.6","href":"v0.2.6.html","topicHref":"v0.2.6.html"},{"name":"v0.2.5","href":"v0.2.5.html","topicHref":"v0.2.5.html"},{"name":"v0.2.4","href":"v0.2.4.html","topicHref":"v0.2.4.html"},{"name":"v0.2.3","href":"v0.2.3.html","topicHref":"v0.2.3.html"},{"name":"v0.2.2","href":"v0.2.2.html","topicHref":"v0.2.2.html"},{"name":"v0.2.1","href":"v0.2.1.html","topicHref":"v0.2.1.html"},{"name":"v0.2.0","href":"v0.2.0.html","topicHref":"v0.2.0.html"},{"name":"v0.1.1","href":"v0.1.1.html","topicHref":"v0.1.1.html"},{"name":"v0.1.0","href":"v0.1.0.html","topicHref":"v0.1.0.html"}]} {"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"v0.2.12","href":"v0.2.12.html","topicHref":"v0.2.12.html"},{"name":"v0.2.11","href":"v0.2.11.html","topicHref":"v0.2.11.html"},{"name":"v0.2.10","href":"v0.2.10.html","topicHref":"v0.2.10.html"},{"name":"v0.2.9","href":"v0.2.9.html","topicHref":"v0.2.9.html"},{"name":"v0.2.8","href":"v0.2.8.html","topicHref":"v0.2.8.html"},{"name":"v0.2.7","href":"v0.2.7.html","topicHref":"v0.2.7.html"},{"name":"v0.2.6","href":"v0.2.6.html","topicHref":"v0.2.6.html"},{"name":"v0.2.5","href":"v0.2.5.html","topicHref":"v0.2.5.html"},{"name":"v0.2.4","href":"v0.2.4.html","topicHref":"v0.2.4.html"},{"name":"v0.2.3","href":"v0.2.3.html","topicHref":"v0.2.3.html"},{"name":"v0.2.2","href":"v0.2.2.html","topicHref":"v0.2.2.html"},{"name":"v0.2.1","href":"v0.2.1.html","topicHref":"v0.2.1.html"},{"name":"v0.2.0","href":"v0.2.0.html","topicHref":"v0.2.0.html"},{"name":"v0.1.1","href":"v0.1.1.html","topicHref":"v0.1.1.html"},{"name":"v0.1.0","href":"v0.1.0.html","topicHref":"v0.1.0.html"}]}
+169
View File
@@ -0,0 +1,169 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>v0.2.12 | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="v0.2.12 | EchoHub Documentation ">
<link rel="icon" href="../images/hue_icon.svg">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/blob/master/docs/#L1">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="v0212">v0.2.12</h1>
<p>Private channels are now genuinely private: password-protected channels are end-to-end encrypted, so the server (and its operators) can gate joins and measure storage but cannot read message or file contents. The IRC gateway grows real MODE/TOPIC support and channel keys, and the client gets image &quot;save original&quot;, a transparent-light theme, drag-and-drop file sending, Ctrl+V paste, and a fix for the intermittent Ctrl+W crash.</p>
<h2 id="new-features">New Features</h2>
<ul>
<li><strong>End-to-end encrypted channels</strong> — creating a channel with a password now provisions a zero-knowledge room:
<ul>
<li>The passphrase never leaves the client. It derives (PBKDF2-SHA256, 210k iterations) two keys: an <em>auth key</em> sent to the server as the join credential, and a <em>key-encryption key</em> that never leaves the machine.</li>
<li>A random room content key encrypts every message and file with AES-256-GCM. The server only ever stores the room key <em>wrapped</em> under the passphrase, so it can gate joins and report a channel's message count, storage size, and attachments — but cannot decrypt any of it. Even the server owner cannot read a private room's contents.</li>
<li>Members' clients cache the derived room key locally (in the per-server config, like saved sessions) so the passphrase isn't retyped every launch; joining on a new device prompts for it once.</li>
<li>Change the passphrase with <code>/passwd &lt;old&gt; &lt;new&gt;</code> (channel creator only). The room key is re-wrapped, not rotated, so <strong>existing history stays readable</strong> and members who join later with the new passphrase can still read older messages.</li>
<li>Files and images are encrypted client-side before upload; for images the ASCII-art preview is rendered on the client and stored room-encrypted too. Sending images by URL is disabled in encrypted channels (the server can't fetch-and-render without the key).</li>
<li>End-to-end encrypted channels cannot be joined over the IRC gateway (that would require the server to hold the room key) — IRC <code>JOIN</code> returns <code>475</code> directing users to the EchoHub client.</li>
</ul>
</li>
<li>Password-protected channels — set an optional password when creating a channel (masked field in the Create Channel dialog, <code>password</code> on <code>POST /api/channels</code>). Passwords are BCrypt-hashed server-side; the join gate applies on first join only (existing members and the creator are unaffected). Protected channels show a <code>*</code> marker in the channel list and <code>+k</code> in the status bar</li>
<li>Save original images — image messages now show a clickable &quot;[↓ save original]&quot; line under the ASCII-art preview that downloads the full-resolution original to your Downloads folder (decrypting locally in encrypted channels)</li>
<li><strong>Messages with attachments (Discord-style)</strong> — a message is now text <strong>plus</strong> a list of attachments instead of being either text or a single file. One message can carry a caption and several files (images, audio, docs) together:
<ul>
<li>Compose with a <strong>staging tray</strong>: <code>/send &lt;file&gt;</code> or dropping files onto the terminal stages them (shown on the input bar); the next Enter sends your typed caption and all staged files as one message. <code>/clear</code> drops staged files. <code>/send &lt;URL&gt;</code> still posts an image immediately.</li>
<li>Each image attachment renders its own ASCII preview with its own &quot;save original&quot; action; audio/file attachments each get their own play/download line.</li>
<li>In encrypted channels every attachment is encrypted individually (blob + ASCII preview), and the caption is room-encrypted — the server still stores only ciphertext and can report count/size but not contents.</li>
<li>Up to 10 attachments per message.</li>
</ul>
</li>
<li><strong>Right-click message menu</strong> — right-click any message for a context menu: save/download/play its attachment, mention the sender, view their profile, copy the text, copy the message ID (for linking or command arguments), or delete the message. (Keyboard: F6 focuses the message list for arrow-key selection + Delete.) The selected message is now highlighted while the list is focused.</li>
<li><strong>Message deletion</strong> — press Delete on a selected message to remove it. You can always delete your own messages; moderators and above can delete others' messages, but only from users <strong>below their own role</strong> (a mod can't delete an admin's or owner's message). Deleting a message also removes its attachment blobs from server storage.</li>
<li><strong>Customizable download folder</strong><code>/downloadpath</code> opens your OS-native folder picker (Windows Explorer / macOS Finder / Linux GTK or KDE) to choose where downloaded attachments and saved images go; <code>/downloadpath &lt;path&gt;</code> sets it directly (the fallback when no native picker is available). Downloaded files now land in that folder (with automatic <code>(n)</code> de-duplication) instead of a temp directory.</li>
<li><code>/join &lt;channel&gt; [password]</code> — join protected channels inline, or let the client prompt: joining a protected channel without a password opens a masked prompt that re-prompts on a wrong password</li>
<li>IRC channel keys — <code>JOIN #room &lt;key&gt;</code> works against room passwords (RFC 1459 comma-paired key lists supported); keyless or wrong-key joins get <code>475 ERR_BADCHANNELKEY</code></li>
<li>IRC <code>MODE</code> implemented — <code>MODE #chan</code> reports <code>+k</code>/<code>+</code>, <code>MODE #chan +k &lt;key&gt;</code> sets and <code>-k</code> clears the room password (channel creator or admin only), ban-list probes get a clean empty reply, and <code>CHANMODES</code> is advertised in ISUPPORT</li>
<li>IRC <code>TOPIC</code> set support — the channel creator can change the topic from IRC; the change broadcasts to connected TUI clients (previously topic changes were rejected with a stub error)</li>
<li>Attach a file by drag &amp; drop or by pasting — drop a file onto the terminal, or <strong>copy a file in your file manager and press Ctrl+V</strong>, to stage it as an attachment (the next Enter sends it with your caption). Multiple files at once are supported. Ctrl+V still pastes text when the clipboard holds text; Ctrl+Y is a paste alias. On Windows the copied-file paste reads the clipboard's file list directly (Windows Terminal never pastes copied files as text), with <code>xclip</code>/<code>wl-paste</code> used on Linux</li>
<li>Pick ASCII-art size for attached images — <code>/size</code> opens a Small/Medium/Large picker (40×40 / 80×80 / 120×120) with descriptions, <code>/size &lt;s|m|l&gt;</code> sets it directly, and <code>/send &lt;file&gt; -l</code> sets it for that message. The choice is a saved preference and applies to copy-paste/drag-drop images (which have no per-file flag); the current size is shown in the staging tray</li>
<li>New <code>TransparentLight</code> theme — dark characters on a transparent background, for light terminal color schemes (<code>/theme transparentlight</code>)</li>
<li>Timestamps in messages are now aware of the current culture and display the short time pattern for today's messages and the short date+time pattern for older messages.</li>
</ul>
<h2 id="bug-fixes">Bug Fixes</h2>
<ul>
<li>Transparent themes no longer draw an opaque box behind the message input. The input <code>TextView</code> renders with the <code>Editable</code> visual role, which Terminal.Gui derives as an opaque color when a theme leaves it unset; the themes now pin <code>Editable</code>/<code>ReadOnly</code> to their base colors so the input matches its (transparent) background.</li>
<li>Attachments whose files have been pruned (retention cleanup deletes blobs older than <code>Storage:RetentionDays</code> but left the message rows) no longer render a dead download/preview. When channel history loads, the server checks which attachment blobs still exist: missing ones are dropped from the message, and an attachment-only message whose files are all gone is removed from the database.</li>
<li>Fixed intermittent crash on Ctrl+W — Terminal.Gui binds Ctrl+W to clipboard-cut, and Windows clipboard contention (another app holding the clipboard) threw an unhandled <code>Win32Exception</code> that took the app down. Ctrl+W now deletes the previous word (readline behavior, no clipboard), and all clipboard shortcuts (Ctrl+X/C/V/Y) are guarded so transient clipboard failures log a warning instead of crashing</li>
<li>Fixed emoji shortcode replacement permanently disabling itself if a cursor update threw mid-replacement</li>
<li>IRC <code>LIST</code> no longer leaks private channels; protected channels are marked <code>[+k]</code></li>
</ul>
<h2 id="api-changes">API Changes</h2>
<ul>
<li><code>ChannelDto</code> gains <code>isProtected</code> and <code>isEncrypted</code>; <code>CreateChannelRequest</code> gains optional <code>password</code>, <code>encryptionSalt</code>, and <code>wrappedRoomKey</code>; SignalR <code>JoinChannel</code> takes an optional second <code>password</code> argument and <code>JoinChannelResult</code> gains <code>passwordRequired</code>, <code>encryptionSalt</code>, and <code>wrappedRoomKey</code> (older clients must update to join over SignalR)</li>
<li>New endpoints: <code>GET /api/channels/{channel}/crypto</code> (public crypto metadata — salt only, never the wrapped key) and <code>POST /api/channels/{channel}/rekey</code> (creator-only passphrase change)</li>
<li>The upload endpoint accepts <code>type</code> and <code>content</code> form fields for encrypted channels, where the client supplies the declared message type and room-encrypted content</li>
<li><code>ImageToAsciiService</code> and <code>FileValidationHelper</code> moved from <code>EchoHub.Server</code> to <code>EchoHub.Core</code> so the client can render ASCII art and detect file types for encrypted uploads</li>
<li><strong>Message shape change</strong>: <code>MessageDto</code> drops <code>Type</code>/<code>AttachmentUrl</code>/<code>AttachmentFileName</code>/<code>AttachmentFileSize</code> and gains <code>Attachments</code> (a list of <code>AttachmentDto { Kind, Url, FileName, FileSize, AsciiPreview }</code>, null/empty for plain text). New <code>Attachment</code> entity + table with a cascade FK to <code>Message</code></li>
<li>New endpoint <code>POST /api/channels/{channel}/messages</code> (multipart: <code>content</code> + N <code>files</code>, plus <code>kind</code>/<code>preview</code> per file for encrypted channels) replaces the single-file <code>upload</code> endpoint; <code>DELETE /api/moderation/messages/{id}</code> now enforces the own-or-higher-role rule</li>
<li>New EF migrations <code>AddChannelPasswordHash</code>, <code>AddChannelEncryptionEnvelope</code>, and <code>AddMessageAttachments</code> (applied automatically on server start); a one-time startup data migration folds legacy single-attachment messages into the new model</li>
</ul>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/docs/#L1" class="edit-link">Edit this page</a>
</div>
<div class="next-article d-print-none border-top" id="nextArticle"></div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
+163 -48
View File
File diff suppressed because one or more lines are too long
+346 -28
View File
@@ -206,6 +206,20 @@
"Title": "EchoHub.Client.Services.BackupInfo", "Title": "EchoHub.Client.Services.BackupInfo",
"Summary": null "Summary": null
}, },
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.Services.ChannelPasswordRequiredException.yml",
"output": {
".html": {
"relative_path": "api/client/EchoHub.Client.Services.ChannelPasswordRequiredException.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Client.Services.ChannelPasswordRequiredException",
"Summary": "<p sourcefile=\"_api_meta/client/EchoHub.Client.Services.ChannelPasswordRequiredException.yml\" sourcestartlinenumber=\"1\">Thrown when joining a channel fails because a password is required or incorrect.\nThe UI catches this to prompt the user and retry.</p>\n"
},
{ {
"type": "ManagedReference", "type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.Services.ClientEncryptionService.yml", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.ClientEncryptionService.yml",
@@ -220,6 +234,20 @@
"Title": "EchoHub.Client.Services.ClientEncryptionService", "Title": "EchoHub.Client.Services.ClientEncryptionService",
"Summary": "<p sourcefile=\"_api_meta/client/EchoHub.Client.Services.ClientEncryptionService.yml\" sourcestartlinenumber=\"1\">Client-side encryption service. Uses the same AES-256-GCM format as the server\nso messages are encrypted end-to-end between client and server.</p>\n" "Summary": "<p sourcefile=\"_api_meta/client/EchoHub.Client.Services.ClientEncryptionService.yml\" sourcestartlinenumber=\"1\">Client-side encryption service. Uses the same AES-256-GCM format as the server\nso messages are encrypted end-to-end between client and server.</p>\n"
}, },
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.Services.ClipboardFiles.yml",
"output": {
".html": {
"relative_path": "api/client/EchoHub.Client.Services.ClipboardFiles.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Client.Services.ClipboardFiles",
"Summary": "<p sourcefile=\"_api_meta/client/EchoHub.Client.Services.ClipboardFiles.yml\" sourcestartlinenumber=\"1\">Reads file paths that live on the OS clipboard as a <em sourcefile=\"_api_meta/client/EchoHub.Client.Services.ClipboardFiles.yml\" sourcestartlinenumber=\"1\">file list</em> (e.g. after copying a file in\nExplorer/Finder/Nautilus), which terminals do not paste as text. Lets Ctrl+V attach a copied\nfile directly instead of requiring the user to paste a raw path.</p>\n"
},
{ {
"type": "ManagedReference", "type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.Services.EchoHubConnection.yml", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.EchoHubConnection.yml",
@@ -234,6 +262,48 @@
"Title": "EchoHub.Client.Services.EchoHubConnection", "Title": "EchoHub.Client.Services.EchoHubConnection",
"Summary": null "Summary": null
}, },
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.Services.FolderPickResult.yml",
"output": {
".html": {
"relative_path": "api/client/EchoHub.Client.Services.FolderPickResult.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Client.Services.FolderPickResult",
"Summary": null
},
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.Services.JoinOutcome.yml",
"output": {
".html": {
"relative_path": "api/client/EchoHub.Client.Services.JoinOutcome.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Client.Services.JoinOutcome",
"Summary": "<p sourcefile=\"_api_meta/client/EchoHub.Client.Services.JoinOutcome.yml\" sourcestartlinenumber=\"1\">Result of joining a channel: decrypted history plus, for end-to-end encrypted\nchannels, the key envelope needed to unlock the room content key.</p>\n"
},
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.Services.NativeFolderPicker.yml",
"output": {
".html": {
"relative_path": "api/client/EchoHub.Client.Services.NativeFolderPicker.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Client.Services.NativeFolderPicker",
"Summary": "<p sourcefile=\"_api_meta/client/EchoHub.Client.Services.NativeFolderPicker.yml\" sourcestartlinenumber=\"1\">Opens the OS-native folder chooser (Windows Explorer, macOS Finder, Linux GTK/KDE) by shelling\nout, so the TUI doesn't need a GUI toolkit reference. Returns <xref href=\"EchoHub.Client.Services.PickerOutcome.Unavailable\" data-throw-if-not-resolved=\"false\"></xref>\nwhen no native dialog can run, so callers can fall back to a configured path.</p>\n"
},
{ {
"type": "ManagedReference", "type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.Services.NotificationSoundService.yml", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.NotificationSoundService.yml",
@@ -248,6 +318,20 @@
"Title": "EchoHub.Client.Services.NotificationSoundService", "Title": "EchoHub.Client.Services.NotificationSoundService",
"Summary": null "Summary": null
}, },
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.Services.OutgoingAttachment.yml",
"output": {
".html": {
"relative_path": "api/client/EchoHub.Client.Services.OutgoingAttachment.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Client.Services.OutgoingAttachment",
"Summary": "<p sourcefile=\"_api_meta/client/EchoHub.Client.Services.OutgoingAttachment.yml\" sourcestartlinenumber=\"1\">One file to upload as part of a message. For end-to-end encrypted channels the stream\nis already ciphertext, <xref href=\"EchoHub.Client.Services.OutgoingAttachment.DeclaredKind\" data-throw-if-not-resolved=\"false\"></xref> is set (image/audio/file), and\n<xref href=\"EchoHub.Client.Services.OutgoingAttachment.EncryptedPreview\" data-throw-if-not-resolved=\"false\"></xref> holds the room-encrypted ASCII art for images.\nFor normal channels only <xref href=\"EchoHub.Client.Services.OutgoingAttachment.Stream\" data-throw-if-not-resolved=\"false\"></xref> and <xref href=\"EchoHub.Client.Services.OutgoingAttachment.FileName\" data-throw-if-not-resolved=\"false\"></xref> are set.</p>\n"
},
{ {
"type": "ManagedReference", "type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.Services.PathSetup.yml", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.PathSetup.yml",
@@ -262,6 +346,34 @@
"Title": "EchoHub.Client.Services.PathSetup", "Title": "EchoHub.Client.Services.PathSetup",
"Summary": "<p sourcefile=\"_api_meta/client/EchoHub.Client.Services.PathSetup.yml\" sourcestartlinenumber=\"1\">Ensures the application's directory is on the system PATH so users\ncan run 'echohub' from any terminal session.</p>\n" "Summary": "<p sourcefile=\"_api_meta/client/EchoHub.Client.Services.PathSetup.yml\" sourcestartlinenumber=\"1\">Ensures the application's directory is on the system PATH so users\ncan run 'echohub' from any terminal session.</p>\n"
}, },
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.Services.PickerOutcome.yml",
"output": {
".html": {
"relative_path": "api/client/EchoHub.Client.Services.PickerOutcome.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Client.Services.PickerOutcome",
"Summary": null
},
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.Services.RoomKeyStore.yml",
"output": {
".html": {
"relative_path": "api/client/EchoHub.Client.Services.RoomKeyStore.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Client.Services.RoomKeyStore",
"Summary": "<p sourcefile=\"_api_meta/client/EchoHub.Client.Services.RoomKeyStore.yml\" sourcestartlinenumber=\"1\">Holds room content keys for end-to-end encrypted channels: in-memory for the\nactive session, persisted per-server in the client config (like saved sessions)\nso users don't retype the passphrase every launch. Keys never leave this machine.</p>\n"
},
{ {
"type": "ManagedReference", "type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.Services.UpdateBackupService.yml", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.UpdateBackupService.yml",
@@ -458,6 +570,20 @@
"Title": "EchoHub.Client.UI.Dialogs.AudioPlayerDialog", "Title": "EchoHub.Client.UI.Dialogs.AudioPlayerDialog",
"Summary": null "Summary": null
}, },
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.yml",
"output": {
".html": {
"relative_path": "api/client/EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Client.UI.Dialogs.ChannelPasswordDialog",
"Summary": "<p sourcefile=\"_api_meta/client/EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.yml\" sourcestartlinenumber=\"1\">Prompts for a channel password when joining a protected channel.\nReturns the entered password, or null if the user cancels.</p>\n"
},
{ {
"type": "ManagedReference", "type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ConnectDialog.yml", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ConnectDialog.yml",
@@ -682,6 +808,20 @@
"Title": "EchoHub.Client.UI.Dialogs", "Title": "EchoHub.Client.UI.Dialogs",
"Summary": null "Summary": null
}, },
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.UI.Helpers.DroppedFileParser.yml",
"output": {
".html": {
"relative_path": "api/client/EchoHub.Client.UI.Helpers.DroppedFileParser.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Client.UI.Helpers.DroppedFileParser",
"Summary": "<p sourcefile=\"_api_meta/client/EchoHub.Client.UI.Helpers.DroppedFileParser.yml\" sourcestartlinenumber=\"1\">Recognizes a dragged-and-dropped file (or files) that a terminal delivers into the input as an\nabsolute path. Terminals differ: some paste the whole path at once, others send it character by\ncharacter; either way this checks whether the current input text resolves to existing file(s).</p>\n"
},
{ {
"type": "ManagedReference", "type": "ManagedReference",
"source_relative_path": "_api_meta/client/EchoHub.Client.UI.Helpers.EmojiHelper.yml", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Helpers.EmojiHelper.yml",
@@ -1018,6 +1158,20 @@
"Title": "EchoHub.Core.DTOs.AssignRoleRequest", "Title": "EchoHub.Core.DTOs.AssignRoleRequest",
"Summary": null "Summary": null
}, },
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.AttachmentDto.yml",
"output": {
".html": {
"relative_path": "api/core/EchoHub.Core.DTOs.AttachmentDto.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Core.DTOs.AttachmentDto",
"Summary": "<p sourcefile=\"_api_meta/core/EchoHub.Core.DTOs.AttachmentDto.yml\" sourcestartlinenumber=\"1\">A file attached to a message. <xref href=\"EchoHub.Core.DTOs.AttachmentDto.AsciiPreview\" data-throw-if-not-resolved=\"false\"></xref> holds the color-tag art for\nimages (null otherwise). For end-to-end encrypted channels the content behind\n<xref href=\"EchoHub.Core.DTOs.AttachmentDto.Url\" data-throw-if-not-resolved=\"false\"></xref> and the preview are ciphertext the server cannot read.</p>\n"
},
{ {
"type": "ManagedReference", "type": "ManagedReference",
"source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.AvatarUploadResponse.yml", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.AvatarUploadResponse.yml",
@@ -1046,6 +1200,20 @@
"Title": "EchoHub.Core.DTOs.BanRequest", "Title": "EchoHub.Core.DTOs.BanRequest",
"Summary": null "Summary": null
}, },
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ChannelCryptoDto.yml",
"output": {
".html": {
"relative_path": "api/core/EchoHub.Core.DTOs.ChannelCryptoDto.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Core.DTOs.ChannelCryptoDto",
"Summary": "<p sourcefile=\"_api_meta/core/EchoHub.Core.DTOs.ChannelCryptoDto.yml\" sourcestartlinenumber=\"1\">Public crypto metadata for a channel — enough for a client to derive its join\ncredential from a passphrase. Never includes the wrapped room key.</p>\n"
},
{ {
"type": "ManagedReference", "type": "ManagedReference",
"source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ChannelDto.yml", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ChannelDto.yml",
@@ -1270,6 +1438,20 @@
"Title": "EchoHub.Core.DTOs.RegisterRequest", "Title": "EchoHub.Core.DTOs.RegisterRequest",
"Summary": null "Summary": null
}, },
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.RekeyChannelRequest.yml",
"output": {
".html": {
"relative_path": "api/core/EchoHub.Core.DTOs.RekeyChannelRequest.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Core.DTOs.RekeyChannelRequest",
"Summary": "<p sourcefile=\"_api_meta/core/EchoHub.Core.DTOs.RekeyChannelRequest.yml\" sourcestartlinenumber=\"1\">Passphrase change for an encrypted channel: the client proves knowledge of the old\npassphrase (old auth key), then supplies the re-wrapped room key under the new one.</p>\n"
},
{ {
"type": "ManagedReference", "type": "ManagedReference",
"source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.SendMessageRequest.yml", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.SendMessageRequest.yml",
@@ -1438,6 +1620,34 @@
"Title": "EchoHub.Core.DTOs", "Title": "EchoHub.Core.DTOs",
"Summary": null "Summary": null
}, },
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/core/EchoHub.Core.Models.Attachment.yml",
"output": {
".html": {
"relative_path": "api/core/EchoHub.Core.Models.Attachment.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Core.Models.Attachment",
"Summary": "<p sourcefile=\"_api_meta/core/EchoHub.Core.Models.Attachment.yml\" sourcestartlinenumber=\"1\">A file attached to a message (image, audio, or any file). A message may carry\nzero or more attachments alongside its text content (Discord-style).</p>\n"
},
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/core/EchoHub.Core.Models.AttachmentKind.yml",
"output": {
".html": {
"relative_path": "api/core/EchoHub.Core.Models.AttachmentKind.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Core.Models.AttachmentKind",
"Summary": "<p sourcefile=\"_api_meta/core/EchoHub.Core.Models.AttachmentKind.yml\" sourcestartlinenumber=\"1\">The kind of a message attachment. Determines how the client renders it\n(ASCII preview for images, a play affordance for audio, a download line for files).</p>\n"
},
{ {
"type": "ManagedReference", "type": "ManagedReference",
"source_relative_path": "_api_meta/core/EchoHub.Core.Models.Channel.yml", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.Channel.yml",
@@ -1564,6 +1774,90 @@
"Title": "EchoHub.Core.Models", "Title": "EchoHub.Core.Models",
"Summary": null "Summary": null
}, },
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/core/EchoHub.Core.Security.RoomCrypto.DerivedKeys.yml",
"output": {
".html": {
"relative_path": "api/core/EchoHub.Core.Security.RoomCrypto.DerivedKeys.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Core.Security.RoomCrypto.DerivedKeys",
"Summary": null
},
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/core/EchoHub.Core.Security.RoomCrypto.yml",
"output": {
".html": {
"relative_path": "api/core/EchoHub.Core.Security.RoomCrypto.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Core.Security.RoomCrypto",
"Summary": "<p sourcefile=\"_api_meta/core/EchoHub.Core.Security.RoomCrypto.yml\" sourcestartlinenumber=\"1\">Client-side envelope encryption for private (end-to-end encrypted) channels.</p>\n<p sourcefile=\"_api_meta/core/EchoHub.Core.Security.RoomCrypto.yml\" sourcestartlinenumber=\"3\">Design: at creation the client generates a random 256-bit room content key (RCK)\nthat encrypts all room content. The RCK is stored on the server <em sourcefile=\"_api_meta/core/EchoHub.Core.Security.RoomCrypto.yml\" sourcestartlinenumber=\"4\">wrapped</em>\n(AES-GCM encrypted) by a key derived from the passphrase, next to a BCrypt hash\nof a separately derived auth key used as the join gate. The passphrase, the\nkey-encryption key, and the RCK never leave the client, so the server can gate\njoins and count/measure content without being able to read it. Changing the\npassphrase only re-wraps the RCK — history is never re-encrypted.</p>\n<p sourcefile=\"_api_meta/core/EchoHub.Core.Security.RoomCrypto.yml\" sourcestartlinenumber=\"11\">Derivation: PBKDF2-SHA256(passphrase, salt, 210000 iterations) → 64 bytes;\nfirst 32 bytes are the auth key (sent to the server as lowercase hex),\nlast 32 bytes are the key-encryption key (never sent).</p>\n"
},
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/core/EchoHub.Core.Security.yml",
"output": {
".html": {
"relative_path": "api/core/EchoHub.Core.Security.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Core.Security",
"Summary": null
},
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/core/EchoHub.Core.Services.FileValidationHelper.yml",
"output": {
".html": {
"relative_path": "api/core/EchoHub.Core.Services.FileValidationHelper.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Core.Services.FileValidationHelper",
"Summary": null
},
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/core/EchoHub.Core.Services.ImageToAsciiService.yml",
"output": {
".html": {
"relative_path": "api/core/EchoHub.Core.Services.ImageToAsciiService.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Core.Services.ImageToAsciiService",
"Summary": null
},
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/core/EchoHub.Core.Services.yml",
"output": {
".html": {
"relative_path": "api/core/EchoHub.Core.Services.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Core.Services",
"Summary": null
},
{ {
"type": "ManagedReference", "type": "ManagedReference",
"source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcBroadcaster.yml", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcBroadcaster.yml",
@@ -1858,6 +2152,20 @@
"Title": "EchoHub.Server.Data.Migrations.AddAttachmentFileSize", "Title": "EchoHub.Server.Data.Migrations.AddAttachmentFileSize",
"Summary": null "Summary": null
}, },
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope.yml",
"output": {
".html": {
"relative_path": "api/server/EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope",
"Summary": null
},
{ {
"type": "ManagedReference", "type": "ManagedReference",
"source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddChannelIsPublic.yml", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddChannelIsPublic.yml",
@@ -1886,6 +2194,20 @@
"Title": "EchoHub.Server.Data.Migrations.AddChannelMembership", "Title": "EchoHub.Server.Data.Migrations.AddChannelMembership",
"Summary": null "Summary": null
}, },
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddChannelPasswordHash.yml",
"output": {
".html": {
"relative_path": "api/server/EchoHub.Server.Data.Migrations.AddChannelPasswordHash.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Server.Data.Migrations.AddChannelPasswordHash",
"Summary": null
},
{ {
"type": "ManagedReference", "type": "ManagedReference",
"source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddEncryptionSupport.yml", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddEncryptionSupport.yml",
@@ -1900,6 +2222,20 @@
"Title": "EchoHub.Server.Data.Migrations.AddEncryptionSupport", "Title": "EchoHub.Server.Data.Migrations.AddEncryptionSupport",
"Summary": null "Summary": null
}, },
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddMessageAttachments.yml",
"output": {
".html": {
"relative_path": "api/server/EchoHub.Server.Data.Migrations.AddMessageAttachments.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Server.Data.Migrations.AddMessageAttachments",
"Summary": null
},
{ {
"type": "ManagedReference", "type": "ManagedReference",
"source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddMessageEmbed.yml", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddMessageEmbed.yml",
@@ -2068,34 +2404,6 @@
"Title": "EchoHub.Server.Services.FileStorageService", "Title": "EchoHub.Server.Services.FileStorageService",
"Summary": null "Summary": null
}, },
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/server/EchoHub.Server.Services.FileValidationHelper.yml",
"output": {
".html": {
"relative_path": "api/server/EchoHub.Server.Services.FileValidationHelper.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Server.Services.FileValidationHelper",
"Summary": null
},
{
"type": "ManagedReference",
"source_relative_path": "_api_meta/server/EchoHub.Server.Services.ImageToAsciiService.yml",
"output": {
".html": {
"relative_path": "api/server/EchoHub.Server.Services.ImageToAsciiService.html"
}
},
"version": "",
"Uid": null,
"IsMRef": true,
"Title": "EchoHub.Server.Services.ImageToAsciiService",
"Summary": null
},
{ {
"type": "ManagedReference", "type": "ManagedReference",
"source_relative_path": "_api_meta/server/EchoHub.Server.Services.LinkEmbedService.yml", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.LinkEmbedService.yml",
@@ -2526,6 +2834,16 @@
}, },
"version": "" "version": ""
}, },
{
"type": "Conceptual",
"source_relative_path": "changelog/v0.2.12.md",
"output": {
".html": {
"relative_path": "changelog/v0.2.12.html"
}
},
"version": ""
},
{ {
"type": "Conceptual", "type": "Conceptual",
"source_relative_path": "changelog/v0.2.2.md", "source_relative_path": "changelog/v0.2.2.md",
+1 -1
View File
@@ -77,7 +77,7 @@
<li>[ ] fix the chat trailing; when user scrolls up, and somebody sends a message the chat instantly &quot;teleports&quot; to the very bottom</li> <li>[ ] fix the chat trailing; when user scrolls up, and somebody sends a message the chat instantly &quot;teleports&quot; to the very bottom</li>
<li>[x] disable the autorun of files (maybe keep for mp4? gotta do some sec research on it)</li> <li>[x] disable the autorun of files (maybe keep for mp4? gotta do some sec research on it)</li>
<li>[x] when user creates a new channel, he gets moved to that channel; but the userlist does not refresh the state on that it refreshes when user re-enters the channel again</li> <li>[x] when user creates a new channel, he gets moved to that channel; but the userlist does not refresh the state on that it refreshes when user re-enters the channel again</li>
<li>[ ] password protected rooms</li> <li>[x] password protected rooms (end-to-end encrypted — server cannot read contents)</li>
<li>[ ] better audio lib, current one (NetCoreAudio) does not support seek or other audio actions</li> <li>[ ] better audio lib, current one (NetCoreAudio) does not support seek or other audio actions</li>
<li>[ ] Use options pattern for both client &amp; server <li>[ ] Use options pattern for both client &amp; server
<ul> <ul>
+2911 -430
View File
File diff suppressed because it is too large Load Diff