mirror of
https://github.com/RedWizardsLab/EchoHub.git
synced 2026-09-04 00:26:07 +02:00
967 lines
329 KiB
JSON
967 lines
329 KiB
JSON
{
|
||
"api/client-articles/index.html": {
|
||
"href": "api/client-articles/index.html",
|
||
"title": "Client Articles | EchoHub Documentation",
|
||
"summary": "Client Articles Articles related to the EchoHub TUI client built with Terminal.Gui v2. Topics Terminal.Gui v2 patterns and conventions Theme system and customization (including transparent theme) Command system reference Configuration and session persistence Audio playback and file downloads Automatic update checking Notification sounds"
|
||
},
|
||
"api/client/EchoHub.Client.AppOrchestrator.html": {
|
||
"href": "api/client/EchoHub.Client.AppOrchestrator.html",
|
||
"title": "Class AppOrchestrator | EchoHub Documentation",
|
||
"summary": "Class AppOrchestrator Namespace EchoHub.Client Assembly EchoHub.Client.dll Central orchestrator for the EchoHub TUI client. Wires UI events to service calls and connection events to UI updates. public sealed class AppOrchestrator : IDisposable Inheritance object AppOrchestrator Implements IDisposable Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors AppOrchestrator(IApplication, ClientConfig) public AppOrchestrator(IApplication app, ClientConfig config) Parameters app IApplication config ClientConfig Properties MainWindow public MainWindow MainWindow { get; } Property Value MainWindow Methods Dispose() public void Dispose()"
|
||
},
|
||
"api/client/EchoHub.Client.Commands.CommandHandler.html": {
|
||
"href": "api/client/EchoHub.Client.Commands.CommandHandler.html",
|
||
"title": "Class CommandHandler | EchoHub Documentation",
|
||
"summary": "Class CommandHandler Namespace EchoHub.Client.Commands Assembly EchoHub.Client.dll public class CommandHandler Inheritance object CommandHandler Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors CommandHandler() public CommandHandler() Methods HandleAsync(string) public Task<CommandResult> HandleAsync(string input) Parameters input string Returns Task<CommandResult> IsCommand(string) public bool IsCommand(string input) Parameters input string Returns bool Events OnAssignRole public event Func<string, string, Task>? OnAssignRole Event Type Func<string, string, Task> OnBanUser public event Func<string, string?, Task>? OnBanUser Event Type Func<string, string, Task> OnHelp public event Func<Task>? OnHelp Event Type Func<Task> OnJoinChannel public event Func<string, Task>? OnJoinChannel Event Type Func<string, Task> OnKickUser public event Func<string, string?, Task>? OnKickUser Event Type Func<string, string, Task> OnLeaveChannel public event Func<Task>? OnLeaveChannel Event Type Func<Task> OnListUsers public event Func<Task>? OnListUsers Event Type Func<Task> OnMuteUser public event Func<string, int?, Task>? OnMuteUser Event Type Func<string, int?, Task> OnNukeChannel public event Func<Task>? OnNukeChannel Event Type Func<Task> OnOpenProfile public event Func<string?, Task>? OnOpenProfile Event Type Func<string, Task> OnOpenServers public event Func<Task>? OnOpenServers Event Type Func<Task> OnQuit public event Func<Task>? OnQuit Event Type Func<Task> OnSendFile public event Func<string, string?, Task>? OnSendFile Event Type Func<string, string, Task> OnSetAvatar public event Func<string, Task>? OnSetAvatar Event Type Func<string, Task> OnSetColor public event Func<string, Task>? OnSetColor Event Type Func<string, Task> OnSetNick public event Func<string, Task>? OnSetNick Event Type Func<string, Task> OnSetStatus public event Func<UserStatus, string?, Task>? OnSetStatus Event Type Func<UserStatus, string, Task> OnSetTheme public event Func<string, Task>? OnSetTheme Event Type Func<string, Task> OnSetTopic public event Func<string, Task>? OnSetTopic Event Type Func<string, Task> OnTestSound public event Func<Task>? OnTestSound Event Type Func<Task> OnUnbanUser public event Func<string, Task>? OnUnbanUser Event Type Func<string, Task> OnUnmuteUser public event Func<string, Task>? OnUnmuteUser Event Type Func<string, Task>"
|
||
},
|
||
"api/client/EchoHub.Client.Commands.CommandResult.html": {
|
||
"href": "api/client/EchoHub.Client.Commands.CommandResult.html",
|
||
"title": "Class CommandResult | EchoHub Documentation",
|
||
"summary": "Class CommandResult Namespace EchoHub.Client.Commands Assembly EchoHub.Client.dll public record CommandResult : IEquatable<CommandResult> Inheritance object CommandResult Implements IEquatable<CommandResult> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors CommandResult(CommandResult) protected CommandResult(CommandResult original) Parameters original CommandResult CommandResult(bool, string?, bool) public CommandResult(bool Handled, string? Message = null, bool IsError = false) Parameters Handled bool Message string IsError bool Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Handled public bool Handled { get; init; } Property Value bool IsError public bool IsError { get; init; } Property Value bool Message public string? Message { get; init; } Property Value string Methods Deconstruct(out bool, out string?, out bool) public void Deconstruct(out bool Handled, out string? Message, out bool IsError) Parameters Handled bool Message string IsError bool Equals(CommandResult?) public virtual bool Equals(CommandResult? other) Parameters other CommandResult 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 ==(CommandResult?, CommandResult?) public static bool operator ==(CommandResult? left, CommandResult? right) Parameters left CommandResult right CommandResult Returns bool operator !=(CommandResult?, CommandResult?) public static bool operator !=(CommandResult? left, CommandResult? right) Parameters left CommandResult right CommandResult Returns bool"
|
||
},
|
||
"api/client/EchoHub.Client.Commands.html": {
|
||
"href": "api/client/EchoHub.Client.Commands.html",
|
||
"title": "Namespace EchoHub.Client.Commands | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Client.Commands Classes CommandHandler CommandResult"
|
||
},
|
||
"api/client/EchoHub.Client.Config.AccountPreset.html": {
|
||
"href": "api/client/EchoHub.Client.Config.AccountPreset.html",
|
||
"title": "Class AccountPreset | EchoHub Documentation",
|
||
"summary": "Class AccountPreset Namespace EchoHub.Client.Config Assembly EchoHub.Client.dll public class AccountPreset Inheritance object AccountPreset Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors AccountPreset() public AccountPreset() Properties Bio public string? Bio { get; set; } Property Value string DisplayName public string? DisplayName { get; set; } Property Value string NicknameColor public string? NicknameColor { get; set; } Property Value string"
|
||
},
|
||
"api/client/EchoHub.Client.Config.ClientConfig.html": {
|
||
"href": "api/client/EchoHub.Client.Config.ClientConfig.html",
|
||
"title": "Class ClientConfig | EchoHub Documentation",
|
||
"summary": "Class ClientConfig Namespace EchoHub.Client.Config Assembly EchoHub.Client.dll public class ClientConfig Inheritance object ClientConfig Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ClientConfig() public ClientConfig() Properties ActiveTheme public string ActiveTheme { get; set; } Property Value string DefaultPreset public AccountPreset DefaultPreset { get; set; } Property Value AccountPreset Notifications public NotificationConfig Notifications { get; set; } Property Value NotificationConfig SavedServers public List<SavedServer> SavedServers { get; set; } Property Value List<SavedServer>"
|
||
},
|
||
"api/client/EchoHub.Client.Config.ConfigManager.html": {
|
||
"href": "api/client/EchoHub.Client.Config.ConfigManager.html",
|
||
"title": "Class ConfigManager | EchoHub Documentation",
|
||
"summary": "Class ConfigManager Namespace EchoHub.Client.Config Assembly EchoHub.Client.dll public static class ConfigManager Inheritance object ConfigManager Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods Load() public static ClientConfig Load() Returns ClientConfig RemoveServer(string) public static void RemoveServer(string url) Parameters url string Save(ClientConfig) public static void Save(ClientConfig config) Parameters config ClientConfig SaveServer(SavedServer) public static void SaveServer(SavedServer server) Parameters server SavedServer"
|
||
},
|
||
"api/client/EchoHub.Client.Config.NotificationConfig.html": {
|
||
"href": "api/client/EchoHub.Client.Config.NotificationConfig.html",
|
||
"title": "Class NotificationConfig | EchoHub Documentation",
|
||
"summary": "Class NotificationConfig Namespace EchoHub.Client.Config Assembly EchoHub.Client.dll public class NotificationConfig Inheritance object NotificationConfig Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors NotificationConfig() public NotificationConfig() Properties Enabled public bool Enabled { get; set; } Property Value bool SoundFile public string? SoundFile { get; set; } Property Value string Volume public byte Volume { get; set; } Property Value byte"
|
||
},
|
||
"api/client/EchoHub.Client.Config.SavedServer.html": {
|
||
"href": "api/client/EchoHub.Client.Config.SavedServer.html",
|
||
"title": "Class SavedServer | EchoHub Documentation",
|
||
"summary": "Class SavedServer Namespace EchoHub.Client.Config Assembly EchoHub.Client.dll public class SavedServer Inheritance object SavedServer Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors SavedServer() public SavedServer() Properties LastConnected public DateTimeOffset LastConnected { get; set; } Property Value DateTimeOffset Name public required string Name { get; set; } Property Value string RefreshToken public string? RefreshToken { get; set; } Property Value string RememberMe public bool RememberMe { get; set; } Property Value bool Url public required string Url { get; set; } Property Value string Username public string? Username { get; set; } Property Value string"
|
||
},
|
||
"api/client/EchoHub.Client.Config.html": {
|
||
"href": "api/client/EchoHub.Client.Config.html",
|
||
"title": "Namespace EchoHub.Client.Config | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Client.Config Classes AccountPreset ClientConfig ConfigManager NotificationConfig SavedServer"
|
||
},
|
||
"api/client/EchoHub.Client.Services.ApiClient.html": {
|
||
"href": "api/client/EchoHub.Client.Services.ApiClient.html",
|
||
"title": "Class ApiClient | EchoHub Documentation",
|
||
"summary": "Class ApiClient Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll public sealed class ApiClient : IDisposable Inheritance object ApiClient Implements IDisposable Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ApiClient(string) public ApiClient(string baseUrl) Parameters baseUrl string Properties BaseUrl public string BaseUrl { get; } Property Value string RefreshToken public string? RefreshToken { get; } Property Value string Token public string? Token { get; } Property Value string Methods AssignRoleAsync(string, ServerRole) public Task AssignRoleAsync(string username, ServerRole role) Parameters username string role ServerRole Returns Task BanUserAsync(string, string?) public Task BanUserAsync(string username, string? reason = null) Parameters username string reason string Returns Task CreateChannelAsync(string, string?, bool) public Task<ChannelDto?> CreateChannelAsync(string name, string? topic = null, bool isPublic = true) Parameters name string topic string isPublic bool Returns Task<ChannelDto> DeleteChannelAsync(string) public Task DeleteChannelAsync(string channelName) Parameters channelName string Returns Task DeleteMessageAsync(Guid) public Task DeleteMessageAsync(Guid messageId) Parameters messageId Guid Returns Task Dispose() public void Dispose() DownloadFileToTempAsync(string, string) public Task<string> DownloadFileToTempAsync(string relativeUrl, string fileName) Parameters relativeUrl string fileName string Returns Task<string> GetChannelsAsync() public Task<List<ChannelDto>> GetChannelsAsync() Returns Task<List<ChannelDto>> GetEncryptionKeyAsync() public Task<string> GetEncryptionKeyAsync() Returns Task<string> GetServerInfoAsync() public Task<ServerStatusDto?> GetServerInfoAsync() Returns Task<ServerStatusDto> GetUserProfileAsync(string) public Task<UserProfileDto?> GetUserProfileAsync(string username) Parameters username string Returns Task<UserProfileDto> GetValidTokenAsync() Returns a valid access token, refreshing if expired. Used by EchoHubConnection for SignalR token provider. public Task<string?> GetValidTokenAsync() Returns Task<string> KickUserAsync(string, string?) public Task KickUserAsync(string username, string? reason = null) Parameters username string reason string Returns Task LoginAsync(string, string) public Task<LoginResponse> LoginAsync(string username, string password) Parameters username string password string Returns Task<LoginResponse> LoginWithRefreshTokenAsync(string) public Task<LoginResponse> LoginWithRefreshTokenAsync(string refreshToken) Parameters refreshToken string Returns Task<LoginResponse> LogoutAsync() public Task LogoutAsync() Returns Task MuteUserAsync(string, int?, string?) public Task MuteUserAsync(string username, int? durationMinutes = null, string? reason = null) Parameters username string durationMinutes int? reason string Returns Task NukeChannelAsync(string) public Task NukeChannelAsync(string channelName) Parameters channelName string Returns Task RefreshTokenAsync() public Task RefreshTokenAsync() Returns Task RegisterAsync(string, string, string?) public Task<LoginResponse> RegisterAsync(string username, string password, string? displayName = null) Parameters username string password string displayName string Returns Task<LoginResponse> SendUrlAsync(string, string, string?) public Task<MessageDto?> SendUrlAsync(string channelName, string url, string? size = null) Parameters channelName string url string size string Returns Task<MessageDto> UnbanUserAsync(string) public Task UnbanUserAsync(string username) Parameters username string Returns Task UnmuteUserAsync(string) public Task UnmuteUserAsync(string username) Parameters username string Returns Task UpdateChannelTopicAsync(string, string?) public Task<ChannelDto?> UpdateChannelTopicAsync(string channelName, string? topic) Parameters channelName string topic string Returns Task<ChannelDto> UpdateProfileAsync(UpdateProfileRequest) public Task<UserProfileDto?> UpdateProfileAsync(UpdateProfileRequest request) Parameters request UpdateProfileRequest Returns Task<UserProfileDto> UploadAvatarAsync(Stream, string) public Task<string?> UploadAvatarAsync(Stream imageStream, string fileName) Parameters imageStream Stream fileName string Returns Task<string> UploadFileAsync(string, Stream, string, string?) public Task<MessageDto?> UploadFileAsync(string channelName, Stream fileStream, string fileName, string? size = null) Parameters channelName string fileStream Stream fileName string size string Returns Task<MessageDto> Events OnTokensRefreshed public event Action? OnTokensRefreshed Event Type Action"
|
||
},
|
||
"api/client/EchoHub.Client.Services.AsyncRunner.html": {
|
||
"href": "api/client/EchoHub.Client.Services.AsyncRunner.html",
|
||
"title": "Class AsyncRunner | EchoHub Documentation",
|
||
"summary": "Class AsyncRunner Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll Eliminates repeated Task.Run/try/catch/app.Invoke(ShowError) boilerplate. Runs async work on a background thread and routes exceptions to the UI. public static class AsyncRunner Inheritance object AsyncRunner Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods Run(IApplication, Func<Task>, Action<string>, string, string?) public static void Run(IApplication app, Func<Task> work, Action<string> showError, string errorPrefix, string? logContext = null) Parameters app IApplication work Func<Task> showError Action<string> errorPrefix string logContext string"
|
||
},
|
||
"api/client/EchoHub.Client.Services.AudioPlaybackService.html": {
|
||
"href": "api/client/EchoHub.Client.Services.AudioPlaybackService.html",
|
||
"title": "Class AudioPlaybackService | EchoHub Documentation",
|
||
"summary": "Class AudioPlaybackService Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll public class AudioPlaybackService Inheritance object AudioPlaybackService Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() 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"
|
||
},
|
||
"api/client/EchoHub.Client.Services.BackupInfo.html": {
|
||
"href": "api/client/EchoHub.Client.Services.BackupInfo.html",
|
||
"title": "Class BackupInfo | EchoHub Documentation",
|
||
"summary": "Class BackupInfo Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll public record BackupInfo : IEquatable<BackupInfo> Inheritance object BackupInfo Implements IEquatable<BackupInfo> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors BackupInfo(BackupInfo) protected BackupInfo(BackupInfo original) Parameters original BackupInfo BackupInfo(string, string, DateTimeOffset) public BackupInfo(string Version, string AppDirectory, DateTimeOffset CreatedAt) Parameters Version string AppDirectory string CreatedAt DateTimeOffset Properties AppDirectory public string AppDirectory { get; init; } Property Value string CreatedAt public DateTimeOffset CreatedAt { get; init; } Property Value DateTimeOffset EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Version public string Version { get; init; } Property Value string Methods Deconstruct(out string, out string, out DateTimeOffset) public void Deconstruct(out string Version, out string AppDirectory, out DateTimeOffset CreatedAt) Parameters Version string AppDirectory string CreatedAt DateTimeOffset Equals(BackupInfo?) public virtual bool Equals(BackupInfo? other) Parameters other BackupInfo 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 ==(BackupInfo?, BackupInfo?) public static bool operator ==(BackupInfo? left, BackupInfo? right) Parameters left BackupInfo right BackupInfo Returns bool operator !=(BackupInfo?, BackupInfo?) public static bool operator !=(BackupInfo? left, BackupInfo? right) Parameters left BackupInfo right BackupInfo Returns bool"
|
||
},
|
||
"api/client/EchoHub.Client.Services.ClientEncryptionService.html": {
|
||
"href": "api/client/EchoHub.Client.Services.ClientEncryptionService.html",
|
||
"title": "Class ClientEncryptionService | EchoHub Documentation",
|
||
"summary": "Class ClientEncryptionService Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll 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. public sealed class ClientEncryptionService : IMessageEncryptionService Inheritance object ClientEncryptionService Implements IMessageEncryptionService Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ClientEncryptionService() public ClientEncryptionService() Properties EncryptDatabaseEnabled Whether database content should be encrypted at rest (server setting). public bool EncryptDatabaseEnabled { get; } Property Value bool IsInitialized public bool IsInitialized { get; } Property Value bool Methods Decrypt(string) public string Decrypt(string content) Parameters content string Returns string DecryptNullable(string?) public string? DecryptNullable(string? value) Parameters value string Returns string Encrypt(string) public string Encrypt(string plaintext) Parameters plaintext string Returns string EncryptNullable(string?) public string? EncryptNullable(string? value) Parameters value string Returns string SetKey(string) Initialize with the server's encryption key (fetched after login). public void SetKey(string base64Key) Parameters base64Key string"
|
||
},
|
||
"api/client/EchoHub.Client.Services.EchoHubConnection.html": {
|
||
"href": "api/client/EchoHub.Client.Services.EchoHubConnection.html",
|
||
"title": "Class EchoHubConnection | EchoHub Documentation",
|
||
"summary": "Class EchoHubConnection Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll public sealed class EchoHubConnection : IAsyncDisposable Inheritance object EchoHubConnection Implements IAsyncDisposable Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors EchoHubConnection(string, ApiClient, ClientEncryptionService) public EchoHubConnection(string serverUrl, ApiClient apiClient, ClientEncryptionService encryption) Parameters serverUrl string apiClient ApiClient encryption ClientEncryptionService Properties IsConnected public bool IsConnected { get; } Property Value bool Methods ConnectAsync() public Task ConnectAsync() Returns Task DisconnectAsync() public Task DisconnectAsync() Returns Task DisposeAsync() public ValueTask DisposeAsync() Returns ValueTask GetHistoryAsync(string, int, int) public Task<List<MessageDto>> GetHistoryAsync(string channelName, int count = 100, int offset = 0) Parameters channelName string count int offset int Returns Task<List<MessageDto>> GetOnlineUsersAsync(string) public Task<List<UserPresenceDto>> GetOnlineUsersAsync(string channelName) Parameters channelName string Returns Task<List<UserPresenceDto>> JoinChannelAsync(string) public Task<List<MessageDto>> JoinChannelAsync(string channelName) Parameters channelName string Returns Task<List<MessageDto>> LeaveChannelAsync(string) public Task LeaveChannelAsync(string channelName) Parameters channelName string Returns Task SendMessageAsync(string, string) public Task SendMessageAsync(string channelName, string content) Parameters channelName string content string Returns Task UpdateStatusAsync(UserStatus, string?) public Task UpdateStatusAsync(UserStatus status, string? statusMessage = null) Parameters status UserStatus statusMessage string Returns Task Events OnChannelNuked public event Action<string>? OnChannelNuked Event Type Action<string> OnChannelUpdated public event Action<ChannelDto>? OnChannelUpdated Event Type Action<ChannelDto> OnConnectionStateChanged public event Action<string>? OnConnectionStateChanged Event Type Action<string> OnError public event Action<string>? OnError Event Type Action<string> OnForceDisconnect public event Action<string>? OnForceDisconnect Event Type Action<string> OnMessageDeleted public event Action<string, Guid>? OnMessageDeleted Event Type Action<string, Guid> OnMessageReceived public event Action<MessageDto>? OnMessageReceived Event Type Action<MessageDto> OnReconnected public event Action? OnReconnected Event Type Action OnUserBanned public event Action<string, string?>? OnUserBanned Event Type Action<string, string> OnUserJoined public event Action<string, string, UserPresenceDto?>? OnUserJoined Event Type Action<string, string, UserPresenceDto> OnUserKicked public event Action<string, string, string?>? OnUserKicked Event Type Action<string, string, string> OnUserLeft public event Action<string, string>? OnUserLeft Event Type Action<string, string> OnUserStatusChanged public event Action<UserPresenceDto>? OnUserStatusChanged Event Type Action<UserPresenceDto>"
|
||
},
|
||
"api/client/EchoHub.Client.Services.NotificationSoundService.html": {
|
||
"href": "api/client/EchoHub.Client.Services.NotificationSoundService.html",
|
||
"title": "Class NotificationSoundService | EchoHub Documentation",
|
||
"summary": "Class NotificationSoundService Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll public class NotificationSoundService Inheritance object NotificationSoundService Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors NotificationSoundService(NotificationConfig) public NotificationSoundService(NotificationConfig config) Parameters config NotificationConfig Methods PlayAsync() public Task PlayAsync() Returns Task PlayTestAsync() Plays the notification sound regardless of the Enabled setting (for /test-sound). public Task PlayTestAsync() Returns Task SetEnabled(bool) public void SetEnabled(bool enabled) Parameters enabled bool SetVolume(byte) public void SetVolume(byte volume) Parameters volume byte"
|
||
},
|
||
"api/client/EchoHub.Client.Services.PathSetup.html": {
|
||
"href": "api/client/EchoHub.Client.Services.PathSetup.html",
|
||
"title": "Class PathSetup | EchoHub Documentation",
|
||
"summary": "Class PathSetup Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll Ensures the application's directory is on the system PATH so users can run 'echohub' from any terminal session. public static class PathSetup Inheritance object PathSetup Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods EnsureOnPath() Checks if the app directory is on PATH; if not, adds it persistently. On Windows: modifies user-level PATH environment variable. On Linux/macOS: appends an export line to shell profile files. public static void EnsureOnPath()"
|
||
},
|
||
"api/client/EchoHub.Client.Services.UpdateBackupService.html": {
|
||
"href": "api/client/EchoHub.Client.Services.UpdateBackupService.html",
|
||
"title": "Class UpdateBackupService | EchoHub Documentation",
|
||
"summary": "Class UpdateBackupService Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll Manages pre-update backups and rollback restoration for the auto-updater. Backup location: ~/.echohub/update-backup/ public static class UpdateBackupService Inheritance object UpdateBackupService Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Properties IsPostUpdate True if a backup exists from a recent update (set at startup). public static bool IsPostUpdate { get; set; } Property Value bool Methods BackupExists() Returns true if a valid backup exists (both ZIP and metadata file present). public static bool BackupExists() Returns bool CreateBackup() Creates a ZIP backup of the current app directory before an update. Deletes any previous backup first. Uses fastest compression for speed. public static void CreateBackup() DeleteBackup() Deletes the backup directory and all contents. public static void DeleteBackup() GetBackupInfo() Reads backup metadata. Returns null if no backup exists or metadata is unreadable. public static BackupInfo? GetBackupInfo() Returns BackupInfo RestoreBackup() Restores the backup ZIP to the app directory, then restarts the process. This method does not return — it calls Environment.Exit(0). public static void RestoreBackup()"
|
||
},
|
||
"api/client/EchoHub.Client.Services.UpdateChecker.html": {
|
||
"href": "api/client/EchoHub.Client.Services.UpdateChecker.html",
|
||
"title": "Class UpdateChecker | EchoHub Documentation",
|
||
"summary": "Class UpdateChecker Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll public sealed class UpdateChecker : IDisposable Inheritance object UpdateChecker Implements IDisposable Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors UpdateChecker(IApplication) public UpdateChecker(IApplication app) Parameters app IApplication Properties CurrentVersion public static string CurrentVersion { get; } Property Value string Methods CheckNowAsync() public Task CheckNowAsync() Returns Task Dispose() public void Dispose() Start() public void Start()"
|
||
},
|
||
"api/client/EchoHub.Client.Services.html": {
|
||
"href": "api/client/EchoHub.Client.Services.html",
|
||
"title": "Namespace EchoHub.Client.Services | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Client.Services Classes ApiClient AsyncRunner Eliminates repeated Task.Run/try/catch/app.Invoke(ShowError) boilerplate. Runs async work on a background thread and routes exceptions to the UI. AudioPlaybackService BackupInfo ClientEncryptionService 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. EchoHubConnection NotificationSoundService PathSetup Ensures the application's directory is on the system PATH so users can run 'echohub' from any terminal session. UpdateBackupService Manages pre-update backups and rollback restoration for the auto-updater. Backup location: ~/.echohub/update-backup/ UpdateChecker"
|
||
},
|
||
"api/client/EchoHub.Client.Themes.Theme.html": {
|
||
"href": "api/client/EchoHub.Client.Themes.Theme.html",
|
||
"title": "Class Theme | EchoHub Documentation",
|
||
"summary": "Class Theme Namespace EchoHub.Client.Themes Assembly EchoHub.Client.dll public class Theme Inheritance object Theme Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors Theme() public Theme() Properties Base public ThemeColors Base { get; set; } Property Value ThemeColors Dialog public ThemeColors Dialog { get; set; } Property Value ThemeColors Menu public ThemeColors Menu { get; set; } Property Value ThemeColors Name public required string Name { get; set; } Property Value string Status public ThemeColors Status { get; set; } Property Value ThemeColors"
|
||
},
|
||
"api/client/EchoHub.Client.Themes.ThemeColors.html": {
|
||
"href": "api/client/EchoHub.Client.Themes.ThemeColors.html",
|
||
"title": "Class ThemeColors | EchoHub Documentation",
|
||
"summary": "Class ThemeColors Namespace EchoHub.Client.Themes Assembly EchoHub.Client.dll public class ThemeColors Inheritance object ThemeColors Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ThemeColors() public ThemeColors() Properties Background public string Background { get; set; } Property Value string FocusBackground public string FocusBackground { get; set; } Property Value string FocusForeground public string FocusForeground { get; set; } Property Value string Foreground public string Foreground { get; set; } Property Value string"
|
||
},
|
||
"api/client/EchoHub.Client.Themes.ThemeManager.html": {
|
||
"href": "api/client/EchoHub.Client.Themes.ThemeManager.html",
|
||
"title": "Class ThemeManager | EchoHub Documentation",
|
||
"summary": "Class ThemeManager Namespace EchoHub.Client.Themes Assembly EchoHub.Client.dll public static class ThemeManager Inheritance object ThemeManager Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods ApplyTheme(Theme) public static void ApplyTheme(Theme theme) Parameters theme Theme GetAvailableThemes() public static List<Theme> GetAvailableThemes() Returns List<Theme> GetTheme(string) public static Theme GetTheme(string name) Parameters name string Returns Theme SaveTheme(Theme) public static void SaveTheme(Theme theme) Parameters theme Theme"
|
||
},
|
||
"api/client/EchoHub.Client.Themes.html": {
|
||
"href": "api/client/EchoHub.Client.Themes.html",
|
||
"title": "Namespace EchoHub.Client.Themes | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Client.Themes Classes Theme ThemeColors ThemeManager"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Chat.ChatColors.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Chat.ChatColors.html",
|
||
"title": "Class ChatColors | EchoHub Documentation",
|
||
"summary": "Class ChatColors Namespace EchoHub.Client.UI.Chat Assembly EchoHub.Client.dll Shared color attributes for chat rendering (timestamps, system messages). public static class ChatColors Inheritance object ChatColors Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Fields AudioAttr public static readonly Attribute AudioAttr Field Value Attribute ChannelRefAttr public static readonly Attribute ChannelRefAttr Field Value Attribute EmbedBorderAttr public static readonly Attribute EmbedBorderAttr Field Value Attribute EmbedDescAttr public static readonly Attribute EmbedDescAttr Field Value Attribute EmbedTitleAttr public static readonly Attribute EmbedTitleAttr Field Value Attribute EmbedUrlAttr public static readonly Attribute EmbedUrlAttr Field Value Attribute FileAttr public static readonly Attribute FileAttr Field Value Attribute MentionHighlightAttr public static readonly Attribute MentionHighlightAttr Field Value Attribute MentionTextAttr public static readonly Attribute MentionTextAttr Field Value Attribute SystemAttr public static readonly Attribute SystemAttr Field Value Attribute TimestampAttr public static readonly Attribute TimestampAttr Field Value Attribute Methods SplitMentions(string, Attribute?) Split text around @mentions and #channels, giving each the appropriate accent color. Non-special text uses the provided default color. public static List<ChatSegment> SplitMentions(string text, Attribute? defaultColor = null) Parameters text string defaultColor Attribute? Returns List<ChatSegment>"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Chat.ChatLine.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Chat.ChatLine.html",
|
||
"title": "Class ChatLine | EchoHub Documentation",
|
||
"summary": "Class ChatLine Namespace EchoHub.Client.UI.Chat Assembly EchoHub.Client.dll A single line in the chat, composed of colored segments. public class ChatLine Inheritance object ChatLine Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChatLine(List<ChatSegment>) public ChatLine(List<ChatSegment> segments) Parameters segments List<ChatSegment> ChatLine(string) public ChatLine(string plainText) Parameters plainText string Properties AttachmentFileName public string? AttachmentFileName { get; set; } Property Value string AttachmentUrl public string? AttachmentUrl { get; set; } Property Value string ContinuationIndent Number of spaces to prepend on continuation lines when this line is word-wrapped. public int ContinuationIndent { get; set; } Property Value int IsMention public bool IsMention { get; set; } Property Value bool MessageId public Guid? MessageId { get; set; } Property Value Guid? Segments public List<ChatSegment> Segments { get; } Property Value List<ChatSegment> SenderUsername public string? SenderUsername { get; set; } Property Value string TextLength public int TextLength { get; } Property Value int Type public MessageType? Type { get; set; } Property Value MessageType? Methods FromColoredText(string, Attribute?) Parse a string containing printable color tags into colored segments. Format: {F:RRGGBB} (foreground), {B:RRGGBB} (background), {X} (reset). public static ChatLine FromColoredText(string text, Attribute? defaultAttr = null) Parameters text string defaultAttr Attribute? Returns ChatLine HasColorTags(string) Returns true if a line contains printable color tags. public static bool HasColorTags(string text) Parameters text string Returns bool StripColorTags(string) Remove all color tags from text, returning only the visible characters. public static string StripColorTags(string text) Parameters text string Returns string ToString() public override string ToString() Returns string Wrap(int, int) Wrap this line into multiple lines that fit within the given width. Continuation lines are indented with the specified number of spaces. public List<ChatLine> Wrap(int width, int continuationIndent = 0) Parameters width int continuationIndent int Returns List<ChatLine>"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Chat.ChatListSource.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Chat.ChatListSource.html",
|
||
"title": "Class ChatListSource | EchoHub Documentation",
|
||
"summary": "Class ChatListSource Namespace EchoHub.Client.UI.Chat Assembly EchoHub.Client.dll Custom list data source for chat messages with per-segment coloring. public class ChatListSource : IListDataSource, IDisposable Inheritance object ChatListSource Implements IListDataSource IDisposable Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChatListSource() public ChatListSource() Properties Count public int Count { get; } Property Value int MaxItemLength public int MaxItemLength { get; } Property Value int SuspendCollectionChangedEvent public bool SuspendCollectionChangedEvent { get; set; } Property Value bool Methods Add(ChatLine) public void Add(ChatLine line) Parameters line ChatLine AddRange(IEnumerable<ChatLine>) public void AddRange(IEnumerable<ChatLine> lines) Parameters lines IEnumerable<ChatLine> Clear() public void Clear() Dispose() public void Dispose() GetLine(int) public ChatLine? GetLine(int index) Parameters index int Returns ChatLine InsertRange(int, IEnumerable<ChatLine>) public void InsertRange(int index, IEnumerable<ChatLine> lines) Parameters index int lines IEnumerable<ChatLine> IsMarked(int) public bool IsMarked(int item) Parameters item int Returns bool Render(ListView, bool, int, int, int, int, int) public void Render(ListView listView, bool selected, int item, int col, int row, int width, int viewportX = 0) Parameters listView ListView selected bool item int col int row int width int viewportX int SetMark(int, bool) public void SetMark(int item, bool value) Parameters item int value bool ToList() public IList ToList() Returns IList Events CollectionChanged public event NotifyCollectionChangedEventHandler? CollectionChanged Event Type NotifyCollectionChangedEventHandler"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Chat.ChatMessageManager.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Chat.ChatMessageManager.html",
|
||
"title": "Class ChatMessageManager | EchoHub Documentation",
|
||
"summary": "Class ChatMessageManager Namespace EchoHub.Client.UI.Chat Assembly EchoHub.Client.dll Owns chat message storage, formatting, and mutation. Fires MessagesChanged when a channel's message list is modified so the UI layer can refresh. public sealed class ChatMessageManager Inheritance object ChatMessageManager Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChatMessageManager() public ChatMessageManager() Properties CurrentChannel The currently active channel (used for unread tracking and @mention detection). public string CurrentChannel { get; set; } Property Value string CurrentUser public string CurrentUser { get; } Property Value string Methods AddMessage(MessageDto) Format and store a received message. Increments unread count if not the active channel. public void AddMessage(MessageDto message) Parameters message MessageDto AddStatusMessage(string, string, string) Add a status change message to a channel with colored styling. public void AddStatusMessage(string channelName, string username, string status) Parameters channelName string username string status string AddSystemMessage(string, string) Add a system/informational message to a channel with colored styling. public void AddSystemMessage(string channelName, string text) Parameters channelName string text string ClearAll() Reset all message state (used on disconnect). public void ClearAll() ClearChannelMessages(string) Clear all messages from a specific channel. public void ClearChannelMessages(string channelName) Parameters channelName string ClearUnread(string) public void ClearUnread(string channelName) Parameters channelName string GetMessages(string) public List<ChatLine>? GetMessages(string channelName) Parameters channelName string Returns List<ChatLine> GetUnreadCount(string) public int GetUnreadCount(string channelName) Parameters channelName string Returns int LoadHistory(string, List<MessageDto>) Load historical messages into a channel, replacing any existing messages. public void LoadHistory(string channelName, List<MessageDto> messages) Parameters channelName string messages List<MessageDto> PrependHistory(string, List<MessageDto>) Prepend older messages at the front of a channel's buffer, skipping any that are already present. Fires HistoryPrepended when new lines are actually inserted. public void PrependHistory(string channelName, List<MessageDto> olderMessages) Parameters channelName string olderMessages List<MessageDto> RemoveMessage(string, Guid) Remove all lines associated with a specific message ID. public void RemoveMessage(string channelName, Guid messageId) Parameters channelName string messageId Guid SetChatWidth(int) public void SetChatWidth(int width) Parameters width int SetCurrentUser(string) public void SetCurrentUser(string username) Parameters username string Events HistoryPrepended Fired after older messages are prepended to a channel's buffer. Parameter is the channel name. public event Action<string>? HistoryPrepended Event Type Action<string> MessagesChanged Fired after any mutation to a channel's messages. Parameter is the channel name. public event Action<string>? MessagesChanged Event Type Action<string>"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Chat.ChatSegment.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Chat.ChatSegment.html",
|
||
"title": "Class ChatSegment | EchoHub Documentation",
|
||
"summary": "Class ChatSegment Namespace EchoHub.Client.UI.Chat Assembly EchoHub.Client.dll A colored text segment within a chat line. public record ChatSegment : IEquatable<ChatSegment> Inheritance object ChatSegment Implements IEquatable<ChatSegment> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors ChatSegment(ChatSegment) protected ChatSegment(ChatSegment original) Parameters original ChatSegment ChatSegment(string, Attribute?) A colored text segment within a chat line. public ChatSegment(string Text, Attribute? Color) Parameters Text string Color Attribute? Properties Color public Attribute? Color { get; init; } Property Value Attribute? EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Text public string Text { get; init; } Property Value string Methods Deconstruct(out string, out Attribute?) public void Deconstruct(out string Text, out Attribute? Color) Parameters Text string Color Attribute? Equals(ChatSegment?) public virtual bool Equals(ChatSegment? other) Parameters other ChatSegment 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 ==(ChatSegment?, ChatSegment?) public static bool operator ==(ChatSegment? left, ChatSegment? right) Parameters left ChatSegment right ChatSegment Returns bool operator !=(ChatSegment?, ChatSegment?) public static bool operator !=(ChatSegment? left, ChatSegment? right) Parameters left ChatSegment right ChatSegment Returns bool"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Chat.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Chat.html",
|
||
"title": "Namespace EchoHub.Client.UI.Chat | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Client.UI.Chat Classes ChatColors Shared color attributes for chat rendering (timestamps, system messages). ChatLine A single line in the chat, composed of colored segments. ChatListSource Custom list data source for chat messages with per-segment coloring. ChatMessageManager Owns chat message storage, formatting, and mutation. Fires MessagesChanged when a channel's message list is modified so the UI layer can refresh. ChatSegment A colored text segment within a chat line."
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.AudioPlayerDialog.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.AudioPlayerDialog.html",
|
||
"title": "Class AudioPlayerDialog | EchoHub Documentation",
|
||
"summary": "Class AudioPlayerDialog Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll public sealed class AudioPlayerDialog Inheritance object AudioPlayerDialog Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() 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"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.ConnectDialog.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.ConnectDialog.html",
|
||
"title": "Class ConnectDialog | EchoHub Documentation",
|
||
"summary": "Class ConnectDialog Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll A Terminal.Gui dialog for entering server connection and authentication details. Includes a saved servers selector when saved servers are available. public sealed class ConnectDialog Inheritance object ConnectDialog Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ConnectDialog() public ConnectDialog() Methods Show(IApplication, List<SavedServer>?) Shows the connect dialog with an optional list of saved servers. Returns the result, or null if cancelled. public static ConnectDialogResult? Show(IApplication app, List<SavedServer>? savedServers = null) Parameters app IApplication savedServers List<SavedServer> Returns ConnectDialogResult"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.ConnectDialogResult.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.ConnectDialogResult.html",
|
||
"title": "Class ConnectDialogResult | EchoHub Documentation",
|
||
"summary": "Class ConnectDialogResult Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll Result returned from the connect dialog. public record ConnectDialogResult : IEquatable<ConnectDialogResult> Inheritance object ConnectDialogResult Implements IEquatable<ConnectDialogResult> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors ConnectDialogResult(ConnectDialogResult) protected ConnectDialogResult(ConnectDialogResult original) Parameters original ConnectDialogResult ConnectDialogResult(string, string, string, bool, bool, string?) Result returned from the connect dialog. public ConnectDialogResult(string ServerUrl, string Username, string Password, bool IsRegister, bool RememberMe, string? SavedRefreshToken) Parameters ServerUrl string Username string Password string IsRegister bool RememberMe bool SavedRefreshToken string Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type IsRegister public bool IsRegister { get; init; } Property Value bool Password public string Password { get; init; } Property Value string RememberMe public bool RememberMe { get; init; } Property Value bool SavedRefreshToken public string? SavedRefreshToken { get; init; } Property Value string ServerUrl public string ServerUrl { get; init; } Property Value string Username public string Username { get; init; } Property Value string Methods Deconstruct(out string, out string, out string, out bool, out bool, out string?) public void Deconstruct(out string ServerUrl, out string Username, out string Password, out bool IsRegister, out bool RememberMe, out string? SavedRefreshToken) Parameters ServerUrl string Username string Password string IsRegister bool RememberMe bool SavedRefreshToken string Equals(ConnectDialogResult?) public virtual bool Equals(ConnectDialogResult? other) Parameters other ConnectDialogResult 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 ==(ConnectDialogResult?, ConnectDialogResult?) public static bool operator ==(ConnectDialogResult? left, ConnectDialogResult? right) Parameters left ConnectDialogResult right ConnectDialogResult Returns bool operator !=(ConnectDialogResult?, ConnectDialogResult?) public static bool operator !=(ConnectDialogResult? left, ConnectDialogResult? right) Parameters left ConnectDialogResult right ConnectDialogResult Returns bool"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.CreateChannelDialog.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.CreateChannelDialog.html",
|
||
"title": "Class CreateChannelDialog | EchoHub Documentation",
|
||
"summary": "Class CreateChannelDialog Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll public sealed class CreateChannelDialog Inheritance object CreateChannelDialog Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors CreateChannelDialog() public CreateChannelDialog() Methods Show(IApplication) public static CreateChannelResult? Show(IApplication app) Parameters app IApplication Returns CreateChannelResult"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.CreateChannelResult.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.CreateChannelResult.html",
|
||
"title": "Class CreateChannelResult | EchoHub Documentation",
|
||
"summary": "Class CreateChannelResult Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll public record CreateChannelResult : IEquatable<CreateChannelResult> Inheritance object CreateChannelResult Implements IEquatable<CreateChannelResult> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors CreateChannelResult(CreateChannelResult) protected CreateChannelResult(CreateChannelResult original) Parameters original CreateChannelResult CreateChannelResult(string, string?, bool) public CreateChannelResult(string Name, string? Topic, bool IsPublic) Parameters Name string Topic string IsPublic bool Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type IsPublic public bool IsPublic { get; init; } Property Value bool Name public string Name { get; init; } Property Value string Topic public string? Topic { get; init; } Property Value string Methods Deconstruct(out string, out string?, out bool) public void Deconstruct(out string Name, out string? Topic, out bool IsPublic) Parameters Name string Topic string IsPublic bool Equals(CreateChannelResult?) public virtual bool Equals(CreateChannelResult? other) Parameters other CreateChannelResult 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 ==(CreateChannelResult?, CreateChannelResult?) public static bool operator ==(CreateChannelResult? left, CreateChannelResult? right) Parameters left CreateChannelResult right CreateChannelResult Returns bool operator !=(CreateChannelResult?, CreateChannelResult?) public static bool operator !=(CreateChannelResult? left, CreateChannelResult? right) Parameters left CreateChannelResult right CreateChannelResult Returns bool"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.ProfileAction.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.ProfileAction.html",
|
||
"title": "Enum ProfileAction | EchoHub Documentation",
|
||
"summary": "Enum ProfileAction Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll Action selected by the user in their own profile dialog. public enum ProfileAction Fields Close = 0 EditProfile = 1 SetStatus = 2"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.ProfileEditDialog.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.ProfileEditDialog.html",
|
||
"title": "Class ProfileEditDialog | EchoHub Documentation",
|
||
"summary": "Class ProfileEditDialog Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll A Terminal.Gui dialog for editing the user's profile (display name, bio, nickname color). public sealed class ProfileEditDialog Inheritance object ProfileEditDialog Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ProfileEditDialog() public ProfileEditDialog() Methods Show(IApplication, string?, string?, string?, bool, byte) Shows the profile edit dialog and returns the result, or null if cancelled. public static ProfileEditResult? Show(IApplication app, string? currentDisplayName, string? currentBio, string? currentColor, bool notificationSoundEnabled = false, byte notificationVolume = 30) Parameters app IApplication currentDisplayName string currentBio string currentColor string notificationSoundEnabled bool notificationVolume byte Returns ProfileEditResult"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.ProfileEditResult.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.ProfileEditResult.html",
|
||
"title": "Class ProfileEditResult | EchoHub Documentation",
|
||
"summary": "Class ProfileEditResult Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll Result returned from the profile edit dialog. public record ProfileEditResult : IEquatable<ProfileEditResult> Inheritance object ProfileEditResult Implements IEquatable<ProfileEditResult> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors ProfileEditResult(ProfileEditResult) protected ProfileEditResult(ProfileEditResult original) Parameters original ProfileEditResult ProfileEditResult(string?, string?, string?, string?, bool?, byte?) Result returned from the profile edit dialog. public ProfileEditResult(string? DisplayName, string? Bio, string? NicknameColor, string? AvatarPath, bool? NotificationSoundEnabled, byte? NotificationVolume) Parameters DisplayName string Bio string NicknameColor string AvatarPath string NotificationSoundEnabled bool? NotificationVolume byte? Properties AvatarPath public string? AvatarPath { get; init; } Property Value string Bio public string? Bio { get; init; } Property Value string DisplayName public string? DisplayName { get; init; } Property Value string EqualityContract protected virtual Type EqualityContract { get; } Property Value Type NicknameColor public string? NicknameColor { get; init; } Property Value string NotificationSoundEnabled public bool? NotificationSoundEnabled { get; init; } Property Value bool? NotificationVolume public byte? NotificationVolume { get; init; } Property Value byte? Methods Deconstruct(out string?, out string?, out string?, out string?, out bool?, out byte?) public void Deconstruct(out string? DisplayName, out string? Bio, out string? NicknameColor, out string? AvatarPath, out bool? NotificationSoundEnabled, out byte? NotificationVolume) Parameters DisplayName string Bio string NicknameColor string AvatarPath string NotificationSoundEnabled bool? NotificationVolume byte? Equals(ProfileEditResult?) public virtual bool Equals(ProfileEditResult? other) Parameters other ProfileEditResult 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 ==(ProfileEditResult?, ProfileEditResult?) public static bool operator ==(ProfileEditResult? left, ProfileEditResult? right) Parameters left ProfileEditResult right ProfileEditResult Returns bool operator !=(ProfileEditResult?, ProfileEditResult?) public static bool operator !=(ProfileEditResult? left, ProfileEditResult? right) Parameters left ProfileEditResult right ProfileEditResult Returns bool"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.ProfileViewDialog.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.ProfileViewDialog.html",
|
||
"title": "Class ProfileViewDialog | EchoHub Documentation",
|
||
"summary": "Class ProfileViewDialog Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll Dialog for viewing a user's server profile. Shows Edit Profile / Set Status buttons when viewing own profile. public sealed class ProfileViewDialog Inheritance object ProfileViewDialog Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ProfileViewDialog() public ProfileViewDialog() Methods Show(IApplication, UserProfileDto?) Show a read-only profile view for another user. public static void Show(IApplication app, UserProfileDto? profile) Parameters app IApplication profile UserProfileDto ShowOwn(IApplication, UserProfileDto?, UserStatus, string?) Show the profile view for the current user with action buttons. Returns the action the user selected. public static ProfileAction ShowOwn(IApplication app, UserProfileDto? profile, UserStatus currentStatus, string? currentStatusMessage) Parameters app IApplication profile UserProfileDto currentStatus UserStatus currentStatusMessage string Returns ProfileAction"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.SearchDialog.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.SearchDialog.html",
|
||
"title": "Class SearchDialog | EchoHub Documentation",
|
||
"summary": "Class SearchDialog Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll Command-palette style search dialog (Ctrl+K) for navigating channels and triggering app actions. public static class SearchDialog Inheritance object SearchDialog Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods Show(IApplication, IReadOnlyList<string>) public static SearchResult? Show(IApplication app, IReadOnlyList<string> channels) Parameters app IApplication channels IReadOnlyList<string> Returns SearchResult"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.SearchResult.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.SearchResult.html",
|
||
"title": "Class SearchResult | EchoHub Documentation",
|
||
"summary": "Class SearchResult Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll public record SearchResult : IEquatable<SearchResult> Inheritance object SearchResult Implements IEquatable<SearchResult> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors SearchResult(SearchResult) protected SearchResult(SearchResult original) Parameters original SearchResult SearchResult(SearchResultType, string, string) public SearchResult(SearchResultType Type, string Key, string Label) Parameters Type SearchResultType Key string Label string Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Key public string Key { get; init; } Property Value string Label public string Label { get; init; } Property Value string Type public SearchResultType Type { get; init; } Property Value SearchResultType Methods Deconstruct(out SearchResultType, out string, out string) public void Deconstruct(out SearchResultType Type, out string Key, out string Label) Parameters Type SearchResultType Key string Label string Equals(SearchResult?) public virtual bool Equals(SearchResult? other) Parameters other SearchResult 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 ==(SearchResult?, SearchResult?) public static bool operator ==(SearchResult? left, SearchResult? right) Parameters left SearchResult right SearchResult Returns bool operator !=(SearchResult?, SearchResult?) public static bool operator !=(SearchResult? left, SearchResult? right) Parameters left SearchResult right SearchResult Returns bool"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.SearchResultType.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.SearchResultType.html",
|
||
"title": "Enum SearchResultType | EchoHub Documentation",
|
||
"summary": "Enum SearchResultType Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll public enum SearchResultType Fields Action = 1 Channel = 0"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.StatusDialog.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.StatusDialog.html",
|
||
"title": "Class StatusDialog | EchoHub Documentation",
|
||
"summary": "Class StatusDialog Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll A Terminal.Gui dialog for setting the user's status and status message. public sealed class StatusDialog Inheritance object StatusDialog Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors StatusDialog() public StatusDialog() Methods Show(IApplication, UserStatus, string?) Shows the status dialog and returns the result, or null if cancelled. public static StatusDialogResult? Show(IApplication app, UserStatus currentStatus, string? currentMessage) Parameters app IApplication currentStatus UserStatus currentMessage string Returns StatusDialogResult"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.StatusDialogResult.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.StatusDialogResult.html",
|
||
"title": "Class StatusDialogResult | EchoHub Documentation",
|
||
"summary": "Class StatusDialogResult Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll Result returned from the status dialog. public record StatusDialogResult : IEquatable<StatusDialogResult> Inheritance object StatusDialogResult Implements IEquatable<StatusDialogResult> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors StatusDialogResult(StatusDialogResult) protected StatusDialogResult(StatusDialogResult original) Parameters original StatusDialogResult StatusDialogResult(UserStatus, string?) Result returned from the status dialog. public StatusDialogResult(UserStatus Status, string? StatusMessage) Parameters Status UserStatus StatusMessage string Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Status public UserStatus Status { get; init; } Property Value UserStatus StatusMessage public string? StatusMessage { get; init; } Property Value string Methods Deconstruct(out UserStatus, out string?) public void Deconstruct(out UserStatus Status, out string? StatusMessage) Parameters Status UserStatus StatusMessage string Equals(StatusDialogResult?) public virtual bool Equals(StatusDialogResult? other) Parameters other StatusDialogResult 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 ==(StatusDialogResult?, StatusDialogResult?) public static bool operator ==(StatusDialogResult? left, StatusDialogResult? right) Parameters left StatusDialogResult right StatusDialogResult Returns bool operator !=(StatusDialogResult?, StatusDialogResult?) public static bool operator !=(StatusDialogResult? left, StatusDialogResult? right) Parameters left StatusDialogResult right StatusDialogResult Returns bool"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.UpdateConfirmDialog.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.UpdateConfirmDialog.html",
|
||
"title": "Class UpdateConfirmDialog | EchoHub Documentation",
|
||
"summary": "Class UpdateConfirmDialog Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll public sealed class UpdateConfirmDialog Inheritance object UpdateConfirmDialog Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() 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"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.UpdateProgressDialog.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.UpdateProgressDialog.html",
|
||
"title": "Class UpdateProgressDialog | EchoHub Documentation",
|
||
"summary": "Class UpdateProgressDialog Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll public sealed class UpdateProgressDialog Inheritance object UpdateProgressDialog Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() 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"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Dialogs.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Dialogs.html",
|
||
"title": "Namespace EchoHub.Client.UI.Dialogs | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Client.UI.Dialogs Classes AudioPlayerDialog ConnectDialog A Terminal.Gui dialog for entering server connection and authentication details. Includes a saved servers selector when saved servers are available. ConnectDialogResult Result returned from the connect dialog. CreateChannelDialog CreateChannelResult ProfileEditDialog A Terminal.Gui dialog for editing the user's profile (display name, bio, nickname color). ProfileEditResult Result returned from the profile edit dialog. ProfileViewDialog Dialog for viewing a user's server profile. Shows Edit Profile / Set Status buttons when viewing own profile. SearchDialog Command-palette style search dialog (Ctrl+K) for navigating channels and triggering app actions. SearchResult StatusDialog A Terminal.Gui dialog for setting the user's status and status message. StatusDialogResult Result returned from the status dialog. UpdateConfirmDialog UpdateProgressDialog Enums ProfileAction Action selected by the user in their own profile dialog. SearchResultType"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Helpers.EmojiHelper.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Helpers.EmojiHelper.html",
|
||
"title": "Class EmojiHelper | EchoHub Documentation",
|
||
"summary": "Class EmojiHelper Namespace EchoHub.Client.UI.Helpers Assembly EchoHub.Client.dll Converts emoji grapheme clusters to text shortcodes for safe TUI rendering. Terminal width calculations for emoji are unreliable across different terminals, so we replace them with fixed-width ASCII shortcodes for display only. public static class EmojiHelper Inheritance object EmojiHelper Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods ReplaceEmoji(string) Replace emoji graphemes in the text with :shortcode: equivalents. Non-emoji text passes through unchanged. public static string ReplaceEmoji(string text) Parameters text string Returns string"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Helpers.HexColorHelper.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Helpers.HexColorHelper.html",
|
||
"title": "Class HexColorHelper | EchoHub Documentation",
|
||
"summary": "Class HexColorHelper Namespace EchoHub.Client.UI.Helpers Assembly EchoHub.Client.dll Helper to parse hex colors to Terminal.Gui Attributes. public static class HexColorHelper Inheritance object HexColorHelper Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods ParseHexColor(string?) public static Attribute? ParseHexColor(string? hex) Parameters hex string Returns Attribute? ParseHexToColor(string?, Color) Parse a hex color string (with or without #) to a Terminal.Gui Color. Returns fallback if parsing fails. public static Color ParseHexToColor(string? hex, Color fallback = default) Parameters hex string fallback Color Returns Color"
|
||
},
|
||
"api/client/EchoHub.Client.UI.Helpers.html": {
|
||
"href": "api/client/EchoHub.Client.UI.Helpers.html",
|
||
"title": "Namespace EchoHub.Client.UI.Helpers | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Client.UI.Helpers Classes EmojiHelper Converts emoji grapheme clusters to text shortcodes for safe TUI rendering. Terminal width calculations for emoji are unreliable across different terminals, so we replace them with fixed-width ASCII shortcodes for display only. HexColorHelper Helper to parse hex colors to Terminal.Gui Attributes."
|
||
},
|
||
"api/client/EchoHub.Client.UI.ListSources.ChannelListSource.html": {
|
||
"href": "api/client/EchoHub.Client.UI.ListSources.ChannelListSource.html",
|
||
"title": "Class ChannelListSource | EchoHub Documentation",
|
||
"summary": "Class ChannelListSource Namespace EchoHub.Client.UI.ListSources Assembly EchoHub.Client.dll Custom list data source for colored channel list rendering. Active channel gets a > indicator, unread channels are bright with a count badge. public class ChannelListSource : IListDataSource, IDisposable Inheritance object ChannelListSource Implements IListDataSource IDisposable Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChannelListSource() public ChannelListSource() Properties Count public int Count { get; } Property Value int MaxItemLength public int MaxItemLength { get; } Property Value int SuspendCollectionChangedEvent public bool SuspendCollectionChangedEvent { get; set; } Property Value bool Methods Dispose() public void Dispose() IsMarked(int) public bool IsMarked(int item) Parameters item int Returns bool Render(ListView, bool, int, int, int, int, int) public void Render(ListView listView, bool selected, int item, int col, int row, int width, int viewportX = 0) Parameters listView ListView selected bool item int col int row int width int viewportX int SetMark(int, bool) public void SetMark(int item, bool value) Parameters item int value bool ToList() public IList ToList() Returns IList Update(List<string>, Dictionary<string, int>, string) public void Update(List<string> channels, Dictionary<string, int> unread, string activeChannel) Parameters channels List<string> unread Dictionary<string, int> activeChannel string Events CollectionChanged public event NotifyCollectionChangedEventHandler? CollectionChanged Event Type NotifyCollectionChangedEventHandler"
|
||
},
|
||
"api/client/EchoHub.Client.UI.ListSources.SearchListSource.html": {
|
||
"href": "api/client/EchoHub.Client.UI.ListSources.SearchListSource.html",
|
||
"title": "Class SearchListSource | EchoHub Documentation",
|
||
"summary": "Class SearchListSource Namespace EchoHub.Client.UI.ListSources Assembly EchoHub.Client.dll List data source for the search dialog with filtering and colored rendering. public class SearchListSource : IListDataSource, IDisposable Inheritance object SearchListSource Implements IListDataSource IDisposable Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors SearchListSource(List<SearchResult>) List data source for the search dialog with filtering and colored rendering. public SearchListSource(List<SearchResult> items) Parameters items List<SearchResult> Properties Count public int Count { get; } Property Value int MaxItemLength public int MaxItemLength { get; } Property Value int SuspendCollectionChangedEvent public bool SuspendCollectionChangedEvent { get; set; } Property Value bool Methods Dispose() public void Dispose() Filter(string) public void Filter(string query) Parameters query string GetItem(int) public SearchResult? GetItem(int index) Parameters index int Returns SearchResult IsMarked(int) public bool IsMarked(int item) Parameters item int Returns bool Render(ListView, bool, int, int, int, int, int) public void Render(ListView listView, bool selected, int item, int col, int row, int width, int viewportX = 0) Parameters listView ListView selected bool item int col int row int width int viewportX int SetMark(int, bool) public void SetMark(int item, bool value) Parameters item int value bool ToList() public IList ToList() Returns IList Events CollectionChanged public event NotifyCollectionChangedEventHandler? CollectionChanged Event Type NotifyCollectionChangedEventHandler"
|
||
},
|
||
"api/client/EchoHub.Client.UI.ListSources.UserListSource.html": {
|
||
"href": "api/client/EchoHub.Client.UI.ListSources.UserListSource.html",
|
||
"title": "Class UserListSource | EchoHub Documentation",
|
||
"summary": "Class UserListSource Namespace EchoHub.Client.UI.ListSources Assembly EchoHub.Client.dll Custom list data source for the online users panel with per-user nickname colors. public class UserListSource : IListDataSource, IDisposable Inheritance object UserListSource Implements IListDataSource IDisposable Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors UserListSource() public UserListSource() Properties Count public int Count { get; } Property Value int MaxItemLength public int MaxItemLength { get; } Property Value int SuspendCollectionChangedEvent public bool SuspendCollectionChangedEvent { get; set; } Property Value bool Methods Dispose() public void Dispose() GetUsername(int) public string? GetUsername(int index) Parameters index int Returns string IsMarked(int) public bool IsMarked(int item) Parameters item int Returns bool Render(ListView, bool, int, int, int, int, int) public void Render(ListView listView, bool selected, int item, int col, int row, int width, int viewportX = 0) Parameters listView ListView selected bool item int col int row int width int viewportX int SetMark(int, bool) public void SetMark(int item, bool value) Parameters item int value bool ToList() public IList ToList() Returns IList Update(List<(string Text, Attribute? NameColor, string Username)>) public void Update(List<(string Text, Attribute? NameColor, string Username)> users) Parameters users List<(string Text, Attribute? NameColor, string Username)> Events CollectionChanged public event NotifyCollectionChangedEventHandler? CollectionChanged Event Type NotifyCollectionChangedEventHandler"
|
||
},
|
||
"api/client/EchoHub.Client.UI.ListSources.html": {
|
||
"href": "api/client/EchoHub.Client.UI.ListSources.html",
|
||
"title": "Namespace EchoHub.Client.UI.ListSources | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Client.UI.ListSources Classes ChannelListSource Custom list data source for colored channel list rendering. Active channel gets a > indicator, unread channels are bright with a count badge. SearchListSource List data source for the search dialog with filtering and colored rendering. UserListSource Custom list data source for the online users panel with per-user nickname colors."
|
||
},
|
||
"api/client/EchoHub.Client.UI.MainWindow.html": {
|
||
"href": "api/client/EchoHub.Client.UI.MainWindow.html",
|
||
"title": "Class MainWindow | EchoHub Documentation",
|
||
"summary": "Class MainWindow Namespace EchoHub.Client.UI Assembly EchoHub.Client.dll Main Terminal.Gui window for the EchoHub chat client. public sealed class MainWindow : Runnable, IDisposable, IRunnable Inheritance object View Runnable MainWindow Implements IDisposable IRunnable Inherited Members Runnable.SetApp(IApplication) Runnable.SetIsRunning(bool) Runnable.RequestStop() Runnable.RaiseIsRunningChanging(bool, bool) Runnable.RaiseIsRunningChangedEvent(bool) Runnable.SetIsModal(bool) Runnable.RaiseIsModalChangedEvent(bool) Runnable.Result Runnable.IsRunning Runnable.IsModal Runnable.StopRequested Runnable.IsRunningChanging Runnable.IsRunningChanged Runnable.IsModalChanged View.NewMouseEvent(Mouse) View.RaiseMouseEvent(Mouse) View.GetAdornmentsThickness() View.GetSupportedCommands() View.InvokeCommands(Command[], ICommandBinding) View.InvokeCommand(Command, ICommandBinding) View.InvokeCommand(Command, ICommandContext) View.InvokeCommand(Command) View.SetContentSize(Size?) View.GetContentSize() View.GetWidthRequiredForSubViews() View.GetHeightRequiredForSubViews() View.ContentToScreen(in Point) View.ScreenToContent(in Point) View.ViewportToScreen(in Rectangle) View.ViewportToScreen(in Point) View.ViewportToScreen() View.ScreenToViewport(in Point) View.GetViewportOffsetFromFrame() View.ScrollVertical(int) View.ScrollHorizontal(int) View.Dispose() View.ToString() View.ToDebugString() View.BeginInit() View.EndInit() View.OnEnabledChanged() View.SetCursorNeedsUpdate() View.GetCurrentAttribute() View.GetAttributeForRole(VisualRole) View.SetAttribute(Attribute) View.SetAttributeForRole(VisualRole) View.GetClip() View.SetClip(Region) View.SetClipToScreen() View.ExcludeFromClip(Rectangle) View.ExcludeFromClip(Region) View.AddViewportToClip() View.Draw(DrawContext) View.DrawAdornments() View.ClearViewport(DrawContext) View.DrawText(DrawContext) View.DrawSubViews(DrawContext) View.RenderLineCanvas(DrawContext) View.Move(int, int) View.AddRune(Rune) View.AddRune(char) View.AddRune(int, int, Rune) View.AddStr(string) View.AddStr(int, int, string) View.DrawHotString(string, Attribute, Attribute) View.DrawHotString(string, bool) View.FillRect(Rectangle, Color?) View.FillRect(Rectangle, Rune) View.GetScheme() View.SetScheme(Scheme) View.GetSubViews(bool, bool, bool) View.Add(View) View.Add(params View[]) View.Remove(View) View.RemoveAll() View.RemoveAll<TView>() View.GetTopSuperView(View, View) View.IsInHierarchy(View, View, bool) View.MoveSubViewTowardsEnd(View) View.MoveSubViewToEnd(View) View.MoveSubViewTowardsStart(View) View.MoveSubViewToStart(View) View.AddKeyBindingsForHotKey(Key, Key, object) View.AssignHotKeysToSubViews() View.NewKeyDownEvent(Key) View.Contains(in Point) View.FrameToScreen() View.ScreenToFrame(in Point) View.Layout(Size) View.Layout() View.SetRelativeLayout(Size) View.SetNeedsLayout() View.GetContainerSize() View.GetViewsUnderLocation(in Point, ViewportSettingsFlags) View.AdvanceFocus(NavigationDirection, TabBehavior?) View.FocusDeepest(NavigationDirection, TabBehavior?) View.OnCanFocusChanged() View.ClearFocus() View.SetFocus() View.SetNeedsDraw() View.SetNeedsDraw(Rectangle) View.OnTextChanged() View.MouseBindings View.MouseHoldRepeat View.MousePositionTracking View.MouseState View.MouseHighlightStates View.Margin View.ShadowStyle View.Border View.BorderStyle View.Padding View.Arrangement View.DefaultAcceptView View.CommandsToBubbleUp View.ContentSizeTracksViewport View.ViewportSettings View.Viewport View.Data View.Id View.App View.IsInitialized View.Enabled View.Visible View.Title View.Cursor View.Diagnostics View.LineCanvas View.SuperViewRendersLineCanvas View.SchemeName View.HasScheme View.SubViews View.SuperView View.HotKey View.HotKeySpecifier View.AssignHotKeys View.UsedHotKeys View.KeyBindings View.HotKeyBindings View.Frame View.X View.Y View.Height View.Width View.NeedsLayout View.ValidatePosDim View.CanFocus View.Focused View.IsCurrentTop View.MostFocused View.HasFocus View.TabStop View.NeedsDraw View.HorizontalScrollBar View.VerticalScrollBar View.PreserveTrailingSpaces View.Text View.TextAlignment View.TextDirection View.TextFormatter View.VerticalTextAlignment View.MouseEnter View.MouseLeave View.MouseHoldRepeatChanging View.MouseHoldRepeatChanged View.MouseEvent View.MouseStateChanged View.BorderStyleChanged View.CommandNotBound View.Accepting View.Accepted View.Activating View.Activated View.HandlingHotKey View.HotKeyCommand View.ContentSizeChanging View.ContentSizeChanged View.ViewportChanged View.Disposing View.Initialized View.EnabledChanged View.VisibleChanging View.VisibleChanged View.TitleChanging View.TitleChanged View.GettingAttributeForRole View.ClearingViewport View.ClearedViewport View.DrawingText View.DrewText View.DrawingContent View.DrawingSubViews View.DrawComplete View.SchemeNameChanging View.SchemeNameChanged View.GettingScheme View.SchemeChanging View.SchemeChanged View.SuperViewChanging View.SuperViewChanged View.SubViewAdded View.SubViewRemoved View.Removed View.HotKeyChanged View.KeyDown View.KeyDownNotHandled View.FrameChanged View.HeightChanging View.HeightChanged View.WidthChanging View.WidthChanged View.SubViewLayout View.SubViewsLaidOut View.AdvancingFocus View.CanFocusChanged View.FocusedChanged View.HasFocusChanging View.HasFocusChanged View.TextChanged object.GetType() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors MainWindow(IApplication, ChatMessageManager) public MainWindow(IApplication app, ChatMessageManager messageManager) Parameters app IApplication messageManager ChatMessageManager Properties CurrentChannel Get the current channel name. public string CurrentChannel { get; } Property Value string Methods ApplyColorSchemes() Applies the currently registered color schemes to all views. Call after theme changes to refresh colors. public void ApplyColorSchemes() ClearAll() Clear all messages and channels (used on disconnect). public void ClearAll() EnsureChannelInList(string, bool?) Ensure a channel exists in the left panel list (used for private channels joined via /join). public void EnsureChannelInList(string channelName, bool? isPublic = null) Parameters channelName string isPublic bool? FocusInput() Focus the input field for typing. public void FocusInput() GetChannelNames() Get all channel names that have message buffers (for broadcasting status changes). public IReadOnlyList<string> GetChannelNames() Returns IReadOnlyList<string> RefreshMenuBar() Rebuilds and replaces the menu bar (e.g., after theme list changes). public void RefreshMenuBar() RemoveChannel(string) Remove a channel from the left panel list. public void RemoveChannel(string channelName) Parameters channelName string SetChannelTopic(string, string?) Update the topic for a specific channel. public void SetChannelTopic(string channelName, string? topic) Parameters channelName string topic string SetChannels(List<ChannelDto>) Set the list of available channels, storing topics, and refresh the channel list view. public void SetChannels(List<ChannelDto> channels) Parameters channels List<ChannelDto> SetCurrentUser(string) Set the current user name (delegates to message manager for @mention detection). public void SetCurrentUser(string username) Parameters username string ShowError(string) Show an error message to the user. public void ShowError(string message) Parameters message string SwitchToChannel(string) Switch the chat view to the given channel, resetting its unread count and updating the topic bar. public void SwitchToChannel(string channelName) Parameters channelName string ToggleUsersPanel() Toggle the online users panel visibility (F2). public void ToggleUsersPanel() UpdateOnlineUsers(List<UserPresenceDto>) Update the online users list display. public void UpdateOnlineUsers(List<UserPresenceDto> users) Parameters users List<UserPresenceDto> UpdateStatusBar(string) Update the connection status displayed in the status bar. public void UpdateStatusBar(string status) Parameters status string Events 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> OnChannelJoinRequested Fired when the user activates a #channel reference in a message. Parameter is the channel name. public event Action<string>? OnChannelJoinRequested Event Type Action<string> OnChannelSelected Fired when the user selects a channel. Parameter is the channel name. public event Action<string>? OnChannelSelected Event Type Action<string> OnCheckForUpdatesRequested Fired when the user requests to check for updates. public event Action? OnCheckForUpdatesRequested Event Type Action OnConnectRequested Fired when the user requests to connect via the menu. public event Action? OnConnectRequested Event Type Action OnCreateChannelRequested Fired when the user requests to create a new channel. public event Action? OnCreateChannelRequested Event Type Action OnDeleteChannelRequested Fired when the user requests to delete the current channel. public event Action? OnDeleteChannelRequested Event Type Action OnDisconnectRequested Fired when the user requests to disconnect via the menu. public event Action? OnDisconnectRequested Event Type Action 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> OnLoadMoreRequested Fired when the user scrolls to the top of the message list and older messages should be loaded. public event Action? OnLoadMoreRequested Event Type Action OnLogoutRequested Fired when the user requests to logout (disconnect + revoke session). public event Action? OnLogoutRequested Event Type Action OnMessageSubmitted Fired when the user presses Enter in the input field. Parameters: channel name, message content. public event Action<string, string>? OnMessageSubmitted Event Type Action<string, string> OnProfileRequested Fired when the user requests to open their profile panel. public event Action? OnProfileRequested Event Type Action OnRollbackRequested Fired when the user requests to rollback to the previous version. public event Action? OnRollbackRequested Event Type Action OnSavedServersRequested Fired when the user requests to view saved servers. public event Action? OnSavedServersRequested Event Type Action OnSearchRequested Fired when the user requests to open the search dialog (via menu or Ctrl+K). public event Action? OnSearchRequested Event Type Action OnStatusRequested Fired when the user requests to set their status. public event Action? OnStatusRequested Event Type Action OnThemeSelected Fired when the user selects a theme from the menu. Parameter is the theme name. public event Action<string>? OnThemeSelected Event Type Action<string> OnUserProfileRequested Fired when the user activates a username (in userlist or message). Parameter is the username. public event Action<string>? OnUserProfileRequested Event Type Action<string>"
|
||
},
|
||
"api/client/EchoHub.Client.UI.html": {
|
||
"href": "api/client/EchoHub.Client.UI.html",
|
||
"title": "Namespace EchoHub.Client.UI | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Client.UI Classes MainWindow Main Terminal.Gui window for the EchoHub chat client."
|
||
},
|
||
"api/client/EchoHub.Client.html": {
|
||
"href": "api/client/EchoHub.Client.html",
|
||
"title": "Namespace EchoHub.Client | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Client Classes AppOrchestrator Central orchestrator for the EchoHub TUI client. Wires UI events to service calls and connection events to UI updates."
|
||
},
|
||
"api/core-articles/index.html": {
|
||
"href": "api/core-articles/index.html",
|
||
"title": "Core Articles | EchoHub Documentation",
|
||
"summary": "Core Articles Articles related to the EchoHub.Core shared library. Topics Data models and DTOs Contract interfaces (IChatService, IChannelService, IChatBroadcaster, IEchoHubClient) Validation constants and shared rules"
|
||
},
|
||
"api/core/EchoHub.Core.Constants.HubConstants.html": {
|
||
"href": "api/core/EchoHub.Core.Constants.HubConstants.html",
|
||
"title": "Class HubConstants | EchoHub Documentation",
|
||
"summary": "Class HubConstants Namespace EchoHub.Core.Constants Assembly EchoHub.Core.dll public static class HubConstants Inheritance object HubConstants Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Fields AsciiArtHeight public const int AsciiArtHeight = 40 Field Value int AsciiArtHeightHalfBlock public const int AsciiArtHeightHalfBlock = 80 Field Value int AsciiArtWidth public const int AsciiArtWidth = 80 Field Value int ChatHubPath public const string ChatHubPath = \"/hubs/chat\" Field Value string DefaultChannel public const string DefaultChannel = \"general\" Field Value string DefaultHistoryCount public const int DefaultHistoryCount = 100 Field Value int EmbedFetchTimeoutSeconds public const int EmbedFetchTimeoutSeconds = 5 Field Value int EmbedMaxDescriptionLength public const int EmbedMaxDescriptionLength = 500 Field Value int EmbedMaxHtmlBytes public const int EmbedMaxHtmlBytes = 65536 Field Value int EmbedMaxUrlsPerMessage public const int EmbedMaxUrlsPerMessage = 3 Field Value int MaxAudioFileSizeBytes public const int MaxAudioFileSizeBytes = 10485760 Field Value int MaxAvatarSizeBytes public const int MaxAvatarSizeBytes = 2097152 Field Value int MaxConsecutiveNewlines public const int MaxConsecutiveNewlines = 1 Field Value int MaxFileSizeBytes public const int MaxFileSizeBytes = 104857600 Field Value int MaxImageSizeBytes public const int MaxImageSizeBytes = 10485760 Field Value int MaxMessageLength public const int MaxMessageLength = 2000 Field Value int MaxMessageNewlines public const int MaxMessageNewlines = 30 Field Value int"
|
||
},
|
||
"api/core/EchoHub.Core.Constants.ValidationConstants.html": {
|
||
"href": "api/core/EchoHub.Core.Constants.ValidationConstants.html",
|
||
"title": "Class ValidationConstants | EchoHub Documentation",
|
||
"summary": "Class ValidationConstants Namespace EchoHub.Core.Constants Assembly EchoHub.Core.dll public static class ValidationConstants Inheritance object ValidationConstants Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Fields ChannelNamePattern public const string ChannelNamePattern = \"^[a-zA-Z0-9_-]{2,100}$\" Field Value string HexColorPattern public const string HexColorPattern = \"^#[0-9a-fA-F]{6}$\" Field Value string MaxBioLength public const int MaxBioLength = 500 Field Value int MaxChannelTopicLength public const int MaxChannelTopicLength = 500 Field Value int MaxDisplayNameLength public const int MaxDisplayNameLength = 100 Field Value int MaxHistoryCount public const int MaxHistoryCount = 200 Field Value int MaxPasswordLength public const int MaxPasswordLength = 128 Field Value int MaxStatusMessageLength public const int MaxStatusMessageLength = 100 Field Value int UsernamePattern public const string UsernamePattern = \"^[a-zA-Z0-9_-]{3,50}$\" Field Value string Methods ChannelNameRegex() [GeneratedRegex(\"^[a-zA-Z0-9_-]{2,100}$\")] public static Regex ChannelNameRegex() Returns Regex Remarks Pattern: ^[a-zA-Z0-9_-]{2,100}$ Explanation: ○ Match if at the beginning of the string. ○ Match a character in the set [\\-0-9A-Z_a-z] atomically at least 2 and at most 100 times. ○ Match if at the end of the string or if before an ending newline. HexColorRegex() [GeneratedRegex(\"^#[0-9a-fA-F]{6}$\")] public static Regex HexColorRegex() Returns Regex Remarks Pattern: ^#[0-9a-fA-F]{6}$ Explanation: ○ Match if at the beginning of the string. ○ Match '#'. ○ Match a hexadecimal digit exactly 6 times. ○ Match if at the end of the string or if before an ending newline. UsernameRegex() [GeneratedRegex(\"^[a-zA-Z0-9_-]{3,50}$\")] public static Regex UsernameRegex() Returns Regex Remarks Pattern: ^[a-zA-Z0-9_-]{3,50}$ Explanation: ○ Match if at the beginning of the string. ○ Match a character in the set [\\-0-9A-Z_a-z] atomically at least 3 and at most 50 times. ○ Match if at the end of the string or if before an ending newline."
|
||
},
|
||
"api/core/EchoHub.Core.Constants.html": {
|
||
"href": "api/core/EchoHub.Core.Constants.html",
|
||
"title": "Namespace EchoHub.Core.Constants | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Core.Constants Classes HubConstants ValidationConstants"
|
||
},
|
||
"api/core/EchoHub.Core.Contracts.ChannelListItem.html": {
|
||
"href": "api/core/EchoHub.Core.Contracts.ChannelListItem.html",
|
||
"title": "Class ChannelListItem | EchoHub Documentation",
|
||
"summary": "Class ChannelListItem Namespace EchoHub.Core.Contracts Assembly EchoHub.Core.dll public record ChannelListItem : IEquatable<ChannelListItem> Inheritance object ChannelListItem Implements IEquatable<ChannelListItem> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors ChannelListItem(ChannelListItem) protected ChannelListItem(ChannelListItem original) Parameters original ChannelListItem ChannelListItem(string, string?, int) public ChannelListItem(string Name, string? Topic, int OnlineCount) Parameters Name string Topic string OnlineCount int Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Name public string Name { get; init; } Property Value string OnlineCount public int OnlineCount { get; init; } Property Value int Topic public string? Topic { get; init; } Property Value string Methods Deconstruct(out string, out string?, out int) public void Deconstruct(out string Name, out string? Topic, out int OnlineCount) Parameters Name string Topic string OnlineCount int Equals(ChannelListItem?) public virtual bool Equals(ChannelListItem? other) Parameters other ChannelListItem 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 ==(ChannelListItem?, ChannelListItem?) public static bool operator ==(ChannelListItem? left, ChannelListItem? right) Parameters left ChannelListItem right ChannelListItem Returns bool operator !=(ChannelListItem?, ChannelListItem?) public static bool operator !=(ChannelListItem? left, ChannelListItem? right) Parameters left ChannelListItem right ChannelListItem Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.Contracts.IChannelService.html": {
|
||
"href": "api/core/EchoHub.Core.Contracts.IChannelService.html",
|
||
"title": "Interface IChannelService | EchoHub Documentation",
|
||
"summary": "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>"
|
||
},
|
||
"api/core/EchoHub.Core.Contracts.IChatBroadcaster.html": {
|
||
"href": "api/core/EchoHub.Core.Contracts.IChatBroadcaster.html",
|
||
"title": "Interface IChatBroadcaster | EchoHub Documentation",
|
||
"summary": "Interface IChatBroadcaster Namespace EchoHub.Core.Contracts Assembly EchoHub.Core.dll public interface IChatBroadcaster Methods ForceDisconnectUserAsync(List<string>, string) Task ForceDisconnectUserAsync(List<string> connectionIds, string reason) Parameters connectionIds List<string> reason string Returns Task SendChannelNukedAsync(string) Task SendChannelNukedAsync(string channelName) Parameters channelName string Returns Task SendChannelUpdatedAsync(ChannelDto, string?) Task SendChannelUpdatedAsync(ChannelDto channel, string? channelName = null) Parameters channel ChannelDto channelName string Returns Task SendErrorAsync(string, string) Task SendErrorAsync(string connectionId, string message) Parameters connectionId string message string Returns Task SendMessageDeletedAsync(string, Guid) Task SendMessageDeletedAsync(string channelName, Guid messageId) Parameters channelName string messageId Guid Returns Task SendMessageToChannelAsync(string, MessageDto) Task SendMessageToChannelAsync(string channelName, MessageDto message) Parameters channelName string message MessageDto Returns Task SendUserBannedAsync(string, string?) Task SendUserBannedAsync(string username, string? reason) Parameters username string reason string Returns Task SendUserJoinedAsync(string, string, UserPresenceDto?, string?) Task SendUserJoinedAsync(string channelName, string username, UserPresenceDto? presence, string? excludeConnectionId = null) Parameters channelName string username string presence UserPresenceDto excludeConnectionId string Returns Task SendUserKickedAsync(string, string, string?) Task SendUserKickedAsync(string channelName, string username, string? reason) Parameters channelName string username string reason string Returns Task SendUserLeftAsync(string, string) Task SendUserLeftAsync(string channelName, string username) Parameters channelName string username string Returns Task SendUserStatusChangedAsync(List<string>, UserPresenceDto) Task SendUserStatusChangedAsync(List<string> channelNames, UserPresenceDto presence) Parameters channelNames List<string> presence UserPresenceDto Returns Task"
|
||
},
|
||
"api/core/EchoHub.Core.Contracts.IChatService.html": {
|
||
"href": "api/core/EchoHub.Core.Contracts.IChatService.html",
|
||
"title": "Interface IChatService | EchoHub Documentation",
|
||
"summary": "Interface IChatService Namespace EchoHub.Core.Contracts Assembly EchoHub.Core.dll public interface IChatService Methods BroadcastChannelUpdatedAsync(ChannelDto, string?) Task BroadcastChannelUpdatedAsync(ChannelDto channel, string? channelName = null) Parameters channel ChannelDto channelName string Returns Task BroadcastMessageAsync(string, MessageDto) Task BroadcastMessageAsync(string channelName, MessageDto message) Parameters channelName string message MessageDto Returns Task GetChannelHistoryAsync(string, int, int) Task<List<MessageDto>> GetChannelHistoryAsync(string channelName, int count, int offset = 0) Parameters channelName string count int offset int Returns Task<List<MessageDto>> GetChannelsForUserAsync(string) Task<List<string>> GetChannelsForUserAsync(string username) Parameters username string Returns Task<List<string>> GetOnlineUsersAsync(string) Task<List<UserPresenceDto>> GetOnlineUsersAsync(string channelName) Parameters channelName string Returns Task<List<UserPresenceDto>> JoinChannelAsync(string, Guid, string, string) Task<(List<MessageDto> History, string? Error)> JoinChannelAsync(string connectionId, Guid userId, string username, string channelName) Parameters connectionId string userId Guid username string channelName string Returns Task<(List<MessageDto> History, string Error)> LeaveChannelAsync(string, string, string) Task LeaveChannelAsync(string connectionId, string username, string channelName) Parameters connectionId string username string channelName string Returns Task SendMessageAsync(Guid, string, string, string) Task<string?> SendMessageAsync(Guid userId, string username, string channelName, string content) Parameters userId Guid username string channelName string content string Returns Task<string> UpdateStatusAsync(Guid, string, UserStatus, string?) Task<string?> UpdateStatusAsync(Guid userId, string username, UserStatus status, string? statusMessage) Parameters userId Guid username string status UserStatus statusMessage string Returns Task<string> UserConnectedAsync(string, Guid, string) Task UserConnectedAsync(string connectionId, Guid userId, string username) Parameters connectionId string userId Guid username string Returns Task UserDisconnectedAsync(string) Task<string?> UserDisconnectedAsync(string connectionId) Parameters connectionId string Returns Task<string>"
|
||
},
|
||
"api/core/EchoHub.Core.Contracts.IEchoHubClient.html": {
|
||
"href": "api/core/EchoHub.Core.Contracts.IEchoHubClient.html",
|
||
"title": "Interface IEchoHubClient | EchoHub Documentation",
|
||
"summary": "Interface IEchoHubClient Namespace EchoHub.Core.Contracts Assembly EchoHub.Core.dll Methods the server can invoke on connected clients. public interface IEchoHubClient Methods ChannelNuked(string) Task ChannelNuked(string channelName) Parameters channelName string Returns Task ChannelUpdated(ChannelDto) Task ChannelUpdated(ChannelDto channel) Parameters channel ChannelDto Returns Task Error(string) Task Error(string message) Parameters message string Returns Task ForceDisconnect(string) Task ForceDisconnect(string reason) Parameters reason string Returns Task MessageDeleted(string, Guid) Task MessageDeleted(string channelName, Guid messageId) Parameters channelName string messageId Guid Returns Task ReceiveMessage(MessageDto) Task ReceiveMessage(MessageDto message) Parameters message MessageDto Returns Task UserBanned(string, string?) Task UserBanned(string username, string? reason) Parameters username string reason string Returns Task UserJoined(string, string, UserPresenceDto?) Task UserJoined(string channelName, string username, UserPresenceDto? presence) Parameters channelName string username string presence UserPresenceDto Returns Task UserKicked(string, string, string?) Task UserKicked(string channelName, string username, string? reason) Parameters channelName string username string reason string Returns Task UserLeft(string, string) Task UserLeft(string channelName, string username) Parameters channelName string username string Returns Task UserStatusChanged(UserPresenceDto) Task UserStatusChanged(UserPresenceDto presence) Parameters presence UserPresenceDto Returns Task"
|
||
},
|
||
"api/core/EchoHub.Core.Contracts.IMessageEncryptionService.html": {
|
||
"href": "api/core/EchoHub.Core.Contracts.IMessageEncryptionService.html",
|
||
"title": "Interface IMessageEncryptionService | EchoHub Documentation",
|
||
"summary": "Interface IMessageEncryptionService Namespace EchoHub.Core.Contracts Assembly EchoHub.Core.dll public interface IMessageEncryptionService Properties EncryptDatabaseEnabled Whether database content should be encrypted at rest (server setting). bool EncryptDatabaseEnabled { get; } Property Value bool Methods Decrypt(string) string Decrypt(string content) Parameters content string Returns string DecryptNullable(string?) string? DecryptNullable(string? value) Parameters value string Returns string Encrypt(string) string Encrypt(string plaintext) Parameters plaintext string Returns string EncryptNullable(string?) string? EncryptNullable(string? value) Parameters value string Returns string"
|
||
},
|
||
"api/core/EchoHub.Core.Contracts.IUserService.html": {
|
||
"href": "api/core/EchoHub.Core.Contracts.IUserService.html",
|
||
"title": "Interface IUserService | EchoHub Documentation",
|
||
"summary": "Interface IUserService Namespace EchoHub.Core.Contracts Assembly EchoHub.Core.dll public interface IUserService Methods AuthenticateUserAsync(string, string) Task<UserOperationResult> AuthenticateUserAsync(string username, string password) Parameters username string password string Returns Task<UserOperationResult> GetUserByIdAsync(Guid) Task<UserProfileDto?> GetUserByIdAsync(Guid userId) Parameters userId Guid Returns Task<UserProfileDto> GetUserProfileAsync(string) Task<UserProfileDto?> GetUserProfileAsync(string username) Parameters username string Returns Task<UserProfileDto> RegisterUserAsync(string, string, string?) Task<UserOperationResult> RegisterUserAsync(string username, string password, string? displayName = null) Parameters username string password string displayName string Returns Task<UserOperationResult> SetAvatarAsync(Guid, string) Task<UserOperationResult> SetAvatarAsync(Guid userId, string asciiArt) Parameters userId Guid asciiArt string Returns Task<UserOperationResult> UpdateProfileAsync(Guid, string?, string?, string?) Task<UserOperationResult> UpdateProfileAsync(Guid userId, string? displayName, string? bio, string? nicknameColor) Parameters userId Guid displayName string bio string nicknameColor string Returns Task<UserOperationResult>"
|
||
},
|
||
"api/core/EchoHub.Core.Contracts.html": {
|
||
"href": "api/core/EchoHub.Core.Contracts.html",
|
||
"title": "Namespace EchoHub.Core.Contracts | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Core.Contracts Classes ChannelListItem Interfaces IChannelService IChatBroadcaster IChatService IEchoHubClient Methods the server can invoke on connected clients. IMessageEncryptionService IUserService"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.ApiResponse-1.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.ApiResponse-1.html",
|
||
"title": "Class ApiResponse<T> | EchoHub Documentation",
|
||
"summary": "Class ApiResponse<T> Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record ApiResponse<T> : IEquatable<ApiResponse<T>> Type Parameters T Inheritance object ApiResponse<T> Implements IEquatable<ApiResponse<T>> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) 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"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.ApiResponse.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.ApiResponse.html",
|
||
"title": "Class ApiResponse | EchoHub Documentation",
|
||
"summary": "Class ApiResponse Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record ApiResponse : IEquatable<ApiResponse> Inheritance object ApiResponse Implements IEquatable<ApiResponse> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) 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"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.AssignRoleRequest.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.AssignRoleRequest.html",
|
||
"title": "Class AssignRoleRequest | EchoHub Documentation",
|
||
"summary": "Class AssignRoleRequest Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record AssignRoleRequest : IEquatable<AssignRoleRequest> Inheritance object AssignRoleRequest Implements IEquatable<AssignRoleRequest> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors AssignRoleRequest(AssignRoleRequest) protected AssignRoleRequest(AssignRoleRequest original) Parameters original AssignRoleRequest AssignRoleRequest(string, ServerRole) public AssignRoleRequest(string Username, ServerRole Role) Parameters Username string Role ServerRole Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Role public ServerRole Role { get; init; } Property Value ServerRole Username public string Username { get; init; } Property Value string Methods Deconstruct(out string, out ServerRole) public void Deconstruct(out string Username, out ServerRole Role) Parameters Username string Role ServerRole Equals(AssignRoleRequest?) public virtual bool Equals(AssignRoleRequest? other) Parameters other AssignRoleRequest 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 ==(AssignRoleRequest?, AssignRoleRequest?) public static bool operator ==(AssignRoleRequest? left, AssignRoleRequest? right) Parameters left AssignRoleRequest right AssignRoleRequest Returns bool operator !=(AssignRoleRequest?, AssignRoleRequest?) public static bool operator !=(AssignRoleRequest? left, AssignRoleRequest? right) Parameters left AssignRoleRequest right AssignRoleRequest Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.AvatarUploadResponse.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.AvatarUploadResponse.html",
|
||
"title": "Class AvatarUploadResponse | EchoHub Documentation",
|
||
"summary": "Class AvatarUploadResponse Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record AvatarUploadResponse : IEquatable<AvatarUploadResponse> Inheritance object AvatarUploadResponse Implements IEquatable<AvatarUploadResponse> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors AvatarUploadResponse(AvatarUploadResponse) protected AvatarUploadResponse(AvatarUploadResponse original) Parameters original AvatarUploadResponse AvatarUploadResponse(string) public AvatarUploadResponse(string AvatarAscii) Parameters AvatarAscii string Properties AvatarAscii public string AvatarAscii { get; init; } Property Value string EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Methods Deconstruct(out string) public void Deconstruct(out string AvatarAscii) Parameters AvatarAscii string Equals(AvatarUploadResponse?) public virtual bool Equals(AvatarUploadResponse? other) Parameters other AvatarUploadResponse 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 ==(AvatarUploadResponse?, AvatarUploadResponse?) public static bool operator ==(AvatarUploadResponse? left, AvatarUploadResponse? right) Parameters left AvatarUploadResponse right AvatarUploadResponse Returns bool operator !=(AvatarUploadResponse?, AvatarUploadResponse?) public static bool operator !=(AvatarUploadResponse? left, AvatarUploadResponse? right) Parameters left AvatarUploadResponse right AvatarUploadResponse Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.BanRequest.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.BanRequest.html",
|
||
"title": "Class BanRequest | EchoHub Documentation",
|
||
"summary": "Class BanRequest Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record BanRequest : IEquatable<BanRequest> Inheritance object BanRequest Implements IEquatable<BanRequest> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors BanRequest(BanRequest) protected BanRequest(BanRequest original) Parameters original BanRequest BanRequest(string?) public BanRequest(string? Reason = null) Parameters Reason string Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Reason public string? Reason { get; init; } Property Value string Methods Deconstruct(out string?) public void Deconstruct(out string? Reason) Parameters Reason string Equals(BanRequest?) public virtual bool Equals(BanRequest? other) Parameters other BanRequest 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 ==(BanRequest?, BanRequest?) public static bool operator ==(BanRequest? left, BanRequest? right) Parameters left BanRequest right BanRequest Returns bool operator !=(BanRequest?, BanRequest?) public static bool operator !=(BanRequest? left, BanRequest? right) Parameters left BanRequest right BanRequest Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.ChannelDto.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.ChannelDto.html",
|
||
"title": "Class ChannelDto | EchoHub Documentation",
|
||
"summary": "Class ChannelDto Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record ChannelDto : IEquatable<ChannelDto> Inheritance object ChannelDto Implements IEquatable<ChannelDto> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors ChannelDto(ChannelDto) protected ChannelDto(ChannelDto original) Parameters original ChannelDto ChannelDto(Guid, string, string?, bool, int, DateTimeOffset) public ChannelDto(Guid Id, string Name, string? Topic, bool IsPublic, int MessageCount, DateTimeOffset CreatedAt) Parameters Id Guid Name string Topic string IsPublic bool MessageCount int CreatedAt DateTimeOffset Properties CreatedAt public DateTimeOffset CreatedAt { get; init; } Property Value DateTimeOffset EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Id public Guid Id { get; init; } Property Value Guid IsPublic public bool IsPublic { get; init; } Property Value bool MessageCount public int MessageCount { get; init; } Property Value int Name public string Name { get; init; } Property Value string Topic public string? Topic { get; init; } Property Value string Methods Deconstruct(out Guid, out string, out string?, out bool, out int, out DateTimeOffset) public void Deconstruct(out Guid Id, out string Name, out string? Topic, out bool IsPublic, out int MessageCount, out DateTimeOffset CreatedAt) Parameters Id Guid Name string Topic string IsPublic bool MessageCount int CreatedAt DateTimeOffset Equals(ChannelDto?) public virtual bool Equals(ChannelDto? other) Parameters other ChannelDto 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 ==(ChannelDto?, ChannelDto?) public static bool operator ==(ChannelDto? left, ChannelDto? right) Parameters left ChannelDto right ChannelDto Returns bool operator !=(ChannelDto?, ChannelDto?) public static bool operator !=(ChannelDto? left, ChannelDto? right) Parameters left ChannelDto right ChannelDto Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.ChannelError.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.ChannelError.html",
|
||
"title": "Enum ChannelError | EchoHub Documentation",
|
||
"summary": "Enum ChannelError Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public enum ChannelError Fields AlreadyExists = 1 Forbidden = 3 NotFound = 2 Protected = 4 ValidationFailed = 0"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.ChannelOperationResult.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.ChannelOperationResult.html",
|
||
"title": "Class ChannelOperationResult | EchoHub Documentation",
|
||
"summary": "Class ChannelOperationResult Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record ChannelOperationResult : IEquatable<ChannelOperationResult> Inheritance object ChannelOperationResult Implements IEquatable<ChannelOperationResult> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) 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"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.CreateChannelRequest.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.CreateChannelRequest.html",
|
||
"title": "Class CreateChannelRequest | EchoHub Documentation",
|
||
"summary": "Class CreateChannelRequest Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record CreateChannelRequest : IEquatable<CreateChannelRequest> Inheritance object CreateChannelRequest Implements IEquatable<CreateChannelRequest> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors CreateChannelRequest(CreateChannelRequest) protected CreateChannelRequest(CreateChannelRequest original) Parameters original CreateChannelRequest CreateChannelRequest(string, string?, bool) public CreateChannelRequest(string Name, string? Topic = null, bool IsPublic = true) Parameters Name string Topic string IsPublic bool Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type IsPublic public bool IsPublic { get; init; } Property Value bool Name public string Name { get; init; } Property Value string Topic public string? Topic { get; init; } Property Value string Methods Deconstruct(out string, out string?, out bool) public void Deconstruct(out string Name, out string? Topic, out bool IsPublic) Parameters Name string Topic string IsPublic bool Equals(CreateChannelRequest?) public virtual bool Equals(CreateChannelRequest? other) Parameters other CreateChannelRequest 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 ==(CreateChannelRequest?, CreateChannelRequest?) public static bool operator ==(CreateChannelRequest? left, CreateChannelRequest? right) Parameters left CreateChannelRequest right CreateChannelRequest Returns bool operator !=(CreateChannelRequest?, CreateChannelRequest?) public static bool operator !=(CreateChannelRequest? left, CreateChannelRequest? right) Parameters left CreateChannelRequest right CreateChannelRequest Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.EmbedDto.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.EmbedDto.html",
|
||
"title": "Class EmbedDto | EchoHub Documentation",
|
||
"summary": "Class EmbedDto Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record EmbedDto : IEquatable<EmbedDto> Inheritance object EmbedDto Implements IEquatable<EmbedDto> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors EmbedDto(EmbedDto) protected EmbedDto(EmbedDto original) Parameters original EmbedDto EmbedDto(string?, string?, string?, string?, string, string?) public EmbedDto(string? SiteName, string? Title, string? Description, string? ImageAscii, string Url, string? ThemeColor = null) Parameters SiteName string Title string Description string ImageAscii string Url string ThemeColor string Properties Description public string? Description { get; init; } Property Value string EqualityContract protected virtual Type EqualityContract { get; } Property Value Type ImageAscii public string? ImageAscii { get; init; } Property Value string SiteName public string? SiteName { get; init; } Property Value string ThemeColor public string? ThemeColor { get; init; } Property Value string Title public string? Title { get; init; } Property Value string Url public string Url { get; init; } Property Value string Methods Deconstruct(out string?, out string?, out string?, out string?, out string, out string?) public void Deconstruct(out string? SiteName, out string? Title, out string? Description, out string? ImageAscii, out string Url, out string? ThemeColor) Parameters SiteName string Title string Description string ImageAscii string Url string ThemeColor string Equals(EmbedDto?) public virtual bool Equals(EmbedDto? other) Parameters other EmbedDto 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 ==(EmbedDto?, EmbedDto?) public static bool operator ==(EmbedDto? left, EmbedDto? right) Parameters left EmbedDto right EmbedDto Returns bool operator !=(EmbedDto?, EmbedDto?) public static bool operator !=(EmbedDto? left, EmbedDto? right) Parameters left EmbedDto right EmbedDto Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.EncryptionKeyResponse.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.EncryptionKeyResponse.html",
|
||
"title": "Class EncryptionKeyResponse | EchoHub Documentation",
|
||
"summary": "Class EncryptionKeyResponse Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record EncryptionKeyResponse : IEquatable<EncryptionKeyResponse> Inheritance object EncryptionKeyResponse Implements IEquatable<EncryptionKeyResponse> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors EncryptionKeyResponse(EncryptionKeyResponse) protected EncryptionKeyResponse(EncryptionKeyResponse original) Parameters original EncryptionKeyResponse EncryptionKeyResponse(string) public EncryptionKeyResponse(string Key) Parameters Key string Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Key public string Key { get; init; } Property Value string Methods Deconstruct(out string) public void Deconstruct(out string Key) Parameters Key string Equals(EncryptionKeyResponse?) public virtual bool Equals(EncryptionKeyResponse? other) Parameters other EncryptionKeyResponse 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 ==(EncryptionKeyResponse?, EncryptionKeyResponse?) public static bool operator ==(EncryptionKeyResponse? left, EncryptionKeyResponse? right) Parameters left EncryptionKeyResponse right EncryptionKeyResponse Returns bool operator !=(EncryptionKeyResponse?, EncryptionKeyResponse?) public static bool operator !=(EncryptionKeyResponse? left, EncryptionKeyResponse? right) Parameters left EncryptionKeyResponse right EncryptionKeyResponse Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.ErrorResponse.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.ErrorResponse.html",
|
||
"title": "Class ErrorResponse | EchoHub Documentation",
|
||
"summary": "Class ErrorResponse Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record ErrorResponse : IEquatable<ErrorResponse> Inheritance object ErrorResponse Implements IEquatable<ErrorResponse> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors ErrorResponse(ErrorResponse) protected ErrorResponse(ErrorResponse original) Parameters original ErrorResponse ErrorResponse(string, string?) public ErrorResponse(string Error, string? Detail = null) Parameters Error string Detail string Properties Detail public string? Detail { get; init; } Property Value string EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Error public string Error { get; init; } Property Value string Methods Deconstruct(out string, out string?) public void Deconstruct(out string Error, out string? Detail) Parameters Error string Detail string Equals(ErrorResponse?) public virtual bool Equals(ErrorResponse? other) Parameters other ErrorResponse 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 ==(ErrorResponse?, ErrorResponse?) public static bool operator ==(ErrorResponse? left, ErrorResponse? right) Parameters left ErrorResponse right ErrorResponse Returns bool operator !=(ErrorResponse?, ErrorResponse?) public static bool operator !=(ErrorResponse? left, ErrorResponse? right) Parameters left ErrorResponse right ErrorResponse Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.JoinChannelResult.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.JoinChannelResult.html",
|
||
"title": "Class JoinChannelResult | EchoHub Documentation",
|
||
"summary": "Class JoinChannelResult Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record JoinChannelResult : IEquatable<JoinChannelResult> Inheritance object JoinChannelResult Implements IEquatable<JoinChannelResult> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors JoinChannelResult(JoinChannelResult) protected JoinChannelResult(JoinChannelResult original) Parameters original JoinChannelResult JoinChannelResult(bool, List<MessageDto>, string?) public JoinChannelResult(bool Success, List<MessageDto> History, string? Error = null) Parameters Success bool History List<MessageDto> Error string Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Error public string? Error { get; init; } Property Value string History public List<MessageDto> History { get; init; } Property Value List<MessageDto> Success public bool Success { get; init; } Property Value bool Methods Deconstruct(out bool, out List<MessageDto>, out string?) public void Deconstruct(out bool Success, out List<MessageDto> History, out string? Error) Parameters Success bool History List<MessageDto> Error string Equals(JoinChannelResult?) public virtual bool Equals(JoinChannelResult? other) Parameters other JoinChannelResult 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 ==(JoinChannelResult?, JoinChannelResult?) public static bool operator ==(JoinChannelResult? left, JoinChannelResult? right) Parameters left JoinChannelResult right JoinChannelResult Returns bool operator !=(JoinChannelResult?, JoinChannelResult?) public static bool operator !=(JoinChannelResult? left, JoinChannelResult? right) Parameters left JoinChannelResult right JoinChannelResult Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.KickRequest.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.KickRequest.html",
|
||
"title": "Class KickRequest | EchoHub Documentation",
|
||
"summary": "Class KickRequest Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record KickRequest : IEquatable<KickRequest> Inheritance object KickRequest Implements IEquatable<KickRequest> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors KickRequest(KickRequest) protected KickRequest(KickRequest original) Parameters original KickRequest KickRequest(string?) public KickRequest(string? Reason = null) Parameters Reason string Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Reason public string? Reason { get; init; } Property Value string Methods Deconstruct(out string?) public void Deconstruct(out string? Reason) Parameters Reason string Equals(KickRequest?) public virtual bool Equals(KickRequest? other) Parameters other KickRequest 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 ==(KickRequest?, KickRequest?) public static bool operator ==(KickRequest? left, KickRequest? right) Parameters left KickRequest right KickRequest Returns bool operator !=(KickRequest?, KickRequest?) public static bool operator !=(KickRequest? left, KickRequest? right) Parameters left KickRequest right KickRequest Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.LoginRequest.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.LoginRequest.html",
|
||
"title": "Class LoginRequest | EchoHub Documentation",
|
||
"summary": "Class LoginRequest Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record LoginRequest : IEquatable<LoginRequest> Inheritance object LoginRequest Implements IEquatable<LoginRequest> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors LoginRequest(LoginRequest) protected LoginRequest(LoginRequest original) Parameters original LoginRequest LoginRequest(string, string) public LoginRequest(string Username, string Password) Parameters Username string Password string Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Password public string Password { get; init; } Property Value string Username public string Username { get; init; } Property Value string Methods Deconstruct(out string, out string) public void Deconstruct(out string Username, out string Password) Parameters Username string Password string Equals(LoginRequest?) public virtual bool Equals(LoginRequest? other) Parameters other LoginRequest 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 ==(LoginRequest?, LoginRequest?) public static bool operator ==(LoginRequest? left, LoginRequest? right) Parameters left LoginRequest right LoginRequest Returns bool operator !=(LoginRequest?, LoginRequest?) public static bool operator !=(LoginRequest? left, LoginRequest? right) Parameters left LoginRequest right LoginRequest Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.LoginResponse.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.LoginResponse.html",
|
||
"title": "Class LoginResponse | EchoHub Documentation",
|
||
"summary": "Class LoginResponse Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record LoginResponse : IEquatable<LoginResponse> Inheritance object LoginResponse Implements IEquatable<LoginResponse> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors LoginResponse(LoginResponse) protected LoginResponse(LoginResponse original) Parameters original LoginResponse LoginResponse(string, string, DateTimeOffset, string, string?, string?) public LoginResponse(string Token, string RefreshToken, DateTimeOffset ExpiresAt, string Username, string? DisplayName, string? NicknameColor) Parameters Token string RefreshToken string ExpiresAt DateTimeOffset Username string DisplayName string NicknameColor string Properties DisplayName public string? DisplayName { get; init; } Property Value string EqualityContract protected virtual Type EqualityContract { get; } Property Value Type ExpiresAt public DateTimeOffset ExpiresAt { get; init; } Property Value DateTimeOffset NicknameColor public string? NicknameColor { get; init; } Property Value string RefreshToken public string RefreshToken { get; init; } Property Value string Token public string Token { get; init; } Property Value string Username public string Username { get; init; } Property Value string Methods Deconstruct(out string, out string, out DateTimeOffset, out string, out string?, out string?) public void Deconstruct(out string Token, out string RefreshToken, out DateTimeOffset ExpiresAt, out string Username, out string? DisplayName, out string? NicknameColor) Parameters Token string RefreshToken string ExpiresAt DateTimeOffset Username string DisplayName string NicknameColor string Equals(LoginResponse?) public virtual bool Equals(LoginResponse? other) Parameters other LoginResponse 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 ==(LoginResponse?, LoginResponse?) public static bool operator ==(LoginResponse? left, LoginResponse? right) Parameters left LoginResponse right LoginResponse Returns bool operator !=(LoginResponse?, LoginResponse?) public static bool operator !=(LoginResponse? left, LoginResponse? right) Parameters left LoginResponse right LoginResponse Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.MessageDto.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.MessageDto.html",
|
||
"title": "Class MessageDto | EchoHub Documentation",
|
||
"summary": "Class MessageDto Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record MessageDto : IEquatable<MessageDto> Inheritance object MessageDto Implements IEquatable<MessageDto> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors MessageDto(MessageDto) protected MessageDto(MessageDto original) Parameters original MessageDto MessageDto(Guid, string, string, string?, string, MessageType, string?, string?, DateTimeOffset, long?, List<EmbedDto>?) 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 Id Guid Content string SenderUsername string SenderNicknameColor string ChannelName string Type MessageType AttachmentUrl string AttachmentFileName string SentAt DateTimeOffset AttachmentFileSize long? Embeds List<EmbedDto> Properties AttachmentFileName public string? AttachmentFileName { get; init; } Property Value string AttachmentFileSize public long? AttachmentFileSize { get; init; } Property Value long? AttachmentUrl public string? AttachmentUrl { get; init; } Property Value string ChannelName public string ChannelName { get; init; } Property Value string Content public string Content { get; init; } Property Value string Embeds public List<EmbedDto>? Embeds { get; init; } Property Value List<EmbedDto> EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Id public Guid Id { get; init; } Property Value Guid SenderNicknameColor public string? SenderNicknameColor { get; init; } Property Value string SenderUsername public string SenderUsername { get; init; } Property Value string SentAt public DateTimeOffset SentAt { get; init; } Property Value DateTimeOffset Type public MessageType Type { get; init; } Property Value MessageType Methods Deconstruct(out Guid, out string, out string, out string?, out string, out MessageType, out string?, out string?, out DateTimeOffset, out long?, out List<EmbedDto>?) 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 Id Guid Content string SenderUsername string SenderNicknameColor string ChannelName string Type MessageType AttachmentUrl string AttachmentFileName string SentAt DateTimeOffset AttachmentFileSize long? Embeds List<EmbedDto> Equals(MessageDto?) public virtual bool Equals(MessageDto? other) Parameters other MessageDto 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 ==(MessageDto?, MessageDto?) public static bool operator ==(MessageDto? left, MessageDto? right) Parameters left MessageDto right MessageDto Returns bool operator !=(MessageDto?, MessageDto?) public static bool operator !=(MessageDto? left, MessageDto? right) Parameters left MessageDto right MessageDto Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.MuteRequest.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.MuteRequest.html",
|
||
"title": "Class MuteRequest | EchoHub Documentation",
|
||
"summary": "Class MuteRequest Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record MuteRequest : IEquatable<MuteRequest> Inheritance object MuteRequest Implements IEquatable<MuteRequest> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors MuteRequest(MuteRequest) protected MuteRequest(MuteRequest original) Parameters original MuteRequest MuteRequest(string?, int?) public MuteRequest(string? Reason = null, int? DurationMinutes = null) Parameters Reason string DurationMinutes int? Properties DurationMinutes public int? DurationMinutes { get; init; } Property Value int? EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Reason public string? Reason { get; init; } Property Value string Methods Deconstruct(out string?, out int?) public void Deconstruct(out string? Reason, out int? DurationMinutes) Parameters Reason string DurationMinutes int? Equals(MuteRequest?) public virtual bool Equals(MuteRequest? other) Parameters other MuteRequest 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 ==(MuteRequest?, MuteRequest?) public static bool operator ==(MuteRequest? left, MuteRequest? right) Parameters left MuteRequest right MuteRequest Returns bool operator !=(MuteRequest?, MuteRequest?) public static bool operator !=(MuteRequest? left, MuteRequest? right) Parameters left MuteRequest right MuteRequest Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.PaginatedResponse-1.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.PaginatedResponse-1.html",
|
||
"title": "Class PaginatedResponse<T> | EchoHub Documentation",
|
||
"summary": "Class PaginatedResponse<T> Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record PaginatedResponse<T> : IEquatable<PaginatedResponse<T>> Type Parameters T Inheritance object PaginatedResponse<T> Implements IEquatable<PaginatedResponse<T>> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors PaginatedResponse(PaginatedResponse<T>) protected PaginatedResponse(PaginatedResponse<T> original) Parameters original PaginatedResponse<T> PaginatedResponse(List<T>, int, int, int) public PaginatedResponse(List<T> Items, int Total, int Offset, int Limit) Parameters Items List<T> Total int Offset int Limit int Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Items public List<T> Items { get; init; } Property Value List<T> Limit public int Limit { get; init; } Property Value int Offset public int Offset { get; init; } Property Value int Total public int Total { get; init; } Property Value int Methods Deconstruct(out List<T>, out int, out int, out int) public void Deconstruct(out List<T> Items, out int Total, out int Offset, out int Limit) Parameters Items List<T> Total int Offset int Limit int Equals(PaginatedResponse<T>?) public virtual bool Equals(PaginatedResponse<T>? other) Parameters other PaginatedResponse<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 ==(PaginatedResponse<T>?, PaginatedResponse<T>?) public static bool operator ==(PaginatedResponse<T>? left, PaginatedResponse<T>? right) Parameters left PaginatedResponse<T> right PaginatedResponse<T> Returns bool operator !=(PaginatedResponse<T>?, PaginatedResponse<T>?) public static bool operator !=(PaginatedResponse<T>? left, PaginatedResponse<T>? right) Parameters left PaginatedResponse<T> right PaginatedResponse<T> Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.RefreshRequest.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.RefreshRequest.html",
|
||
"title": "Class RefreshRequest | EchoHub Documentation",
|
||
"summary": "Class RefreshRequest Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record RefreshRequest : IEquatable<RefreshRequest> Inheritance object RefreshRequest Implements IEquatable<RefreshRequest> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors RefreshRequest(RefreshRequest) protected RefreshRequest(RefreshRequest original) Parameters original RefreshRequest RefreshRequest(string) public RefreshRequest(string RefreshToken) Parameters RefreshToken string Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type RefreshToken public string RefreshToken { get; init; } Property Value string Methods Deconstruct(out string) public void Deconstruct(out string RefreshToken) Parameters RefreshToken string Equals(RefreshRequest?) public virtual bool Equals(RefreshRequest? other) Parameters other RefreshRequest 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 ==(RefreshRequest?, RefreshRequest?) public static bool operator ==(RefreshRequest? left, RefreshRequest? right) Parameters left RefreshRequest right RefreshRequest Returns bool operator !=(RefreshRequest?, RefreshRequest?) public static bool operator !=(RefreshRequest? left, RefreshRequest? right) Parameters left RefreshRequest right RefreshRequest Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.RegisterRequest.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.RegisterRequest.html",
|
||
"title": "Class RegisterRequest | EchoHub Documentation",
|
||
"summary": "Class RegisterRequest Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record RegisterRequest : IEquatable<RegisterRequest> Inheritance object RegisterRequest Implements IEquatable<RegisterRequest> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors RegisterRequest(RegisterRequest) protected RegisterRequest(RegisterRequest original) Parameters original RegisterRequest RegisterRequest(string, string, string?) public RegisterRequest(string Username, string Password, string? DisplayName = null) Parameters Username string Password string DisplayName string Properties DisplayName public string? DisplayName { get; init; } Property Value string EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Password public string Password { get; init; } Property Value string Username public string Username { get; init; } Property Value string Methods Deconstruct(out string, out string, out string?) public void Deconstruct(out string Username, out string Password, out string? DisplayName) Parameters Username string Password string DisplayName string Equals(RegisterRequest?) public virtual bool Equals(RegisterRequest? other) Parameters other RegisterRequest 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 ==(RegisterRequest?, RegisterRequest?) public static bool operator ==(RegisterRequest? left, RegisterRequest? right) Parameters left RegisterRequest right RegisterRequest Returns bool operator !=(RegisterRequest?, RegisterRequest?) public static bool operator !=(RegisterRequest? left, RegisterRequest? right) Parameters left RegisterRequest right RegisterRequest Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.SendMessageRequest.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.SendMessageRequest.html",
|
||
"title": "Class SendMessageRequest | EchoHub Documentation",
|
||
"summary": "Class SendMessageRequest Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record SendMessageRequest : IEquatable<SendMessageRequest> Inheritance object SendMessageRequest Implements IEquatable<SendMessageRequest> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors SendMessageRequest(SendMessageRequest) protected SendMessageRequest(SendMessageRequest original) Parameters original SendMessageRequest SendMessageRequest(string, string) public SendMessageRequest(string ChannelName, string Content) Parameters ChannelName string Content string Properties ChannelName public string ChannelName { get; init; } Property Value string Content public string Content { get; init; } Property Value string EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Methods Deconstruct(out string, out string) public void Deconstruct(out string ChannelName, out string Content) Parameters ChannelName string Content string Equals(SendMessageRequest?) public virtual bool Equals(SendMessageRequest? other) Parameters other SendMessageRequest 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 ==(SendMessageRequest?, SendMessageRequest?) public static bool operator ==(SendMessageRequest? left, SendMessageRequest? right) Parameters left SendMessageRequest right SendMessageRequest Returns bool operator !=(SendMessageRequest?, SendMessageRequest?) public static bool operator !=(SendMessageRequest? left, SendMessageRequest? right) Parameters left SendMessageRequest right SendMessageRequest Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.SendUrlRequest.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.SendUrlRequest.html",
|
||
"title": "Class SendUrlRequest | EchoHub Documentation",
|
||
"summary": "Class SendUrlRequest Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record SendUrlRequest : IEquatable<SendUrlRequest> Inheritance object SendUrlRequest Implements IEquatable<SendUrlRequest> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors SendUrlRequest(SendUrlRequest) protected SendUrlRequest(SendUrlRequest original) Parameters original SendUrlRequest SendUrlRequest(string) public SendUrlRequest(string Url) Parameters Url string Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Url public string Url { get; init; } Property Value string Methods Deconstruct(out string) public void Deconstruct(out string Url) Parameters Url string Equals(SendUrlRequest?) public virtual bool Equals(SendUrlRequest? other) Parameters other SendUrlRequest 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 ==(SendUrlRequest?, SendUrlRequest?) public static bool operator ==(SendUrlRequest? left, SendUrlRequest? right) Parameters left SendUrlRequest right SendUrlRequest Returns bool operator !=(SendUrlRequest?, SendUrlRequest?) public static bool operator !=(SendUrlRequest? left, SendUrlRequest? right) Parameters left SendUrlRequest right SendUrlRequest Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.ServerStatusDto.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.ServerStatusDto.html",
|
||
"title": "Class ServerStatusDto | EchoHub Documentation",
|
||
"summary": "Class ServerStatusDto Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record ServerStatusDto : IEquatable<ServerStatusDto> Inheritance object ServerStatusDto Implements IEquatable<ServerStatusDto> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors ServerStatusDto(ServerStatusDto) protected ServerStatusDto(ServerStatusDto original) Parameters original ServerStatusDto ServerStatusDto(string, string?, int, int) public ServerStatusDto(string Name, string? Description, int OnlineUsers, int TotalChannels) Parameters Name string Description string OnlineUsers int TotalChannels int Properties Description public string? Description { get; init; } Property Value string EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Name public string Name { get; init; } Property Value string OnlineUsers public int OnlineUsers { get; init; } Property Value int TotalChannels public int TotalChannels { get; init; } Property Value int Methods Deconstruct(out string, out string?, out int, out int) public void Deconstruct(out string Name, out string? Description, out int OnlineUsers, out int TotalChannels) Parameters Name string Description string OnlineUsers int TotalChannels int Equals(ServerStatusDto?) public virtual bool Equals(ServerStatusDto? other) Parameters other ServerStatusDto 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 ==(ServerStatusDto?, ServerStatusDto?) public static bool operator ==(ServerStatusDto? left, ServerStatusDto? right) Parameters left ServerStatusDto right ServerStatusDto Returns bool operator !=(ServerStatusDto?, ServerStatusDto?) public static bool operator !=(ServerStatusDto? left, ServerStatusDto? right) Parameters left ServerStatusDto right ServerStatusDto Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.UpdateProfileRequest.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.UpdateProfileRequest.html",
|
||
"title": "Class UpdateProfileRequest | EchoHub Documentation",
|
||
"summary": "Class UpdateProfileRequest Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record UpdateProfileRequest : IEquatable<UpdateProfileRequest> Inheritance object UpdateProfileRequest Implements IEquatable<UpdateProfileRequest> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors UpdateProfileRequest(UpdateProfileRequest) protected UpdateProfileRequest(UpdateProfileRequest original) Parameters original UpdateProfileRequest UpdateProfileRequest(string?, string?, string?) public UpdateProfileRequest(string? DisplayName = null, string? Bio = null, string? NicknameColor = null) Parameters DisplayName string Bio string NicknameColor string Properties Bio public string? Bio { get; init; } Property Value string DisplayName public string? DisplayName { get; init; } Property Value string EqualityContract protected virtual Type EqualityContract { get; } Property Value Type NicknameColor public string? NicknameColor { get; init; } Property Value string Methods Deconstruct(out string?, out string?, out string?) public void Deconstruct(out string? DisplayName, out string? Bio, out string? NicknameColor) Parameters DisplayName string Bio string NicknameColor string Equals(UpdateProfileRequest?) public virtual bool Equals(UpdateProfileRequest? other) Parameters other UpdateProfileRequest 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 ==(UpdateProfileRequest?, UpdateProfileRequest?) public static bool operator ==(UpdateProfileRequest? left, UpdateProfileRequest? right) Parameters left UpdateProfileRequest right UpdateProfileRequest Returns bool operator !=(UpdateProfileRequest?, UpdateProfileRequest?) public static bool operator !=(UpdateProfileRequest? left, UpdateProfileRequest? right) Parameters left UpdateProfileRequest right UpdateProfileRequest Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.UpdateStatusRequest.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.UpdateStatusRequest.html",
|
||
"title": "Class UpdateStatusRequest | EchoHub Documentation",
|
||
"summary": "Class UpdateStatusRequest Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record UpdateStatusRequest : IEquatable<UpdateStatusRequest> Inheritance object UpdateStatusRequest Implements IEquatable<UpdateStatusRequest> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors UpdateStatusRequest(UpdateStatusRequest) protected UpdateStatusRequest(UpdateStatusRequest original) Parameters original UpdateStatusRequest UpdateStatusRequest(UserStatus, string?) public UpdateStatusRequest(UserStatus Status, string? StatusMessage = null) Parameters Status UserStatus StatusMessage string Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Status public UserStatus Status { get; init; } Property Value UserStatus StatusMessage public string? StatusMessage { get; init; } Property Value string Methods Deconstruct(out UserStatus, out string?) public void Deconstruct(out UserStatus Status, out string? StatusMessage) Parameters Status UserStatus StatusMessage string Equals(UpdateStatusRequest?) public virtual bool Equals(UpdateStatusRequest? other) Parameters other UpdateStatusRequest 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 ==(UpdateStatusRequest?, UpdateStatusRequest?) public static bool operator ==(UpdateStatusRequest? left, UpdateStatusRequest? right) Parameters left UpdateStatusRequest right UpdateStatusRequest Returns bool operator !=(UpdateStatusRequest?, UpdateStatusRequest?) public static bool operator !=(UpdateStatusRequest? left, UpdateStatusRequest? right) Parameters left UpdateStatusRequest right UpdateStatusRequest Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.UpdateTopicRequest.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.UpdateTopicRequest.html",
|
||
"title": "Class UpdateTopicRequest | EchoHub Documentation",
|
||
"summary": "Class UpdateTopicRequest Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record UpdateTopicRequest : IEquatable<UpdateTopicRequest> Inheritance object UpdateTopicRequest Implements IEquatable<UpdateTopicRequest> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors UpdateTopicRequest(UpdateTopicRequest) protected UpdateTopicRequest(UpdateTopicRequest original) Parameters original UpdateTopicRequest UpdateTopicRequest(string?) public UpdateTopicRequest(string? Topic) Parameters Topic string Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Topic public string? Topic { get; init; } Property Value string Methods Deconstruct(out string?) public void Deconstruct(out string? Topic) Parameters Topic string Equals(UpdateTopicRequest?) public virtual bool Equals(UpdateTopicRequest? other) Parameters other UpdateTopicRequest 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 ==(UpdateTopicRequest?, UpdateTopicRequest?) public static bool operator ==(UpdateTopicRequest? left, UpdateTopicRequest? right) Parameters left UpdateTopicRequest right UpdateTopicRequest Returns bool operator !=(UpdateTopicRequest?, UpdateTopicRequest?) public static bool operator !=(UpdateTopicRequest? left, UpdateTopicRequest? right) Parameters left UpdateTopicRequest right UpdateTopicRequest Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.UserDto.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.UserDto.html",
|
||
"title": "Class UserDto | EchoHub Documentation",
|
||
"summary": "Class UserDto Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record UserDto : IEquatable<UserDto> Inheritance object UserDto Implements IEquatable<UserDto> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors UserDto(UserDto) protected UserDto(UserDto original) Parameters original UserDto UserDto(Guid, string, string?, string?, UserStatus, DateTimeOffset) public UserDto(Guid Id, string Username, string? DisplayName, string? NicknameColor, UserStatus Status, DateTimeOffset LastSeenAt) Parameters Id Guid Username string DisplayName string NicknameColor string Status UserStatus LastSeenAt DateTimeOffset Properties DisplayName public string? DisplayName { get; init; } Property Value string EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Id public Guid Id { get; init; } Property Value Guid LastSeenAt public DateTimeOffset LastSeenAt { get; init; } Property Value DateTimeOffset NicknameColor public string? NicknameColor { get; init; } Property Value string Status public UserStatus Status { get; init; } Property Value UserStatus Username public string Username { get; init; } Property Value string Methods Deconstruct(out Guid, out string, out string?, out string?, out UserStatus, out DateTimeOffset) public void Deconstruct(out Guid Id, out string Username, out string? DisplayName, out string? NicknameColor, out UserStatus Status, out DateTimeOffset LastSeenAt) Parameters Id Guid Username string DisplayName string NicknameColor string Status UserStatus LastSeenAt DateTimeOffset Equals(UserDto?) public virtual bool Equals(UserDto? other) Parameters other UserDto 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 ==(UserDto?, UserDto?) public static bool operator ==(UserDto? left, UserDto? right) Parameters left UserDto right UserDto Returns bool operator !=(UserDto?, UserDto?) public static bool operator !=(UserDto? left, UserDto? right) Parameters left UserDto right UserDto Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.UserError.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.UserError.html",
|
||
"title": "Enum UserError | EchoHub Documentation",
|
||
"summary": "Enum UserError Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public enum UserError Fields AlreadyExists = 1 Banned = 4 InvalidCredentials = 3 NotFound = 2 ValidationFailed = 0"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.UserOperationResult.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.UserOperationResult.html",
|
||
"title": "Class UserOperationResult | EchoHub Documentation",
|
||
"summary": "Class UserOperationResult Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record UserOperationResult : IEquatable<UserOperationResult> Inheritance object UserOperationResult Implements IEquatable<UserOperationResult> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors UserOperationResult(UserOperationResult) protected UserOperationResult(UserOperationResult original) Parameters original UserOperationResult UserOperationResult(UserProfileDto?, UserError?, string?) public UserOperationResult(UserProfileDto? User, UserError? Error, string? ErrorMessage) Parameters User UserProfileDto Error UserError? ErrorMessage string Properties EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Error public UserError? Error { get; init; } Property Value UserError? ErrorMessage public string? ErrorMessage { get; init; } Property Value string IsSuccess public bool IsSuccess { get; } Property Value bool User public UserProfileDto? User { get; init; } Property Value UserProfileDto Methods Deconstruct(out UserProfileDto?, out UserError?, out string?) public void Deconstruct(out UserProfileDto? User, out UserError? Error, out string? ErrorMessage) Parameters User UserProfileDto Error UserError? ErrorMessage string Equals(UserOperationResult?) public virtual bool Equals(UserOperationResult? other) Parameters other UserOperationResult Returns bool Equals(object?) public override bool Equals(object? obj) Parameters obj object Returns bool Fail(UserError, string) public static UserOperationResult Fail(UserError error, string message) Parameters error UserError message string Returns UserOperationResult GetHashCode() public override int GetHashCode() Returns int PrintMembers(StringBuilder) protected virtual bool PrintMembers(StringBuilder builder) Parameters builder StringBuilder Returns bool Success(UserProfileDto) public static UserOperationResult Success(UserProfileDto user) Parameters user UserProfileDto Returns UserOperationResult ToString() public override string ToString() Returns string Operators operator ==(UserOperationResult?, UserOperationResult?) public static bool operator ==(UserOperationResult? left, UserOperationResult? right) Parameters left UserOperationResult right UserOperationResult Returns bool operator !=(UserOperationResult?, UserOperationResult?) public static bool operator !=(UserOperationResult? left, UserOperationResult? right) Parameters left UserOperationResult right UserOperationResult Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.UserPresenceDto.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.UserPresenceDto.html",
|
||
"title": "Class UserPresenceDto | EchoHub Documentation",
|
||
"summary": "Class UserPresenceDto Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record UserPresenceDto : IEquatable<UserPresenceDto> Inheritance object UserPresenceDto Implements IEquatable<UserPresenceDto> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors UserPresenceDto(UserPresenceDto) protected UserPresenceDto(UserPresenceDto original) Parameters original UserPresenceDto UserPresenceDto(string, string?, string?, UserStatus, string?, ServerRole) public UserPresenceDto(string Username, string? DisplayName, string? NicknameColor, UserStatus Status, string? StatusMessage, ServerRole Role) Parameters Username string DisplayName string NicknameColor string Status UserStatus StatusMessage string Role ServerRole Properties DisplayName public string? DisplayName { get; init; } Property Value string EqualityContract protected virtual Type EqualityContract { get; } Property Value Type NicknameColor public string? NicknameColor { get; init; } Property Value string Role public ServerRole Role { get; init; } Property Value ServerRole Status public UserStatus Status { get; init; } Property Value UserStatus StatusMessage public string? StatusMessage { get; init; } Property Value string Username public string Username { get; init; } Property Value string Methods Deconstruct(out string, out string?, out string?, out UserStatus, out string?, out ServerRole) public void Deconstruct(out string Username, out string? DisplayName, out string? NicknameColor, out UserStatus Status, out string? StatusMessage, out ServerRole Role) Parameters Username string DisplayName string NicknameColor string Status UserStatus StatusMessage string Role ServerRole Equals(UserPresenceDto?) public virtual bool Equals(UserPresenceDto? other) Parameters other UserPresenceDto 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 ==(UserPresenceDto?, UserPresenceDto?) public static bool operator ==(UserPresenceDto? left, UserPresenceDto? right) Parameters left UserPresenceDto right UserPresenceDto Returns bool operator !=(UserPresenceDto?, UserPresenceDto?) public static bool operator !=(UserPresenceDto? left, UserPresenceDto? right) Parameters left UserPresenceDto right UserPresenceDto Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.UserProfileDto.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.UserProfileDto.html",
|
||
"title": "Class UserProfileDto | EchoHub Documentation",
|
||
"summary": "Class UserProfileDto Namespace EchoHub.Core.DTOs Assembly EchoHub.Core.dll public record UserProfileDto : IEquatable<UserProfileDto> Inheritance object UserProfileDto Implements IEquatable<UserProfileDto> Inherited Members object.GetType() object.MemberwiseClone() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors UserProfileDto(UserProfileDto) protected UserProfileDto(UserProfileDto original) Parameters original UserProfileDto UserProfileDto(Guid, string, string?, string?, string?, string?, UserStatus, string?, ServerRole, DateTimeOffset, DateTimeOffset) public UserProfileDto(Guid Id, string Username, string? DisplayName, string? Bio, string? NicknameColor, string? AvatarAscii, UserStatus Status, string? StatusMessage, ServerRole Role, DateTimeOffset CreatedAt, DateTimeOffset LastSeenAt) Parameters Id Guid Username string DisplayName string Bio string NicknameColor string AvatarAscii string Status UserStatus StatusMessage string Role ServerRole CreatedAt DateTimeOffset LastSeenAt DateTimeOffset Properties AvatarAscii public string? AvatarAscii { get; init; } Property Value string Bio public string? Bio { get; init; } Property Value string CreatedAt public DateTimeOffset CreatedAt { get; init; } Property Value DateTimeOffset DisplayName public string? DisplayName { get; init; } Property Value string EqualityContract protected virtual Type EqualityContract { get; } Property Value Type Id public Guid Id { get; init; } Property Value Guid LastSeenAt public DateTimeOffset LastSeenAt { get; init; } Property Value DateTimeOffset NicknameColor public string? NicknameColor { get; init; } Property Value string Role public ServerRole Role { get; init; } Property Value ServerRole Status public UserStatus Status { get; init; } Property Value UserStatus StatusMessage public string? StatusMessage { get; init; } Property Value string Username public string Username { get; init; } Property Value string Methods Deconstruct(out Guid, out string, out string?, out string?, out string?, out string?, out UserStatus, out string?, out ServerRole, out DateTimeOffset, out DateTimeOffset) public void Deconstruct(out Guid Id, out string Username, out string? DisplayName, out string? Bio, out string? NicknameColor, out string? AvatarAscii, out UserStatus Status, out string? StatusMessage, out ServerRole Role, out DateTimeOffset CreatedAt, out DateTimeOffset LastSeenAt) Parameters Id Guid Username string DisplayName string Bio string NicknameColor string AvatarAscii string Status UserStatus StatusMessage string Role ServerRole CreatedAt DateTimeOffset LastSeenAt DateTimeOffset Equals(UserProfileDto?) public virtual bool Equals(UserProfileDto? other) Parameters other UserProfileDto 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 ==(UserProfileDto?, UserProfileDto?) public static bool operator ==(UserProfileDto? left, UserProfileDto? right) Parameters left UserProfileDto right UserProfileDto Returns bool operator !=(UserProfileDto?, UserProfileDto?) public static bool operator !=(UserProfileDto? left, UserProfileDto? right) Parameters left UserProfileDto right UserProfileDto Returns bool"
|
||
},
|
||
"api/core/EchoHub.Core.DTOs.html": {
|
||
"href": "api/core/EchoHub.Core.DTOs.html",
|
||
"title": "Namespace EchoHub.Core.DTOs | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Core.DTOs Classes ApiResponse ApiResponse<T> AssignRoleRequest AvatarUploadResponse BanRequest ChannelDto ChannelOperationResult CreateChannelRequest EmbedDto EncryptionKeyResponse ErrorResponse JoinChannelResult KickRequest LoginRequest LoginResponse MessageDto MuteRequest PaginatedResponse<T> RefreshRequest RegisterRequest SendMessageRequest SendUrlRequest ServerStatusDto UpdateProfileRequest UpdateStatusRequest UpdateTopicRequest UserDto UserOperationResult UserPresenceDto UserProfileDto Enums ChannelError UserError"
|
||
},
|
||
"api/core/EchoHub.Core.Models.Channel.html": {
|
||
"href": "api/core/EchoHub.Core.Models.Channel.html",
|
||
"title": "Class Channel | EchoHub Documentation",
|
||
"summary": "Class Channel Namespace EchoHub.Core.Models Assembly EchoHub.Core.dll public class Channel Inheritance object Channel Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors Channel() public Channel() Properties CreatedAt public DateTimeOffset CreatedAt { get; set; } Property Value DateTimeOffset CreatedByUserId public Guid CreatedByUserId { get; set; } Property Value Guid Id public Guid Id { get; set; } Property Value Guid IsPublic public bool IsPublic { get; set; } Property Value bool Messages public List<Message> Messages { get; set; } Property Value List<Message> Name public required string Name { get; set; } Property Value string Topic public string? Topic { get; set; } Property Value string"
|
||
},
|
||
"api/core/EchoHub.Core.Models.ChannelMembership.html": {
|
||
"href": "api/core/EchoHub.Core.Models.ChannelMembership.html",
|
||
"title": "Class ChannelMembership | EchoHub Documentation",
|
||
"summary": "Class ChannelMembership Namespace EchoHub.Core.Models Assembly EchoHub.Core.dll public class ChannelMembership Inheritance object ChannelMembership Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChannelMembership() public ChannelMembership() Properties ChannelId public Guid ChannelId { get; set; } Property Value Guid JoinedAt public DateTimeOffset JoinedAt { get; set; } Property Value DateTimeOffset UserId public Guid UserId { get; set; } Property Value Guid"
|
||
},
|
||
"api/core/EchoHub.Core.Models.Message.html": {
|
||
"href": "api/core/EchoHub.Core.Models.Message.html",
|
||
"title": "Class Message | EchoHub Documentation",
|
||
"summary": "Class Message Namespace EchoHub.Core.Models Assembly EchoHub.Core.dll public class Message Inheritance object Message Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors Message() public Message() Properties AttachmentFileName public string? AttachmentFileName { get; set; } Property Value string AttachmentFileSize public long? AttachmentFileSize { get; set; } Property Value long? AttachmentUrl public string? AttachmentUrl { get; set; } Property Value string Channel public Channel? Channel { get; set; } Property Value Channel ChannelId public Guid ChannelId { get; set; } Property Value Guid Content public required string Content { get; set; } Property Value string EmbedJson public string? EmbedJson { get; set; } Property Value string Id public Guid Id { get; set; } Property Value Guid SenderUserId public Guid SenderUserId { get; set; } Property Value Guid SenderUsername public required string SenderUsername { get; set; } Property Value string SentAt public DateTimeOffset SentAt { get; set; } Property Value DateTimeOffset Type public MessageType Type { get; set; } Property Value MessageType"
|
||
},
|
||
"api/core/EchoHub.Core.Models.MessageType.html": {
|
||
"href": "api/core/EchoHub.Core.Models.MessageType.html",
|
||
"title": "Enum MessageType | EchoHub Documentation",
|
||
"summary": "Enum MessageType Namespace EchoHub.Core.Models Assembly EchoHub.Core.dll public enum MessageType Fields Audio = 3 File = 2 Image = 1 Text = 0"
|
||
},
|
||
"api/core/EchoHub.Core.Models.RefreshToken.html": {
|
||
"href": "api/core/EchoHub.Core.Models.RefreshToken.html",
|
||
"title": "Class RefreshToken | EchoHub Documentation",
|
||
"summary": "Class RefreshToken Namespace EchoHub.Core.Models Assembly EchoHub.Core.dll public class RefreshToken Inheritance object RefreshToken Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors RefreshToken() public RefreshToken() Properties CreatedAt public DateTimeOffset CreatedAt { get; set; } Property Value DateTimeOffset ExpiresAt public DateTimeOffset ExpiresAt { get; set; } Property Value DateTimeOffset Id public Guid Id { get; set; } Property Value Guid IsActive public bool IsActive { get; } Property Value bool IsExpired public bool IsExpired { get; } Property Value bool IsRevoked public bool IsRevoked { get; } Property Value bool RevokedAt public DateTimeOffset? RevokedAt { get; set; } Property Value DateTimeOffset? TokenHash public required string TokenHash { get; set; } Property Value string User public User? User { get; set; } Property Value User UserId public Guid UserId { get; set; } Property Value Guid"
|
||
},
|
||
"api/core/EchoHub.Core.Models.ServerRole.html": {
|
||
"href": "api/core/EchoHub.Core.Models.ServerRole.html",
|
||
"title": "Enum ServerRole | EchoHub Documentation",
|
||
"summary": "Enum ServerRole Namespace EchoHub.Core.Models Assembly EchoHub.Core.dll public enum ServerRole Fields Admin = 2 Member = 0 Mod = 1 Owner = 3"
|
||
},
|
||
"api/core/EchoHub.Core.Models.User.html": {
|
||
"href": "api/core/EchoHub.Core.Models.User.html",
|
||
"title": "Class User | EchoHub Documentation",
|
||
"summary": "Class User Namespace EchoHub.Core.Models Assembly EchoHub.Core.dll public class User Inheritance object User Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors User() public User() Properties AvatarAscii public string? AvatarAscii { get; set; } Property Value string Bio public string? Bio { get; set; } Property Value string CreatedAt public DateTimeOffset CreatedAt { get; set; } Property Value DateTimeOffset DisplayName public string? DisplayName { get; set; } Property Value string Id public Guid Id { get; set; } Property Value Guid IsBanned public bool IsBanned { get; set; } Property Value bool IsMuted public bool IsMuted { get; set; } Property Value bool LastSeenAt public DateTimeOffset LastSeenAt { get; set; } Property Value DateTimeOffset MutedUntil public DateTimeOffset? MutedUntil { get; set; } Property Value DateTimeOffset? NicknameColor public string? NicknameColor { get; set; } Property Value string PasswordHash public required string PasswordHash { get; set; } Property Value string Role public ServerRole Role { get; set; } Property Value ServerRole Status public UserStatus Status { get; set; } Property Value UserStatus StatusMessage public string? StatusMessage { get; set; } Property Value string Username public required string Username { get; set; } Property Value string"
|
||
},
|
||
"api/core/EchoHub.Core.Models.UserStatus.html": {
|
||
"href": "api/core/EchoHub.Core.Models.UserStatus.html",
|
||
"title": "Enum UserStatus | EchoHub Documentation",
|
||
"summary": "Enum UserStatus Namespace EchoHub.Core.Models Assembly EchoHub.Core.dll public enum UserStatus Fields Away = 1 DoNotDisturb = 2 Invisible = 3 Online = 0"
|
||
},
|
||
"api/core/EchoHub.Core.Models.html": {
|
||
"href": "api/core/EchoHub.Core.Models.html",
|
||
"title": "Namespace EchoHub.Core.Models | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Core.Models Classes Channel ChannelMembership Message RefreshToken User Enums MessageType ServerRole UserStatus"
|
||
},
|
||
"api/index.html": {
|
||
"href": "api/index.html",
|
||
"title": "API Reference | EchoHub Documentation",
|
||
"summary": "API Reference Browse the generated API documentation for each EchoHub project. Projects Client Terminal.Gui v2 TUI application -- UI components, services, themes, and configuration. Core Shared library -- DTOs, models, constants, and contracts (IChatService, IChannelService, IChatBroadcaster, IEchoHubClient). Server 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."
|
||
},
|
||
"api/server-articles/index.html": {
|
||
"href": "api/server-articles/index.html",
|
||
"title": "Server Articles | EchoHub Documentation",
|
||
"summary": "Server Articles Articles related to the EchoHub server built with ASP.NET Core. Topics Authentication and JWT tokens SignalR hub and real-time messaging IRC gateway and protocol bridging ChatService and broadcaster pattern ChannelService and channel CRUD File upload, validation, and cleanup Rate limiting configuration Database schema, migrations, and DataMigrationService"
|
||
},
|
||
"api/server-irc/EchoHub.Server.Irc.IrcBroadcaster.html": {
|
||
"href": "api/server-irc/EchoHub.Server.Irc.IrcBroadcaster.html",
|
||
"title": "Class IrcBroadcaster | EchoHub Documentation",
|
||
"summary": "Class IrcBroadcaster Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll public class IrcBroadcaster : IChatBroadcaster Inheritance object IrcBroadcaster Implements IChatBroadcaster Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors IrcBroadcaster(IrcGatewayService, IMessageEncryptionService) public IrcBroadcaster(IrcGatewayService gateway, IMessageEncryptionService encryption) Parameters gateway IrcGatewayService encryption IMessageEncryptionService Methods ForceDisconnectUserAsync(List<string>, string) public Task ForceDisconnectUserAsync(List<string> connectionIds, string reason) Parameters connectionIds List<string> reason string Returns Task SendChannelNukedAsync(string) public Task SendChannelNukedAsync(string channelName) Parameters channelName string Returns Task SendChannelUpdatedAsync(ChannelDto, string?) public Task SendChannelUpdatedAsync(ChannelDto channel, string? channelName = null) Parameters channel ChannelDto channelName string Returns Task SendErrorAsync(string, string) public Task SendErrorAsync(string connectionId, string message) Parameters connectionId string message string Returns Task SendMessageDeletedAsync(string, Guid) public Task SendMessageDeletedAsync(string channelName, Guid messageId) Parameters channelName string messageId Guid Returns Task SendMessageToChannelAsync(string, MessageDto) public Task SendMessageToChannelAsync(string channelName, MessageDto message) Parameters channelName string message MessageDto Returns Task SendUserBannedAsync(string, string?) public Task SendUserBannedAsync(string username, string? reason) Parameters username string reason string Returns Task SendUserJoinedAsync(string, string, UserPresenceDto?, string?) public Task SendUserJoinedAsync(string channelName, string username, UserPresenceDto? presence, string? excludeConnectionId = null) Parameters channelName string username string presence UserPresenceDto excludeConnectionId string Returns Task SendUserKickedAsync(string, string, string?) public Task SendUserKickedAsync(string channelName, string username, string? reason) Parameters channelName string username string reason string Returns Task SendUserLeftAsync(string, string) public Task SendUserLeftAsync(string channelName, string username) Parameters channelName string username string Returns Task SendUserStatusChangedAsync(List<string>, UserPresenceDto) public Task SendUserStatusChangedAsync(List<string> channelNames, UserPresenceDto presence) Parameters channelNames List<string> presence UserPresenceDto Returns Task"
|
||
},
|
||
"api/server-irc/EchoHub.Server.Irc.IrcClientConnection.html": {
|
||
"href": "api/server-irc/EchoHub.Server.Irc.IrcClientConnection.html",
|
||
"title": "Class IrcClientConnection | EchoHub Documentation",
|
||
"summary": "Class IrcClientConnection Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll Manages a single IRC client TCP connection. public sealed class IrcClientConnection : IAsyncDisposable Inheritance object IrcClientConnection Implements IAsyncDisposable Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors IrcClientConnection(TcpClient, Stream) public IrcClientConnection(TcpClient tcpClient, Stream stream) Parameters tcpClient TcpClient stream Stream Properties AwayMessage public string? AwayMessage { get; set; } Property Value string CapNegotiating public bool CapNegotiating { get; set; } Property Value bool ConnectionId public string ConnectionId { get; } Property Value string Hostmask public string Hostmask { get; } Property Value string IsAuthenticated public bool IsAuthenticated { get; set; } Property Value bool IsRegistered public bool IsRegistered { get; set; } Property Value bool IsSasl public bool IsSasl { get; set; } Property Value bool Nickname public string? Nickname { get; set; } Property Value string Password public string? Password { get; set; } Property Value string RealName public string? RealName { get; set; } Property Value string UserId public Guid? UserId { get; set; } Property Value Guid? Username public string? Username { get; set; } Property Value string Methods DisposeAsync() public ValueTask DisposeAsync() Returns ValueTask 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 ReadLineAsync(CancellationToken) public Task<string?> ReadLineAsync(CancellationToken ct) Parameters ct CancellationToken Returns Task<string> SendAsync(string) public Task SendAsync(string line) Parameters line string Returns Task SendNumericAsync(string, string, string) public Task SendNumericAsync(string serverName, string numeric, string text) Parameters serverName string numeric string text string Returns Task SendNumericAsync(string, string, string, string) public Task SendNumericAsync(string serverName, string numeric, string target, string text) Parameters serverName string numeric string target string text string Returns Task"
|
||
},
|
||
"api/server-irc/EchoHub.Server.Irc.IrcCommandHandler.html": {
|
||
"href": "api/server-irc/EchoHub.Server.Irc.IrcCommandHandler.html",
|
||
"title": "Class IrcCommandHandler | EchoHub Documentation",
|
||
"summary": "Class IrcCommandHandler Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll public sealed class IrcCommandHandler Inheritance object IrcCommandHandler Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors IrcCommandHandler(IrcClientConnection, IrcOptions, IChatService, IUserService, IChannelService, IMessageEncryptionService, ILogger) public IrcCommandHandler(IrcClientConnection conn, IrcOptions options, IChatService chatService, IUserService userService, IChannelService channelService, IMessageEncryptionService encryption, ILogger logger) Parameters conn IrcClientConnection options IrcOptions chatService IChatService userService IUserService channelService IChannelService encryption IMessageEncryptionService logger ILogger Methods RunAsync(CancellationToken) public Task RunAsync(CancellationToken ct) Parameters ct CancellationToken Returns Task"
|
||
},
|
||
"api/server-irc/EchoHub.Server.Irc.IrcGatewayService.html": {
|
||
"href": "api/server-irc/EchoHub.Server.Irc.IrcGatewayService.html",
|
||
"title": "Class IrcGatewayService | EchoHub Documentation",
|
||
"summary": "Class IrcGatewayService Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll public sealed class IrcGatewayService : BackgroundService, IDisposable Inheritance object BackgroundService IrcGatewayService Implements IDisposable Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors IrcGatewayService(IOptions<IrcOptions>, IServiceProvider, ILogger<IrcGatewayService>) public IrcGatewayService(IOptions<IrcOptions> options, IServiceProvider services, ILogger<IrcGatewayService> logger) Parameters options IOptions<IrcOptions> services IServiceProvider logger ILogger<IrcGatewayService> Properties Connections public IReadOnlyDictionary<string, IrcClientConnection> Connections { get; } Property Value IReadOnlyDictionary<string, IrcClientConnection> Options public IrcOptions Options { get; } Property Value IrcOptions Methods ExecuteAsync(CancellationToken) protected override Task ExecuteAsync(CancellationToken stoppingToken) Parameters stoppingToken CancellationToken Returns Task GetAllConnections() public IEnumerable<IrcClientConnection> GetAllConnections() Returns IEnumerable<IrcClientConnection> GetConnectionsInChannel(string) public IEnumerable<IrcClientConnection> GetConnectionsInChannel(string channelName) Parameters channelName string Returns IEnumerable<IrcClientConnection> StopAsync(CancellationToken) public override Task StopAsync(CancellationToken cancellationToken) Parameters cancellationToken CancellationToken Returns Task"
|
||
},
|
||
"api/server-irc/EchoHub.Server.Irc.IrcMessage.html": {
|
||
"href": "api/server-irc/EchoHub.Server.Irc.IrcMessage.html",
|
||
"title": "Class IrcMessage | EchoHub Documentation",
|
||
"summary": "Class IrcMessage Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll Parsed representation of an IRC protocol line. Format: [:prefix] COMMAND [params...] [:trailing] public sealed class IrcMessage Inheritance object IrcMessage Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors IrcMessage() public IrcMessage() Properties Command public string Command { get; init; } Property Value string Parameters public List<string> Parameters { get; init; } Property Value List<string> Prefix public string? Prefix { get; init; } Property Value string Trailing public string? Trailing { get; } Property Value string Methods Parse(string) Parse a raw IRC line: [:prefix SPACE] command [SPACE params] CRLF public static IrcMessage Parse(string line) Parameters line string Returns IrcMessage"
|
||
},
|
||
"api/server-irc/EchoHub.Server.Irc.IrcMessageFormatter.html": {
|
||
"href": "api/server-irc/EchoHub.Server.Irc.IrcMessageFormatter.html",
|
||
"title": "Class IrcMessageFormatter | EchoHub Documentation",
|
||
"summary": "Class IrcMessageFormatter Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll public static class IrcMessageFormatter Inheritance object IrcMessageFormatter Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods ColorTagsToAnsi(string) Convert printable color tags ({F:RRGGBB}, {B:RRGGBB}, {X}) to ANSI escape codes for IRC clients. Also passes through content that already uses ANSI codes unchanged. public static string ColorTagsToAnsi(string text) Parameters text string Returns string FormatMessage(MessageDto) Format a MessageDto as one or more IRC PRIVMSG lines. public static List<string> FormatMessage(MessageDto message) Parameters message MessageDto Returns List<string> SplitMessage(string, int) Split a message into chunks of approximately maxBytes (UTF-8), at word boundaries. public static List<string> SplitMessage(string content, int maxBytes) Parameters content string maxBytes int Returns List<string>"
|
||
},
|
||
"api/server-irc/EchoHub.Server.Irc.IrcNumericReply.html": {
|
||
"href": "api/server-irc/EchoHub.Server.Irc.IrcNumericReply.html",
|
||
"title": "Class IrcNumericReply | EchoHub Documentation",
|
||
"summary": "Class IrcNumericReply Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll public static class IrcNumericReply Inheritance object IrcNumericReply Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Fields ERR_ALREADYREGISTERED public const string ERR_ALREADYREGISTERED = \"462\" Field Value string ERR_CANNOTSENDTOCHAN public const string ERR_CANNOTSENDTOCHAN = \"404\" Field Value string ERR_CHANOPRIVSNEEDED public const string ERR_CHANOPRIVSNEEDED = \"482\" Field Value string ERR_ERRONEUSNICKNAME public const string ERR_ERRONEUSNICKNAME = \"432\" Field Value string ERR_NEEDMOREPARAMS public const string ERR_NEEDMOREPARAMS = \"461\" Field Value string ERR_NICKNAMEINUSE public const string ERR_NICKNAMEINUSE = \"433\" Field Value string ERR_NOMOTD public const string ERR_NOMOTD = \"422\" Field Value string ERR_NONICKNAMEGIVEN public const string ERR_NONICKNAMEGIVEN = \"431\" Field Value string ERR_NOSUCHCHANNEL public const string ERR_NOSUCHCHANNEL = \"403\" Field Value string ERR_NOSUCHNICK public const string ERR_NOSUCHNICK = \"401\" Field Value string ERR_NOTONCHANNEL public const string ERR_NOTONCHANNEL = \"442\" Field Value string ERR_NOTREGISTERED public const string ERR_NOTREGISTERED = \"451\" Field Value string ERR_PASSWDMISMATCH public const string ERR_PASSWDMISMATCH = \"464\" Field Value string ERR_SASLFAIL public const string ERR_SASLFAIL = \"904\" Field Value string ERR_UNKNOWNCOMMAND public const string ERR_UNKNOWNCOMMAND = \"421\" Field Value string RPL_AWAY public const string RPL_AWAY = \"301\" Field Value string RPL_CHANNELMODEIS public const string RPL_CHANNELMODEIS = \"324\" Field Value string RPL_CREATED public const string RPL_CREATED = \"003\" Field Value string RPL_ENDOFMOTD public const string RPL_ENDOFMOTD = \"376\" Field Value string RPL_ENDOFNAMES public const string RPL_ENDOFNAMES = \"366\" Field Value string RPL_ENDOFWHO public const string RPL_ENDOFWHO = \"315\" Field Value string RPL_ENDOFWHOIS public const string RPL_ENDOFWHOIS = \"318\" Field Value string RPL_ISUPPORT public const string RPL_ISUPPORT = \"005\" Field Value string RPL_LIST public const string RPL_LIST = \"322\" Field Value string RPL_LISTEND public const string RPL_LISTEND = \"323\" Field Value string RPL_LOGGEDIN public const string RPL_LOGGEDIN = \"900\" Field Value string RPL_MOTD public const string RPL_MOTD = \"372\" Field Value string RPL_MOTDSTART public const string RPL_MOTDSTART = \"375\" Field Value string RPL_MYINFO public const string RPL_MYINFO = \"004\" Field Value string RPL_NAMREPLY public const string RPL_NAMREPLY = \"353\" Field Value string RPL_NOTOPIC public const string RPL_NOTOPIC = \"331\" Field Value string RPL_NOWAWAY public const string RPL_NOWAWAY = \"306\" Field Value string RPL_SASLSUCCESS public const string RPL_SASLSUCCESS = \"903\" Field Value string RPL_TOPIC public const string RPL_TOPIC = \"332\" Field Value string RPL_UMODEIS public const string RPL_UMODEIS = \"221\" Field Value string RPL_UNAWAY public const string RPL_UNAWAY = \"305\" Field Value string RPL_WELCOME public const string RPL_WELCOME = \"001\" Field Value string RPL_WHOISCHANNELS public const string RPL_WHOISCHANNELS = \"319\" Field Value string RPL_WHOISIDLE public const string RPL_WHOISIDLE = \"317\" Field Value string RPL_WHOISSERVER public const string RPL_WHOISSERVER = \"312\" Field Value string RPL_WHOISUSER public const string RPL_WHOISUSER = \"311\" Field Value string RPL_WHOREPLY public const string RPL_WHOREPLY = \"352\" Field Value string RPL_YOURHOST public const string RPL_YOURHOST = \"002\" Field Value string"
|
||
},
|
||
"api/server-irc/EchoHub.Server.Irc.IrcOptions.html": {
|
||
"href": "api/server-irc/EchoHub.Server.Irc.IrcOptions.html",
|
||
"title": "Class IrcOptions | EchoHub Documentation",
|
||
"summary": "Class IrcOptions Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll public sealed class IrcOptions Inheritance object IrcOptions Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors IrcOptions() public IrcOptions() Fields SectionName public const string SectionName = \"Irc\" Field Value string Properties Enabled public bool Enabled { get; set; } Property Value bool Motd public string? Motd { get; set; } Property Value string Port public int Port { get; set; } Property Value int ServerName public string ServerName { get; set; } Property Value string TlsCertPassword public string? TlsCertPassword { get; set; } Property Value string TlsCertPath public string? TlsCertPath { get; set; } Property Value string TlsEnabled public bool TlsEnabled { get; set; } Property Value bool TlsPort public int TlsPort { get; set; } Property Value int"
|
||
},
|
||
"api/server-irc/EchoHub.Server.Irc.IrcServiceExtensions.html": {
|
||
"href": "api/server-irc/EchoHub.Server.Irc.IrcServiceExtensions.html",
|
||
"title": "Class IrcServiceExtensions | EchoHub Documentation",
|
||
"summary": "Class IrcServiceExtensions Namespace EchoHub.Server.Irc Assembly EchoHub.Server.Irc.dll public static class IrcServiceExtensions Inheritance object IrcServiceExtensions Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods AddIrcGateway(WebApplicationBuilder) public static WebApplicationBuilder AddIrcGateway(this WebApplicationBuilder builder) Parameters builder WebApplicationBuilder Returns WebApplicationBuilder"
|
||
},
|
||
"api/server-irc/EchoHub.Server.Irc.html": {
|
||
"href": "api/server-irc/EchoHub.Server.Irc.html",
|
||
"title": "Namespace EchoHub.Server.Irc | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Server.Irc Classes IrcBroadcaster IrcClientConnection Manages a single IRC client TCP connection. IrcCommandHandler IrcGatewayService IrcMessage Parsed representation of an IRC protocol line. Format: [:prefix] COMMAND [params...] [:trailing] IrcMessageFormatter IrcNumericReply IrcOptions IrcServiceExtensions"
|
||
},
|
||
"api/server/EchoHub.Server.Auth.JwtTokenService.html": {
|
||
"href": "api/server/EchoHub.Server.Auth.JwtTokenService.html",
|
||
"title": "Class JwtTokenService | EchoHub Documentation",
|
||
"summary": "Class JwtTokenService Namespace EchoHub.Server.Auth Assembly EchoHub.Server.dll public class JwtTokenService Inheritance object JwtTokenService Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors JwtTokenService(IConfiguration) public JwtTokenService(IConfiguration configuration) Parameters configuration IConfiguration Fields RefreshTokenLifetime public static readonly TimeSpan RefreshTokenLifetime Field Value TimeSpan Methods GenerateAccessToken(UserProfileDto) public (string Token, DateTimeOffset ExpiresAt) GenerateAccessToken(UserProfileDto profile) Parameters profile UserProfileDto Returns (string Token, DateTimeOffset ExpiresAt) GenerateAccessToken(User) public (string Token, DateTimeOffset ExpiresAt) GenerateAccessToken(User user) Parameters user User Returns (string Token, DateTimeOffset ExpiresAt) GenerateRefreshToken() public static string GenerateRefreshToken() Returns string HashToken(string) public static string HashToken(string token) Parameters token string Returns string"
|
||
},
|
||
"api/server/EchoHub.Server.Auth.html": {
|
||
"href": "api/server/EchoHub.Server.Auth.html",
|
||
"title": "Namespace EchoHub.Server.Auth | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Server.Auth Classes JwtTokenService"
|
||
},
|
||
"api/server/EchoHub.Server.Controllers.AuthController.html": {
|
||
"href": "api/server/EchoHub.Server.Controllers.AuthController.html",
|
||
"title": "Class AuthController | EchoHub Documentation",
|
||
"summary": "Class AuthController Namespace EchoHub.Server.Controllers Assembly EchoHub.Server.dll [ApiController] [Route(\"api/auth\")] [EnableRateLimiting(\"auth\")] public class AuthController : ControllerBase Inheritance object ControllerBase AuthController Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors AuthController(EchoHubDbContext, JwtTokenService, IUserService) public AuthController(EchoHubDbContext db, JwtTokenService jwt, IUserService userService) Parameters db EchoHubDbContext jwt JwtTokenService userService IUserService Methods Login(LoginRequest) [HttpPost(\"login\")] public Task<IActionResult> Login(LoginRequest request) Parameters request LoginRequest Returns Task<IActionResult> Logout(RefreshRequest) [HttpPost(\"logout\")] public Task<IActionResult> Logout(RefreshRequest request) Parameters request RefreshRequest Returns Task<IActionResult> Refresh(RefreshRequest) [HttpPost(\"refresh\")] public Task<IActionResult> Refresh(RefreshRequest request) Parameters request RefreshRequest Returns Task<IActionResult> Register(RegisterRequest) [HttpPost(\"register\")] public Task<IActionResult> Register(RegisterRequest request) Parameters request RegisterRequest Returns Task<IActionResult>"
|
||
},
|
||
"api/server/EchoHub.Server.Controllers.ChannelsController.html": {
|
||
"href": "api/server/EchoHub.Server.Controllers.ChannelsController.html",
|
||
"title": "Class ChannelsController | EchoHub Documentation",
|
||
"summary": "Class ChannelsController Namespace EchoHub.Server.Controllers Assembly EchoHub.Server.dll [ApiController] [Route(\"api/channels\")] [Authorize] [EnableRateLimiting(\"general\")] public class ChannelsController : ControllerBase Inheritance object ControllerBase ChannelsController Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChannelsController(IChannelService, EchoHubDbContext, FileStorageService, ImageToAsciiService, IHttpClientFactory, IChatService, IMessageEncryptionService) public ChannelsController(IChannelService channelService, EchoHubDbContext db, FileStorageService fileStorage, ImageToAsciiService asciiService, IHttpClientFactory httpClientFactory, IChatService chatService, IMessageEncryptionService encryption) Parameters channelService IChannelService db EchoHubDbContext fileStorage FileStorageService asciiService ImageToAsciiService httpClientFactory IHttpClientFactory chatService IChatService encryption IMessageEncryptionService Methods CreateChannel(CreateChannelRequest) [HttpPost] public Task<IActionResult> CreateChannel(CreateChannelRequest request) Parameters request CreateChannelRequest Returns Task<IActionResult> DeleteChannel(string) [HttpDelete(\"{channel}\")] public Task<IActionResult> DeleteChannel(string channel) Parameters channel string Returns Task<IActionResult> GetChannels(int, int) [HttpGet] public Task<IActionResult> GetChannels(int offset = 0, int limit = 50) Parameters offset int limit int Returns Task<IActionResult> SendUrl(string, SendUrlRequest, string?) [HttpPost(\"{channel}/send-url\")] [EnableRateLimiting(\"upload\")] public Task<IActionResult> SendUrl(string channel, SendUrlRequest request, string? size = null) Parameters channel string request SendUrlRequest size string Returns Task<IActionResult> UpdateTopic(string, UpdateTopicRequest) [HttpPut(\"{channel}/topic\")] public Task<IActionResult> UpdateTopic(string channel, UpdateTopicRequest request) Parameters channel string request UpdateTopicRequest Returns Task<IActionResult> Upload(string, string?) [HttpPost(\"{channel}/upload\")] [EnableRateLimiting(\"upload\")] [RequestSizeLimit(104857600)] [RequestFormLimits(MultipartBodyLengthLimit = 104857600)] public Task<IActionResult> Upload(string channel, string? size = null) Parameters channel string size string Returns Task<IActionResult>"
|
||
},
|
||
"api/server/EchoHub.Server.Controllers.FilesController.html": {
|
||
"href": "api/server/EchoHub.Server.Controllers.FilesController.html",
|
||
"title": "Class FilesController | EchoHub Documentation",
|
||
"summary": "Class FilesController Namespace EchoHub.Server.Controllers Assembly EchoHub.Server.dll [ApiController] [Route(\"api/files\")] [Authorize] [EnableRateLimiting(\"general\")] public class FilesController : ControllerBase Inheritance object ControllerBase FilesController Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors FilesController(FileStorageService) public FilesController(FileStorageService fileStorage) Parameters fileStorage FileStorageService Methods GetFile(string) [HttpGet(\"{fileId}\")] public IActionResult GetFile(string fileId) Parameters fileId string Returns IActionResult"
|
||
},
|
||
"api/server/EchoHub.Server.Controllers.ModerationController.html": {
|
||
"href": "api/server/EchoHub.Server.Controllers.ModerationController.html",
|
||
"title": "Class ModerationController | EchoHub Documentation",
|
||
"summary": "Class ModerationController Namespace EchoHub.Server.Controllers Assembly EchoHub.Server.dll [ApiController] [Route(\"api/moderation\")] [Authorize] [EnableRateLimiting(\"general\")] public class ModerationController : ControllerBase Inheritance object ControllerBase ModerationController Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ModerationController(EchoHubDbContext, IChatService, PresenceTracker, IEnumerable<IChatBroadcaster>) public ModerationController(EchoHubDbContext db, IChatService chatService, PresenceTracker presenceTracker, IEnumerable<IChatBroadcaster> broadcasters) Parameters db EchoHubDbContext chatService IChatService presenceTracker PresenceTracker broadcasters IEnumerable<IChatBroadcaster> Methods AssignRole(AssignRoleRequest) [HttpPost(\"role\")] public Task<IActionResult> AssignRole(AssignRoleRequest request) Parameters request AssignRoleRequest Returns Task<IActionResult> BanUser(string, BanRequest?) [HttpPost(\"ban/{username}\")] public Task<IActionResult> BanUser(string username, BanRequest? request = null) Parameters username string request BanRequest Returns Task<IActionResult> DeleteMessage(Guid) [HttpDelete(\"messages/{messageId:guid}\")] public Task<IActionResult> DeleteMessage(Guid messageId) Parameters messageId Guid Returns Task<IActionResult> KickUser(string, KickRequest?) [HttpPost(\"kick/{username}\")] public Task<IActionResult> KickUser(string username, KickRequest? request = null) Parameters username string request KickRequest Returns Task<IActionResult> MuteUser(string, MuteRequest?) [HttpPost(\"mute/{username}\")] public Task<IActionResult> MuteUser(string username, MuteRequest? request = null) Parameters username string request MuteRequest Returns Task<IActionResult> NukeChannel(string) [HttpDelete(\"channels/{channel}/nuke\")] public Task<IActionResult> NukeChannel(string channel) Parameters channel string Returns Task<IActionResult> UnbanUser(string) [HttpPost(\"unban/{username}\")] public Task<IActionResult> UnbanUser(string username) Parameters username string Returns Task<IActionResult> UnmuteUser(string) [HttpPost(\"unmute/{username}\")] public Task<IActionResult> UnmuteUser(string username) Parameters username string Returns Task<IActionResult>"
|
||
},
|
||
"api/server/EchoHub.Server.Controllers.ServerController.html": {
|
||
"href": "api/server/EchoHub.Server.Controllers.ServerController.html",
|
||
"title": "Class ServerController | EchoHub Documentation",
|
||
"summary": "Class ServerController Namespace EchoHub.Server.Controllers Assembly EchoHub.Server.dll [ApiController] [Route(\"api/server\")] public class ServerController : ControllerBase Inheritance object ControllerBase ServerController Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ServerController(EchoHubDbContext, IConfiguration) public ServerController(EchoHubDbContext db, IConfiguration config) Parameters db EchoHubDbContext config IConfiguration Methods GetEncryptionKey() [HttpGet(\"encryption-key\")] [Authorize] [EnableRateLimiting(\"auth\")] public IActionResult GetEncryptionKey() Returns IActionResult GetInfo() [HttpGet(\"info\")] public Task<IActionResult> GetInfo() Returns Task<IActionResult>"
|
||
},
|
||
"api/server/EchoHub.Server.Controllers.UsersController.html": {
|
||
"href": "api/server/EchoHub.Server.Controllers.UsersController.html",
|
||
"title": "Class UsersController | EchoHub Documentation",
|
||
"summary": "Class UsersController Namespace EchoHub.Server.Controllers Assembly EchoHub.Server.dll [ApiController] [Route(\"api/users\")] [Authorize] [EnableRateLimiting(\"general\")] public class UsersController : ControllerBase Inheritance object ControllerBase UsersController Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors UsersController(IUserService, ImageToAsciiService) public UsersController(IUserService userService, ImageToAsciiService asciiService) Parameters userService IUserService asciiService ImageToAsciiService Methods GetProfile(string) [HttpGet(\"{username}/profile\")] public Task<IActionResult> GetProfile(string username) Parameters username string Returns Task<IActionResult> UpdateProfile(UpdateProfileRequest) [HttpPut(\"profile\")] public Task<IActionResult> UpdateProfile(UpdateProfileRequest request) Parameters request UpdateProfileRequest Returns Task<IActionResult> UploadAvatar() [HttpPost(\"avatar\")] [EnableRateLimiting(\"upload\")] public Task<IActionResult> UploadAvatar() Returns Task<IActionResult>"
|
||
},
|
||
"api/server/EchoHub.Server.Controllers.html": {
|
||
"href": "api/server/EchoHub.Server.Controllers.html",
|
||
"title": "Namespace EchoHub.Server.Controllers | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Server.Controllers Classes AuthController ChannelsController FilesController ModerationController ServerController UsersController"
|
||
},
|
||
"api/server/EchoHub.Server.Data.EchoHubDbContext.html": {
|
||
"href": "api/server/EchoHub.Server.Data.EchoHubDbContext.html",
|
||
"title": "Class EchoHubDbContext | EchoHub Documentation",
|
||
"summary": "Class EchoHubDbContext Namespace EchoHub.Server.Data Assembly EchoHub.Server.dll public class EchoHubDbContext : DbContext, IDisposable, IAsyncDisposable Inheritance object DbContext EchoHubDbContext Implements IDisposable IAsyncDisposable Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors EchoHubDbContext(DbContextOptions<EchoHubDbContext>) public EchoHubDbContext(DbContextOptions<EchoHubDbContext> options) Parameters options DbContextOptions<EchoHubDbContext> Properties ChannelMemberships public DbSet<ChannelMembership> ChannelMemberships { get; } Property Value DbSet<ChannelMembership> Channels public DbSet<Channel> Channels { get; } Property Value DbSet<Channel> Messages public DbSet<Message> Messages { get; } Property Value DbSet<Message> RefreshTokens public DbSet<RefreshToken> RefreshTokens { get; } Property Value DbSet<RefreshToken> Users public DbSet<User> Users { get; } Property Value DbSet<User> Methods OnConfiguring(DbContextOptionsBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) Parameters optionsBuilder DbContextOptionsBuilder OnModelCreating(ModelBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder) Parameters modelBuilder ModelBuilder"
|
||
},
|
||
"api/server/EchoHub.Server.Data.Migrations.AddAttachmentFileSize.html": {
|
||
"href": "api/server/EchoHub.Server.Data.Migrations.AddAttachmentFileSize.html",
|
||
"title": "Class AddAttachmentFileSize | EchoHub Documentation",
|
||
"summary": "Class AddAttachmentFileSize Namespace EchoHub.Server.Data.Migrations Assembly EchoHub.Server.dll [DbContext(typeof(EchoHubDbContext))] [Migration(\"20260221193444_AddAttachmentFileSize\")] public class AddAttachmentFileSize : Migration Inheritance object Migration AddAttachmentFileSize Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() 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"
|
||
},
|
||
"api/server/EchoHub.Server.Data.Migrations.AddChannelIsPublic.html": {
|
||
"href": "api/server/EchoHub.Server.Data.Migrations.AddChannelIsPublic.html",
|
||
"title": "Class AddChannelIsPublic | EchoHub Documentation",
|
||
"summary": "Class AddChannelIsPublic Namespace EchoHub.Server.Data.Migrations Assembly EchoHub.Server.dll [DbContext(typeof(EchoHubDbContext))] [Migration(\"20260219172834_AddChannelIsPublic\")] public class AddChannelIsPublic : Migration Inheritance object Migration AddChannelIsPublic Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors AddChannelIsPublic() public AddChannelIsPublic() 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"
|
||
},
|
||
"api/server/EchoHub.Server.Data.Migrations.AddChannelMembership.html": {
|
||
"href": "api/server/EchoHub.Server.Data.Migrations.AddChannelMembership.html",
|
||
"title": "Class AddChannelMembership | EchoHub Documentation",
|
||
"summary": "Class AddChannelMembership Namespace EchoHub.Server.Data.Migrations Assembly EchoHub.Server.dll [DbContext(typeof(EchoHubDbContext))] [Migration(\"20260219181720_AddChannelMembership\")] public class AddChannelMembership : Migration Inheritance object Migration AddChannelMembership Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors AddChannelMembership() public AddChannelMembership() 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"
|
||
},
|
||
"api/server/EchoHub.Server.Data.Migrations.AddEncryptionSupport.html": {
|
||
"href": "api/server/EchoHub.Server.Data.Migrations.AddEncryptionSupport.html",
|
||
"title": "Class AddEncryptionSupport | EchoHub Documentation",
|
||
"summary": "Class AddEncryptionSupport Namespace EchoHub.Server.Data.Migrations Assembly EchoHub.Server.dll [DbContext(typeof(EchoHubDbContext))] [Migration(\"20260220133627_AddEncryptionSupport\")] public class AddEncryptionSupport : Migration Inheritance object Migration AddEncryptionSupport Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors AddEncryptionSupport() public AddEncryptionSupport() 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"
|
||
},
|
||
"api/server/EchoHub.Server.Data.Migrations.AddMessageEmbed.html": {
|
||
"href": "api/server/EchoHub.Server.Data.Migrations.AddMessageEmbed.html",
|
||
"title": "Class AddMessageEmbed | EchoHub Documentation",
|
||
"summary": "Class AddMessageEmbed Namespace EchoHub.Server.Data.Migrations Assembly EchoHub.Server.dll [DbContext(typeof(EchoHubDbContext))] [Migration(\"20260219201704_AddMessageEmbed\")] public class AddMessageEmbed : Migration Inheritance object Migration AddMessageEmbed Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors AddMessageEmbed() public AddMessageEmbed() 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"
|
||
},
|
||
"api/server/EchoHub.Server.Data.Migrations.AddModerationRoles.html": {
|
||
"href": "api/server/EchoHub.Server.Data.Migrations.AddModerationRoles.html",
|
||
"title": "Class AddModerationRoles | EchoHub Documentation",
|
||
"summary": "Class AddModerationRoles Namespace EchoHub.Server.Data.Migrations Assembly EchoHub.Server.dll [DbContext(typeof(EchoHubDbContext))] [Migration(\"20260219162414_AddModerationRoles\")] public class AddModerationRoles : Migration Inheritance object Migration AddModerationRoles Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors AddModerationRoles() public AddModerationRoles() 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"
|
||
},
|
||
"api/server/EchoHub.Server.Data.Migrations.InitialCreate.html": {
|
||
"href": "api/server/EchoHub.Server.Data.Migrations.InitialCreate.html",
|
||
"title": "Class InitialCreate | EchoHub Documentation",
|
||
"summary": "Class InitialCreate Namespace EchoHub.Server.Data.Migrations Assembly EchoHub.Server.dll [DbContext(typeof(EchoHubDbContext))] [Migration(\"20260219023113_InitialCreate\")] public class InitialCreate : Migration Inheritance object Migration InitialCreate Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors InitialCreate() public InitialCreate() 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"
|
||
},
|
||
"api/server/EchoHub.Server.Data.Migrations.html": {
|
||
"href": "api/server/EchoHub.Server.Data.Migrations.html",
|
||
"title": "Namespace EchoHub.Server.Data.Migrations | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Server.Data.Migrations Classes AddAttachmentFileSize AddChannelIsPublic AddChannelMembership AddEncryptionSupport AddMessageEmbed AddModerationRoles InitialCreate"
|
||
},
|
||
"api/server/EchoHub.Server.Data.html": {
|
||
"href": "api/server/EchoHub.Server.Data.html",
|
||
"title": "Namespace EchoHub.Server.Data | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Server.Data Classes EchoHubDbContext"
|
||
},
|
||
"api/server/EchoHub.Server.Hubs.ChatHub.html": {
|
||
"href": "api/server/EchoHub.Server.Hubs.ChatHub.html",
|
||
"title": "Class ChatHub | EchoHub Documentation",
|
||
"summary": "Class ChatHub Namespace EchoHub.Server.Hubs Assembly EchoHub.Server.dll [Authorize] public class ChatHub : Hub<IEchoHubClient>, IDisposable Inheritance object Hub Hub<IEchoHubClient> ChatHub Implements IDisposable Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChatHub(IChatService, ILogger<ChatHub>) public ChatHub(IChatService chatService, ILogger<ChatHub> logger) Parameters chatService IChatService logger ILogger<ChatHub> Methods GetChannelHistory(string, int, int) public Task<List<MessageDto>> GetChannelHistory(string channelName, int count = 100, int offset = 0) Parameters channelName string count int offset int Returns Task<List<MessageDto>> GetOnlineUsers(string) public Task<List<UserPresenceDto>> GetOnlineUsers(string channelName) Parameters channelName string Returns Task<List<UserPresenceDto>> JoinChannel(string) public Task<JoinChannelResult> JoinChannel(string channelName) Parameters channelName string Returns Task<JoinChannelResult> LeaveChannel(string) public Task LeaveChannel(string channelName) Parameters channelName string Returns Task OnConnectedAsync() public override Task OnConnectedAsync() Returns Task OnDisconnectedAsync(Exception?) public override Task OnDisconnectedAsync(Exception? exception) Parameters exception Exception Returns Task SendMessage(string, string) public Task SendMessage(string channelName, string content) Parameters channelName string content string Returns Task UpdateStatus(UserStatus, string?) public Task UpdateStatus(UserStatus status, string? statusMessage) Parameters status UserStatus statusMessage string Returns Task"
|
||
},
|
||
"api/server/EchoHub.Server.Hubs.html": {
|
||
"href": "api/server/EchoHub.Server.Hubs.html",
|
||
"title": "Namespace EchoHub.Server.Hubs | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Server.Hubs Classes ChatHub"
|
||
},
|
||
"api/server/EchoHub.Server.Services.ChannelService.html": {
|
||
"href": "api/server/EchoHub.Server.Services.ChannelService.html",
|
||
"title": "Class ChannelService | EchoHub Documentation",
|
||
"summary": "Class ChannelService Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public class ChannelService : IChannelService Inheritance object ChannelService Implements IChannelService Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() 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>"
|
||
},
|
||
"api/server/EchoHub.Server.Services.ChatService.html": {
|
||
"href": "api/server/EchoHub.Server.Services.ChatService.html",
|
||
"title": "Class ChatService | EchoHub Documentation",
|
||
"summary": "Class ChatService Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public class ChatService : IChatService Inheritance object ChatService Implements IChatService Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChatService(IServiceScopeFactory, PresenceTracker, IEnumerable<IChatBroadcaster>, LinkEmbedService, IMessageEncryptionService, IChannelService, ILogger<ChatService>) public ChatService(IServiceScopeFactory scopeFactory, PresenceTracker presenceTracker, IEnumerable<IChatBroadcaster> broadcasters, LinkEmbedService embedService, IMessageEncryptionService encryption, IChannelService channelService, ILogger<ChatService> logger) Parameters scopeFactory IServiceScopeFactory presenceTracker PresenceTracker broadcasters IEnumerable<IChatBroadcaster> embedService LinkEmbedService encryption IMessageEncryptionService channelService IChannelService logger ILogger<ChatService> Methods BroadcastChannelUpdatedAsync(ChannelDto, string?) public Task BroadcastChannelUpdatedAsync(ChannelDto channel, string? channelName = null) Parameters channel ChannelDto channelName string Returns Task BroadcastMessageAsync(string, MessageDto) public Task BroadcastMessageAsync(string channelName, MessageDto message) Parameters channelName string message MessageDto Returns Task GetChannelHistoryAsync(string, int, int) public Task<List<MessageDto>> GetChannelHistoryAsync(string channelName, int count, int offset = 0) Parameters channelName string count int offset int Returns Task<List<MessageDto>> GetChannelsForUserAsync(string) public Task<List<string>> GetChannelsForUserAsync(string username) Parameters username string Returns Task<List<string>> GetOnlineUsersAsync(string) public Task<List<UserPresenceDto>> GetOnlineUsersAsync(string channelName) Parameters channelName string Returns Task<List<UserPresenceDto>> JoinChannelAsync(string, Guid, string, string) public Task<(List<MessageDto> History, string? Error)> JoinChannelAsync(string connectionId, Guid userId, string username, string channelName) Parameters connectionId string userId Guid username string channelName string Returns Task<(List<MessageDto> History, string Error)> LeaveChannelAsync(string, string, string) public Task LeaveChannelAsync(string connectionId, string username, string channelName) Parameters connectionId string username string channelName string Returns Task SendMessageAsync(Guid, string, string, string) public Task<string?> SendMessageAsync(Guid userId, string username, string channelName, string content) Parameters userId Guid username string channelName string content string Returns Task<string> UpdateStatusAsync(Guid, string, UserStatus, string?) public Task<string?> UpdateStatusAsync(Guid userId, string username, UserStatus status, string? statusMessage) Parameters userId Guid username string status UserStatus statusMessage string Returns Task<string> UserConnectedAsync(string, Guid, string) public Task UserConnectedAsync(string connectionId, Guid userId, string username) Parameters connectionId string userId Guid username string Returns Task UserDisconnectedAsync(string) public Task<string?> UserDisconnectedAsync(string connectionId) Parameters connectionId string Returns Task<string>"
|
||
},
|
||
"api/server/EchoHub.Server.Services.FileCleanupService.html": {
|
||
"href": "api/server/EchoHub.Server.Services.FileCleanupService.html",
|
||
"title": "Class FileCleanupService | EchoHub Documentation",
|
||
"summary": "Class FileCleanupService Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public sealed class FileCleanupService : BackgroundService, IDisposable Inheritance object BackgroundService FileCleanupService Implements IDisposable Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() 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"
|
||
},
|
||
"api/server/EchoHub.Server.Services.FileStorageService.html": {
|
||
"href": "api/server/EchoHub.Server.Services.FileStorageService.html",
|
||
"title": "Class FileStorageService | EchoHub Documentation",
|
||
"summary": "Class FileStorageService Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public class FileStorageService Inheritance object FileStorageService Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors FileStorageService(IConfiguration) public FileStorageService(IConfiguration configuration) Parameters configuration IConfiguration Methods DeleteFile(string) public void DeleteFile(string fileId) Parameters fileId string GetFilePath(string) public string? GetFilePath(string fileId) Parameters fileId string Returns string SaveFileAsync(Stream, string) public Task<(string fileId, string filePath)> SaveFileAsync(Stream stream, string fileName) Parameters stream Stream fileName string Returns Task<(string fileId, string filePath)>"
|
||
},
|
||
"api/server/EchoHub.Server.Services.FileValidationHelper.html": {
|
||
"href": "api/server/EchoHub.Server.Services.FileValidationHelper.html",
|
||
"title": "Class FileValidationHelper | EchoHub Documentation",
|
||
"summary": "Class FileValidationHelper Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public static class FileValidationHelper Inheritance object FileValidationHelper Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods IsAudioFile(string) Checks whether the file name has a recognized audio extension. public static bool IsAudioFile(string fileName) Parameters fileName string Returns bool IsValidImage(Stream) Validates that a stream contains a recognized image format by checking magic bytes. The stream position is reset to the beginning after validation. public static bool IsValidImage(Stream stream) Parameters stream Stream Returns bool"
|
||
},
|
||
"api/server/EchoHub.Server.Services.ImageToAsciiService.html": {
|
||
"href": "api/server/EchoHub.Server.Services.ImageToAsciiService.html",
|
||
"title": "Class ImageToAsciiService | EchoHub Documentation",
|
||
"summary": "Class ImageToAsciiService Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public class ImageToAsciiService Inheritance object ImageToAsciiService Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ImageToAsciiService() public ImageToAsciiService() Methods ConvertToAscii(Stream, int, int) Converts an image to ASCII art using half-block characters (▀▄█) with printable color tags for 2x vertical resolution. Each character cell represents two vertical pixels. Format: {F:RRGGBB} foreground, {B:RRGGBB} background, {X} reset. Uses only printable ASCII — no terminal escape bytes. public string ConvertToAscii(Stream imageStream, int width = 80, int height = 80) Parameters imageStream Stream width int height int Returns string GetDimensions(string?) Returns (width, height) dimensions for the given size code. s = small (40x40), m = medium/default (80x80), l = large (120x120). public static (int Width, int Height) GetDimensions(string? size) Parameters size string Returns (int Width, int Height)"
|
||
},
|
||
"api/server/EchoHub.Server.Services.LinkEmbedService.html": {
|
||
"href": "api/server/EchoHub.Server.Services.LinkEmbedService.html",
|
||
"title": "Class LinkEmbedService | EchoHub Documentation",
|
||
"summary": "Class LinkEmbedService Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public class LinkEmbedService Inheritance object LinkEmbedService Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors LinkEmbedService(IHttpClientFactory, ILogger<LinkEmbedService>) public LinkEmbedService(IHttpClientFactory httpClientFactory, ILogger<LinkEmbedService> logger) Parameters httpClientFactory IHttpClientFactory logger ILogger<LinkEmbedService> Methods TryGetEmbedsAsync(string) Detect all URLs in message content and attempt to fetch OG embed data for each. Returns null if no URLs found or all fetches fail. Never throws — all errors are caught internally. public Task<List<EmbedDto>?> TryGetEmbedsAsync(string content) Parameters content string Returns Task<List<EmbedDto>>"
|
||
},
|
||
"api/server/EchoHub.Server.Services.MessageEncryptionService.html": {
|
||
"href": "api/server/EchoHub.Server.Services.MessageEncryptionService.html",
|
||
"title": "Class MessageEncryptionService | EchoHub Documentation",
|
||
"summary": "Class MessageEncryptionService Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public class MessageEncryptionService : IMessageEncryptionService Inheritance object MessageEncryptionService Implements IMessageEncryptionService Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors MessageEncryptionService(IConfiguration, ILogger<MessageEncryptionService>) public MessageEncryptionService(IConfiguration configuration, ILogger<MessageEncryptionService> logger) Parameters configuration IConfiguration logger ILogger<MessageEncryptionService> Properties EncryptDatabaseEnabled Whether database content should be encrypted at rest (server setting). public bool EncryptDatabaseEnabled { get; } Property Value bool Methods Decrypt(string) public string Decrypt(string content) Parameters content string Returns string DecryptNullable(string?) public string? DecryptNullable(string? value) Parameters value string Returns string Encrypt(string) public string Encrypt(string plaintext) Parameters plaintext string Returns string EncryptNullable(string?) public string? EncryptNullable(string? value) Parameters value string Returns string"
|
||
},
|
||
"api/server/EchoHub.Server.Services.MuteExpirationService.html": {
|
||
"href": "api/server/EchoHub.Server.Services.MuteExpirationService.html",
|
||
"title": "Class MuteExpirationService | EchoHub Documentation",
|
||
"summary": "Class MuteExpirationService Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll Background service that periodically unmutes users whose timed mute has expired. public sealed class MuteExpirationService : BackgroundService, IDisposable Inheritance object BackgroundService MuteExpirationService Implements IDisposable Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors MuteExpirationService(IServiceScopeFactory, ILogger<MuteExpirationService>) public MuteExpirationService(IServiceScopeFactory scopeFactory, ILogger<MuteExpirationService> logger) Parameters scopeFactory IServiceScopeFactory logger ILogger<MuteExpirationService> Methods ExecuteAsync(CancellationToken) protected override Task ExecuteAsync(CancellationToken stoppingToken) Parameters stoppingToken CancellationToken Returns Task"
|
||
},
|
||
"api/server/EchoHub.Server.Services.PresenceTracker.html": {
|
||
"href": "api/server/EchoHub.Server.Services.PresenceTracker.html",
|
||
"title": "Class PresenceTracker | EchoHub Documentation",
|
||
"summary": "Class PresenceTracker Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public class PresenceTracker Inheritance object PresenceTracker Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors PresenceTracker() public PresenceTracker() Methods ForceRemoveUser(string) Forcibly remove a user from all tracking. Returns their connection IDs and channels so the caller can broadcast departures and force-disconnect connections. public (List<string> ConnectionIds, List<string> Channels) ForceRemoveUser(string username) Parameters username string Returns (List<string> ConnectionIds, List<string> Channels) GetChannelsForUser(string) public List<string> GetChannelsForUser(string username) Parameters username string Returns List<string> GetConnectionsInChannels(List<string>) Get all unique connection IDs for users who share any of the given channels. public List<string> GetConnectionsInChannels(List<string> channels) Parameters channels List<string> Returns List<string> GetOnlineUserCount() public int GetOnlineUserCount() Returns int GetOnlineUsersInChannel(string) public List<string> GetOnlineUsersInChannel(string channelName) Parameters channelName string Returns List<string> GetUsernameForConnection(string) public string? GetUsernameForConnection(string connectionId) Parameters connectionId string Returns string IsOnline(string) public bool IsOnline(string username) Parameters username string Returns bool JoinChannel(string, string) Returns true if this is a new join, false if the user was already in the channel. public bool JoinChannel(string username, string channelName) Parameters username string channelName string Returns bool LeaveChannel(string, string) public void LeaveChannel(string username, string channelName) Parameters username string channelName string UserConnected(string, Guid, string) public void UserConnected(string connectionId, Guid userId, string username) Parameters connectionId string userId Guid username string UserDisconnected(string) public string? UserDisconnected(string connectionId) Parameters connectionId string Returns string"
|
||
},
|
||
"api/server/EchoHub.Server.Services.ServerDirectoryService.html": {
|
||
"href": "api/server/EchoHub.Server.Services.ServerDirectoryService.html",
|
||
"title": "Class ServerDirectoryService | EchoHub Documentation",
|
||
"summary": "Class ServerDirectoryService Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public sealed class ServerDirectoryService : BackgroundService, IDisposable Inheritance object BackgroundService ServerDirectoryService Implements IDisposable Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ServerDirectoryService(IConfiguration, PresenceTracker, ILogger<ServerDirectoryService>) public ServerDirectoryService(IConfiguration configuration, PresenceTracker presenceTracker, ILogger<ServerDirectoryService> logger) Parameters configuration IConfiguration presenceTracker PresenceTracker logger ILogger<ServerDirectoryService> Methods ExecuteAsync(CancellationToken) protected override Task ExecuteAsync(CancellationToken stoppingToken) Parameters stoppingToken CancellationToken Returns Task StopAsync(CancellationToken) public override Task StopAsync(CancellationToken cancellationToken) Parameters cancellationToken CancellationToken Returns Task"
|
||
},
|
||
"api/server/EchoHub.Server.Services.SignalRBroadcaster.html": {
|
||
"href": "api/server/EchoHub.Server.Services.SignalRBroadcaster.html",
|
||
"title": "Class SignalRBroadcaster | EchoHub Documentation",
|
||
"summary": "Class SignalRBroadcaster Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public class SignalRBroadcaster : IChatBroadcaster Inheritance object SignalRBroadcaster Implements IChatBroadcaster Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors SignalRBroadcaster(IServiceProvider, PresenceTracker) public SignalRBroadcaster(IServiceProvider serviceProvider, PresenceTracker presenceTracker) Parameters serviceProvider IServiceProvider presenceTracker PresenceTracker Methods ForceDisconnectUserAsync(List<string>, string) public Task ForceDisconnectUserAsync(List<string> connectionIds, string reason) Parameters connectionIds List<string> reason string Returns Task SendChannelNukedAsync(string) public Task SendChannelNukedAsync(string channelName) Parameters channelName string Returns Task SendChannelUpdatedAsync(ChannelDto, string?) public Task SendChannelUpdatedAsync(ChannelDto channel, string? channelName = null) Parameters channel ChannelDto channelName string Returns Task SendErrorAsync(string, string) public Task SendErrorAsync(string connectionId, string message) Parameters connectionId string message string Returns Task SendMessageDeletedAsync(string, Guid) public Task SendMessageDeletedAsync(string channelName, Guid messageId) Parameters channelName string messageId Guid Returns Task SendMessageToChannelAsync(string, MessageDto) public Task SendMessageToChannelAsync(string channelName, MessageDto message) Parameters channelName string message MessageDto Returns Task SendUserBannedAsync(string, string?) public Task SendUserBannedAsync(string username, string? reason) Parameters username string reason string Returns Task SendUserJoinedAsync(string, string, UserPresenceDto?, string?) public Task SendUserJoinedAsync(string channelName, string username, UserPresenceDto? presence, string? excludeConnectionId = null) Parameters channelName string username string presence UserPresenceDto excludeConnectionId string Returns Task SendUserKickedAsync(string, string, string?) public Task SendUserKickedAsync(string channelName, string username, string? reason) Parameters channelName string username string reason string Returns Task SendUserLeftAsync(string, string) public Task SendUserLeftAsync(string channelName, string username) Parameters channelName string username string Returns Task SendUserStatusChangedAsync(List<string>, UserPresenceDto) public Task SendUserStatusChangedAsync(List<string> channelNames, UserPresenceDto presence) Parameters channelNames List<string> presence UserPresenceDto Returns Task"
|
||
},
|
||
"api/server/EchoHub.Server.Services.UserService.html": {
|
||
"href": "api/server/EchoHub.Server.Services.UserService.html",
|
||
"title": "Class UserService | EchoHub Documentation",
|
||
"summary": "Class UserService Namespace EchoHub.Server.Services Assembly EchoHub.Server.dll public class UserService : IUserService Inheritance object UserService Implements IUserService Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors UserService(IServiceScopeFactory) public UserService(IServiceScopeFactory scopeFactory) Parameters scopeFactory IServiceScopeFactory Methods AuthenticateUserAsync(string, string) public Task<UserOperationResult> AuthenticateUserAsync(string username, string password) Parameters username string password string Returns Task<UserOperationResult> GetUserByIdAsync(Guid) public Task<UserProfileDto?> GetUserByIdAsync(Guid userId) Parameters userId Guid Returns Task<UserProfileDto> GetUserProfileAsync(string) public Task<UserProfileDto?> GetUserProfileAsync(string username) Parameters username string Returns Task<UserProfileDto> RegisterUserAsync(string, string, string?) public Task<UserOperationResult> RegisterUserAsync(string username, string password, string? displayName = null) Parameters username string password string displayName string Returns Task<UserOperationResult> SetAvatarAsync(Guid, string) public Task<UserOperationResult> SetAvatarAsync(Guid userId, string asciiArt) Parameters userId Guid asciiArt string Returns Task<UserOperationResult> UpdateProfileAsync(Guid, string?, string?, string?) public Task<UserOperationResult> UpdateProfileAsync(Guid userId, string? displayName, string? bio, string? nicknameColor) Parameters userId Guid displayName string bio string nicknameColor string Returns Task<UserOperationResult>"
|
||
},
|
||
"api/server/EchoHub.Server.Services.html": {
|
||
"href": "api/server/EchoHub.Server.Services.html",
|
||
"title": "Namespace EchoHub.Server.Services | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Server.Services Classes ChannelService ChatService FileCleanupService FileStorageService FileValidationHelper ImageToAsciiService LinkEmbedService MessageEncryptionService MuteExpirationService Background service that periodically unmutes users whose timed mute has expired. PresenceTracker ServerDirectoryService SignalRBroadcaster UserService"
|
||
},
|
||
"api/server/EchoHub.Server.Setup.DataMigrationService.html": {
|
||
"href": "api/server/EchoHub.Server.Setup.DataMigrationService.html",
|
||
"title": "Class DataMigrationService | EchoHub Documentation",
|
||
"summary": "Class DataMigrationService Namespace EchoHub.Server.Setup Assembly EchoHub.Server.dll public static class DataMigrationService Inheritance object DataMigrationService Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods AnsiToColorTags(string) Convert ANSI escape codes to printable color tags. \\x1b[38;2;R;G;Bm → {F:RRGGBB}, \\x1b[48;2;R;G;Bm → {B:RRGGBB}, \\x1b[0m → {X} public static string AnsiToColorTags(string text) Parameters text string Returns string RunAsync(IServiceProvider) public static Task RunAsync(IServiceProvider services) Parameters services IServiceProvider Returns Task"
|
||
},
|
||
"api/server/EchoHub.Server.Setup.DatabaseSetup.html": {
|
||
"href": "api/server/EchoHub.Server.Setup.DatabaseSetup.html",
|
||
"title": "Class DatabaseSetup | EchoHub Documentation",
|
||
"summary": "Class DatabaseSetup Namespace EchoHub.Server.Setup Assembly EchoHub.Server.dll public static class DatabaseSetup Inheritance object DatabaseSetup Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods InitializeAsync(IServiceProvider) public static Task InitializeAsync(IServiceProvider services) Parameters services IServiceProvider Returns Task"
|
||
},
|
||
"api/server/EchoHub.Server.Setup.FirstRunSetup.html": {
|
||
"href": "api/server/EchoHub.Server.Setup.FirstRunSetup.html",
|
||
"title": "Class FirstRunSetup | EchoHub Documentation",
|
||
"summary": "Class FirstRunSetup Namespace EchoHub.Server.Setup Assembly EchoHub.Server.dll public static class FirstRunSetup Inheritance object FirstRunSetup Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods EnsureAppSettings() public static void EnsureAppSettings()"
|
||
},
|
||
"api/server/EchoHub.Server.Setup.html": {
|
||
"href": "api/server/EchoHub.Server.Setup.html",
|
||
"title": "Namespace EchoHub.Server.Setup | EchoHub Documentation",
|
||
"summary": "Namespace EchoHub.Server.Setup Classes DataMigrationService DatabaseSetup FirstRunSetup"
|
||
},
|
||
"articles/architecture.html": {
|
||
"href": "articles/architecture.html",
|
||
"title": "Architecture | EchoHub Documentation",
|
||
"summary": "Architecture Overview EchoHub follows a decentralized model where each server is fully independent. There is no central authority or account federation. Users create one account per server. The server exposes two protocol interfaces to the same chat backend: IRC Client ──► TCP :6667 ──► IrcGateway ──┐ ├──► ChatService ──► DB + PresenceTracker TUI Client ──► WebSocket ──► ChatHub ─────┘ Both protocols call into a shared IChatService for business logic. Events fan out to all registered IChatBroadcaster implementations (SignalR and IRC). Components EchoHub.Core Shared library containing: Models: User, Channel, Message, RefreshToken DTOs: Record types for API requests/responses Contracts: IChatService (protocol-agnostic chat operations), IChannelService (channel CRUD and membership), IChatBroadcaster (event fan-out interface), IEchoHubClient (SignalR client interface) Constants: ValidationConstants (shared regex patterns), HubConstants EchoHub.Server ASP.NET Core web application: Controllers: REST API endpoints for auth, channels, users, files, server info Hubs: SignalR ChatHub -- thin adapter delegating to IChatService Auth: JWT token service (15-min access tokens, 30-day refresh tokens) Data: EF Core with SQLite Services: ChatService (core business logic), ChannelService (channel CRUD and membership), SignalRBroadcaster, presence tracking, file storage, image-to-ASCII conversion, FileCleanupService (periodic removal of expired uploads), DataMigrationService (startup schema/data evolution) EchoHub.Server.Irc IRC protocol gateway (separate project for clean separation of concerns): IrcGatewayService: BackgroundService with TCP listener on configured port(s), optional TLS IrcCommandHandler: Per-client IRC command dispatch -- handles CAP/SASL, NICK/USER/PASS, JOIN/PART/PRIVMSG/QUIT, NAMES/TOPIC/WHO/WHOIS/AWAY/LIST/MODE/MOTD IrcBroadcaster: IChatBroadcaster implementation that formats chat events as IRC protocol lines, with echo suppression (IRC convention) IrcMessageFormatter: Converts MessageDto to IRC PRIVMSG lines -- splits long text at word boundaries (~400 byte chunks), sends images as ASCII art line-by-line IRC users authenticate with existing EchoHub accounts via PASS/NICK/USER or SASL PLAIN (BCrypt verification against the database). EchoHub.Client Terminal.Gui v2 TUI application: UI: Main window, dialogs, chat renderer with ANSI color support Services: API client with automatic token refresh, SignalR connection wrapper, audio playback (NetCoreAudio), automatic update checker (AlwaysUpToDate) Themes: 13 built-in color themes (including transparent theme with true terminal transparency) Config: Client configuration management with session persistence (\"Remember Me\" refresh tokens) Communication REST API for authentication, profile management, channel CRUD, file uploads SignalR WebSocket for real-time messaging and presence updates (TUI client) IRC TCP for real-time messaging via standard IRC protocol (IRC clients) JWT tokens passed via query string for SignalR authentication IRC authentication via PASS/SASL PLAIN against BCrypt password hashes Broadcaster Pattern The IChatBroadcaster interface allows multiple protocols to receive chat events: SignalRBroadcaster: Wraps IHubContext<ChatHub>, filters out IRC connections IrcBroadcaster: Iterates live IRC connections in a channel, formats events as IRC protocol lines Both are registered in DI and called by ChatService when events occur. This means a message sent from an IRC client appears in the TUI client, and vice versa."
|
||
},
|
||
"articles/configuration.html": {
|
||
"href": "articles/configuration.html",
|
||
"title": "Configuration | EchoHub Documentation",
|
||
"summary": "Configuration EchoHub Server generates an appsettings.json with sensible defaults on first run (including a random JWT secret), so you can launch and start chatting immediately. Tweak things later when you feel like it. Note Under the hood, EchoHub Server is built on ASP.NET Core, so it inherits the standard .NET configuration system. If you're familiar with that, everything works exactly as you'd expect. If not — no worries, this page covers everything you need. How It Works EchoHub Server loads settings from multiple sources. Each source overrides the previous one, so you can layer defaults with environment-specific values: 1. appsettings.json (base defaults) 2. appsettings.{Environment}.json (e.g. appsettings.Production.json) 3. Environment variables (great for Docker / CI) 4. Command-line arguments (highest priority) The last one wins. If appsettings.json says \"Irc:Port\": 6667 but you pass --Irc:Port=7000 on the command line, port 7000 is what you get. In practice this means you can leave appsettings.json alone and override just the settings you care about using environment variables or CLI flags — no need to edit JSON files if that's not your thing. Environment Variable Mapping Environment variables use double underscores (__) in place of the JSON nesting. The rule is simple — replace every : (or each level of JSON nesting) with __: appsettings.json path Environment variable Server:Name Server__Name Irc:Enabled Irc__Enabled Jwt:Secret Jwt__Secret Serilog:MinimumLevel:Default Serilog__MinimumLevel__Default ConnectionStrings:DefaultConnection ConnectionStrings__DefaultConnection Arrays use numeric indices: Server:Admins:0 becomes Server__Admins__0, Server:Admins:1 becomes Server__Admins__1, and so on. This is why the Docker .env file uses Server__Name=My Server instead of JSON — Docker passes these as environment variables, and the server picks them up automatically. Examples All three of these achieve the same thing — use whichever fits your setup. appsettings.json (direct editing): { \"Server\": { \"Name\": \"My EchoHub Server\", \"PublicServer\": true } } Environment variables (Docker, systemd, shell export): export Server__Name=\"My EchoHub Server\" export Server__PublicServer=true Command-line arguments (quick overrides, highest priority): ./EchoHub.Server --Server:Name=\"My EchoHub Server\" --Irc:Enabled=true Configuration Reference The full appsettings.json is auto-generated on first run from the example config. Here's every option: General Key Default Description Urls http://0.0.0.0:5000 Listen address and port AllowedHosts * Allowed host headers (leave * unless you need host filtering) Database Key Default Description ConnectionStrings:DefaultConnection (empty) SQLite connection string. Empty = echohub.db in the app directory Authentication Key Default Description Jwt:Secret (auto-generated) Signing key (min 32 chars). Auto-generated on first run Jwt:Issuer EchoHub.Server JWT issuer claim Jwt:Audience EchoHub.Client JWT audience claim Access tokens expire after 15 minutes, refresh tokens after 30 days with rotation on each use. Server Identity Key Default Description Server:Name My EchoHub Server Display name shown to clients Server:Description A self-hosted EchoHub chat server Server description Server:PublicServer false Register on the public directory Server:PublicHost (empty) Public hostname for the directory listing (e.g. chat.example.com:5000) Server:Admins [] Array of admin usernames (e.g. [\"alice\", \"bob\"]) Encryption Key Default Description Encryption:Key (auto-generated) AES key for message encryption in transit Encryption:EncryptDatabase false Also encrypt message content at rest in SQLite Storage Key Default Description Storage:CleanupIntervalHours 1 How often the cleanup job runs (hours) Storage:RetentionDays 30 Days to keep uploaded files before cleanup IRC Gateway Key Default Description Irc:Enabled false Enable the IRC protocol gateway Irc:Port 6667 IRC plain-text listen port Irc:TlsEnabled false Enable TLS termination for IRC Irc:TlsPort 6697 IRC TLS listen port Irc:TlsCertPath (empty) Path to a PKCS#12 (.pfx) certificate Irc:TlsCertPassword (empty) Password for the certificate file Irc:ServerName echohub IRC server name in protocol messages Irc:Motd Welcome to EchoHub IRC Gateway! Message of the day Logging EchoHub uses Serilog for structured logging — console output + daily rolling files with 14-day retention by default. Key Default Description Serilog:MinimumLevel:Default Information Global log level (Debug, Information, Warning, Error) Serilog:MinimumLevel:Override:Microsoft Warning Suppress noisy framework logs Serilog:MinimumLevel:Override:Microsoft.AspNetCore Warning Suppress request pipeline logs Serilog:MinimumLevel:Override:Microsoft.EntityFrameworkCore Warning Suppress database query logs Log files are written to logs/echohub-server-YYYY-MM-DD.log. To change the path or retention, edit the Serilog:WriteTo section in appsettings.json. Want more verbose output for debugging? Set the minimum level to Debug: # via environment variable export Serilog__MinimumLevel__Default=Debug # or command line ./EchoHub.Server --Serilog:MinimumLevel:Default=Debug"
|
||
},
|
||
"articles/docker.html": {
|
||
"href": "articles/docker.html",
|
||
"title": "Docker | EchoHub Documentation",
|
||
"summary": "Docker Quick Start cp .env.example .env # create your config docker compose up -d # start the server On first run the server automatically generates JWT and encryption keys, creates the database, and seeds a #general channel. Connect with the EchoHub client to http://localhost:5000. Using a Pre-built Image Instead of building locally, you can pull from GHCR. In docker-compose.yml, replace the build block: services: echohub-server: image: ghcr.io/huebyte/echohub-server:latest # build: # context: ./src # dockerfile: EchoHub.Server/Dockerfile Configuration All settings are configured through the .env file. These are environment variables that override appsettings.json — the __ (double underscore) maps to JSON nesting levels. For example, Server__Name overrides the Server:Name key in appsettings.json. See the Configuration guide for the full reference of all available settings and how the override hierarchy works. Common Docker-relevant variables: Variable Default Description Server__Name My EchoHub Server Display name for your server Server__Admins__0 (empty) Admin username (use __1, __2 for more) Irc__Enabled false Enable the IRC gateway Serilog__MinimumLevel__Default Information Log level (Debug, Warning, etc.) Persistent Data All server state lives in a single Docker volume mounted at /app/data: /app/data/ ├── appsettings.json # generated config with JWT/encryption keys ├── echohub.db # SQLite database ├── uploads/ # uploaded files and avatars └── logs/ # rolling log files (14-day retention) Backup # stop the server to ensure a consistent snapshot docker compose stop # copy the data volume to a local directory docker cp echohub-server:/app/data ./backup docker compose start IRC Gateway To enable IRC, set these in your .env: Irc__Enabled=true Then uncomment the port in docker-compose.yml: ports: - \"5000:5000\" - \"6697:6697\" # IRC (TLS encrypted, preferred) For TLS, also set: Irc__TlsEnabled=true Irc__TlsCertPath=/app/data/cert.pfx Irc__TlsCertPassword=your_password Mount your certificate into the data volume or bind-mount it directly. IRC users must have an existing EchoHub account. See Getting Started for client connection examples. Updating # if using pre-built images docker compose pull docker compose up -d # if building locally docker compose build docker compose up -d Data persists across updates since it lives in the named volume. Troubleshooting Port already in use -- Another process is using port 5000. Change the host port in docker-compose.yml: ports: - \"8080:5000\" # access via http://localhost:8080 Permission denied on volume -- The container runs as a non-root echohub user (UID 999). If using bind mounts instead of named volumes, ensure the directory is writable. View logs -- Check the container output: docker compose logs -f echohub-server File-based logs are also available inside the volume at /app/data/logs/."
|
||
},
|
||
"articles/encryption.html": {
|
||
"href": "articles/encryption.html",
|
||
"title": "Message Encryption | EchoHub Documentation",
|
||
"summary": "Message Encryption EchoHub uses application-layer AES-256-GCM encryption to protect message content in transit between clients and the server. This is an additional layer on top of TLS, protecting against ISPs, proxies, and any middleman that can inspect HTTPS traffic (e.g. corporate proxies with trusted root CA certificates). How It Works sequenceDiagram participant Sender as TUI Client (Sender) participant Server participant Receiver as TUI Client (Receiver) participant IRC as IRC Client Sender->>Sender: encrypt(plaintext) Sender->>Server: $ENC$v1$... (SignalR) Server->>Server: decrypt → validate/sanitize Server->>Server: fetch embeds on plaintext Server->>Server: (optional) encrypt for DB storage Server->>Server: encrypt(plaintext) with fresh nonce Server->>Receiver: $ENC$v1$... (SignalR broadcast) Receiver->>Receiver: decrypt → display Server->>Server: decrypt for IRC Server->>IRC: plaintext (IRC PRIVMSG) Client encrypts the message before sending it over SignalR Server decrypts to validate content, sanitize newlines, and fetch link embeds Server re-encrypts with a fresh nonce and broadcasts to all connected SignalR clients Clients decrypt the broadcast and display the plaintext IRC clients receive plaintext automatically (the IRC broadcaster decrypts before forwarding) Each encryption uses a random 12-byte nonce, so the same message produces different ciphertext every time. Encryption Key A 256-bit AES key is auto-generated on first server startup and saved to appsettings.json: { \"Encryption\": { \"Key\": \"base64-encoded-32-byte-key\", \"EncryptDatabase\": false } } The key is generated by FirstRunSetup using RandomNumberGenerator.GetBytes(32). If the key is missing or empty when the server starts, a new one is created automatically. Clients fetch the key after login via an authenticated endpoint (GET /api/server/encryption-key). No manual configuration is needed on the client side. Encrypted Content Format Encrypted content uses a self-describing format: $ENC$v1${nonce_base64}${ciphertext+tag_base64} $ENC$v1$ — version prefix (allows future algorithm changes) Nonce — 12 bytes, Base64-encoded, randomly generated per message Ciphertext + Tag — AES-256-GCM output with 16-byte authentication tag appended The authentication tag ensures both confidentiality and integrity — any tampering with the ciphertext is detected during decryption. Database Encryption (Optional) By default, messages are stored as plaintext in the database. Transport encryption still protects everything on the wire, but the SQLite file itself contains readable messages. To encrypt messages at rest, enable the setting: { \"Encryption\": { \"Key\": \"...\", \"EncryptDatabase\": true } } Behavior by Setting Setting DB Storage Transport Key Rotation Risk false (default) Plaintext Encrypted None - stored data is unaffected true Encrypted Encrypted Changing the key makes old messages unreadable Mixed Content The server handles mixed encrypted/plaintext content in the database gracefully. When reading messages: Content starting with $ENC$v1$ is decrypted Everything else is treated as plaintext This means you can safely toggle EncryptDatabase at any time. Old messages remain readable regardless of the current setting. Enabling Encryption at Rest When you set EncryptDatabase: true, only new messages are encrypted going forward. Existing plaintext messages in the database are not retroactively encrypted. This is intentional — it keeps key rotation safe and avoids irreversible bulk changes. Key Rotation Changing the encryption key is safe: Plaintext messages — always readable regardless of key Messages encrypted with the old key — will show [encrypted message — decryption failed] New messages — encrypted with the new key going forward If you need to recover old encrypted messages, restore the original key from a backup of appsettings.json. Since plaintext messages are never retroactively encrypted, you'll never lose access to your entire history from a key change. Security Considerations What This Protects Against Passive network sniffing — messages are encrypted even if captured off the wire ISP/proxy inspection — content is encrypted at the application layer, independent of TLS Database theft (when EncryptDatabase: true) — SQLite file contains only ciphertext Limitations TLS-inspecting proxies — if a corporate proxy terminates TLS with a trusted root CA, it can intercept the key exchange (GET /api/server/encryption-key) and read all traffic. A future upgrade to ECDH key exchange would address this. Server has full access — the server decrypts all messages for processing. This is not end-to-end encryption between users; it's transport encryption between client and server. IRC clients receive plaintext — IRC is an open protocol and third-party clients cannot participate in the encryption scheme. Troubleshooting Messages show [encrypted message — decryption failed, try re-logging to fetch the latest key] The client's encryption key doesn't match the server's. This happens when: The server's encryption key was rotated while the client was connected The client cached a stale key Fix: Disconnect and reconnect (re-login). The client fetches the current key on each login. Messages show [encrypted message — decryption failed] in channel history The server cannot decrypt messages stored in the database. This happens when: EncryptDatabase was enabled, and the key was changed afterwards Fix: Restore the original key from a backup. There is no way to recover messages encrypted with a lost key."
|
||
},
|
||
"articles/getting-started.html": {
|
||
"href": "articles/getting-started.html",
|
||
"title": "Getting Started | EchoHub Documentation",
|
||
"summary": "Getting Started Install the Client Windows (Chocolatey) choco install echohub Linux / macOS curl -sSfL https://raw.githubusercontent.com/HueByte/EchoHub/master/scripts/install.sh | sh To install a specific version or to a custom directory: curl -sSfL .../install.sh | sh -s -- --version 0.2.10 curl -sSfL .../install.sh | sh -s -- --install-dir /opt/echohub Manual Download Grab a self-contained binary from Releases -- no runtime needed. Host a Server Docker The quickest way to host a server: cp .env.example .env docker compose up -d See the Docker guide for configuration, pre-built images, and more. From Source dotnet run --project src/EchoHub.Server Requires .NET 10 SDK. On first run, the server automatically: Creates appsettings.json from the example config Generates a secure JWT secret Creates the SQLite database with a #general channel Usage After installing the client, run echohub (or dotnet run --project src/EchoHub.Client from source). Connect to a server, register an account, and start chatting. Connect via IRC Enable the IRC gateway in the server's appsettings.json: { \"Irc\": { \"Enabled\": true, \"Port\": 6667 } } Then connect with any standard IRC client: irssi -c localhost -p 6667 -w <password> -n <username> IRC users must have an existing EchoHub account. Authentication works via PASS/NICK/USER or SASL PLAIN. Messages flow bidirectionally between IRC and TUI clients. For TLS, set TlsEnabled: true, TlsPort: 6697, and provide a PKCS#12 certificate path. See the Architecture page for details on how the IRC gateway integrates with the chat service. Configuration Server configuration is in appsettings.json (auto-generated on first run). You can also use environment variables or command-line arguments to override settings. See the Configuration guide for the full reference and how it all works. Build from Source dotnet build src/EchoHub.slnx"
|
||
},
|
||
"articles/notification-sounds.html": {
|
||
"href": "articles/notification-sounds.html",
|
||
"title": "Notification Sounds | EchoHub Documentation",
|
||
"summary": "Notification Sounds EchoHub can play a notification sound when someone @mentions you. This is disabled by default and must be enabled in your profile settings. Enabling Notifications Open your profile (/profile) and check the \"Notification sound on @mention\" checkbox, then save. You can also adjust the Volume (0-100, default 30). All settings are persisted in ~/.echohub/config.json. Customizing the Sound The client ships with a default Notification.mp3 in the Assets folder. To use your own notification sound, replace the file at: <app-directory>/Assets/Notification.mp3 The file must be a valid .mp3 or .wav audio file. The replacement takes effect on the next app launch. Alternatively, set a custom path in ~/.echohub/config.json: { \"notifications\": { \"enabled\": true, \"volume\": 30, \"soundFile\": \"/path/to/your/sound.mp3\" } } When soundFile is set, EchoHub uses that file instead of the bundled default. Disabling Notifications Uncheck the option in your profile, or edit the config directly: { \"notifications\": { \"enabled\": false } }"
|
||
},
|
||
"changelog/index.html": {
|
||
"href": "changelog/index.html",
|
||
"title": "Changelog | EchoHub Documentation",
|
||
"summary": "Changelog Release history for EchoHub. Releases v0.2.10 - Command Palette, Infinite History Scroll & Auto-Updater Fixes v0.2.9 - Install Script & Chocolatey Fixes v0.2.8 - Docker Support, IRC Account Creation & BOM Fix v0.2.7 - User List Fix & Terminal.Gui NuGet Migration v0.2.6 - Major Refactoring & Code Organization v0.2.5 - Session Persistence, Auto-Updates, Audio & Transparent Theme v0.2.4 - E2E Message Encryption v0.2.3 - Moderation, Embeds & UI Overhaul v0.2.2 - Startup & Shutdown Fixes v0.2.1 - Shutdown & CI Fixes v0.2.0 - IRC Gateway v0.1.1 - Directory Connection Self-Healing v0.1.0 - Initial Release"
|
||
},
|
||
"changelog/v0.1.0.html": {
|
||
"href": "changelog/v0.1.0.html",
|
||
"title": "v0.1.0 - Initial Release | EchoHub Documentation",
|
||
"summary": "v0.1.0 - Initial Release Features Real-time messaging via SignalR JWT authentication with access and refresh tokens Channel management (create, set topic, delete) File and image uploads with magic-byte validation Image-to-ASCII conversion for terminal display Presence tracking (online, away, DND, invisible) 6 built-in TUI themes Rate limiting on auth, upload, and general endpoints Self-contained binary releases for Windows, Linux, and macOS"
|
||
},
|
||
"changelog/v0.1.1.html": {
|
||
"href": "changelog/v0.1.1.html",
|
||
"title": "v0.1.1 - Directory Connection Self-Healing | EchoHub Documentation",
|
||
"summary": "v0.1.1 - Directory Connection Self-Healing Fixes Server now reconnects to the EchoHubSpace directory indefinitely when the API goes down, using exponential backoff (2s → 30s cap) If automatic reconnect is exhausted, the connection is rebuilt from scratch automatically Initial connection attempts also use exponential backoff instead of a fixed 30s delay"
|
||
},
|
||
"changelog/v0.2.0.html": {
|
||
"href": "changelog/v0.2.0.html",
|
||
"title": "v0.2.0 - IRC Gateway | EchoHub Documentation",
|
||
"summary": "v0.2.0 - IRC Gateway Features IRC protocol gateway -- native IRC clients (irssi, WeeChat, HexChat, etc.) can connect to EchoHub servers Cross-protocol messaging -- messages flow bidirectionally between IRC and TUI clients in real time SASL PLAIN authentication -- IRC clients can authenticate via SASL or traditional PASS/NICK/USER Full IRC command support -- JOIN, PART, PRIVMSG, QUIT, NAMES, TOPIC, WHO, WHOIS, AWAY, LIST, MODE, MOTD TLS support -- optional encrypted IRC connections on port 6697 Image-to-IRC formatting -- images appear as ASCII art line-by-line with download URLs Message splitting -- long messages automatically split at word boundaries (~400 byte chunks) Configurable MOTD -- server message of the day for IRC clients Architecture Changes Extracted shared business logic from ChatHub into protocol-agnostic IChatService Introduced IChatBroadcaster pattern for multi-protocol event fan-out ChatHub refactored to thin adapter delegating to IChatService ChannelsController updated to use IChatService for broadcasts New EchoHub.Server.Irc project for clean separation of concerns IChatService and IChatBroadcaster interfaces live in EchoHub.Core/Contracts"
|
||
},
|
||
"changelog/v0.2.1.html": {
|
||
"href": "changelog/v0.2.1.html",
|
||
"title": "v0.2.1 - Shutdown & CI Fixes | EchoHub Documentation",
|
||
"summary": "v0.2.1 - Shutdown & CI Fixes Fixes Fixed server hanging on Ctrl+C when the directory server is unreachable — StopAsync now cancels background services before disposing connections Fixed IRC gateway shutdown blocking indefinitely on unresponsive clients — send operations are now bounded to 2 seconds Fixed CI release workflow not having full git history for building release notes (fetch-depth: 0) Fixed workflow_dispatch trigger breaking change detection when github.event.before is empty Improvements GitHub releases now include a commit list and version diff link instead of generic auto-generated notes GitHub releases link to the full changelog on the docs site"
|
||
},
|
||
"changelog/v0.2.10.html": {
|
||
"href": "changelog/v0.2.10.html",
|
||
"title": "v0.2.10 | EchoHub Documentation",
|
||
"summary": "v0.2.10 Follow-up patch release for v0.2.9 addressing auto-updater regressions, adding a command palette, infinite-scroll message history, and input polish. New Features Command palette — press Ctrl+K from the message input (or anywhere in the main window) to open a searchable dialog for navigating channels and triggering app actions (connect, disconnect, logout, profile, status, create/delete channel, saved servers, toggle users panel, check for updates, quit). Fuzzy matches against both the label and the underlying key so typing ch surfaces channel actions alongside #channel entries Scroll-to-load message history — scrolling to the top of a channel now fetches the next batch of older messages in the background (previously only the most recent 100 messages were available). Duplicate messages are filtered by ID, a per-channel guard prevents concurrent fetches, and the scroll position is preserved after the prepend so your reading position doesn't jump Bug Fixes Fix update progress dialog freezing / not repainting — progress callbacks now run on the UI thread so the download and extraction percentage actually updates while an update is in progress Fix pre-update backup failing when a Serilog-held log file is locked — UpdateBackupService now enumerates files manually, skips the logs/ directory and .log files, and logs-and-continues on IOException/UnauthorizedAccessException instead of aborting the whole backup Simplify update progress dispatch — remove redundant Application.Invoke wrappers around progress updates that are already called from the UI thread (introduced while fixing the freeze above) Fix cursor position being reset to the start of the line when auto-completing commands in the CLI app — insertion point is now moved to the end of the completed text Fix notification sounds crashing or being silently dropped when several arrive in quick succession — playback is now serialized through a semaphore that's held for the duration of each sound (using PlaybackFinished with a 10s safety timeout) and always released in finally, so back-to-back notifications queue up and play in order instead of racing the underlying audio player (fixes #20) Refactoring Move search-dialog dispatch out of MainWindow into AppOrchestrator — MainWindow now just raises OnSearchRequested, keeping the view dumb and letting the orchestrator own navigation/action routing ChatHub.GetChannelHistory and IChatService.GetChannelHistoryAsync gain an additional offset parameter for paginated history loading (defaults to 0 — existing callers are unaffected) ValidationConstants.MaxHistoryCount raised from 100 to 200 so power users and paginated fetches can request larger batches; DefaultHistoryCount stays at 100"
|
||
},
|
||
"changelog/v0.2.2.html": {
|
||
"href": "changelog/v0.2.2.html",
|
||
"title": "v0.2.2 - Startup & Shutdown Fixes | EchoHub Documentation",
|
||
"summary": "v0.2.2 - Startup & Shutdown Fixes Fixes Fixed server hanging on startup when IRC gateway is enabled — circular DI dependency between IrcGatewayService → IChatService → IChatBroadcaster → IrcBroadcaster caused the DI container to deadlock Fixed SignalRBroadcaster eagerly resolving IHubContext<ChatHub> during DI construction, which could deadlock on some platforms — now lazy-resolves via IServiceProvider on first use Simplified IRC service registration to use standard AddSingleton<IChatBroadcaster, IrcBroadcaster> instead of manual factory, breaking the circular resolution chain Fixed server hanging on Ctrl+C — replaced await using with explicit dispose bounded to 3 seconds, so a stuck HubConnection can no longer block shutdown Reduced host shutdown timeout from 30s (default) to 5s Caught OperationCanceledException in the directory service reconnect loop so cancellation exits immediately instead of propagating through dispose Refactoring Replaced primary constructors with standard constructor injection across all server classes for consistency"
|
||
},
|
||
"changelog/v0.2.3.html": {
|
||
"href": "changelog/v0.2.3.html",
|
||
"title": "v0.2.3 - Moderation, Embeds & UI Overhaul | EchoHub Documentation",
|
||
"summary": "v0.2.3 - Moderation, Embeds & UI Overhaul Features Moderation System Added server roles: Owner, Admin, Mod, Member — first registered user is automatically Owner New /kick, /ban, /unban, /mute, /unmute, /role, /nuke commands for moderators and admins ModerationController with full REST API for role assignment, kicks, bans, mutes, message deletion, and channel nuking Mutes support optional duration (auto-expire) and blocked users cannot log in Role claim included in JWT tokens; role badges shown in the online users panel Kicked and banned users are forcibly disconnected in real time — server cleans up presence, broadcasts departures, and signals client disconnect Works for both SignalR and IRC connections; client shows an error dialog with the reason Private Channels Channels can be created as public or private via a checkbox in the Create Channel dialog Public channels are visible to all users; private channels only appear for members who joined them Persistent channel membership tracked in the database (ChannelMembership table) GET /api/channels returns the combined list: public channels + user's joined private channels Channel creators are automatically added as members OpenGraph Link Embeds Messages containing URLs now show a rich preview below the message text Multiple URLs per message supported (up to 3) — each gets its own embed Server-side fetching: detects URLs in a message, fetches each page, and parses OpenGraph meta tags (og:title, og:description, og:site_name) Embeds are persisted in the database as a JSON array and included in channel history TUI client renders embeds with a ▏ left border bar — site name and border in blue, title in white, description in gray; text word-wraps at actual viewport width IRC gateway receives a text-only embed preview (site name, title, description) Falls back to <title> tag when no OG tags are present; gracefully skips if no useful metadata is found 5-second fetch timeout ensures message delivery is never significantly delayed SSRF protection rejects private/loopback IP addresses before fetching Notification Sounds Incoming messages play a notification sound when the terminal is not focused Embedded MP3 asset with cross-platform playback support Online Users Panel Collapsible right-side panel showing online users in the current channel (toggle with F2) Users displayed with status indicators, role badges, and their custom nickname colors Panel updates on join, leave, and status change events @mention Highlighting @username text rendered in orange accent color in all messages Messages mentioning the current user get a full-line amber background highlight Works across multi-line messages and continuation lines ASCII Art Improvements Half-block character rendering (▀/█) with separate foreground + background colors for 2x vertical resolution Switched from ANSI escape codes to printable color tags ({F:RRGGBB}, {B:RRGGBB}, {X}) — no control bytes in stored content Optional size parameter for /send command: -s (40x40), -m (80x80, default), -l (120x120) IRC gateway converts color tags back to ANSI for IRC client compatibility Client UI Version number shown in the status bar Custom colored rendering for channel list (active indicator, unread count badges) Avatar upload field added to the profile edit dialog (file path or URL) Profile avatar now renders with full color tag support in the profile view dialog Update check notification on connect — shows a system message if a newer GitHub release exists Chat messages no longer show selection/focus highlight Exit shortcut changed from Ctrl+C to Alt+Q — frees Ctrl+C for copy Default history increased from 50 to 100 messages on channel join Fixes Fixed #general channel not visible after adding the IsPublic column — migration default changed to true and startup service ensures it Fixed channels disappearing when creating a new channel — replaced full re-fetch with incremental updates Wired OnChannelUpdated SignalR event so new public channels appear for all connected users in real time Fixed color tag parser using wrong regex group numbers (6,7,8 instead of 1,2,3) — new ASCII art was rendering without colors Full Unicode/emoji support — renderers use Terminal.Gui v2 grapheme cluster API (GraphemeHelper, AddStr) for proper wide character handling Emoji-to-text shortcode conversion for consistent cross-platform rendering Fixed /send and /avatar commands not handling file paths with spaces correctly, even when quoted Server-side newline spam protection — consecutive blank/whitespace-only lines collapsed to 1 and total lines capped at 30 Fixed OG tag regex truncating descriptions containing apostrophes (e.g. \"HueByte's portfolio\" was cut to \"HueByte\") — switched to backreference-based quote pairing Infrastructure New LinkEmbedService on the server — URL detection, HTML fetching (first 64KB), OG tag parsing via compiled regex EmbedDto record added to shared Core DTOs; MessageDto.Embeds list for multiple embeds per message EmbedJson nullable column on the Message table stores serialized embed data as JSON array (max 8KB); DataMigrationService auto-migrates old single-object format Dedicated \"OgFetch\" named HttpClient with bot User-Agent header and 5-second timeout PresenceTracker.ForceRemoveUser() for atomic user cleanup on kick/ban IChatBroadcaster.ForceDisconnectUserAsync() and IEchoHubClient.ForceDisconnect for force-disconnect signaling NotificationSoundService for cross-platform audio playback of embedded notification sounds Startup DataMigrationService automatically converts old ANSI-format messages to the new color tag format on server boot, logging the count of migrated records EmojiHelper utility for emoji-to-shortcode conversion Heartbeat handling in ServerDirectoryService for connection health checks Four new EF Core migrations: AddModerationRoles, AddChannelIsPublic, AddChannelMembership, AddMessageEmbed ChannelMembership table with cascade delete on both channel and user removal"
|
||
},
|
||
"changelog/v0.2.4.html": {
|
||
"href": "changelog/v0.2.4.html",
|
||
"title": "v0.2.4 - E2E Message Encryption | EchoHub Documentation",
|
||
"summary": "v0.2.4 - E2E Message Encryption Features E2E Message Encryption Application-layer AES-256-GCM encryption for all message content between client and server Protects against ISPs, proxies, and any middleman reading chat messages — even if TLS is compromised 256-bit encryption key auto-generated on first server startup and saved to appsettings.json Client fetches the encryption key automatically after login via GET /api/server/encryption-key Client encrypts messages before sending via SignalR; server decrypts for validation and processing Server broadcasts encrypted content to SignalR clients; client decrypts transparently — no user action required Optional database encryption at rest via Encryption:EncryptDatabase setting (disabled by default) When enabled: new messages encrypted before DB storage (existing plaintext messages are not retroactively encrypted) When disabled: messages stored as plaintext, no risk of data loss from key rotation Reads handle mixed content (encrypted + plaintext) regardless of setting — safe to toggle at any time Key rotation is safe: old plaintext stays readable, new messages use the new key IRC gateway automatically decrypts messages before forwarding to IRC clients (plaintext over IRC) Encrypted content format: $ENC$v1${nonce}${ciphertext+tag} (Base64, 12-byte nonce, 16-byte auth tag) Server strips $ENC$ prefix from user-typed messages to prevent format spoofing Graceful fallback: if decryption fails, shows [encrypted message — decryption failed, try re-logging to fetch the latest key] Infrastructure IMessageEncryptionService interface in Core; MessageEncryptionService server implementation and ClientEncryptionService client implementation EncryptionKeyResponse DTO and GET /api/server/encryption-key endpoint (authenticated, rate-limited) FirstRunSetup.EnsureEncryptionKey() auto-generates AES-256 key on first server run Encryption:EncryptDatabase server setting (default false) controls whether messages are encrypted at rest DB column max lengths increased for encrypted content: Message.Content 2000 → 16000, Message.EmbedJson 8000 → 32000 EF Core migration: AddEncryptionSupport Encryption test suite: server-side, client-side, and cross-compatibility tests Documentation article: docs/articles/encryption.md"
|
||
},
|
||
"changelog/v0.2.5.html": {
|
||
"href": "changelog/v0.2.5.html",
|
||
"title": "v0.2.5 - Session Persistence, Auto-Updates, Audio & Transparent Theme | EchoHub Documentation",
|
||
"summary": "v0.2.5 - Session Persistence, Auto-Updates, Audio & Transparent Theme Features Audio Message Support New Audio message type — uploaded audio files (.mp3, .wav, .ogg, .flac, .aac, .m4a, .wma) are automatically detected and categorized TUI client renders audio messages with ♪ [Audio: filename] (Enter to play) indicator Press Enter on an audio message to open the Audio Player dialog with animated wave visualization, play/pause/stop controls, and volume slider Per-type upload limits: 10 MB images, 10 MB audio, 100 MB generic files (with Kestrel request size configured to match) AudioPlaybackService enhanced with pause/resume, volume control, and playback-finished events Fixed: wrapped audio/file messages now remain clickable on all lines (attachment metadata propagated through word-wrap) IRC gateway formats audio messages as ♪ [Audio: filename] url Server detects audio files by extension via FileValidationHelper.IsAudioFile() File Downloads Press Enter on a file message in the TUI client to download and open it with the system default application ApiClient.DownloadFileAsync() streams file downloads from the server File and audio messages in the chat list now show colored indicators with interaction hints File Cleanup Service FileCleanupService (BackgroundService) periodically removes old uploaded files Configurable via Storage:CleanupIntervalHours (default 1h) and Storage:RetentionDays (default 30d) Data Migration Service DataMigrationService runs at startup to handle schema/data evolution Ensures #general channel and pre-existing channels are marked public Migrates legacy ANSI escape codes in image messages to printable color tags ({F:RRGGBB}, {B:RRGGBB}, {X}) Migrates legacy single-object EmbedJson to array format Promotes usernames listed in Server:Admins config to Admin role True Transparent Background Transparent theme now uses the terminal's native background instead of solid black Powered by Color.None (alpha=0) which emits ANSI CSI 49m (default background) instead of explicit RGB Terminal transparency, acrylic, wallpaper effects now show through the TUI Dialogs retain solid DarkGray background for readability Uses local Terminal.Gui fork (submodule) with transparent color support pending upstream merge (gui-cs/Terminal.Gui#4234) Enhanced Status Bar Status bar now shows EchoHub branding at the start Connection state is color-coded: green (Connected), red (Disconnected), yellow (transitional states like Connecting, Reconnecting, Authenticating) Current channel shows its type: #channel - public or #channel - private Remember Me (Session Persistence) \"Remember me\" checkbox in the connect dialog — saves a 30-day refresh token so users can reconnect without entering their password Saved servers with active sessions show [session] indicator in the connect dialog and saved servers list Token-based login: selecting a saved server with a session lets you click Login with an empty password Graceful expiry handling: if the saved session is expired or revoked, shows an error and prompts for password Refresh token rotation: rotated tokens are automatically persisted to config so the session stays valid across refreshes New \"Logout\" menu item (Server menu): revokes the refresh token server-side and clears the saved session Removed dead SavedServer.Token field (stored 15-min access token that was never read back) Automatic Update Checking UpdateChecker rewritten to use the AlwaysUpToDate library for self-updating Polls the EchoHub version manifest hourly (active only in RELEASE builds) UpdateConfirmDialog shows current vs. available version with Update/Cancel buttons UpdateProgressDialog displays real-time download progress bar Errors are logged via Serilog instead of being silently swallowed Windows Installer New Inno Setup script (installer/Installer.iss) to build a Windows installer Auto-reads product version from the built EXE User-level install by default (no admin required), with admin override option Creates desktop and quick-launch shortcuts (optional) Supports English and German languages Application Icons New hue_icon branding assets (ICO, PNG, SVG) in assets/ Application icon set on both Client and Server projects #general Channel Protection #general channel is now auto-recreated if somehow missing (both in GetChannels endpoint and JoinChannel flow) Users cannot /leave the #general channel (client-side guard) Connecting while already connected now prompts to disconnect first instead of silently leaking the previous connection Fixes IRC Gateway Fixed: IRC JOIN history replay showed encrypted gibberish — IrcCommandHandler.HandleJoinAsync now decrypts channel history before formatting for IRC clients (history was encrypted for SignalR transport but sent raw to IRC) Fixed: JoinedChannels race condition — IrcClientConnection.JoinedChannels replaced with thread-safe methods (JoinChannel, LeaveChannel, IsInChannel, GetJoinedChannels) using lock synchronization; prevents crashes when broadcaster threads read while the command handler writes Fixed: RequireRegistered fire-and-forget — converted from sync bool to async Task<bool> (RequireRegisteredAsync) so the error reply is properly awaited before the handler returns ChannelService Extraction Extracted channel management logic from ChannelsController and ChatService into a dedicated IChannelService / ChannelService ChannelsController is now a thin adapter — delegates CRUD operations to IChannelService and maps ChannelError to HTTP status codes ChatService.JoinChannelAsync delegates channel validation + membership to IChannelService.EnsureChannelMembershipAsync() New ChannelOperationResult result type with ChannelError enum for typed error handling across service boundaries IRC gateway uses IChannelService for topic queries and channel listing (instead of IChatService) EchoHub Branding Status bar \"EchoHub\" text now uses golden color (218, 165, 32) Extracted ChatMessageManager from MainWindow — message storage, formatting, and mutation logic now in a dedicated class, reducing MainWindow complexity Infrastructure Audio MIME types in FilesController (mp3, wav, ogg, flac, aac, m4a, wma) CI workflows updated to handle Terminal.Gui submodule nuget.config workaround (rm -f step) Root nuget.config added for package source management Terminal.Gui formatting excluded from CI format checks Recursive submodule fetching enabled in CI workflows Release workflow: use --notes-file instead of inline --notes interpolation to prevent shell expansion of special characters in commit messages Server:Admins config array in appsettings.example.json for designating admin usernames Storage:CleanupIntervalHours and Storage:RetentionDays added to appsettings.example.json FakeChannelService test helper added for IRC unit tests Test suites: ChatLine, CommandHandler, DataMigrationService, FileValidationHelper, ImageToAsciiService, IrcMessageFormatter, JwtTokenService, LinkEmbedService IRC abstraction layer test suite: IrcMessage parsing, IrcMessageFormatter, IrcClientConnection, IrcCommandHandler, IrcBroadcaster Test helpers: TestDuplexStream, TestIrcConnectionFactory, FakeChatService, FakeChannelService, FakeEncryptionService for IRC unit testing without network I/O 346 total tests"
|
||
},
|
||
"changelog/v0.2.6.html": {
|
||
"href": "changelog/v0.2.6.html",
|
||
"title": "v0.2.6 | EchoHub Documentation",
|
||
"summary": "v0.2.6 Refactoring Extracted ChatMessageManager from MainWindow — message storage, formatting, and mutation logic now in a dedicated class, reducing MainWindow complexity Split ChatRenderer.cs (8 classes, 548 lines) into 7 individual files: ChatSegment, ChatLine, ChatListSource, ChannelListSource, UserListSource, ChatColors, ColorHelper, RenderHelpers Extracted ConnectionManager from AppOrchestrator — connection lifecycle, authentication, SignalR event wiring, and channel tracking now in a dedicated service Extracted AvatarHelper — deduplicated avatar upload logic previously duplicated in /avatar command and profile edit dialog Consolidated ProfileEditDialog.ParseHexToTrueColor into shared ColorHelper.ParseHexToColor Extracted UserSession — session state (Username, Status, StatusMessage) now in a dedicated class instead of scattered fields Replaced 21 inline command handler lambdas with named HandleCmd* methods for improved readability Extracted shared CleanupConnectionAsync to deduplicate disconnect/logout cleanup logic Reorganized flat UI/ folder (19 files) into subfolders: Chat/, Dialogs/, ListSources/, Helpers/ with matching namespaces Moved AsyncRunner from project root to Services/ with updated namespace Renamed ColorHelper → HexColorHelper to avoid namespace collision with Terminal.Gui's ColorHelper NuGet dependency Moved hue_icon.ico to Client/Assets/, removed duplicate from Server (Server now references shared icon via relative path) Add hex color parsing helper and implement custom list sources for channels and users Add dialogs for connection, channel creation, profile editing, and status management Infrastructure Release workflow: use --notes-file instead of inline --notes interpolation to prevent shell expansion of special characters in commit messages"
|
||
},
|
||
"changelog/v0.2.7.html": {
|
||
"href": "changelog/v0.2.7.html",
|
||
"title": "v0.2.7 | EchoHub Documentation",
|
||
"summary": "v0.2.7 Bug Fixes Fix user list empty on initial connect — FetchAndUpdateOnlineUsers was called before InvokeUI set the current channel, causing an early return Infrastructure Switch Terminal.Gui from local fork submodule back to NuGet package (2.0.0-develop.5039) — transparent color PR merged upstream Remove Terminal.Gui submodule, .gitmodules, and root nuget.config workaround Remove rm -f submodule nuget.config steps and submodules: recursive from all 3 CI workflows (ci, docs, release) Remove --exclude src/Terminal.Gui/ from format check"
|
||
},
|
||
"changelog/v0.2.8.html": {
|
||
"href": "changelog/v0.2.8.html",
|
||
"title": "v0.2.8 | EchoHub Documentation",
|
||
"summary": "v0.2.8 Bug Fixes Fix memory leak — HttpResponseMessage objects never disposed in ApiClient, leaking TCP connections and content buffers on every API call (especially on failed connection attempts) Fix 401 retry leak — AuthenticatedGetAsync/AuthenticatedRequestAsync leaked the original response when retrying after token refresh Fix connection failure cleanup — ConnectionManager.ConnectAsync now properly disposes ApiClient and EchoHubConnection on any failure path (previously only cleaned up on saved-token auth failures) Fix IRC gateway sending UTF-8 BOM on first message, breaking CAP negotiation and SASL auth for all clients Handle AUTHENTICATE * (SASL abort) instead of crashing on invalid base64 Fix userlist not refreshing when creating a new channel — now fetches online users after channel creation Fix unmute timer not working — add MuteExpirationService background job that proactively unmutes users when their timed mute expires (previously only checked on message send) Fix missing space between mod/admin role icon and username in the userlist Fix invisible users still visible in the userlist — GetOnlineUsersAsync now filters invisible users; server skips UserJoined broadcast for invisible users Fix invisible→online transition — user reappears in cached userlist when switching from invisible back to a visible status Fix thread safety — _channelUsers presence cache now protected by Lock to prevent races between SignalR events and background fetches Fix @mention regex matching email addresses and #channel regex matching hex colors / issue numbers — both now use lookbehind and letter-requirement guards Fix ParseThemeColor accepting non-hex characters — now validates [0-9a-fA-F] digits Fix ghost channel when trying to join a channel that doesn't exist New Features Add Docker support for EchoHub.Server — docker compose up -d for easy self-hosting with persistent volume for database, uploads, and logs IRC account creation — connecting with a new username auto-registers the account (PASS and SASL PLAIN) Auto-updater rollback — pre-update backup created automatically before each update; restore via File > Rollback menu or --rollback CLI flag Update failure recovery — if an update fails mid-extraction, offers to restore from the backup immediately Defensive Unix permission check — verify execute permission on startup after auto-update (defense-in-depth) Clickable usernames — press Enter on a username in the userlist or message sender to view their profile Clickable @mentions — press Enter on a message containing @username to open that user's profile Clickable #channels — press Enter on a message containing #channel to join/switch to that channel; #channel references are now highlighted in chat Embed theme colors — embed vertical border line now uses the source site's theme-color meta tag when available Stateful userlist — user presence is cached per channel and updated incrementally via SignalR events instead of re-fetching the full list on every join/leave/status change Security Restrict file auto-open — only safe file types (video, PDF, text) are opened with the system default app; all other files are downloaded to temp without executing (prevents script execution via .bat, .exe, etc.) Refactoring Extract IUserService/UserService — consolidate user registration, authentication, and profile management into a dedicated service, eliminating duplicated logic between AuthController and ChatService IRC gateway now checks ban status during authentication (previously skipped) EchoHubSpace directory updates — server now only sends user count when it actually changes instead of every 30 seconds ChatHub.JoinChannel now returns JoinChannelResult instead of List<MessageDto> to allow for better error handling Distribution Add Chocolatey package — choco install echohub for Windows users, auto-published from CI on each release Add Linux/macOS install script — curl -sSfL .../install.sh | sh with automatic OS/arch detection Documentation Add Flows section — Mermaid sequence diagrams documenting all major request/event flows (auth, connection, messaging, channels, moderation, file upload, link embeds, server directory) with inline code references CI Add Docker workflow — builds and pushes multi-arch (amd64/arm64) server image to GHCR on release Add linux-arm64 builds to release pipeline — server and client binaries for ARM Linux (Raspberry Pi, cloud ARM instances) Automate Chocolatey package publishing in release workflow (checksum calculation, pack, push)"
|
||
},
|
||
"changelog/v0.2.9.html": {
|
||
"href": "changelog/v0.2.9.html",
|
||
"title": "v0.2.9 | EchoHub Documentation",
|
||
"summary": "v0.2.9 Bug Fixes Fix Linux/macOS client install — enable single-file publish so the install script copies one self-contained binary instead of just the native host (which failed with \"does not exist: EchoHub.Client.dll\") Fix Chocolatey install path on Windows — chocolateyInstall.ps1 was joining the install directory and executable name into a single segment, producing an invalid target path Fix Chocolatey package metadata — corrected GitHub repository URLs and documentation URLs in echohub.nuspec that pointed at the wrong location Fix double-click on \"Public\" checkbox in the Create Channel dialog accidentally submitting the dialog — checkbox toggle commands no longer bubble up to the dialog's default button Documentation Add a dedicated configuration guide (docs/articles/configuration.md) covering server settings, client settings, and environment overrides Refresh README badges and reorganize the articles table of contents for better discoverability Polish Docker, getting-started, and flow docs to match the current configuration surface Dependencies Bump Terminal.Gui to 2.0.0-develop.5043 (from 5039) CI Release workflow now publishes a single-file self-contained client binary for Linux and macOS so the install script works out-of-the-box Chocolatey publishing step now triggers only when the package source actually changes and performs a proper version check against the feed before pushing"
|
||
},
|
||
"flows/authentication.html": {
|
||
"href": "flows/authentication.html",
|
||
"title": "Authentication | EchoHub Documentation",
|
||
"summary": "Authentication User Registration A new user creates an account on a server. The client sends credentials via REST, the server hashes the password, issues JWT tokens, and the client stores the refresh token for \"Remember Me\" sessions. sequenceDiagram participant UI as ConnectDialog participant AO as AppOrchestrator participant CM as ConnectionManager participant API as ApiClient participant Auth as AuthController participant US as UserService participant JWT as JwtTokenService participant DB as SQLite UI->>AO: ConnectDialogResult(IsRegister: true) AO->>CM: ConnectAsync(dialogResult) CM->>API: RegisterAsync(username, password) API->>Auth: POST /api/auth/register Auth->>US: RegisterUserAsync(username, password, displayName) US->>US: Validate (regex, length, uniqueness) US->>DB: INSERT User (BCrypt hash) US-->>Auth: UserOperationResult.Success Auth->>JWT: GenerateAccessToken(user) JWT-->>Auth: (token, expiresAt) [15 min] Auth->>JWT: GenerateRefreshToken() JWT-->>Auth: Base64 random (64 bytes) Auth->>DB: INSERT RefreshToken (SHA256 hash) Auth-->>API: LoginResponse API->>API: SetTokens() — store in memory + set Bearer header API-->>CM: LoginResponse CM->>CM: Wire OnTokensRefreshed for config persistence CM->>CM: Continue to connection setup (see Connection Flow) User Login Returning user authenticates with username/password or a saved refresh token. sequenceDiagram participant UI as ConnectDialog participant CM as ConnectionManager participant API as ApiClient participant Auth as AuthController participant US as UserService participant DB as SQLite alt Saved refresh token (Remember Me) UI->>CM: ConnectDialogResult(SavedRefreshToken: \"...\") CM->>API: LoginWithRefreshTokenAsync() API->>Auth: POST /api/auth/refresh Auth->>DB: Lookup token by SHA256 hash Auth->>DB: Revoke old token, issue new pair Auth-->>API: LoginResponse (rotated tokens) else Username + Password UI->>CM: ConnectDialogResult(IsRegister: false) CM->>API: LoginAsync(username, password) API->>Auth: POST /api/auth/login Auth->>US: AuthenticateUserAsync(username, password) US->>DB: Fetch user, BCrypt.Verify(password, hash) US->>DB: Update LastSeenAt US-->>Auth: UserOperationResult.Success Auth-->>API: LoginResponse end API->>API: SetTokens() Token Refresh Access tokens expire after 15 minutes. The client auto-refreshes transparently before requests and on 401 responses. Refresh tokens are rotated on each use. sequenceDiagram participant SR as SignalR / HTTP Request participant API as ApiClient participant Auth as AuthController participant DB as SQLite participant Config as config.json SR->>API: GetValidTokenAsync() or HTTP 401 API->>API: Token expires within 60s? alt Proactive refresh (SignalR token provider) API->>Auth: POST /api/auth/refresh (old refresh token) else Reactive refresh (HTTP 401 retry) API->>Auth: POST /api/auth/refresh (old refresh token) end Auth->>DB: Lookup by SHA256 hash Auth->>DB: Revoke old refresh token Auth->>DB: INSERT new RefreshToken Auth-->>API: LoginResponse (new token pair) API->>API: SetTokens() — update Bearer header API-->>API: Fire OnTokensRefreshed event API-->>Config: Persist new refresh token (if Remember Me) API->>SR: Retry original request with new token"
|
||
},
|
||
"flows/channels.html": {
|
||
"href": "flows/channels.html",
|
||
"title": "Channels | EchoHub Documentation",
|
||
"summary": "Channels Channel Creation Channels are created via the REST API. Public channels are broadcast to all connected clients. sequenceDiagram participant Client as Client (TUI/API) participant CC as ChannelsController participant ChS as ChannelService participant CS as ChatService participant DB as SQLite participant SRB as SignalRBroadcaster participant IRCB as IrcBroadcaster Client->>CC: POST /api/channels {name, topic, isPublic} CC->>ChS: CreateChannelAsync(creatorId, name, topic, isPublic) ChS->>ChS: Normalize name (lowercase, trim) ChS->>ChS: Validate format (2-100 chars, regex) ChS->>DB: Check duplicate ChS->>DB: INSERT Channel + ChannelMembership (creator auto-added) ChS-->>CC: ChannelDto alt Channel is public CC->>CS: BroadcastChannelUpdatedAsync(channel) CS->>SRB: SendChannelUpdatedAsync(channelDto) SRB->>SRB: Notify all SignalR clients CS->>IRCB: SendChannelUpdatedAsync(channelDto) end CC-->>Client: 201 Created (ChannelDto) Channel Deletion Only the channel creator (or admin) can delete a channel. The default channel is protected. sequenceDiagram participant Client as Client participant CC as ChannelsController participant ChS as ChannelService participant DB as SQLite Client->>CC: DELETE /api/channels/{channel} CC->>ChS: DeleteChannelAsync(channelName, callerId) ChS->>ChS: Reject if default channel ChS->>DB: Lookup channel ChS->>ChS: Verify caller is creator or admin ChS->>DB: DELETE Channel (cascade: messages, memberships) ChS-->>CC: Success CC-->>Client: 204 No Content Joining a Channel Both SignalR and IRC clients join channels through ChatService. The presence tracker determines if this is a genuinely new join (vs. a second connection) and broadcasts accordingly. sequenceDiagram participant Client as Client (SignalR or IRC) participant Entry as ChatHub / IrcCommandHandler participant CS as ChatService participant ChS as ChannelService participant PT as PresenceTracker participant DB as SQLite participant SRB as SignalRBroadcaster participant IRCB as IrcBroadcaster Client->>Entry: JoinChannel / JOIN #channel Entry->>CS: JoinChannelAsync(connectionId, userId, username, channel) CS->>ChS: EnsureChannelMembershipAsync(userId, channel) ChS->>DB: INSERT ChannelMembership (if not exists) CS->>PT: JoinChannel(username, channel) PT-->>CS: isNewJoin? alt First connection in this channel CS->>DB: Fetch UserPresenceDto CS->>CS: BroadcastToAllAsync(SendUserJoinedAsync) par CS->>SRB: SendUserJoinedAsync(channel, user, excludeConn) and CS->>IRCB: SendUserJoinedAsync(channel, user) end end CS->>DB: Fetch message history CS-->>Entry: (history, error) Entry-->>Client: History messages Leaving a Channel sequenceDiagram participant Client as Client participant Entry as ChatHub / IrcCommandHandler participant CS as ChatService participant PT as PresenceTracker participant SRB as SignalRBroadcaster participant IRCB as IrcBroadcaster Client->>Entry: LeaveChannel / PART #channel Entry->>CS: LeaveChannelAsync(connectionId, username, channel) CS->>PT: LeaveChannel(username, channel) CS->>CS: BroadcastToAllAsync(SendUserLeftAsync) par CS->>SRB: SendUserLeftAsync(channel, username) and CS->>IRCB: SendUserLeftAsync(channel, username) end"
|
||
},
|
||
"flows/connection.html": {
|
||
"href": "flows/connection.html",
|
||
"title": "Connection | EchoHub Documentation",
|
||
"summary": "Connection SignalR Client Connection After authentication, the TUI client establishes a SignalR WebSocket, registers event handlers, joins the default channel, and loads history. sequenceDiagram participant CM as ConnectionManager participant EHC as EchoHubConnection participant Hub as ChatHub participant CS as ChatService participant PT as PresenceTracker participant DB as SQLite CM->>CM: Fetch encryption key (GET /api/server/encryption-key) CM->>EHC: new EchoHubConnection(apiClient, encryption) EHC->>EHC: Build HubConnection (URL + JWT token provider + auto-reconnect) EHC->>EHC: RegisterHandlers() — wire ReceiveMessage, UserJoined, etc. EHC->>Hub: ConnectAsync() → WebSocket handshake Hub->>CS: UserConnectedAsync(connectionId, userId, username) CS->>PT: UserConnected(connectionId, userId, username) CS->>DB: Update user: Status=Online, LastSeenAt=now CM->>CM: Fetch channel list (GET /api/channels) CM->>EHC: JoinChannelAsync(\"general\") EHC->>Hub: InvokeAsync(\"JoinChannel\", \"general\") Hub->>CS: JoinChannelAsync(connectionId, userId, username, \"general\") CS->>DB: EnsureChannelMembership CS->>PT: JoinChannel(username, \"general\") CS->>CS: BroadcastToAllAsync → UserJoined CS->>DB: Fetch message history Hub-->>EHC: List<MessageDto> (encrypted) EHC-->>CM: Decrypted history IRC Client Connection IRC clients connect via TCP, authenticate with PASS/NICK/USER or SASL PLAIN, and auto-join channels. New usernames are auto-registered. sequenceDiagram participant IRC as IRC Client participant GW as IrcGatewayService participant CH as IrcCommandHandler participant US as UserService participant CS as ChatService participant PT as PresenceTracker IRC->>GW: TCP connect (:6667 or :6697 TLS) GW->>GW: Accept + create IrcClientConnection GW->>CH: new IrcCommandHandler(connection, services) GW->>CH: RunAsync() — start read loop alt SASL PLAIN IRC->>CH: CAP REQ :sasl CH-->>IRC: CAP ACK :sasl IRC->>CH: AUTHENTICATE PLAIN CH-->>IRC: AUTHENTICATE + IRC->>CH: AUTHENTICATE <base64(\\0user\\0pass)> CH->>US: AuthenticateUserAsync(user, pass) alt Auth fails → auto-register CH->>US: RegisterUserAsync(user, pass) end CH-->>IRC: 903 :SASL authentication successful else PASS/NICK/USER IRC->>CH: PASS <password> IRC->>CH: NICK <nickname> IRC->>CH: USER <username> 0 * :<realname> CH->>US: AuthenticateUserAsync(nick, pass) alt Auth fails → auto-register CH->>US: RegisterUserAsync(nick, pass) end end CH->>CS: UserConnectedAsync(irc-{guid}, userId, username) CS->>PT: UserConnected(irc-{guid}, userId, username) CH-->>IRC: 001-004 RPL_WELCOME burst + MOTD Note over IRC,CH: Client is now ready for JOIN/PART/PRIVMSG User Disconnect & Presence When a client disconnects, the presence tracker determines if the user has any remaining connections. If not, status is set to Invisible and all channels are notified. sequenceDiagram participant Client as Client participant Entry as ChatHub / IrcGatewayService participant CS as ChatService participant PT as PresenceTracker participant DB as SQLite participant SRB as SignalRBroadcaster Client->>Entry: Disconnect / TCP close Entry->>CS: UserDisconnectedAsync(connectionId) CS->>PT: Get username + channels (before removal) CS->>PT: UserDisconnected(connectionId) PT->>PT: Remove connection from tracking alt No remaining connections for user CS->>DB: Update user: Status=Invisible, LastSeenAt=now loop For each channel user was in CS->>CS: BroadcastToAllAsync(SendUserStatusChangedAsync) CS->>SRB: Notify channel members end end"
|
||
},
|
||
"flows/flows.html": {
|
||
"href": "flows/flows.html",
|
||
"title": "Flows | EchoHub Documentation",
|
||
"summary": "Flows This section documents the major request/event flows in EchoHub, showing how data moves between the TUI client, IRC client, server, and database. Each diagram includes code references so you can jump straight to the implementation."
|
||
},
|
||
"flows/media.html": {
|
||
"href": "flows/media.html",
|
||
"title": "Media & Services | EchoHub Documentation",
|
||
"summary": "Media & Services File Upload Files are uploaded via REST, validated by magic bytes, stored with GUID filenames, and broadcast as a message with a download link. sequenceDiagram participant Client as Client participant CC as ChannelsController participant FV as FileValidationHelper participant FS as FileStorageService participant CS as ChatService participant DB as SQLite Client->>CC: POST /api/channels/{channel}/upload (multipart) CC->>CC: Check file size limits CC->>FV: IsValidImage(stream) — magic byte check FV->>FV: Read header: JPEG(FFD8FF) / PNG(89504E47) / GIF / WebP(RIFF+WEBP) FV-->>CC: true/false CC->>FS: SaveFileAsync(stream, extension) FS->>FS: Generate GUID filename, write to uploads/ FS-->>CC: fileId (GUID) CC->>CC: Determine MessageType (Image/Audio/File) CC->>CS: SendMessageAsync (with file URL + optional ASCII art) CS->>DB: INSERT Message CS->>CS: BroadcastToAllAsync → fan out to clients Link Embed Resolution When a message contains URLs, the server fetches OpenGraph metadata for preview embeds. sequenceDiagram participant CS as ChatService participant LE as LinkEmbedService participant Web as External Website CS->>LE: TryGetEmbedsAsync(messageContent) LE->>LE: Extract URLs via regex LE->>LE: Filter: max URLs per message, skip duplicates loop For each URL LE->>LE: Validate: http(s) only, block private IPs LE->>Web: GET URL (timeout + size limit) Web-->>LE: HTML response LE->>LE: Parse og:title, og:description, og:site_name LE->>LE: Parse theme-color meta tag LE->>LE: Fallback to <title> if no og:title end LE-->>CS: List<EmbedDto> (or null) Note over CS: Attached to MessageDto before broadcast Server Directory Registration Public servers register with the EchoHubSpace directory for discoverability. sequenceDiagram participant SDS as ServerDirectoryService participant Dir as EchoHubSpace Directory participant PT as PresenceTracker SDS->>SDS: Check Server:PublicServer config SDS->>Dir: SignalR connect (echohub.voidcube.cloud/hubs/servers) SDS->>Dir: RegisterServer(name, description, host, userCount) Dir-->>SDS: Registered loop Every 30 seconds SDS->>PT: Get online user count alt Count changed SDS->>Dir: UpdateUserCount(count) end end Dir->>SDS: Ping SDS->>Dir: Heartbeat Note over SDS,Dir: Exponential backoff on disconnect (2s → 30s max)"
|
||
},
|
||
"flows/messaging.html": {
|
||
"href": "flows/messaging.html",
|
||
"title": "Messaging | EchoHub Documentation",
|
||
"summary": "Messaging Sending a Message (SignalR) A message typed in the TUI travels through encryption, the SignalR hub, ChatService validation, database storage, and fan-out to both SignalR and IRC clients. sequenceDiagram participant UI as MainWindow (TUI) participant AO as AppOrchestrator participant EHC as EchoHubConnection participant Hub as ChatHub participant CS as ChatService participant LE as LinkEmbedService participant DB as SQLite participant SRB as SignalRBroadcaster participant IRCB as IrcBroadcaster participant Clients as Other Clients UI->>AO: OnMessageSubmitted(channel, text) AO->>AO: IsCommand(text)? → No AO->>EHC: SendMessageAsync(channel, text) EHC->>EHC: Encrypt(text) → ciphertext EHC->>Hub: InvokeAsync(\"SendMessage\", channel, ciphertext) Hub->>CS: SendMessageAsync(userId, username, channel, ciphertext) CS->>CS: Decrypt(ciphertext) → plaintext CS->>CS: Validate (length, newlines, channel exists) CS->>DB: Check mute status CS->>LE: TryGetEmbedsAsync(plaintext) LE->>LE: Extract URLs, fetch OG tags LE-->>CS: List<EmbedDto> (or null) CS->>DB: INSERT Message (encrypted at rest) CS->>CS: Re-encrypt plaintext for transport CS->>CS: Build MessageDto with embeds par Fan-out to all broadcasters CS->>SRB: SendMessageToChannelAsync(channel, dto) SRB->>Clients: HubContext.Group(channel).ReceiveMessage(dto) and CS->>IRCB: SendMessageToChannelAsync(channel, dto) IRCB->>IRCB: Decrypt → format as PRIVMSG lines IRCB->>Clients: Send to each IRC conn (skip sender) end Sending a Message (IRC) Messages from IRC clients follow the same ChatService path but enter as plaintext (no app-layer encryption). sequenceDiagram participant IRC as IRC Client participant CH as IrcCommandHandler participant CS as ChatService participant DB as SQLite participant SRB as SignalRBroadcaster participant IRCB as IrcBroadcaster IRC->>CH: PRIVMSG #channel :Hello world CH->>CH: Parse target + content CH->>CH: IrcToEchoHubChannel(\"#channel\") → \"channel\" CH->>CS: SendMessageAsync(userId, username, \"channel\", \"Hello world\") CS->>CS: Decrypt(\"Hello world\") → passthrough (no $ENC$ prefix) CS->>CS: Validate, check mute, fetch embeds CS->>DB: INSERT Message CS->>CS: Encrypt plaintext for SignalR transport par Fan-out CS->>SRB: SendMessageToChannelAsync (encrypted for SignalR) and CS->>IRCB: SendMessageToChannelAsync (decrypt → PRIVMSG) IRCB->>IRCB: Skip sender (IRC echo suppression) end Receiving a Message (TUI Client) When a message arrives via SignalR, the client decrypts it, adds it to the chat view, and optionally plays a notification sound for @mentions. sequenceDiagram participant SRB as SignalRBroadcaster participant EHC as EchoHubConnection participant AO as AppOrchestrator participant MM as ChatMessageManager participant UI as MainWindow SRB->>EHC: ReceiveMessage(MessageDto) EHC->>EHC: Decrypt(message.Content) EHC-->>AO: OnMessageReceived(decrypted dto) AO->>AO: InvokeUI (thread-safe) AO->>MM: AddMessage(message) MM->>UI: Render in chat ListView alt Message contains @username AO->>AO: PlayAsync() notification sound end Command Execution Slash commands (/status, /nick, /kick, etc.) are parsed client-side and dispatched to appropriate handlers, which call REST APIs or SignalR methods. sequenceDiagram participant UI as MainWindow participant AO as AppOrchestrator participant CMD as CommandHandler participant API as ApiClient participant EHC as EchoHubConnection participant Server as Server (API/Hub) UI->>AO: OnMessageSubmitted(channel, \"/kick baduser\") AO->>CMD: IsCommand(\"/kick baduser\")? → true AO->>CMD: HandleAsync(\"/kick baduser\") CMD->>CMD: Parse → command=\"kick\", args=\"baduser\" alt API command (kick, ban, mute, nick, etc.) CMD-->>AO: Fire OnKickRequested(\"baduser\") AO->>API: KickUserAsync(\"baduser\") API->>Server: POST /api/moderation/kick/baduser else Hub command (status, join, leave, etc.) CMD-->>AO: Fire OnSetStatus / OnJoinChannel / etc. AO->>EHC: UpdateStatusAsync() / JoinChannelAsync() / etc. EHC->>Server: SignalR Invoke else Local command (theme, help, quit) CMD-->>AO: Fire OnThemeChanged / etc. AO->>UI: Apply locally (no server call) end AO->>UI: AddSystemMessage(result) Available commands: Command Type Handler /status <status> [message] Hub UpdateStatusAsync /nick <name> API UpdateProfileAsync /color <hex> API UpdateProfileAsync /join <channel> Hub JoinChannelAsync /leave Hub LeaveChannelAsync /topic <text> API UpdateChannelTopicAsync /kick <user> API POST /api/moderation/kick/{user} /ban <user> API POST /api/moderation/ban/{user} /unban <user> API POST /api/moderation/unban/{user} /mute <user> [mins] API POST /api/moderation/mute/{user} /unmute <user> API POST /api/moderation/unmute/{user} /role <user> <role> API PUT /api/moderation/role/{user} /nuke API DELETE /api/channels/{channel}/messages /send <file> API POST /api/channels/{channel}/upload /profile [user] Local Show profile dialog /avatar API POST /api/users/avatar /theme <name> Local ThemeManager.SetTheme() /servers API GET /api/serverdir/servers /users Local Show userlist /help Local Show help text /quit Local Exit application"
|
||
},
|
||
"flows/moderation.html": {
|
||
"href": "flows/moderation.html",
|
||
"title": "Moderation | EchoHub Documentation",
|
||
"summary": "Moderation Kick / Ban / Mute Moderators and admins can kick, ban, or mute users via REST API or slash commands. These actions force-disconnect the target and broadcast the event. sequenceDiagram participant Mod as Moderator participant MC as ModerationController participant CS as ChatService participant PT as PresenceTracker participant DB as SQLite participant SRB as SignalRBroadcaster participant IRCB as IrcBroadcaster Mod->>MC: POST /api/moderation/kick/{user} alt Kick MC->>CS: Get user's channels MC->>CS: BroadcastToAllAsync(SendUserKickedAsync) MC->>CS: ForceDisconnectAndCleanupAsync(user) else Ban MC->>DB: Set user.IsBanned = true MC->>CS: BroadcastToAllAsync(SendUserBannedAsync) MC->>CS: ForceDisconnectAndCleanupAsync(user) else Mute MC->>DB: Set user.IsMuted = true, MutedUntil = now + duration Note over DB: MuteExpirationService auto-unmutes when timer expires end CS->>PT: ForceRemoveUser(username) PT->>PT: Remove from all connections + channels CS->>SRB: ForceDisconnectUserAsync(connectionIds, reason) CS->>IRCB: ForceDisconnectUserAsync(connectionIds, reason) CS->>DB: Set Status=Invisible, LastSeenAt=now"
|
||
},
|
||
"index.html": {
|
||
"href": "index.html",
|
||
"title": "EchoHub Documentation | EchoHub Documentation",
|
||
"summary": "EchoHub Documentation Welcome to the EchoHub documentation. EchoHub is a decentralized, IRC-style chat platform. Self-hosted, terminal-first, with a built-in IRC gateway so native IRC clients can connect alongside the TUI client. Website: echohub.voidcube.cloud | Public Servers: Server Directory Quick Links Getting Started - Set up and run EchoHub Architecture - System design and IRC gateway API Reference - Generated C# API documentation Changelog - Release history"
|
||
},
|
||
"todo.html": {
|
||
"href": "todo.html",
|
||
"title": "TODO | EchoHub Documentation",
|
||
"summary": "TODO [ ] fix the chat trailing; when user scrolls up, and somebody sends a message – the chat instantly \"teleports\" to the very bottom [x] disable the autorun of files (maybe keep for mp4? gotta do some sec research on it) [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 [ ] password protected rooms [ ] better audio lib, current one (NetCoreAudio) does not support seek or other audio actions [ ] Use options pattern for both client & server ref: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-10.0 [x] The vertical line of embeds should be the same colour as theme-color meta tag of the source [x] change text wrapping to honor the offset of the user. (Preferably wrap whole words if they fit in on line. Basically how the CSS \"text-wrap-mode: wrap;\" works) [x] make usernames in messages, mentions and in the user list clickable to open the user profile [ ] Add tags support for public servers & add filters on echohubspace for those tags in the server \"browser\" [ ] when trying to /join a channel that doesn't exist a client side-ghost channel gets created that does not work [x] unmute timer does not seem to work [ ] add IRC network like support that means basically multiple servers linked, so users can chat cross-server in this network [x] when users clicks public -> private -> public checkbox in the channel creation, it ends up creating the channel on 3rd check switch [ ] add keyboard only controls | at least for most important parts and the rest might be accessible with: (down) [x] add search bar / search modal – that will allow users to instantly navigate to room / focus on app element & etc [ ] Actually smart data management – cache messages, lazy load messages on scroll (currently hardcoded 100msgs fetched + new ones) [x] Another thing would be stateful userlist – basically fetch once and listen for userlist updates [x] Send to EchohubSpace only state changes, currently we send user count periodically, instead of updating it on update [x] space between mod|admin \"icon\" and username [ ] Embeds still incorrectly display colors"
|
||
}
|
||
} |