From 03bcf194d62182d4ce16a2f905bc56e1bbac1f1a Mon Sep 17 00:00:00 2001 From: HueByte Date: Sun, 22 Feb 2026 04:57:18 +0000 Subject: [PATCH] deploy: 17e64293b5263be67e4afb00d236027c94e75c3d --- api/client-articles/index.html | 6 +- .../EchoHub.Client.AppOrchestrator.html | 2 +- api/client/EchoHub.Client.AsyncRunner.html | 2 +- .../EchoHub.Client.Config.SavedServer.html | 39 +- .../EchoHub.Client.Services.ApiClient.html | 108 + ....Client.Services.AudioPlaybackService.html | 475 +++++ ...EchoHub.Client.Services.UpdateChecker.html | 124 +- api/client/EchoHub.Client.Services.html | 4 + .../EchoHub.Client.UI.AudioPlayerDialog.html | 244 +++ .../EchoHub.Client.UI.ChannelListSource.html | 98 +- api/client/EchoHub.Client.UI.ChatColors.html | 78 +- api/client/EchoHub.Client.UI.ChatLine.html | 95 +- .../EchoHub.Client.UI.ChatListSource.html | 134 +- api/client/EchoHub.Client.UI.ChatSegment.html | 6 +- api/client/EchoHub.Client.UI.ColorHelper.html | 2 +- .../EchoHub.Client.UI.ConnectDialog.html | 2 +- ...EchoHub.Client.UI.ConnectDialogResult.html | 82 +- ...EchoHub.Client.UI.CreateChannelDialog.html | 2 +- api/client/EchoHub.Client.UI.MainWindow.html | 552 +++-- .../EchoHub.Client.UI.ProfileEditDialog.html | 2 +- .../EchoHub.Client.UI.ProfileViewDialog.html | 4 +- .../EchoHub.Client.UI.StatusDialog.html | 2 +- ...EchoHub.Client.UI.UpdateConfirmDialog.html | 247 +++ ...choHub.Client.UI.UpdateProgressDialog.html | 299 +++ .../EchoHub.Client.UI.UserListSource.html | 100 +- api/client/EchoHub.Client.UI.html | 12 + api/core-articles/index.html | 2 +- .../EchoHub.Core.Constants.HubConstants.html | 62 +- ...choHub.Core.Contracts.ChannelListItem.html | 32 +- ...choHub.Core.Contracts.IChannelService.html | 449 ++++ .../EchoHub.Core.Contracts.IChatService.html | 67 - api/core/EchoHub.Core.Contracts.html | 4 + api/core/EchoHub.Core.DTOs.ApiResponse-1.html | 700 ++++++ api/core/EchoHub.Core.DTOs.ApiResponse.html | 660 ++++++ api/core/EchoHub.Core.DTOs.ChannelError.html | 162 ++ ...oHub.Core.DTOs.ChannelOperationResult.html | 765 +++++++ api/core/EchoHub.Core.DTOs.MessageDto.html | 47 +- api/core/EchoHub.Core.DTOs.html | 19 + api/core/EchoHub.Core.Models.Message.html | 31 + api/core/EchoHub.Core.Models.MessageType.html | 3 + api/index.html | 4 +- api/server-articles/index.html | 5 +- ...choHub.Server.Irc.IrcClientConnection.html | 160 +- .../EchoHub.Server.Irc.IrcCommandHandler.html | 10 +- ...Server.Controllers.ChannelsController.html | 10 +- ...Data.Migrations.AddAttachmentFileSize.html | 306 +++ .../EchoHub.Server.Data.Migrations.html | 4 + ...choHub.Server.Services.ChannelService.html | 526 +++++ .../EchoHub.Server.Services.ChatService.html | 75 +- ...ub.Server.Services.FileCleanupService.html | 257 +++ ....Server.Services.FileValidationHelper.html | 37 + api/server/EchoHub.Server.Services.html | 8 + api/toc.html | 36 + api/toc.json | 2 +- articles/architecture.html | 10 +- changelog/index.html | 2 + changelog/toc.html | 3 + changelog/toc.json | 2 +- changelog/v0.2.4.html | 2 +- changelog/v0.2.5.html | 232 ++ index.json | 131 +- manifest.json | 178 ++ xrefmap.yml | 1890 +++++++++++++++-- 63 files changed, 8871 insertions(+), 743 deletions(-) create mode 100644 api/client/EchoHub.Client.Services.AudioPlaybackService.html create mode 100644 api/client/EchoHub.Client.UI.AudioPlayerDialog.html create mode 100644 api/client/EchoHub.Client.UI.UpdateConfirmDialog.html create mode 100644 api/client/EchoHub.Client.UI.UpdateProgressDialog.html create mode 100644 api/core/EchoHub.Core.Contracts.IChannelService.html create mode 100644 api/core/EchoHub.Core.DTOs.ApiResponse-1.html create mode 100644 api/core/EchoHub.Core.DTOs.ApiResponse.html create mode 100644 api/core/EchoHub.Core.DTOs.ChannelError.html create mode 100644 api/core/EchoHub.Core.DTOs.ChannelOperationResult.html create mode 100644 api/server/EchoHub.Server.Data.Migrations.AddAttachmentFileSize.html create mode 100644 api/server/EchoHub.Server.Services.ChannelService.html create mode 100644 api/server/EchoHub.Server.Services.FileCleanupService.html create mode 100644 changelog/v0.2.5.html diff --git a/api/client-articles/index.html b/api/client-articles/index.html index 06cd5de..09a0c01 100644 --- a/api/client-articles/index.html +++ b/api/client-articles/index.html @@ -91,9 +91,11 @@

Topics

diff --git a/api/client/EchoHub.Client.AppOrchestrator.html b/api/client/EchoHub.Client.AppOrchestrator.html index efe12f9..2fbb956 100644 --- a/api/client/EchoHub.Client.AppOrchestrator.html +++ b/api/client/EchoHub.Client.AppOrchestrator.html @@ -173,7 +173,7 @@ Owns session state and wires UI events to service calls.

Parameters

-
app IApplication
+
app IApplication
config ClientConfig
diff --git a/api/client/EchoHub.Client.AsyncRunner.html b/api/client/EchoHub.Client.AsyncRunner.html index 9bc58a9..19193ec 100644 --- a/api/client/EchoHub.Client.AsyncRunner.html +++ b/api/client/EchoHub.Client.AsyncRunner.html @@ -170,7 +170,7 @@ Runs async work on a background thread and routes exceptions to the UI.

Parameters

-
app IApplication
+
app IApplication
work Func<Task>
diff --git a/api/client/EchoHub.Client.Config.SavedServer.html b/api/client/EchoHub.Client.Config.SavedServer.html index 7a6d75d..2148284 100644 --- a/api/client/EchoHub.Client.Config.SavedServer.html +++ b/api/client/EchoHub.Client.Config.SavedServer.html @@ -244,10 +244,10 @@ Class SavedServer + -

- Token +

+ RefreshToken

@@ -255,7 +255,7 @@ Class SavedServer
-
public string? Token { get; set; }
+
public string? RefreshToken { get; set; }
@@ -275,6 +275,37 @@ Class SavedServer
+ +

+ RememberMe + +

+ +
+
+ +
+
public bool RememberMe { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + +

diff --git a/api/client/EchoHub.Client.Services.ApiClient.html b/api/client/EchoHub.Client.Services.ApiClient.html index 565c4fe..def1502 100644 --- a/api/client/EchoHub.Client.Services.ApiClient.html +++ b/api/client/EchoHub.Client.Services.ApiClient.html @@ -501,6 +501,44 @@ Class ApiClient + +

+ DownloadFileToTempAsync(string, string) + +

+ +
+
+ +
+
public Task<string> DownloadFileToTempAsync(string relativeUrl, string fileName)
+
+ +

Parameters

+
+
relativeUrl string
+
+
fileName string
+
+
+ +

Returns

+
+
Task<string>
+
+
+ + + + + + + + + + +

@@ -739,6 +777,42 @@ Used by EchoHubConnection for SignalR token provider.

+ + +

+ LoginWithRefreshTokenAsync(string) + +

+ +
+
+ +
+
public Task<LoginResponse> LoginWithRefreshTokenAsync(string refreshToken)
+
+ +

Parameters

+
+
refreshToken string
+
+
+ +

Returns

+
+
Task<LoginResponse>
+
+
+ + + + + + + + + + +

@@ -1183,6 +1257,40 @@ Used by EchoHubConnection for SignalR token provider.

+

Events +

+ + + +

+ OnTokensRefreshed + +

+ +
+
+ +
+
public event Action? OnTokensRefreshed
+
+ + + + + + +

Event Type

+
+
Action
+
+
+ + + + + + + diff --git a/api/client/EchoHub.Client.Services.AudioPlaybackService.html b/api/client/EchoHub.Client.Services.AudioPlaybackService.html new file mode 100644 index 0000000..a1f6fa0 --- /dev/null +++ b/api/client/EchoHub.Client.Services.AudioPlaybackService.html @@ -0,0 +1,475 @@ + + + + + Class AudioPlaybackService | EchoHub Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AudioPlaybackService +

+ +
+
Namespace
EchoHub.Client.Services
+
Assembly
EchoHub.Client.dll
+
+ +
+
+ +
+
public class AudioPlaybackService
+
+ + + + +
+
Inheritance
+
+ +
AudioPlaybackService
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ AudioPlaybackService() + +

+ +
+
+ +
+
public AudioPlaybackService()
+
+ + + + + + + + + + + + + +

Properties +

+ + + + +

+ IsPaused + +

+ +
+
+ +
+
public bool IsPaused { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ IsPlaying + +

+ +
+
+ +
+
public bool IsPlaying { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ PauseAsync() + +

+ +
+
+ +
+
public Task PauseAsync()
+
+ + +

Returns

+
+
Task
+
+
+ + + + + + + + + + + + + +

+ PlayAsync(string) + +

+ +
+
+ +
+
public Task PlayAsync(string filePath)
+
+ +

Parameters

+
+
filePath string
+
+
+ +

Returns

+
+
Task
+
+
+ + + + + + + + + + + + + +

+ ResumeAsync() + +

+ +
+
+ +
+
public Task ResumeAsync()
+
+ + +

Returns

+
+
Task
+
+
+ + + + + + + + + + + + + +

+ SetVolumeAsync(byte) + +

+ +
+
+ +
+
public Task SetVolumeAsync(byte volume)
+
+ +

Parameters

+
+
volume byte
+
+
+ +

Returns

+
+
Task
+
+
+ + + + + + + + + + + + + +

+ StopAsync() + +

+ +
+
+ +
+
public Task StopAsync()
+
+ + +

Returns

+
+
Task
+
+
+ + + + + + + + + + + +

Events +

+ + + +

+ PlaybackFinished + +

+ +
+
+ +
+
public event EventHandler? PlaybackFinished
+
+ + + + + + +

Event Type

+
+
EventHandler
+
+
+ + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/client/EchoHub.Client.Services.UpdateChecker.html b/api/client/EchoHub.Client.Services.UpdateChecker.html index 15f8d69..451b9f0 100644 --- a/api/client/EchoHub.Client.Services.UpdateChecker.html +++ b/api/client/EchoHub.Client.Services.UpdateChecker.html @@ -101,7 +101,7 @@ Class UpdateChecker
-
public static class UpdateChecker
+
public sealed class UpdateChecker : IDisposable
@@ -115,6 +115,12 @@ Class UpdateChecker
+
+
Implements
+
+
IDisposable
+
+
@@ -123,9 +129,6 @@ Class UpdateChecker object.GetType() -
- object.MemberwiseClone() -
object.ToString()
@@ -148,32 +151,121 @@ Class UpdateChecker Constructors + + + + + +

+ UpdateChecker(IApplication) + +

+ +
+
+ +
+
public UpdateChecker(IApplication app)
+
+ +

Parameters

+
+
app IApplication
+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ CurrentVersion + +

+ +
+
+ +
+
public static string CurrentVersion { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + +

Methods

- + -

- CheckForUpdateAsync() +

+ Dispose()

-

Checks GitHub for a newer release. Returns the new version string if one exists, or null. -Never throws — all errors are silently swallowed.

-
+
-
public static Task<string?> CheckForUpdateAsync()
+
public void Dispose()
+
+ + + + + + + + + + + + + + + +

+ Start() + +

+ +
+
+ +
+
public void Start()
-

Returns

-
-
Task<string>
-
-
diff --git a/api/client/EchoHub.Client.Services.html b/api/client/EchoHub.Client.Services.html index 967c64d..0d43f22 100644 --- a/api/client/EchoHub.Client.Services.html +++ b/api/client/EchoHub.Client.Services.html @@ -98,6 +98,10 @@ Classes
ApiClient
+
+
AudioPlaybackService
+
+
ClientEncryptionService

Client-side encryption service. Uses the same AES-256-GCM format as the server diff --git a/api/client/EchoHub.Client.UI.AudioPlayerDialog.html b/api/client/EchoHub.Client.UI.AudioPlayerDialog.html new file mode 100644 index 0000000..10e79c2 --- /dev/null +++ b/api/client/EchoHub.Client.UI.AudioPlayerDialog.html @@ -0,0 +1,244 @@ + + + + + Class AudioPlayerDialog | EchoHub Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AudioPlayerDialog +

+ +
+
Namespace
EchoHub.Client.UI
+
Assembly
EchoHub.Client.dll
+
+ +
+
+ +
+
public sealed class AudioPlayerDialog
+
+ + + + +
+
Inheritance
+
+ +
AudioPlayerDialog
+
+
+ + + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ AudioPlayerDialog() + +

+ +
+
+ +
+
public AudioPlayerDialog()
+
+ + + + + + + + + + + + + +

Methods +

+ + + + +

+ Show(IApplication, AudioPlaybackService, string, string) + +

+ +
+
+ +
+
public static void Show(IApplication app, AudioPlaybackService audioService, string filePath, string fileName)
+
+ +

Parameters

+
+
app IApplication
+
+
audioService AudioPlaybackService
+
+
filePath string
+
+
fileName string
+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/client/EchoHub.Client.UI.ChannelListSource.html b/api/client/EchoHub.Client.UI.ChannelListSource.html index 65be082..3b9a705 100644 --- a/api/client/EchoHub.Client.UI.ChannelListSource.html +++ b/api/client/EchoHub.Client.UI.ChannelListSource.html @@ -120,7 +120,7 @@ Active channel gets a > indicator, unread channels are bright with a count ba
Implements
-
IListDataSource
+
@@ -198,7 +198,8 @@ Active channel gets a > indicator, unread channels are bright with a count ba -
+

Gets the number of items in the data source.

+
@@ -229,7 +230,8 @@ Active channel gets a > indicator, unread channels are bright with a count ba -
+

Gets the width in columns of the widest item in the data source.

+
@@ -249,6 +251,9 @@ Active channel gets a > indicator, unread channels are bright with a count ba +

Remarks

+

ListView uses this value to set its horizontal content size for scrolling.

+
@@ -260,7 +265,8 @@ Active channel gets a > indicator, unread channels are bright with a count ba -
+

Gets or sets whether the CollectionChanged event should be suppressed.

+
@@ -280,6 +286,10 @@ Active channel gets a > indicator, unread channels are bright with a count ba +

Remarks

+

Set to true to prevent CollectionChanged from being raised during bulk +operations. Set back to false to resume event notifications.

+
@@ -321,7 +331,8 @@ Active channel gets a > indicator, unread channels are bright with a count ba -
+

Determines whether the specified item is marked.

+
@@ -331,13 +342,15 @@ Active channel gets a > indicator, unread channels are bright with a count ba

Parameters

item int
-
+

The zero-based index of the item.

+

Returns

bool
-
+

true if the item is marked; otherwise false.

+
@@ -346,6 +359,10 @@ Active channel gets a > indicator, unread channels are bright with a count ba +

Remarks

+

ListView calls this method to determine whether to render the item with a mark indicator when +ShowMarks is true.

+
@@ -357,7 +374,8 @@ Active channel gets a > indicator, unread channels are bright with a count ba -
+

Renders the specified item to the ListView.

+
@@ -366,20 +384,27 @@ Active channel gets a > indicator, unread channels are bright with a count ba

Parameters

-
listView ListView
-
+
listView ListView
+

The ListView to render to.

+
selected bool
-
+

true if the item is currently selected; otherwise false.

+
item int
-
+

The zero-based index of the item to render.

+
col int
-
+

The column in listView Viewport where rendering starts.

+
row int
-
+

The row in listView Viewport where rendering starts.

+
width int
-
+

The width available for rendering.

+
viewportX int
-
+

The horizontal scroll offset.

+
@@ -389,6 +414,15 @@ Active channel gets a > indicator, unread channels are bright with a count ba +

Remarks

+

+ ListView calls this method for each visible item during rendering. The color scheme will be + set based on selection state before this method is called. +

+

+ Implementations must fill the entire width to avoid rendering artifacts. +

+
@@ -400,7 +434,8 @@ Active channel gets a > indicator, unread channels are bright with a count ba -
+

Sets the marked state of the specified item.

+
@@ -410,9 +445,11 @@ Active channel gets a > indicator, unread channels are bright with a count ba

Parameters

item int
-
+

The zero-based index of the item.

+
value bool
-
+

true to mark the item; false to unmark it.

+
@@ -422,6 +459,10 @@ Active channel gets a > indicator, unread channels are bright with a count ba +

Remarks

+

ListView calls this method when the user toggles marking (e.g., via the SPACE key) if +ShowMarks is true.

+
@@ -433,7 +474,8 @@ Active channel gets a > indicator, unread channels are bright with a count ba -
+

Returns the underlying data source as an System.Collections.IList.

+
@@ -444,7 +486,8 @@ Active channel gets a > indicator, unread channels are bright with a count ba

Returns

IList
-
+

The data source as an System.Collections.IList.

+
@@ -453,6 +496,11 @@ Active channel gets a > indicator, unread channels are bright with a count ba +

Remarks

+

ListView uses this method to access individual items for events like +ValueChanged and to enable keyboard search via +KeystrokeNavigator.

+
@@ -502,7 +550,8 @@ Active channel gets a > indicator, unread channels are bright with a count ba -
+

Raised when items are added, removed, moved, or the entire collection is refreshed.

+
@@ -522,6 +571,11 @@ Active channel gets a > indicator, unread channels are bright with a count ba +

Remarks

+

ListView subscribes to this event to update its display and content size when the data +changes. Implementations should raise this event whenever the underlying collection changes, unless +SuspendCollectionChangedEvent is true.

+
diff --git a/api/client/EchoHub.Client.UI.ChatColors.html b/api/client/EchoHub.Client.UI.ChatColors.html index 20fcb69..94ddc6e 100644 --- a/api/client/EchoHub.Client.UI.ChatColors.html +++ b/api/client/EchoHub.Client.UI.ChatColors.html @@ -154,6 +154,36 @@ Class ChatColors + AudioAttr + + + +
+
+ +
+
public static readonly Attribute AudioAttr
+
+ + + + +

Field Value

+
+
Attribute
+
+
+ + + + + + + + + +

EmbedBorderAttr @@ -171,7 +201,7 @@ Class ChatColors Field Value

-
Attribute
+
Attribute
@@ -201,7 +231,7 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
@@ -231,7 +261,7 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
@@ -261,7 +291,37 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
+
+
+ + + + + + + + + + +

+ FileAttr + +

+ +
+
+ +
+
public static readonly Attribute FileAttr
+
+ + + + +

Field Value

+
+
Attribute
@@ -291,7 +351,7 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
@@ -321,7 +381,7 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
@@ -351,7 +411,7 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
@@ -381,7 +441,7 @@ Class ChatColors Field Value
-
Attribute
+
Attribute
@@ -417,7 +477,7 @@ Non-mention text uses the provided default color.

text string
-
defaultColor Attribute?
+
defaultColor Attribute?
diff --git a/api/client/EchoHub.Client.UI.ChatLine.html b/api/client/EchoHub.Client.UI.ChatLine.html index 3b627cf..8a4f35b 100644 --- a/api/client/EchoHub.Client.UI.ChatLine.html +++ b/api/client/EchoHub.Client.UI.ChatLine.html @@ -216,6 +216,68 @@ Class ChatLine + + +

+ AttachmentFileName + +

+ +
+
+ +
+
public string? AttachmentFileName { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ AttachmentUrl + +

+ +
+
+ +
+
public string? AttachmentUrl { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + +

@@ -340,6 +402,37 @@ Class ChatLine + +

+ Type + +

+ +
+
+ +
+
public MessageType? Type { get; set; }
+
+ + + + + +

Property Value

+
+
MessageType?
+
+
+ + + + + + + +

Methods

@@ -364,7 +457,7 @@ Format: {F:RRGGBB} (foreground), {B:RRGGBB} (background), {X} (reset).

text string
-
defaultAttr Attribute?
+
defaultAttr Attribute?
diff --git a/api/client/EchoHub.Client.UI.ChatListSource.html b/api/client/EchoHub.Client.UI.ChatListSource.html index d250a94..9bf9bb3 100644 --- a/api/client/EchoHub.Client.UI.ChatListSource.html +++ b/api/client/EchoHub.Client.UI.ChatListSource.html @@ -119,7 +119,7 @@ Class ChatListSource
Implements
-
IListDataSource
+
IListDataSource
IDisposable
@@ -197,7 +197,8 @@ Class ChatListSource -
+

Gets the number of items in the data source.

+
@@ -228,7 +229,8 @@ Class ChatListSource -
+

Gets the width in columns of the widest item in the data source.

+
@@ -248,6 +250,9 @@ Class ChatListSource Remarks +

ListView uses this value to set its horizontal content size for scrolling.

+
@@ -259,7 +264,8 @@ Class ChatListSource -
+

Gets or sets whether the CollectionChanged event should be suppressed.

+
@@ -279,6 +285,10 @@ Class ChatListSource Remarks +

Set to true to prevent CollectionChanged from being raised during bulk +operations. Set back to false to resume event notifications.

+
@@ -401,6 +411,42 @@ Class ChatListSource + +

+ GetLine(int) + +

+ +
+
+ +
+
public ChatLine? GetLine(int index)
+
+ +

Parameters

+
+
index int
+
+
+ +

Returns

+
+
ChatLine
+
+
+ + + + + + + + + + +

@@ -441,7 +487,8 @@ Class ChatListSource

-
+

Determines whether the specified item is marked.

+
@@ -451,13 +498,15 @@ Class ChatListSource Parameters
item int
-
+

The zero-based index of the item.

+

Returns

bool
-
+

true if the item is marked; otherwise false.

+
@@ -466,6 +515,10 @@ Class ChatListSource Remarks +

ListView calls this method to determine whether to render the item with a mark indicator when +ShowMarks is true.

+
@@ -477,7 +530,8 @@ Class ChatListSource -
+

Renders the specified item to the ListView.

+
@@ -486,20 +540,27 @@ Class ChatListSource Parameters
-
listView ListView
-
+
listView ListView
+

The ListView to render to.

+
selected bool
-
+

true if the item is currently selected; otherwise false.

+
item int
-
+

The zero-based index of the item to render.

+
col int
-
+

The column in listView Viewport where rendering starts.

+
row int
-
+

The row in listView Viewport where rendering starts.

+
width int
-
+

The width available for rendering.

+
viewportX int
-
+

The horizontal scroll offset.

+
@@ -509,6 +570,15 @@ Class ChatListSource Remarks +

+ ListView calls this method for each visible item during rendering. The color scheme will be + set based on selection state before this method is called. +

+

+ Implementations must fill the entire width to avoid rendering artifacts. +

+
@@ -520,7 +590,8 @@ Class ChatListSource -
+

Sets the marked state of the specified item.

+
@@ -530,9 +601,11 @@ Class ChatListSource Parameters
item int
-
+

The zero-based index of the item.

+
value bool
-
+

true to mark the item; false to unmark it.

+
@@ -542,6 +615,10 @@ Class ChatListSource Remarks +

ListView calls this method when the user toggles marking (e.g., via the SPACE key) if +ShowMarks is true.

+
@@ -553,7 +630,8 @@ Class ChatListSource -
+

Returns the underlying data source as an System.Collections.IList.

+
@@ -564,7 +642,8 @@ Class ChatListSource Returns
IList
-
+

The data source as an System.Collections.IList.

+
@@ -573,6 +652,11 @@ Class ChatListSource
Remarks +

ListView uses this method to access individual items for events like +ValueChanged and to enable keyboard search via +KeystrokeNavigator.

+
@@ -587,7 +671,8 @@ Class ChatListSource -
+

Raised when items are added, removed, moved, or the entire collection is refreshed.

+
@@ -607,6 +692,11 @@ Class ChatListSource Remarks +

ListView subscribes to this event to update its display and content size when the data +changes. Implementations should raise this event whenever the underlying collection changes, unless +SuspendCollectionChangedEvent is true.

+
diff --git a/api/client/EchoHub.Client.UI.ChatSegment.html b/api/client/EchoHub.Client.UI.ChatSegment.html index 27ca186..6850d27 100644 --- a/api/client/EchoHub.Client.UI.ChatSegment.html +++ b/api/client/EchoHub.Client.UI.ChatSegment.html @@ -200,7 +200,7 @@ Class ChatSegment
Text string
-
Color Attribute?
+
Color Attribute?
@@ -239,7 +239,7 @@ Class ChatSegment Property Value
-
Attribute?
+
Attribute?
@@ -334,7 +334,7 @@ Class ChatSegment
Text string
-
Color Attribute?
+
Color Attribute?
diff --git a/api/client/EchoHub.Client.UI.ColorHelper.html b/api/client/EchoHub.Client.UI.ColorHelper.html index c4fe9ef..0e87bcb 100644 --- a/api/client/EchoHub.Client.UI.ColorHelper.html +++ b/api/client/EchoHub.Client.UI.ColorHelper.html @@ -175,7 +175,7 @@ Class ColorHelper Returns
-
Attribute?
+
Attribute?
diff --git a/api/client/EchoHub.Client.UI.ConnectDialog.html b/api/client/EchoHub.Client.UI.ConnectDialog.html index f537be5..e655649 100644 --- a/api/client/EchoHub.Client.UI.ConnectDialog.html +++ b/api/client/EchoHub.Client.UI.ConnectDialog.html @@ -199,7 +199,7 @@ Returns the result, or null if cancelled.

Parameters

-
app IApplication
+
app IApplication
savedServers List<SavedServer>
diff --git a/api/client/EchoHub.Client.UI.ConnectDialogResult.html b/api/client/EchoHub.Client.UI.ConnectDialogResult.html index 1dd93ad..859774c 100644 --- a/api/client/EchoHub.Client.UI.ConnectDialogResult.html +++ b/api/client/EchoHub.Client.UI.ConnectDialogResult.html @@ -183,8 +183,8 @@ Class ConnectDialogResult -

- ConnectDialogResult(string, string, string, bool) +

+ ConnectDialogResult(string, string, string, bool, bool, string?)

@@ -193,7 +193,7 @@ Class ConnectDialogResult
-
public ConnectDialogResult(string ServerUrl, string Username, string Password, bool IsRegister)
+
public ConnectDialogResult(string ServerUrl, string Username, string Password, bool IsRegister, bool RememberMe, string? SavedRefreshToken)

Parameters

@@ -206,6 +206,10 @@ Class ConnectDialogResult
bool
+
RememberMe bool
+
+
SavedRefreshToken string
+
@@ -316,6 +320,68 @@ Class ConnectDialogResult + +

+ RememberMe + +

+ +
+
+ +
+
public bool RememberMe { get; init; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ SavedRefreshToken + +

+ +
+
+ +
+
public string? SavedRefreshToken { get; init; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + +

@@ -384,8 +450,8 @@ Class ConnectDialogResult -

- Deconstruct(out string, out string, out string, out bool) +

+ Deconstruct(out string, out string, out string, out bool, out bool, out string?)

@@ -393,7 +459,7 @@ Class ConnectDialogResult
-
public void Deconstruct(out string ServerUrl, out string Username, out string Password, out bool IsRegister)
+
public void Deconstruct(out string ServerUrl, out string Username, out string Password, out bool IsRegister, out bool RememberMe, out string? SavedRefreshToken)

Parameters

@@ -406,6 +472,10 @@ Class ConnectDialogResult
bool
+
RememberMe bool
+
+
SavedRefreshToken string
+
diff --git a/api/client/EchoHub.Client.UI.CreateChannelDialog.html b/api/client/EchoHub.Client.UI.CreateChannelDialog.html index 447c83f..19f60ed 100644 --- a/api/client/EchoHub.Client.UI.CreateChannelDialog.html +++ b/api/client/EchoHub.Client.UI.CreateChannelDialog.html @@ -195,7 +195,7 @@ Class CreateChannelDialog Parameters
-
app IApplication
+
app IApplication
diff --git a/api/client/EchoHub.Client.UI.MainWindow.html b/api/client/EchoHub.Client.UI.MainWindow.html index 8b4824e..4b166e7 100644 --- a/api/client/EchoHub.Client.UI.MainWindow.html +++ b/api/client/EchoHub.Client.UI.MainWindow.html @@ -112,8 +112,8 @@ Class MainWindow Inheritance
object
-
View
-
Runnable
+
View
+
Runnable
MainWindow
@@ -122,7 +122,7 @@ Class MainWindow Implements
IDisposable
-
IRunnable
+
IRunnable
@@ -131,646 +131,661 @@ Class MainWindow Inherited Members
- Runnable.SetApp(IApplication) + Runnable.SetApp(IApplication)
- Runnable.SetIsRunning(bool) + Runnable.SetIsRunning(bool)
- Runnable.RequestStop() + Runnable.RequestStop()
- Runnable.RaiseIsRunningChanging(bool, bool) + Runnable.RaiseIsRunningChanging(bool, bool)
- Runnable.RaiseIsRunningChangedEvent(bool) + Runnable.RaiseIsRunningChangedEvent(bool)
- Runnable.SetIsModal(bool) + Runnable.SetIsModal(bool)
- Runnable.RaiseIsModalChangedEvent(bool) + Runnable.RaiseIsModalChangedEvent(bool)
- Runnable.Result + Runnable.Result
- Runnable.IsRunning + Runnable.IsRunning
- Runnable.IsModal + Runnable.IsModal
- Runnable.StopRequested + Runnable.StopRequested
- Runnable.IsRunningChanging + Runnable.IsRunningChanging
- Runnable.IsRunningChanged + Runnable.IsRunningChanged
- Runnable.IsModalChanged + Runnable.IsModalChanged
- View.NewMouseEvent(Mouse) + View.NewMouseEvent(Mouse)
- View.RaiseMouseEvent(Mouse) + View.RaiseMouseEvent(Mouse)
- View.GetAdornmentsThickness() + View.GetAdornmentsThickness()
- View.GetSupportedCommands() + View.GetSupportedCommands()
- View.InvokeCommands(Command[], IInputBinding) + View.InvokeCommands(Command[], IInputBinding)
- View.InvokeCommand(Command, IInputBinding) + View.InvokeCommand(Command, IInputBinding)
- View.InvokeCommand(Command, ICommandContext) + View.InvokeCommand(Command, ICommandContext)
- View.InvokeCommand(Command) + View.InvokeCommand(Command)
- View.SetContentSize(Size?) + View.SetContentSize(Size?)
- View.GetContentSize() + View.GetContentSize()
- View.GetWidthRequiredForSubViews() + View.GetWidthRequiredForSubViews()
- View.GetHeightRequiredForSubViews() + View.GetHeightRequiredForSubViews()
- View.ContentToScreen(in Point) + View.ContentToScreen(in Point)
- View.ScreenToContent(in Point) + View.ScreenToContent(in Point)
- View.ViewportToScreen(in Rectangle) + View.ViewportToScreen(in Rectangle)
- View.ViewportToScreen(in Point) + View.ViewportToScreen(in Point)
- View.ViewportToScreen() + View.ViewportToScreen()
- View.ScreenToViewport(in Point) + View.ScreenToViewport(in Point)
- View.GetViewportOffsetFromFrame() + View.GetViewportOffsetFromFrame()
- View.ScrollVertical(int) + View.ScrollVertical(int)
- View.ScrollHorizontal(int) + View.ScrollHorizontal(int)
- View.Dispose() + View.Dispose()
- View.ToString() + View.ToString()
- View.ToDebugString() + View.ToDebugString()
- View.BeginInit() + View.BeginInit()
- View.EndInit() + View.EndInit()
- View.OnEnabledChanged() + View.OnEnabledChanged()
- View.SetCursorNeedsUpdate() + View.VerifyViewsWereDisposed()
- View.GetCurrentAttribute() + View.SetCursorNeedsUpdate()
- View.GetAttributeForRole(VisualRole) + View.GetCurrentAttribute()
- View.SetAttribute(Attribute) + View.GetAttributeForRole(VisualRole)
- View.SetAttributeForRole(VisualRole) + View.SetAttribute(Attribute)
- View.GetClip() + View.SetAttributeForRole(VisualRole)
- View.SetClip(Region) + View.GetClip()
- View.SetClipToScreen() + View.SetClip(Region)
- View.ExcludeFromClip(Rectangle) + View.SetClipToScreen()
- View.ExcludeFromClip(Region) + View.ExcludeFromClip(Rectangle)
- View.AddViewportToClip() + View.ExcludeFromClip(Region)
- View.Draw(DrawContext) + View.AddViewportToClip()
- View.DrawAdornments() + View.Draw(DrawContext)
- View.ClearViewport(DrawContext) + View.DrawAdornments()
- View.DrawText(DrawContext) + View.ClearViewport(DrawContext)
- View.DrawSubViews(DrawContext) + View.DrawText(DrawContext)
- View.RenderLineCanvas(DrawContext) + View.DrawSubViews(DrawContext)
- View.Move(int, int) + View.RenderLineCanvas(DrawContext)
- View.AddRune(Rune) + View.Move(int, int)
- View.AddRune(char) + View.AddRune(Rune)
- View.AddRune(int, int, Rune) + View.AddRune(char)
- View.AddStr(string) + View.AddRune(int, int, Rune)
- View.AddStr(int, int, string) + View.AddStr(string)
- View.DrawHotString(string, Attribute, Attribute) + View.AddStr(int, int, string)
- View.DrawHotString(string, bool) + View.DrawHotString(string, Attribute, Attribute)
- View.FillRect(Rectangle, Color?) + View.DrawHotString(string, bool)
- View.FillRect(Rectangle, Rune) + View.FillRect(Rectangle, Color?)
- View.GetScheme() + View.FillRect(Rectangle, Rune)
- View.SetScheme(Scheme) + View.GetScheme()
- View.GetSubViews(bool, bool, bool) + View.SetScheme(Scheme)
- View.Add(View) + View.GetSubViews(bool, bool, bool)
- View.Add(params View[]) + View.Add(View)
- View.Remove(View) + View.Add(params View[])
- View.RemoveAll() + View.Remove(View)
- View.RemoveAll<TView>() + View.RemoveAll()
- View.IsInHierarchy(View, View, bool) + View.RemoveAll<TView>()
- View.MoveSubViewTowardsEnd(View) + View.IsInHierarchy(View, View, bool)
- View.MoveSubViewToEnd(View) + View.MoveSubViewTowardsEnd(View)
- View.MoveSubViewTowardsStart(View) + View.MoveSubViewToEnd(View)
- View.MoveSubViewToStart(View) + View.MoveSubViewTowardsStart(View)
- View.AddKeyBindingsForHotKey(Key, Key, object) + View.MoveSubViewToStart(View)
- View.AssignHotKeysToSubViews() + View.AddKeyBindingsForHotKey(Key, Key, object)
- View.NewKeyDownEvent(Key) + View.AssignHotKeysToSubViews()
- View.Contains(in Point) + View.NewKeyDownEvent(Key)
- View.FrameToScreen() + View.Contains(in Point)
- View.ScreenToFrame(in Point) + View.FrameToScreen()
- View.Layout(Size) + View.ScreenToFrame(in Point)
- View.Layout() + View.Layout(Size)
- View.SetRelativeLayout(Size) + View.Layout()
- View.SetNeedsLayout() + View.SetRelativeLayout(Size)
- View.GetContainerSize() + View.SetNeedsLayout()
- View.GetViewsUnderLocation(in Point, ViewportSettingsFlags) + View.GetContainerSize()
- View.AdvanceFocus(NavigationDirection, TabBehavior?) + View.GetViewsUnderLocation(in Point, ViewportSettingsFlags)
- View.FocusDeepest(NavigationDirection, TabBehavior?) + View.AdvanceFocus(NavigationDirection, TabBehavior?)
- View.OnCanFocusChanged() + View.FocusDeepest(NavigationDirection, TabBehavior?)
- View.ClearFocus() + View.OnCanFocusChanged()
- View.SetFocus() + View.ClearFocus()
- View.SetNeedsDraw() + View.SetFocus()
- View.SetNeedsDraw(Rectangle) + View.SetNeedsDraw()
- View.OnTextChanged() + View.SetNeedsDraw(Rectangle)
- View.MouseBindings + View.OnTextChanged()
- View.MouseHoldRepeat + View.MouseBindings
- View.MousePositionTracking + View.MouseHoldRepeat
- View.MouseState + View.MousePositionTracking
- View.MouseHighlightStates + View.MouseState
- View.Margin + View.MouseHighlightStates
- View.ShadowStyle + View.Margin
- View.Border + View.ShadowStyle
- View.BorderStyle + View.Border
- View.Padding + View.BorderStyle
- View.Arrangement + View.Padding
- View.ContentSizeTracksViewport + View.Arrangement
- View.ViewportSettings + View.ContentSizeTracksViewport
- View.Viewport + View.ViewportSettings
- View.Data + View.Viewport
- View.Id + View.Data
- View.App + View.Id
- View.IsInitialized + View.App
- View.Enabled + View.IsInitialized
- View.Visible + View.Enabled
- View.Title + View.Visible
- View.Cursor + View.Title
- View.Diagnostics + View.EnableDebugIDisposableAsserts
- View.LineCanvas + View.WasDisposed
- View.SuperViewRendersLineCanvas + View.DisposedCount
- View.SchemeName + View.Instances
- View.HasScheme + View.Cursor
- View.SubViews + View.Diagnostics
- View.SuperView + View.LineCanvas
- View.HotKey + View.SuperViewRendersLineCanvas
- View.HotKeySpecifier + View.SchemeName
- View.AssignHotKeys + View.HasScheme
- View.UsedHotKeys + View.SubViews
- View.KeyBindings + View.SuperView
- View.HotKeyBindings + View.HotKey
- View.Frame + View.HotKeySpecifier
- View.X + View.AssignHotKeys
- View.Y + View.UsedHotKeys
- View.Height + View.KeyBindings
- View.Width + View.HotKeyBindings
- View.NeedsLayout + View.Frame
- View.ValidatePosDim + View.X
- View.CanFocus + View.Y
- View.Focused + View.Height
- View.IsCurrentTop + View.Width
- View.MostFocused + View.NeedsLayout
- View.HasFocus + View.ValidatePosDim
- View.TabStop + View.CanFocus
- View.NeedsDraw + View.Focused
- View.HorizontalScrollBar + View.IsCurrentTop
- View.VerticalScrollBar + View.MostFocused
- View.PreserveTrailingSpaces + View.HasFocus
- View.Text + View.TabStop
- View.TextAlignment + View.NeedsDraw
- View.TextDirection + View.HorizontalScrollBar
- View.TextFormatter + View.VerticalScrollBar
- View.VerticalTextAlignment + View.PreserveTrailingSpaces
- View.MouseEnter + View.Text
- View.MouseLeave + View.TextAlignment
- View.MouseHoldRepeatChanging + View.TextDirection
- View.MouseHoldRepeatChanged + View.TextFormatter
- View.MouseEvent + View.VerticalTextAlignment
- View.MouseStateChanged + View.MouseEnter
- View.BorderStyleChanged + View.MouseLeave
- View.CommandNotBound + View.MouseHoldRepeatChanging
- View.Accepting + View.MouseHoldRepeatChanged
- View.Accepted + View.MouseEvent
- View.Activating + View.MouseStateChanged
- View.HandlingHotKey + View.BorderStyleChanged
- View.ContentSizeChanging + View.CommandNotBound
- View.ContentSizeChanged + View.Accepting
- View.ViewportChanged + View.Accepted
- View.Disposing + View.Activating
- View.Initialized + View.HandlingHotKey
- View.EnabledChanged + View.ContentSizeChanging
- View.VisibleChanging + View.ContentSizeChanged
- View.VisibleChanged + View.ViewportChanged
- View.TitleChanging + View.Disposing
- View.TitleChanged + View.Initialized
- View.GettingAttributeForRole + View.EnabledChanged
- View.ClearingViewport + View.VisibleChanging
- View.ClearedViewport + View.VisibleChanged
- View.DrawingText + View.TitleChanging
- View.DrewText + View.TitleChanged
- View.DrawingContent + View.GettingAttributeForRole
- View.DrawingSubViews + View.ClearingViewport
- View.DrawComplete + View.ClearedViewport
- View.SchemeNameChanging + View.DrawingText
- View.SchemeNameChanged + View.DrewText
- View.GettingScheme + View.DrawingContent
- View.SchemeChanging + View.DrawingSubViews
- View.SchemeChanged + View.DrawComplete
- View.SuperViewChanging + View.SchemeNameChanging
- View.SuperViewChanged + View.SchemeNameChanged
- View.SubViewAdded + View.GettingScheme
- View.SubViewRemoved + View.SchemeChanging
- View.Removed + View.SchemeChanged
- View.HotKeyChanged + View.SuperViewChanging
- View.KeyDown + View.SuperViewChanged
- View.KeyDownNotHandled + View.SubViewAdded
- View.FrameChanged + View.SubViewRemoved
- View.HeightChanging + View.Removed
- View.HeightChanged + View.HotKeyChanged
- View.WidthChanging + View.KeyDown
- View.WidthChanged + View.KeyDownNotHandled
- View.SubViewLayout + View.FrameChanged
- View.SubViewsLaidOut + View.HeightChanging
- View.AdvancingFocus + View.HeightChanged
- View.CanFocusChanged + View.WidthChanging
- View.FocusedChanged + View.WidthChanged
- View.HasFocusChanging + View.SubViewLayout
- View.HasFocusChanged + View.SubViewsLaidOut
- View.TextChanged + View.AdvancingFocus +
+
+ View.CanFocusChanged +
+
+ View.FocusedChanged +
+
+ View.HasFocusChanging +
+
+ View.HasFocusChanged +
+
+ View.TextChanged
object.GetType() @@ -814,7 +829,7 @@ Class MainWindow Parameters
-
app IApplication
+
app IApplication
@@ -1061,8 +1076,8 @@ Call after theme changes to refresh colors.

-

- EnsureChannelInList(string) +

+ EnsureChannelInList(string, bool?)

@@ -1071,13 +1086,15 @@ Call after theme changes to refresh colors.

-
public void EnsureChannelInList(string channelName)
+
public void EnsureChannelInList(string channelName, bool? isPublic = null)

Parameters

channelName string
+
isPublic bool?
+
@@ -1535,6 +1552,37 @@ Call after theme changes to refresh colors.

+

+ OnAudioPlayRequested + +

+ +

Fired when the user activates (Enter/click) an audio message. Parameters: attachmentUrl, fileName.

+
+
+ +
+
public event Action<string, string>? OnAudioPlayRequested
+
+ + + + + + +

Event Type

+
+
Action<string, string>
+
+
+ + + + + + + +

OnChannelSelected @@ -1690,6 +1738,68 @@ Call after theme changes to refresh colors.

+

+ OnFileDownloadRequested + +

+ +

Fired when the user activates (Enter/click) a file message. Parameters: attachmentUrl, fileName.

+
+
+ +
+
public event Action<string, string>? OnFileDownloadRequested
+
+ + + + + + +

Event Type

+
+
Action<string, string>
+
+
+ + + + + + + + +

+ OnLogoutRequested + +

+ +

Fired when the user requests to logout (disconnect + revoke session).

+
+
+ +
+
public event Action? OnLogoutRequested
+
+ + + + + + +

Event Type

+
+
Action
+
+
+ + + + + + + +

OnMessageSubmitted diff --git a/api/client/EchoHub.Client.UI.ProfileEditDialog.html b/api/client/EchoHub.Client.UI.ProfileEditDialog.html index bf9926c..f0c2e1d 100644 --- a/api/client/EchoHub.Client.UI.ProfileEditDialog.html +++ b/api/client/EchoHub.Client.UI.ProfileEditDialog.html @@ -197,7 +197,7 @@ Class ProfileEditDialog Parameters

-
app IApplication
+
app IApplication
currentDisplayName string
diff --git a/api/client/EchoHub.Client.UI.ProfileViewDialog.html b/api/client/EchoHub.Client.UI.ProfileViewDialog.html index ca29d91..445fd69 100644 --- a/api/client/EchoHub.Client.UI.ProfileViewDialog.html +++ b/api/client/EchoHub.Client.UI.ProfileViewDialog.html @@ -198,7 +198,7 @@ Shows Edit Profile / Set Status buttons when viewing own profile.

Parameters

-
app IApplication
+
app IApplication
profile UserProfileDto
@@ -233,7 +233,7 @@ Returns the action the user selected.

Parameters

-
app IApplication
+
app IApplication
profile UserProfileDto
diff --git a/api/client/EchoHub.Client.UI.StatusDialog.html b/api/client/EchoHub.Client.UI.StatusDialog.html index ec60dff..2772842 100644 --- a/api/client/EchoHub.Client.UI.StatusDialog.html +++ b/api/client/EchoHub.Client.UI.StatusDialog.html @@ -197,7 +197,7 @@ Class StatusDialog Parameters
-
app IApplication
+
app IApplication
currentStatus UserStatus
diff --git a/api/client/EchoHub.Client.UI.UpdateConfirmDialog.html b/api/client/EchoHub.Client.UI.UpdateConfirmDialog.html new file mode 100644 index 0000000..61d5e00 --- /dev/null +++ b/api/client/EchoHub.Client.UI.UpdateConfirmDialog.html @@ -0,0 +1,247 @@ + + + + + Class UpdateConfirmDialog | EchoHub Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class UpdateConfirmDialog +

+ +
+
Namespace
EchoHub.Client.UI
+
Assembly
EchoHub.Client.dll
+
+ +
+
+ +
+
public sealed class UpdateConfirmDialog
+
+ + + + +
+
Inheritance
+
+ +
UpdateConfirmDialog
+
+
+ + + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ UpdateConfirmDialog() + +

+ +
+
+ +
+
public UpdateConfirmDialog()
+
+ + + + + + + + + + + + + +

Methods +

+ + + + +

+ Show(IApplication, string, string) + +

+ +
+
+ +
+
public static bool Show(IApplication app, string currentVersion, string newVersion)
+
+ +

Parameters

+
+
app IApplication
+
+
currentVersion string
+
+
newVersion string
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/client/EchoHub.Client.UI.UpdateProgressDialog.html b/api/client/EchoHub.Client.UI.UpdateProgressDialog.html new file mode 100644 index 0000000..a08a7bc --- /dev/null +++ b/api/client/EchoHub.Client.UI.UpdateProgressDialog.html @@ -0,0 +1,299 @@ + + + + + Class UpdateProgressDialog | EchoHub Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class UpdateProgressDialog +

+ +
+
Namespace
EchoHub.Client.UI
+
Assembly
EchoHub.Client.dll
+
+ +
+
+ +
+
public sealed class UpdateProgressDialog
+
+ + + + +
+
Inheritance
+
+ +
UpdateProgressDialog
+
+
+ + + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ UpdateProgressDialog(IApplication, string) + +

+ +
+
+ +
+
public UpdateProgressDialog(IApplication app, string newVersion)
+
+ +

Parameters

+
+
app IApplication
+
+
newVersion string
+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ Close() + +

+ +
+
+ +
+
public void Close()
+
+ + + + + + + + + + + + + + + +

+ Show() + +

+ +
+
+ +
+
public void Show()
+
+ + + + + + + + + + + + + + + +

+ UpdateProgress(float, string) + +

+ +
+
+ +
+
public void UpdateProgress(float fraction, string statusText)
+
+ +

Parameters

+
+
fraction float
+
+
statusText string
+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/client/EchoHub.Client.UI.UserListSource.html b/api/client/EchoHub.Client.UI.UserListSource.html index 440054f..ec9f295 100644 --- a/api/client/EchoHub.Client.UI.UserListSource.html +++ b/api/client/EchoHub.Client.UI.UserListSource.html @@ -119,7 +119,7 @@ Class UserListSource
Implements
-
IListDataSource
+
@@ -197,7 +197,8 @@ Class UserListSource -
+

Gets the number of items in the data source.

+
@@ -228,7 +229,8 @@ Class UserListSource -
+

Gets the width in columns of the widest item in the data source.

+
@@ -248,6 +250,9 @@ Class UserListSource Remarks +

ListView uses this value to set its horizontal content size for scrolling.

+
@@ -259,7 +264,8 @@ Class UserListSource -
+

Gets or sets whether the CollectionChanged event should be suppressed.

+
@@ -279,6 +285,10 @@ Class UserListSource Remarks +

Set to true to prevent CollectionChanged from being raised during bulk +operations. Set back to false to resume event notifications.

+
@@ -320,7 +330,8 @@ Class UserListSource -
+

Determines whether the specified item is marked.

+
@@ -330,13 +341,15 @@ Class UserListSource Parameters
item int
-
+

The zero-based index of the item.

+

Returns

bool
-
+

true if the item is marked; otherwise false.

+
@@ -345,6 +358,10 @@ Class UserListSource Remarks +

ListView calls this method to determine whether to render the item with a mark indicator when +ShowMarks is true.

+
@@ -356,7 +373,8 @@ Class UserListSource -
+

Renders the specified item to the ListView.

+
@@ -365,20 +383,27 @@ Class UserListSource Parameters
-
listView ListView
-
+
listView ListView
+

The ListView to render to.

+
selected bool
-
+

true if the item is currently selected; otherwise false.

+
item int
-
+

The zero-based index of the item to render.

+
col int
-
+

The column in listView Viewport where rendering starts.

+
row int
-
+

The row in listView Viewport where rendering starts.

+
width int
-
+

The width available for rendering.

+
viewportX int
-
+

The horizontal scroll offset.

+
@@ -388,6 +413,15 @@ Class UserListSource Remarks +

+ ListView calls this method for each visible item during rendering. The color scheme will be + set based on selection state before this method is called. +

+

+ Implementations must fill the entire width to avoid rendering artifacts. +

+
@@ -399,7 +433,8 @@ Class UserListSource -
+

Sets the marked state of the specified item.

+
@@ -409,9 +444,11 @@ Class UserListSource Parameters
item int
-
+

The zero-based index of the item.

+
value bool
-
+

true to mark the item; false to unmark it.

+
@@ -421,6 +458,10 @@ Class UserListSource Remarks +

ListView calls this method when the user toggles marking (e.g., via the SPACE key) if +ShowMarks is true.

+
@@ -432,7 +473,8 @@ Class UserListSource -
+

Returns the underlying data source as an System.Collections.IList.

+
@@ -443,7 +485,8 @@ Class UserListSource Returns
IList
-
+

The data source as an System.Collections.IList.

+
@@ -452,6 +495,11 @@ Class UserListSource
Remarks +

ListView uses this method to access individual items for events like +ValueChanged and to enable keyboard search via +KeystrokeNavigator.

+
@@ -472,7 +520,7 @@ Class UserListSource Parameters
-
users List<(string Text, Attribute? NameColor)>
+
users List<(string Text, Attribute? NameColor)>
@@ -497,7 +545,8 @@ Class UserListSource -
+

Raised when items are added, removed, moved, or the entire collection is refreshed.

+
@@ -517,6 +566,11 @@ Class UserListSource Remarks +

ListView subscribes to this event to update its display and content size when the data +changes. Implementations should raise this event whenever the underlying collection changes, unless +SuspendCollectionChangedEvent is true.

+
diff --git a/api/client/EchoHub.Client.UI.html b/api/client/EchoHub.Client.UI.html index 0d4714c..4be5c71 100644 --- a/api/client/EchoHub.Client.UI.html +++ b/api/client/EchoHub.Client.UI.html @@ -94,6 +94,10 @@

Classes

+
+
AudioPlayerDialog
+
+
ChannelListSource

Custom list data source for colored channel list rendering. @@ -182,6 +186,14 @@ Shows Edit Profile / Set Status buttons when viewing own profile.

Result returned from the status dialog.

+
+
UpdateConfirmDialog
+
+
+
+
UpdateProgressDialog
+
+
UserListSource

Custom list data source for the online users panel with per-user nickname colors.

diff --git a/api/core-articles/index.html b/api/core-articles/index.html index 3303c4a..d3169ad 100644 --- a/api/core-articles/index.html +++ b/api/core-articles/index.html @@ -91,7 +91,7 @@

Topics

  • Data models and DTOs
  • -
  • Contract interfaces (IChatService, IChatBroadcaster, IEchoHubClient)
  • +
  • Contract interfaces (IChatService, IChannelService, IChatBroadcaster, IEchoHubClient)
  • Validation constants and shared rules
diff --git a/api/core/EchoHub.Core.Constants.HubConstants.html b/api/core/EchoHub.Core.Constants.HubConstants.html index 36593e8..1b5ec20 100644 --- a/api/core/EchoHub.Core.Constants.HubConstants.html +++ b/api/core/EchoHub.Core.Constants.HubConstants.html @@ -453,6 +453,36 @@ Class HubConstants + MaxAudioFileSizeBytes + + + +
+
+ +
+
public const int MaxAudioFileSizeBytes = 10485760
+
+ + + + +

Field Value

+
+
int
+
+
+ + + + + + + + + +

MaxAvatarSizeBytes @@ -522,7 +552,37 @@ Class HubConstants

-
public const int MaxFileSizeBytes = 10485760
+
public const int MaxFileSizeBytes = 104857600
+
+ + + + +

Field Value

+
+
int
+
+
+ + + + + + + + + + +

+ MaxImageSizeBytes + +

+ +
+
+ +
+
public const int MaxImageSizeBytes = 10485760
diff --git a/api/core/EchoHub.Core.Contracts.ChannelListItem.html b/api/core/EchoHub.Core.Contracts.ChannelListItem.html index 02377e2..4b0b0ae 100644 --- a/api/core/EchoHub.Core.Contracts.ChannelListItem.html +++ b/api/core/EchoHub.Core.Contracts.ChannelListItem.html @@ -89,7 +89,7 @@

-Class ChannelListItem +Class ChannelListItem

@@ -153,7 +153,7 @@ Class ChannelListItem ChannelListItem(ChannelListItem) - +
@@ -184,7 +184,7 @@ Class ChannelListItem ChannelListItem(string, string?, int) - +
@@ -223,7 +223,7 @@ Class ChannelListItem EqualityContract - +
@@ -254,7 +254,7 @@ Class ChannelListItem Name - +
@@ -285,7 +285,7 @@ Class ChannelListItem OnlineCount - +
@@ -316,7 +316,7 @@ Class ChannelListItem Topic - +
@@ -351,7 +351,7 @@ Class ChannelListItem Deconstruct(out string, out string?, out int) - +
@@ -386,7 +386,7 @@ Class ChannelListItem Equals(ChannelListItem?) - +
@@ -422,7 +422,7 @@ Class ChannelListItem Equals(object?) - +
@@ -458,7 +458,7 @@ Class ChannelListItem GetHashCode() - +
@@ -489,7 +489,7 @@ Class ChannelListItem PrintMembers(StringBuilder) - +
@@ -525,7 +525,7 @@ Class ChannelListItem ToString() - +
@@ -560,7 +560,7 @@ Class ChannelListItem operator ==(ChannelListItem?, ChannelListItem?) - +
@@ -598,7 +598,7 @@ Class ChannelListItem operator !=(ChannelListItem?, ChannelListItem?) - +
@@ -636,7 +636,7 @@ Class ChannelListItem - Edit this page + Edit this page
diff --git a/api/core/EchoHub.Core.Contracts.IChannelService.html b/api/core/EchoHub.Core.Contracts.IChannelService.html new file mode 100644 index 0000000..605dc27 --- /dev/null +++ b/api/core/EchoHub.Core.Contracts.IChannelService.html @@ -0,0 +1,449 @@ + + + + + Interface IChannelService | EchoHub Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IChannelService +

+ +
+
Namespace
EchoHub.Core.Contracts
+
Assembly
EchoHub.Core.dll
+
+ +
+
+ +
+
public interface IChannelService
+
+ + + + + + + + + + + + + +

Methods +

+ + + + +

+ CreateChannelAsync(Guid, string, string?, bool) + +

+ +
+
+ +
+
Task<ChannelOperationResult> CreateChannelAsync(Guid creatorUserId, string name, string? topic, bool isPublic)
+
+ +

Parameters

+
+
creatorUserId Guid
+
+
name string
+
+
topic string
+
+
isPublic bool
+
+
+ +

Returns

+
+
Task<ChannelOperationResult>
+
+
+ + + + + + + + + + + + + +

+ DeleteChannelAsync(Guid, string) + +

+ +
+
+ +
+
Task<ChannelOperationResult> DeleteChannelAsync(Guid callerUserId, string channelName)
+
+ +

Parameters

+
+
callerUserId Guid
+
+
channelName string
+
+
+ +

Returns

+
+
Task<ChannelOperationResult>
+
+
+ + + + + + + + + + + + + +

+ EnsureChannelMembershipAsync(Guid, string) + +

+ +
+
+ +
+
Task<(bool Success, string? Error)> EnsureChannelMembershipAsync(Guid userId, string channelName)
+
+ +

Parameters

+
+
userId Guid
+
+
channelName string
+
+
+ +

Returns

+
+
Task<(bool Success, string Error)>
+
+
+ + + + + + + + + + + + + +

+ GetChannelByNameAsync(string) + +

+ +
+
+ +
+
Task<ChannelDto?> GetChannelByNameAsync(string channelName)
+
+ +

Parameters

+
+
channelName string
+
+
+ +

Returns

+
+
Task<ChannelDto>
+
+
+ + + + + + + + + + + + + +

+ GetChannelListAsync() + +

+ +
+
+ +
+
Task<List<ChannelListItem>> GetChannelListAsync()
+
+ + +

Returns

+
+
Task<List<ChannelListItem>>
+
+
+ + + + + + + + + + + + + +

+ GetChannelTopicAsync(string) + +

+ +
+
+ +
+
Task<(string? Topic, bool Exists)> GetChannelTopicAsync(string channelName)
+
+ +

Parameters

+
+
channelName string
+
+
+ +

Returns

+
+
Task<(string Topic, bool Exists)>
+
+
+ + + + + + + + + + + + + +

+ GetChannelsAsync(Guid, int, int) + +

+ +
+
+ +
+
Task<PaginatedResponse<ChannelDto>> GetChannelsAsync(Guid userId, int offset, int limit)
+
+ +

Parameters

+
+
userId Guid
+
+
offset int
+
+
limit int
+
+
+ +

Returns

+
+
Task<PaginatedResponse<ChannelDto>>
+
+
+ + + + + + + + + + + + + +

+ UpdateTopicAsync(Guid, string, string?) + +

+ +
+
+ +
+
Task<ChannelOperationResult> UpdateTopicAsync(Guid callerUserId, string channelName, string? topic)
+
+ +

Parameters

+
+
callerUserId Guid
+
+
channelName string
+
+
topic string
+
+
+ +

Returns

+
+
Task<ChannelOperationResult>
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/core/EchoHub.Core.Contracts.IChatService.html b/api/core/EchoHub.Core.Contracts.IChatService.html index 36ab721..f54281a 100644 --- a/api/core/EchoHub.Core.Contracts.IChatService.html +++ b/api/core/EchoHub.Core.Contracts.IChatService.html @@ -272,73 +272,6 @@ Interface IChatService - -

- GetChannelListAsync() - -

- -
-
- -
-
Task<List<ChannelListItem>> GetChannelListAsync()
-
- - -

Returns

-
-
Task<List<ChannelListItem>>
-
-
- - - - - - - - - - - - - -

- GetChannelTopicAsync(string) - -

- -
-
- -
-
Task<(string? Topic, bool Exists)> GetChannelTopicAsync(string channelName)
-
- -

Parameters

-
-
channelName string
-
-
- -

Returns

-
-
Task<(string Topic, bool Exists)>
-
-
- - - - - - - - - - -

diff --git a/api/core/EchoHub.Core.Contracts.html b/api/core/EchoHub.Core.Contracts.html index 65ffc73..6faecde 100644 --- a/api/core/EchoHub.Core.Contracts.html +++ b/api/core/EchoHub.Core.Contracts.html @@ -101,6 +101,10 @@ Classes

Interfaces

+
+
IChannelService
+
+
IChatBroadcaster
diff --git a/api/core/EchoHub.Core.DTOs.ApiResponse-1.html b/api/core/EchoHub.Core.DTOs.ApiResponse-1.html new file mode 100644 index 0000000..454b4cc --- /dev/null +++ b/api/core/EchoHub.Core.DTOs.ApiResponse-1.html @@ -0,0 +1,700 @@ + + + + + Class ApiResponse<T> | EchoHub Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ApiResponse<T> +

+ +
+
Namespace
EchoHub.Core.DTOs
+
Assembly
EchoHub.Core.dll
+
+ +
+
+ +
+
public record ApiResponse<T> : IEquatable<ApiResponse<T>>
+
+ + + +

Type Parameters

+
+
T
+
+
+ +
+
Inheritance
+
+ +
ApiResponse<T>
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ApiResponse(ApiResponse<T>) + +

+ +
+
+ +
+
protected ApiResponse(ApiResponse<T> original)
+
+ +

Parameters

+
+
original ApiResponse<T>
+
+
+ + + + + + + + + + + + + + +

+ ApiResponse(bool, string?, List<string>?, T?) + +

+ +
+
+ +
+
public ApiResponse(bool Success, string? Message = null, List<string>? Errors = null, T? Data = default)
+
+ +

Parameters

+
+
Success bool
+
+
Message string
+
+
Errors List<string>
+
+
Data T
+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Data + +

+ +
+
+ +
+
public T? Data { get; init; }
+
+ + + + + +

Property Value

+
+
T
+
+
+ + + + + + + + + + +

+ EqualityContract + +

+ +
+
+ +
+
protected virtual Type EqualityContract { get; }
+
+ + + + + +

Property Value

+
+
Type
+
+
+ + + + + + + + + + +

+ Errors + +

+ +
+
+ +
+
public List<string>? Errors { get; init; }
+
+ + + + + +

Property Value

+
+
List<string>
+
+
+ + + + + + + + + + +

+ Message + +

+ +
+
+ +
+
public string? Message { get; init; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Success + +

+ +
+
+ +
+
public bool Success { get; init; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Deconstruct(out bool, out string?, out List<string>?, out T?) + +

+ +
+
+ +
+
public void Deconstruct(out bool Success, out string? Message, out List<string>? Errors, out T? Data)
+
+ +

Parameters

+
+
Success bool
+
+
Message string
+
+
Errors List<string>
+
+
Data T
+
+
+ + + + + + + + + + + + + + +

+ Equals(ApiResponse<T>?) + +

+ +
+
+ +
+
public virtual bool Equals(ApiResponse<T>? other)
+
+ +

Parameters

+
+
other ApiResponse<T>
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+
+
+ + + + + + + + + + + + + +

+ PrintMembers(StringBuilder) + +

+ +
+
+ +
+
protected virtual bool PrintMembers(StringBuilder builder)
+
+ +

Parameters

+
+
builder StringBuilder
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(ApiResponse<T>?, ApiResponse<T>?) + +

+ +
+
+ +
+
public static bool operator ==(ApiResponse<T>? left, ApiResponse<T>? right)
+
+ +

Parameters

+
+
left ApiResponse<T>
+
+
right ApiResponse<T>
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ operator !=(ApiResponse<T>?, ApiResponse<T>?) + +

+ +
+
+ +
+
public static bool operator !=(ApiResponse<T>? left, ApiResponse<T>? right)
+
+ +

Parameters

+
+
left ApiResponse<T>
+
+
right ApiResponse<T>
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/core/EchoHub.Core.DTOs.ApiResponse.html b/api/core/EchoHub.Core.DTOs.ApiResponse.html new file mode 100644 index 0000000..85dd74f --- /dev/null +++ b/api/core/EchoHub.Core.DTOs.ApiResponse.html @@ -0,0 +1,660 @@ + + + + + Class ApiResponse | EchoHub Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ApiResponse +

+ +
+
Namespace
EchoHub.Core.DTOs
+
Assembly
EchoHub.Core.dll
+
+ +
+
+ +
+
public record ApiResponse : IEquatable<ApiResponse>
+
+ + + + +
+
Inheritance
+
+ +
ApiResponse
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ApiResponse(ApiResponse) + +

+ +
+
+ +
+
protected ApiResponse(ApiResponse original)
+
+ +

Parameters

+
+
original ApiResponse
+
+
+ + + + + + + + + + + + + + +

+ ApiResponse(bool, string?, List<string>?) + +

+ +
+
+ +
+
public ApiResponse(bool Success, string? Message = null, List<string>? Errors = null)
+
+ +

Parameters

+
+
Success bool
+
+
Message string
+
+
Errors List<string>
+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ EqualityContract + +

+ +
+
+ +
+
protected virtual Type EqualityContract { get; }
+
+ + + + + +

Property Value

+
+
Type
+
+
+ + + + + + + + + + +

+ Errors + +

+ +
+
+ +
+
public List<string>? Errors { get; init; }
+
+ + + + + +

Property Value

+
+
List<string>
+
+
+ + + + + + + + + + +

+ Message + +

+ +
+
+ +
+
public string? Message { get; init; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Success + +

+ +
+
+ +
+
public bool Success { get; init; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Deconstruct(out bool, out string?, out List<string>?) + +

+ +
+
+ +
+
public void Deconstruct(out bool Success, out string? Message, out List<string>? Errors)
+
+ +

Parameters

+
+
Success bool
+
+
Message string
+
+
Errors List<string>
+
+
+ + + + + + + + + + + + + + +

+ Equals(ApiResponse?) + +

+ +
+
+ +
+
public virtual bool Equals(ApiResponse? other)
+
+ +

Parameters

+
+
other ApiResponse
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+
+
+ + + + + + + + + + + + + +

+ PrintMembers(StringBuilder) + +

+ +
+
+ +
+
protected virtual bool PrintMembers(StringBuilder builder)
+
+ +

Parameters

+
+
builder StringBuilder
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(ApiResponse?, ApiResponse?) + +

+ +
+
+ +
+
public static bool operator ==(ApiResponse? left, ApiResponse? right)
+
+ +

Parameters

+
+
left ApiResponse
+
+
right ApiResponse
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ operator !=(ApiResponse?, ApiResponse?) + +

+ +
+
+ +
+
public static bool operator !=(ApiResponse? left, ApiResponse? right)
+
+ +

Parameters

+
+
left ApiResponse
+
+
right ApiResponse
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/core/EchoHub.Core.DTOs.ChannelError.html b/api/core/EchoHub.Core.DTOs.ChannelError.html new file mode 100644 index 0000000..b9904dd --- /dev/null +++ b/api/core/EchoHub.Core.DTOs.ChannelError.html @@ -0,0 +1,162 @@ + + + + + Enum ChannelError | EchoHub Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum ChannelError +

+ +
+
Namespace
EchoHub.Core.DTOs
+
Assembly
EchoHub.Core.dll
+
+ +
+
+ +
+
public enum ChannelError
+
+ + + + + + + + + +

Fields +

+
+
AlreadyExists = 1
+ +
+
Forbidden = 3
+ +
+
NotFound = 2
+ +
+
Protected = 4
+ +
+
ValidationFailed = 0
+ +
+
+ + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/core/EchoHub.Core.DTOs.ChannelOperationResult.html b/api/core/EchoHub.Core.DTOs.ChannelOperationResult.html new file mode 100644 index 0000000..39faa69 --- /dev/null +++ b/api/core/EchoHub.Core.DTOs.ChannelOperationResult.html @@ -0,0 +1,765 @@ + + + + + Class ChannelOperationResult | EchoHub Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ChannelOperationResult +

+ +
+
Namespace
EchoHub.Core.DTOs
+
Assembly
EchoHub.Core.dll
+
+ +
+
+ +
+
public record ChannelOperationResult : IEquatable<ChannelOperationResult>
+
+ + + + +
+
Inheritance
+
+ +
ChannelOperationResult
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ChannelOperationResult(ChannelDto?, ChannelError?, string?) + +

+ +
+
+ +
+
public ChannelOperationResult(ChannelDto? Channel, ChannelError? Error, string? ErrorMessage)
+
+ +

Parameters

+
+
Channel ChannelDto
+
+
Error ChannelError?
+
+
ErrorMessage string
+
+
+ + + + + + + + + + + + + + +

+ ChannelOperationResult(ChannelOperationResult) + +

+ +
+
+ +
+
protected ChannelOperationResult(ChannelOperationResult original)
+
+ +

Parameters

+
+
original ChannelOperationResult
+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Channel + +

+ +
+
+ +
+
public ChannelDto? Channel { get; init; }
+
+ + + + + +

Property Value

+
+
ChannelDto
+
+
+ + + + + + + + + + +

+ EqualityContract + +

+ +
+
+ +
+
protected virtual Type EqualityContract { get; }
+
+ + + + + +

Property Value

+
+
Type
+
+
+ + + + + + + + + + +

+ Error + +

+ +
+
+ +
+
public ChannelError? Error { get; init; }
+
+ + + + + +

Property Value

+
+
ChannelError?
+
+
+ + + + + + + + + + +

+ ErrorMessage + +

+ +
+
+ +
+
public string? ErrorMessage { get; init; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ IsSuccess + +

+ +
+
+ +
+
public bool IsSuccess { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Deconstruct(out ChannelDto?, out ChannelError?, out string?) + +

+ +
+
+ +
+
public void Deconstruct(out ChannelDto? Channel, out ChannelError? Error, out string? ErrorMessage)
+
+ +

Parameters

+
+
Channel ChannelDto
+
+
Error ChannelError?
+
+
ErrorMessage string
+
+
+ + + + + + + + + + + + + + +

+ Equals(ChannelOperationResult?) + +

+ +
+
+ +
+
public virtual bool Equals(ChannelOperationResult? other)
+
+ +

Parameters

+
+
other ChannelOperationResult
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ Fail(ChannelError, string) + +

+ +
+
+ +
+
public static ChannelOperationResult Fail(ChannelError error, string message)
+
+ +

Parameters

+
+
error ChannelError
+
+
message string
+
+
+ +

Returns

+
+
ChannelOperationResult
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+
+
+ + + + + + + + + + + + + +

+ PrintMembers(StringBuilder) + +

+ +
+
+ +
+
protected virtual bool PrintMembers(StringBuilder builder)
+
+ +

Parameters

+
+
builder StringBuilder
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ Success(ChannelDto) + +

+ +
+
+ +
+
public static ChannelOperationResult Success(ChannelDto channel)
+
+ +

Parameters

+
+
channel ChannelDto
+
+
+ +

Returns

+
+
ChannelOperationResult
+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(ChannelOperationResult?, ChannelOperationResult?) + +

+ +
+
+ +
+
public static bool operator ==(ChannelOperationResult? left, ChannelOperationResult? right)
+
+ +

Parameters

+
+
left ChannelOperationResult
+
+
right ChannelOperationResult
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ operator !=(ChannelOperationResult?, ChannelOperationResult?) + +

+ +
+
+ +
+
public static bool operator !=(ChannelOperationResult? left, ChannelOperationResult? right)
+
+ +

Parameters

+
+
left ChannelOperationResult
+
+
right ChannelOperationResult
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/core/EchoHub.Core.DTOs.MessageDto.html b/api/core/EchoHub.Core.DTOs.MessageDto.html index 3b3657f..dd16975 100644 --- a/api/core/EchoHub.Core.DTOs.MessageDto.html +++ b/api/core/EchoHub.Core.DTOs.MessageDto.html @@ -182,8 +182,8 @@ Class MessageDto -

- MessageDto(Guid, string, string, string?, string, MessageType, string?, string?, DateTimeOffset, List<EmbedDto>?) +

+ MessageDto(Guid, string, string, string?, string, MessageType, string?, string?, DateTimeOffset, long?, List<EmbedDto>?)

@@ -191,7 +191,7 @@ Class MessageDto
-
public MessageDto(Guid Id, string Content, string SenderUsername, string? SenderNicknameColor, string ChannelName, MessageType Type, string? AttachmentUrl, string? AttachmentFileName, DateTimeOffset SentAt, List<EmbedDto>? Embeds = null)
+
public MessageDto(Guid Id, string Content, string SenderUsername, string? SenderNicknameColor, string ChannelName, MessageType Type, string? AttachmentUrl, string? AttachmentFileName, DateTimeOffset SentAt, long? AttachmentFileSize = null, List<EmbedDto>? Embeds = null)

Parameters

@@ -214,6 +214,8 @@ Class MessageDto
SentAt DateTimeOffset
+
AttachmentFileSize long?
+
Embeds List<EmbedDto>
@@ -264,6 +266,37 @@ Class MessageDto + +

+ AttachmentFileSize + +

+ +
+
+ +
+
public long? AttachmentFileSize { get; init; }
+
+ + + + + +

Property Value

+
+
long?
+
+
+ + + + + + + +

@@ -580,8 +613,8 @@ Class MessageDto -

- Deconstruct(out Guid, out string, out string, out string?, out string, out MessageType, out string?, out string?, out DateTimeOffset, out List<EmbedDto>?) +

+ Deconstruct(out Guid, out string, out string, out string?, out string, out MessageType, out string?, out string?, out DateTimeOffset, out long?, out List<EmbedDto>?)

@@ -589,7 +622,7 @@ Class MessageDto
-
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 List<EmbedDto>? Embeds)
+
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<EmbedDto>? Embeds)

Parameters

@@ -612,6 +645,8 @@ Class MessageDto
SentAt DateTimeOffset
+
AttachmentFileSize long?
+
Embeds List<EmbedDto>
diff --git a/api/core/EchoHub.Core.DTOs.html b/api/core/EchoHub.Core.DTOs.html index 6e427d8..bf0a45c 100644 --- a/api/core/EchoHub.Core.DTOs.html +++ b/api/core/EchoHub.Core.DTOs.html @@ -94,6 +94,14 @@

Classes

+
+
ApiResponse
+
+
+
+
ApiResponse<T>
+
+
AssignRoleRequest
@@ -110,6 +118,10 @@ Classes
ChannelDto
+
+
ChannelOperationResult
+
+
CreateChannelRequest
@@ -194,6 +206,13 @@ Classes
UserProfileDto
+

+Enums +

+
+
ChannelError
+
+
diff --git a/api/core/EchoHub.Core.Models.Message.html b/api/core/EchoHub.Core.Models.Message.html index f9550da..f7cf63d 100644 --- a/api/core/EchoHub.Core.Models.Message.html +++ b/api/core/EchoHub.Core.Models.Message.html @@ -213,6 +213,37 @@ Class Message + +

+ AttachmentFileSize + +

+ +
+
+ +
+
public long? AttachmentFileSize { get; set; }
+
+ + + + + +

Property Value

+
+
long?
+
+
+ + + + + + + +

diff --git a/api/core/EchoHub.Core.Models.MessageType.html b/api/core/EchoHub.Core.Models.MessageType.html index f2b01d4..93bebb8 100644 --- a/api/core/EchoHub.Core.Models.MessageType.html +++ b/api/core/EchoHub.Core.Models.MessageType.html @@ -116,6 +116,9 @@ Enum MessageType Fields

+
Audio = 3
+ +
File = 2
diff --git a/api/index.html b/api/index.html index f5a5c4f..51c2bb9 100644 --- a/api/index.html +++ b/api/index.html @@ -92,9 +92,9 @@

Client

Terminal.Gui v2 TUI application -- UI components, services, themes, and configuration.

Core

-

Shared library -- DTOs, models, constants, and contracts (IChatService, IChatBroadcaster, IEchoHubClient).

+

Shared library -- DTOs, models, constants, and contracts (IChatService, IChannelService, IChatBroadcaster, IEchoHubClient).

Server

-

ASP.NET Core server -- controllers, hubs, ChatService, SignalRBroadcaster, authentication, and data access.

+

ASP.NET Core server -- controllers, hubs, ChatService, ChannelService, SignalRBroadcaster, authentication, file cleanup, and data access.

Server.Irc

IRC protocol gateway -- TCP listener, command handler, IrcBroadcaster, and message formatter.

diff --git a/api/server-articles/index.html b/api/server-articles/index.html index 5c4d08c..ede3d7a 100644 --- a/api/server-articles/index.html +++ b/api/server-articles/index.html @@ -94,9 +94,10 @@
  • SignalR hub and real-time messaging
  • IRC gateway and protocol bridging
  • ChatService and broadcaster pattern
  • -
  • File upload and validation
  • +
  • ChannelService and channel CRUD
  • +
  • File upload, validation, and cleanup
  • Rate limiting configuration
  • -
  • Database schema and migrations
  • +
  • Database schema, migrations, and DataMigrationService
  • diff --git a/api/server-irc/EchoHub.Server.Irc.IrcClientConnection.html b/api/server-irc/EchoHub.Server.Irc.IrcClientConnection.html index c95611d..7750738 100644 --- a/api/server-irc/EchoHub.Server.Irc.IrcClientConnection.html +++ b/api/server-irc/EchoHub.Server.Irc.IrcClientConnection.html @@ -410,37 +410,6 @@ Class IrcClientConnection
    - -

    - JoinedChannels - -

    - -
    -
    - -
    -
    public HashSet<string> JoinedChannels { get; }
    -
    - - - - - -

    Property Value

    -
    -
    HashSet<string>
    -
    -
    - - - - - - - -

    @@ -631,6 +600,135 @@ Class IrcClientConnection + +

    + GetJoinedChannels() + +

    + +
    +
    + +
    +
    public List<string> GetJoinedChannels()
    +
    + + +

    Returns

    +
    +
    List<string>
    +
    +
    + + + + + + + + + + + + + +

    + IsInChannel(string) + +

    + +
    +
    + +
    +
    public bool IsInChannel(string channel)
    +
    + +

    Parameters

    +
    +
    channel string
    +
    +
    + +

    Returns

    +
    +
    bool
    +
    +
    + + + + + + + + + + + + + +

    + JoinChannel(string) + +

    + +
    +
    + +
    +
    public void JoinChannel(string channel)
    +
    + +

    Parameters

    +
    +
    channel string
    +
    +
    + + + + + + + + + + + + + + +

    + LeaveChannel(string) + +

    + +
    +
    + +
    +
    public void LeaveChannel(string channel)
    +
    + +

    Parameters

    +
    +
    channel string
    +
    +
    + + + + + + + + + + + +

    diff --git a/api/server-irc/EchoHub.Server.Irc.IrcCommandHandler.html b/api/server-irc/EchoHub.Server.Irc.IrcCommandHandler.html index 27afdbe..959b05c 100644 --- a/api/server-irc/EchoHub.Server.Irc.IrcCommandHandler.html +++ b/api/server-irc/EchoHub.Server.Irc.IrcCommandHandler.html @@ -151,8 +151,8 @@ Class IrcCommandHandler -

    - IrcCommandHandler(IrcClientConnection, IrcOptions, IChatService, ILogger) +

    + IrcCommandHandler(IrcClientConnection, IrcOptions, IChatService, IChannelService, IMessageEncryptionService, ILogger)

    @@ -160,7 +160,7 @@ Class IrcCommandHandler
    -
    public IrcCommandHandler(IrcClientConnection conn, IrcOptions options, IChatService chatService, ILogger logger)
    +
    public IrcCommandHandler(IrcClientConnection conn, IrcOptions options, IChatService chatService, IChannelService channelService, IMessageEncryptionService encryption, ILogger logger)

    Parameters

    @@ -171,6 +171,10 @@ Class IrcCommandHandler
    IChatService
    +
    channelService IChannelService
    +
    +
    encryption IMessageEncryptionService
    +
    logger ILogger
    diff --git a/api/server/EchoHub.Server.Controllers.ChannelsController.html b/api/server/EchoHub.Server.Controllers.ChannelsController.html index 6d6c4c7..a6f6025 100644 --- a/api/server/EchoHub.Server.Controllers.ChannelsController.html +++ b/api/server/EchoHub.Server.Controllers.ChannelsController.html @@ -159,8 +159,8 @@ public class ChannelsController : ControllerBase -

    - ChannelsController(EchoHubDbContext, FileStorageService, ImageToAsciiService, IHttpClientFactory, IChatService, IMessageEncryptionService) +

    + ChannelsController(IChannelService, EchoHubDbContext, FileStorageService, ImageToAsciiService, IHttpClientFactory, IChatService, IMessageEncryptionService)

    @@ -168,11 +168,13 @@ public class ChannelsController : ControllerBase
    -
    public ChannelsController(EchoHubDbContext db, FileStorageService fileStorage, ImageToAsciiService asciiService, IHttpClientFactory httpClientFactory, IChatService chatService, IMessageEncryptionService encryption)
    +
    public ChannelsController(IChannelService channelService, EchoHubDbContext db, FileStorageService fileStorage, ImageToAsciiService asciiService, IHttpClientFactory httpClientFactory, IChatService chatService, IMessageEncryptionService encryption)

    Parameters

    +
    channelService IChannelService
    +
    db EchoHubDbContext
    fileStorage FileStorageService
    @@ -409,6 +411,8 @@ public Task<IActionResult> UpdateTopic(string channel, UpdateTopicRequest
    [HttpPost("{channel}/upload")]
     [EnableRateLimiting("upload")]
    +[RequestSizeLimit(104857600)]
    +[RequestFormLimits(MultipartBodyLengthLimit = 104857600)]
     public Task<IActionResult> Upload(string channel, string? size = null)
    diff --git a/api/server/EchoHub.Server.Data.Migrations.AddAttachmentFileSize.html b/api/server/EchoHub.Server.Data.Migrations.AddAttachmentFileSize.html new file mode 100644 index 0000000..4d77710 --- /dev/null +++ b/api/server/EchoHub.Server.Data.Migrations.AddAttachmentFileSize.html @@ -0,0 +1,306 @@ + + + + + Class AddAttachmentFileSize | EchoHub Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    +
    Table of Contents
    + +
    +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    + + + +

    +Class AddAttachmentFileSize +

    + +
    +
    Namespace
    EchoHub.Server.Data.Migrations
    +
    Assembly
    EchoHub.Server.dll
    +
    + +
    +
    + +
    +
    [DbContext(typeof(EchoHubDbContext))]
    +[Migration("20260221193444_AddAttachmentFileSize")]
    +public class AddAttachmentFileSize : Migration
    +
    + + + + +
    +
    Inheritance
    +
    + +
    Migration
    +
    AddAttachmentFileSize
    +
    +
    + + + +
    +
    Inherited Members
    +
    + + + + + + + +
    + + + + + + +

    Constructors +

    + + + + +

    + AddAttachmentFileSize() + +

    + +
    +
    + +
    +
    public AddAttachmentFileSize()
    +
    + + + + + + + + + + + + + +

    Methods +

    + + + + +

    + BuildTargetModel(ModelBuilder) + +

    + +
    +
    + +
    +
    protected override void BuildTargetModel(ModelBuilder modelBuilder)
    +
    + +

    Parameters

    +
    +
    modelBuilder ModelBuilder
    +
    +
    + + + + + + + + + + + + + + +

    + Down(MigrationBuilder) + +

    + +
    +
    + +
    +
    protected override void Down(MigrationBuilder migrationBuilder)
    +
    + +

    Parameters

    +
    +
    migrationBuilder MigrationBuilder
    +
    +
    + + + + + + + + + + + + + + +

    + Up(MigrationBuilder) + +

    + +
    +
    + +
    +
    protected override void Up(MigrationBuilder migrationBuilder)
    +
    + +

    Parameters

    +
    +
    migrationBuilder MigrationBuilder
    +
    +
    + + + + + + + + + + + + + +
    + + + + +
    + +
    + +
    +
    + +
    + + + + diff --git a/api/server/EchoHub.Server.Data.Migrations.html b/api/server/EchoHub.Server.Data.Migrations.html index c8ec9de..1f267a3 100644 --- a/api/server/EchoHub.Server.Data.Migrations.html +++ b/api/server/EchoHub.Server.Data.Migrations.html @@ -94,6 +94,10 @@

    Classes

    +
    +
    AddAttachmentFileSize
    +
    +
    AddChannelIsPublic
    diff --git a/api/server/EchoHub.Server.Services.ChannelService.html b/api/server/EchoHub.Server.Services.ChannelService.html new file mode 100644 index 0000000..38d2708 --- /dev/null +++ b/api/server/EchoHub.Server.Services.ChannelService.html @@ -0,0 +1,526 @@ + + + + + Class ChannelService | EchoHub Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    +
    Table of Contents
    + +
    +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    + + + +

    +Class ChannelService +

    + +
    +
    Namespace
    EchoHub.Server.Services
    +
    Assembly
    EchoHub.Server.dll
    +
    + +
    +
    + +
    +
    public class ChannelService : IChannelService
    +
    + + + + +
    +
    Inheritance
    +
    + +
    ChannelService
    +
    +
    + +
    +
    Implements
    +
    + +
    +
    + + +
    +
    Inherited Members
    +
    + + + + + + + +
    + + + + + + +

    Constructors +

    + + + + +

    + ChannelService(IServiceScopeFactory, PresenceTracker, ILogger<ChannelService>) + +

    + +
    +
    + +
    +
    public ChannelService(IServiceScopeFactory scopeFactory, PresenceTracker presenceTracker, ILogger<ChannelService> logger)
    +
    + +

    Parameters

    +
    +
    scopeFactory IServiceScopeFactory
    +
    +
    presenceTracker PresenceTracker
    +
    +
    logger ILogger<ChannelService>
    +
    +
    + + + + + + + + + + + + +

    Methods +

    + + + + +

    + CreateChannelAsync(Guid, string, string?, bool) + +

    + +
    +
    + +
    +
    public Task<ChannelOperationResult> CreateChannelAsync(Guid creatorUserId, string name, string? topic, bool isPublic)
    +
    + +

    Parameters

    +
    +
    creatorUserId Guid
    +
    +
    name string
    +
    +
    topic string
    +
    +
    isPublic bool
    +
    +
    + +

    Returns

    +
    +
    Task<ChannelOperationResult>
    +
    +
    + + + + + + + + + + + + + +

    + DeleteChannelAsync(Guid, string) + +

    + +
    +
    + +
    +
    public Task<ChannelOperationResult> DeleteChannelAsync(Guid callerUserId, string channelName)
    +
    + +

    Parameters

    +
    +
    callerUserId Guid
    +
    +
    channelName string
    +
    +
    + +

    Returns

    +
    +
    Task<ChannelOperationResult>
    +
    +
    + + + + + + + + + + + + + +

    + EnsureChannelMembershipAsync(Guid, string) + +

    + +
    +
    + +
    +
    public Task<(bool Success, string? Error)> EnsureChannelMembershipAsync(Guid userId, string channelName)
    +
    + +

    Parameters

    +
    +
    userId Guid
    +
    +
    channelName string
    +
    +
    + +

    Returns

    +
    +
    Task<(bool Success, string Error)>
    +
    +
    + + + + + + + + + + + + + +

    + GetChannelByNameAsync(string) + +

    + +
    +
    + +
    +
    public Task<ChannelDto?> GetChannelByNameAsync(string channelName)
    +
    + +

    Parameters

    +
    +
    channelName string
    +
    +
    + +

    Returns

    +
    +
    Task<ChannelDto>
    +
    +
    + + + + + + + + + + + + + +

    + GetChannelListAsync() + +

    + +
    +
    + +
    +
    public Task<List<ChannelListItem>> GetChannelListAsync()
    +
    + + +

    Returns

    +
    +
    Task<List<ChannelListItem>>
    +
    +
    + + + + + + + + + + + + + +

    + GetChannelTopicAsync(string) + +

    + +
    +
    + +
    +
    public Task<(string? Topic, bool Exists)> GetChannelTopicAsync(string channelName)
    +
    + +

    Parameters

    +
    +
    channelName string
    +
    +
    + +

    Returns

    +
    +
    Task<(string Topic, bool Exists)>
    +
    +
    + + + + + + + + + + + + + +

    + GetChannelsAsync(Guid, int, int) + +

    + +
    +
    + +
    +
    public Task<PaginatedResponse<ChannelDto>> GetChannelsAsync(Guid userId, int offset, int limit)
    +
    + +

    Parameters

    +
    +
    userId Guid
    +
    +
    offset int
    +
    +
    limit int
    +
    +
    + +

    Returns

    +
    +
    Task<PaginatedResponse<ChannelDto>>
    +
    +
    + + + + + + + + + + + + + +

    + UpdateTopicAsync(Guid, string, string?) + +

    + +
    +
    + +
    +
    public Task<ChannelOperationResult> UpdateTopicAsync(Guid callerUserId, string channelName, string? topic)
    +
    + +

    Parameters

    +
    +
    callerUserId Guid
    +
    +
    channelName string
    +
    +
    topic string
    +
    +
    + +

    Returns

    +
    +
    Task<ChannelOperationResult>
    +
    +
    + + + + + + + + + + + + +
    + + + + +
    + +
    + +
    +
    + +
    + + + + diff --git a/api/server/EchoHub.Server.Services.ChatService.html b/api/server/EchoHub.Server.Services.ChatService.html index f6f0439..d3a5659 100644 --- a/api/server/EchoHub.Server.Services.ChatService.html +++ b/api/server/EchoHub.Server.Services.ChatService.html @@ -160,8 +160,8 @@ Class ChatService -

    - ChatService(IServiceScopeFactory, PresenceTracker, IEnumerable<IChatBroadcaster>, LinkEmbedService, IMessageEncryptionService, ILogger<ChatService>) +

    + ChatService(IServiceScopeFactory, PresenceTracker, IEnumerable<IChatBroadcaster>, LinkEmbedService, IMessageEncryptionService, IChannelService, ILogger<ChatService>)

    @@ -169,7 +169,7 @@ Class ChatService
    -
    public ChatService(IServiceScopeFactory scopeFactory, PresenceTracker presenceTracker, IEnumerable<IChatBroadcaster> broadcasters, LinkEmbedService embedService, IMessageEncryptionService encryption, ILogger<ChatService> logger)
    +
    public ChatService(IServiceScopeFactory scopeFactory, PresenceTracker presenceTracker, IEnumerable<IChatBroadcaster> broadcasters, LinkEmbedService embedService, IMessageEncryptionService encryption, IChannelService channelService, ILogger<ChatService> logger)

    Parameters

    @@ -184,6 +184,8 @@ Class ChatService
    encryption IMessageEncryptionService
    +
    channelService IChannelService
    +
    logger ILogger<ChatService>
    @@ -355,73 +357,6 @@ Class ChatService - -

    - GetChannelListAsync() - -

    - -
    -
    - -
    -
    public Task<List<ChannelListItem>> GetChannelListAsync()
    -
    - - -

    Returns

    -
    -
    Task<List<ChannelListItem>>
    -
    -
    - - - - - - - - - - - - - -

    - GetChannelTopicAsync(string) - -

    - -
    -
    - -
    -
    public Task<(string? Topic, bool Exists)> GetChannelTopicAsync(string channelName)
    -
    - -

    Parameters

    -
    -
    channelName string
    -
    -
    - -

    Returns

    -
    -
    Task<(string Topic, bool Exists)>
    -
    -
    - - - - - - - - - - -

    diff --git a/api/server/EchoHub.Server.Services.FileCleanupService.html b/api/server/EchoHub.Server.Services.FileCleanupService.html new file mode 100644 index 0000000..b0846b3 --- /dev/null +++ b/api/server/EchoHub.Server.Services.FileCleanupService.html @@ -0,0 +1,257 @@ + + + + + Class FileCleanupService | EchoHub Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    +
    Table of Contents
    + +
    +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    + + + +

    +Class FileCleanupService +

    + +
    +
    Namespace
    EchoHub.Server.Services
    +
    Assembly
    EchoHub.Server.dll
    +
    + +
    +
    + +
    +
    public sealed class FileCleanupService : BackgroundService, IDisposable
    +
    + + + + +
    +
    Inheritance
    +
    + +
    BackgroundService
    +
    FileCleanupService
    +
    +
    + +
    +
    Implements
    +
    + +
    +
    + + +
    +
    Inherited Members
    +
    + + + + + + +
    + + + + + + +

    Constructors +

    + + + + +

    + FileCleanupService(IConfiguration, ILogger<FileCleanupService>) + +

    + +
    +
    + +
    +
    public FileCleanupService(IConfiguration configuration, ILogger<FileCleanupService> logger)
    +
    + +

    Parameters

    +
    +
    configuration IConfiguration
    +
    +
    logger ILogger<FileCleanupService>
    +
    +
    + + + + + + + + + + + + +

    Methods +

    + + + + +

    + ExecuteAsync(CancellationToken) + +

    + +
    +
    + +
    +
    protected override Task ExecuteAsync(CancellationToken stoppingToken)
    +
    + +

    Parameters

    +
    +
    stoppingToken CancellationToken
    +
    +
    + +

    Returns

    +
    +
    Task
    +
    +
    + + + + + + + + + + + + +
    + + + + +
    + +
    + +
    +
    + +
    + + + + diff --git a/api/server/EchoHub.Server.Services.FileValidationHelper.html b/api/server/EchoHub.Server.Services.FileValidationHelper.html index 4f58382..f5c234a 100644 --- a/api/server/EchoHub.Server.Services.FileValidationHelper.html +++ b/api/server/EchoHub.Server.Services.FileValidationHelper.html @@ -152,6 +152,43 @@ Class FileValidationHelper + +

    + IsAudioFile(string) + +

    + +

    Checks whether the file name has a recognized audio extension.

    +
    +
    + +
    +
    public static bool IsAudioFile(string fileName)
    +
    + +

    Parameters

    +
    +
    fileName string
    +
    +
    + +

    Returns

    +
    +
    bool
    +
    +
    + + + + + + + + + + +

    diff --git a/api/server/EchoHub.Server.Services.html b/api/server/EchoHub.Server.Services.html index 54d4e34..705ced3 100644 --- a/api/server/EchoHub.Server.Services.html +++ b/api/server/EchoHub.Server.Services.html @@ -94,10 +94,18 @@

    Classes

    +
    +
    ChannelService
    +
    +
    ChatService
    +
    +
    FileCleanupService
    +
    +
    FileStorageService
    diff --git a/api/toc.html b/api/toc.html index 74a8304..ea8b380 100644 --- a/api/toc.html +++ b/api/toc.html @@ -78,6 +78,9 @@
  • ApiClient
  • +
  • + AudioPlaybackService +
  • ClientEncryptionService
  • @@ -113,6 +116,9 @@ EchoHub.Client.UI