{
"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 PendingUpdate Set when the user confirms an update. The host must run this after the Terminal.Gui main loop exits (console restored), so the updater's in-place restart doesn't fight the TUI. public Func? PendingUpdate { get; } Property Value Func 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 HandleAsync(string input) Parameters input string Returns Task IsCommand(string) public bool IsCommand(string input) Parameters input string Returns bool Events OnAssignRole public event Func? OnAssignRole Event Type Func OnBanUser public event Func? OnBanUser Event Type Func OnChangeRoomPassword public event Func? OnChangeRoomPassword Event Type Func OnClearAttachments public event Func? OnClearAttachments Event Type Func OnCreateInvite public event Func? OnCreateInvite Event Type Func OnDeleteAccount public event Func? OnDeleteAccount Event Type Func OnExportData public event Func? OnExportData Event Type Func OnHelp public event Func? OnHelp Event Type Func OnJoinChannel public event Func? OnJoinChannel Event Type Func OnKickUser public event Func? OnKickUser Event Type Func OnLeaveChannel public event Func? OnLeaveChannel Event Type Func OnListInvites public event Func? OnListInvites Event Type Func OnListUsers public event Func? OnListUsers Event Type Func OnMuteUser public event Func? OnMuteUser Event Type Func OnNukeChannel public event Func? OnNukeChannel Event Type Func OnOpenProfile public event Func? OnOpenProfile Event Type Func OnOpenServers public event Func? OnOpenServers Event Type Func OnQuit public event Func? OnQuit Event Type Func OnRevokeInvite public event Func? OnRevokeInvite Event Type Func OnRoomInfo public event Func? OnRoomInfo Event Type Func OnSendAction public event Func? OnSendAction Event Type Func OnSendBanner public event Func? OnSendBanner Event Type Func OnSendFile public event Func? OnSendFile Event Type Func OnSetAsciiSize public event Func? OnSetAsciiSize Event Type Func OnSetAvatar public event Func? OnSetAvatar Event Type Func OnSetColor public event Func? OnSetColor Event Type Func OnSetDownloadPath public event Func? OnSetDownloadPath Event Type Func OnSetNick public event Func? OnSetNick Event Type Func OnSetStatus Status update. A null status means \"keep the current status\"; a null message means \"keep the current message\" and an empty message means \"clear it\". The orchestrator resolves both against the session state. public event Func? OnSetStatus Event Type Func OnSetTheme public event Func? OnSetTheme Event Type Func OnSetTopic public event Func? OnSetTopic Event Type Func OnTestSound public event Func? OnTestSound Event Type Func OnUnbanUser public event Func? OnUnbanUser Event Type Func OnUnmuteUser public event Func? OnUnmuteUser Event Type Func"
},
"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 Inheritance object CommandResult Implements IEquatable 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 DefaultAsciiSize ASCII-art rendering size for images you attach: \"s\" (40×40), \"m\" (80×80), or \"l\" (120×120). Applies to copy-paste/drag-drop attachments, which have no per-file size flag. public string DefaultAsciiSize { get; set; } Property Value string DefaultPreset public AccountPreset DefaultPreset { get; set; } Property Value AccountPreset DownloadPath Folder where downloaded attachments and saved images are written. When null, the OS Downloads folder is used. Set via the native folder picker or /downloadpath. public string? DownloadPath { get; set; } Property Value string Notifications public NotificationConfig Notifications { get; set; } Property Value NotificationConfig SavedServers public List SavedServers { get; set; } Property Value List"
},
"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() Properties ConfigDirectory Directory holding the client config and local key material. public static string ConfigDirectory { get; } Property Value string 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 ChannelKeys Cached room content keys for end-to-end encrypted channels on this server, keyed by channel name and encrypted at rest (see RoomKeyProtector; legacy entries were plain base64). Like RefreshToken, these live only on the user's machine — the server never sees them. public Dictionary ChannelKeys { get; set; } Property Value Dictionary LastConnected public DateTimeOffset LastConnected { get; set; } Property Value DateTimeOffset LastReadMessages Last message the user has read per channel (message id as string), persisted so unread counts, @mention highlights, and the \"new messages\" marker survive restarts. public Dictionary LastReadMessages { get; set; } Property Value Dictionary LeftChannels Channels the user explicitly left with /leave. Excluded from the automatic join-all-channels pass at connect until the user joins them again. public List LeftChannels { get; set; } Property Value List 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, string?, string?, string?) public Task CreateChannelAsync(string name, string? topic = null, bool isPublic = true, string? password = null, string? encryptionSalt = null, string? wrappedRoomKey = null) Parameters name string topic string isPublic bool password string encryptionSalt string wrappedRoomKey string Returns Task CreateInviteAsync(int?, int?) public Task CreateInviteAsync(int? maxUses = null, int? expiresInHours = null) Parameters maxUses int? expiresInHours int? Returns Task DeleteChannelAsync(string) public Task DeleteChannelAsync(string channelName) Parameters channelName string Returns Task DeleteMessageAsync(Guid) public Task DeleteMessageAsync(Guid messageId) Parameters messageId Guid Returns Task DeleteMyAccountAsync(string) Deletes the caller's account. The password re-confirms intent. public Task DeleteMyAccountAsync(string password) Parameters password string Returns Task Dispose() public void Dispose() DownloadFileToTempAsync(string, string) public Task DownloadFileToTempAsync(string relativeUrl, string fileName) Parameters relativeUrl string fileName string Returns Task ExportMyDataAsync() Downloads the caller's full data export as raw JSON text. public Task ExportMyDataAsync() Returns Task GetChannelCryptoAsync(string) Fetches a channel's public crypto metadata (whether it's E2E-encrypted and its key-derivation salt). Returns null when the channel doesn't exist. public Task GetChannelCryptoAsync(string channelName) Parameters channelName string Returns Task GetChannelMetaAsync(string) Fetches a channel's human-facing metadata (message count, unique posters, estimated size, created date, room id) for the /meta command. Returns null if it doesn't exist. public Task GetChannelMetaAsync(string channelName) Parameters channelName string Returns Task GetChannelsAsync() public Task> GetChannelsAsync() Returns Task> GetEncryptionKeyAsync() public Task GetEncryptionKeyAsync() Returns Task GetInvitesAsync() public Task> GetInvitesAsync() Returns Task> GetServerInfoAsync() public Task GetServerInfoAsync() Returns Task GetUserProfileAsync(string) public Task GetUserProfileAsync(string username) Parameters username string Returns Task GetValidTokenAsync() Returns a valid access token, refreshing if expired. Used by EchoHubConnection for SignalR token provider. public Task GetValidTokenAsync() Returns Task KickUserAsync(string, string?) public Task KickUserAsync(string username, string? reason = null) Parameters username string reason string Returns Task LoginAsync(string, string) public Task LoginAsync(string username, string password) Parameters username string password string Returns Task LoginWithRefreshTokenAsync(string) public Task LoginWithRefreshTokenAsync(string refreshToken) Parameters refreshToken string Returns Task 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?, string?) public Task RegisterAsync(string username, string password, string? displayName = null, string? inviteCode = null) Parameters username string password string displayName string inviteCode string Returns Task RekeyChannelAsync(string, RekeyChannelRequest) public Task RekeyChannelAsync(string channelName, RekeyChannelRequest request) Parameters channelName string request RekeyChannelRequest Returns Task RevokeInviteAsync(string) public Task RevokeInviteAsync(string code) Parameters code string Returns Task SendMessageWithAttachmentsAsync(string, string, IReadOnlyList, string?) Sends one message with optional text and one or more file attachments. For end-to-end encrypted channels each attachment carries a declared kind and a room-encrypted preview (empty when none); the caption is likewise room-encrypted. public Task SendMessageWithAttachmentsAsync(string channelName, string content, IReadOnlyList attachments, string? size = null) Parameters channelName string content string attachments IReadOnlyList size string Returns Task SendUrlAsync(string, string, string?) public Task SendUrlAsync(string channelName, string url, string? size = null) Parameters channelName string url string size string Returns Task 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 UpdateChannelTopicAsync(string channelName, string? topic) Parameters channelName string topic string Returns Task UpdateProfileAsync(UpdateProfileRequest) public Task UpdateProfileAsync(UpdateProfileRequest request) Parameters request UpdateProfileRequest Returns Task UploadAvatarAsync(Stream, string) public Task UploadAvatarAsync(Stream imageStream, string fileName) Parameters imageStream Stream fileName string Returns Task 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, Action, string, string?) public static void Run(IApplication app, Func work, Action showError, string errorPrefix, string? logContext = null) Parameters app IApplication work Func showError Action 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 Inheritance object BackupInfo Implements IEquatable 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.ChannelPasswordRequiredException.html": {
"href": "api/client/EchoHub.Client.Services.ChannelPasswordRequiredException.html",
"title": "Class ChannelPasswordRequiredException | EchoHub Documentation",
"summary": "Class ChannelPasswordRequiredException Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll Thrown when joining a channel fails because a password is required or incorrect. The UI catches this to prompt the user and retry. public sealed class ChannelPasswordRequiredException : Exception Inheritance object Exception ChannelPasswordRequiredException Inherited Members Exception.GetBaseException() Exception.ToString() Exception.GetType() Exception.TargetSite Exception.Message Exception.Data Exception.InnerException Exception.HelpLink Exception.Source Exception.HResult Exception.StackTrace object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChannelPasswordRequiredException(string, string) public ChannelPasswordRequiredException(string channelName, string message) Parameters channelName string message string Properties ChannelName public string ChannelName { get; } Property Value string"
},
"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.ClipboardFiles.html": {
"href": "api/client/EchoHub.Client.Services.ClipboardFiles.html",
"title": "Class ClipboardFiles | EchoHub Documentation",
"summary": "Class ClipboardFiles Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll Reads file paths that live on the OS clipboard as a file list (e.g. after copying a file in Explorer/Finder/Nautilus), which terminals do not paste as text. Lets Ctrl+V attach a copied file directly instead of requiring the user to paste a raw path. public static class ClipboardFiles Inheritance object ClipboardFiles Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods TryGetFiles(out List) public static bool TryGetFiles(out List files) Parameters files List Returns bool"
},
"api/client/EchoHub.Client.Services.ClipboardImage.html": {
"href": "api/client/EchoHub.Client.Services.ClipboardImage.html",
"title": "Class ClipboardImage | EchoHub Documentation",
"summary": "Class ClipboardImage Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll Reads raw image data from the OS clipboard (e.g. an image copied from a browser, or a Win+Shift+S screenshot), which terminals cannot paste as text. Always returns PNG bytes: clipboard PNG data is passed through, clipboard bitmaps (CF_DIB) are re-encoded. public static class ClipboardImage Inheritance object ClipboardImage Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods DibToPng(byte[]) Converts clipboard DIB bytes (a BITMAPINFOHEADER/V4/V5 + optional palette/masks + pixel data, i.e. a .bmp file without its 14-byte file header) to PNG. Returns null when the data is malformed or not decodable as a bitmap. public static byte[]? DibToPng(byte[] dib) Parameters dib byte[] Returns byte[] TryGetPng(out byte[]) public static bool TryGetPng(out byte[] png) Parameters png byte[] Returns bool"
},
"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, RoomKeyStore) public EchoHubConnection(string serverUrl, ApiClient apiClient, ClientEncryptionService encryption, RoomKeyStore roomKeys) Parameters serverUrl string apiClient ApiClient encryption ClientEncryptionService roomKeys RoomKeyStore Fields LockedMessagePlaceholder public const string LockedMessagePlaceholder = \"[encrypted — rejoin this channel with its passphrase to unlock]\" Field Value string 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> GetHistoryAsync(string channelName, int count = 100, int offset = 0) Parameters channelName string count int offset int Returns Task> GetOnlineUsersAsync(string) public Task> GetOnlineUsersAsync(string channelName) Parameters channelName string Returns Task> JoinChannelAsync(string, string?) public Task JoinChannelAsync(string channelName, string? password = null) Parameters channelName string password string Returns Task LeaveChannelAsync(string) public Task LeaveChannelAsync(string channelName) Parameters channelName string Returns Task SendMessageAsync(string, string, Guid?) public Task SendMessageAsync(string channelName, string content, Guid? replyToMessageId = null) Parameters channelName string content string replyToMessageId Guid? Returns Task UpdateStatusAsync(UserStatus, string?) public Task UpdateStatusAsync(UserStatus status, string? statusMessage = null) Parameters status UserStatus statusMessage string Returns Task Events OnChannelDeleted public event Action? OnChannelDeleted Event Type Action OnChannelNuked public event Action? OnChannelNuked Event Type Action OnChannelUpdated public event Action? OnChannelUpdated Event Type Action OnConnectionStateChanged public event Action? OnConnectionStateChanged Event Type Action OnError public event Action? OnError Event Type Action OnForceDisconnect public event Action? OnForceDisconnect Event Type Action OnMessageDeleted public event Action? OnMessageDeleted Event Type Action OnMessageReceived public event Action? OnMessageReceived Event Type Action OnReconnected public event Action? OnReconnected Event Type Action OnUserBanned public event Action? OnUserBanned Event Type Action OnUserJoined public event Action? OnUserJoined Event Type Action OnUserKicked public event Action? OnUserKicked Event Type Action OnUserLeft public event Action? OnUserLeft Event Type Action OnUserStatusChanged public event Action? OnUserStatusChanged Event Type Action"
},
"api/client/EchoHub.Client.Services.FolderPickResult.html": {
"href": "api/client/EchoHub.Client.Services.FolderPickResult.html",
"title": "Class FolderPickResult | EchoHub Documentation",
"summary": "Class FolderPickResult Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll public sealed record FolderPickResult : IEquatable Inheritance object FolderPickResult Implements IEquatable Inherited Members object.GetType() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors FolderPickResult(PickerOutcome, string?) public FolderPickResult(PickerOutcome Outcome, string? Path) Parameters Outcome PickerOutcome Path string Properties Outcome public PickerOutcome Outcome { get; init; } Property Value PickerOutcome Path public string? Path { get; init; } Property Value string Methods Deconstruct(out PickerOutcome, out string?) public void Deconstruct(out PickerOutcome Outcome, out string? Path) Parameters Outcome PickerOutcome Path string Equals(FolderPickResult?) public bool Equals(FolderPickResult? other) Parameters other FolderPickResult Returns bool Equals(object?) public override bool Equals(object? obj) Parameters obj object Returns bool GetHashCode() public override int GetHashCode() Returns int ToString() public override string ToString() Returns string Operators operator ==(FolderPickResult?, FolderPickResult?) public static bool operator ==(FolderPickResult? left, FolderPickResult? right) Parameters left FolderPickResult right FolderPickResult Returns bool operator !=(FolderPickResult?, FolderPickResult?) public static bool operator !=(FolderPickResult? left, FolderPickResult? right) Parameters left FolderPickResult right FolderPickResult Returns bool"
},
"api/client/EchoHub.Client.Services.JoinOutcome.html": {
"href": "api/client/EchoHub.Client.Services.JoinOutcome.html",
"title": "Class JoinOutcome | EchoHub Documentation",
"summary": "Class JoinOutcome Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll Result of joining a channel: decrypted history plus, for end-to-end encrypted channels, the key envelope needed to unlock the room content key. public sealed record JoinOutcome : IEquatable Inheritance object JoinOutcome Implements IEquatable Inherited Members object.GetType() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors JoinOutcome(List, string?, string?) Result of joining a channel: decrypted history plus, for end-to-end encrypted channels, the key envelope needed to unlock the room content key. public JoinOutcome(List History, string? EncryptionSalt, string? WrappedRoomKey) Parameters History List EncryptionSalt string WrappedRoomKey string Properties EncryptionSalt public string? EncryptionSalt { get; init; } Property Value string History public List History { get; init; } Property Value List WrappedRoomKey public string? WrappedRoomKey { get; init; } Property Value string Methods Deconstruct(out List, out string?, out string?) public void Deconstruct(out List History, out string? EncryptionSalt, out string? WrappedRoomKey) Parameters History List EncryptionSalt string WrappedRoomKey string Equals(JoinOutcome?) public bool Equals(JoinOutcome? other) Parameters other JoinOutcome Returns bool Equals(object?) public override bool Equals(object? obj) Parameters obj object Returns bool GetHashCode() public override int GetHashCode() Returns int ToString() public override string ToString() Returns string Operators operator ==(JoinOutcome?, JoinOutcome?) public static bool operator ==(JoinOutcome? left, JoinOutcome? right) Parameters left JoinOutcome right JoinOutcome Returns bool operator !=(JoinOutcome?, JoinOutcome?) public static bool operator !=(JoinOutcome? left, JoinOutcome? right) Parameters left JoinOutcome right JoinOutcome Returns bool"
},
"api/client/EchoHub.Client.Services.NativeFolderPicker.html": {
"href": "api/client/EchoHub.Client.Services.NativeFolderPicker.html",
"title": "Class NativeFolderPicker | EchoHub Documentation",
"summary": "Class NativeFolderPicker Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll Opens the OS-native folder chooser (Windows Explorer, macOS Finder, Linux GTK/KDE) by shelling out, so the TUI doesn't need a GUI toolkit reference. Returns Unavailable when no native dialog can run, so callers can fall back to a configured path. public static class NativeFolderPicker Inheritance object NativeFolderPicker Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods PickFolderAsync(string?) public static Task PickFolderAsync(string? initialDir) Parameters initialDir string Returns Task"
},
"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.OutgoingAttachment.html": {
"href": "api/client/EchoHub.Client.Services.OutgoingAttachment.html",
"title": "Class OutgoingAttachment | EchoHub Documentation",
"summary": "Class OutgoingAttachment Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll One file to upload as part of a message. For end-to-end encrypted channels the stream is already ciphertext, DeclaredKind is set (image/audio/file), and EncryptedPreview holds the room-encrypted ASCII art for images. For normal channels only Stream and FileName are set. public sealed record OutgoingAttachment : IEquatable Inheritance object OutgoingAttachment Implements IEquatable Inherited Members object.GetType() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors OutgoingAttachment(Stream, string, string?, string?) One file to upload as part of a message. For end-to-end encrypted channels the stream is already ciphertext, DeclaredKind is set (image/audio/file), and EncryptedPreview holds the room-encrypted ASCII art for images. For normal channels only Stream and FileName are set. public OutgoingAttachment(Stream Stream, string FileName, string? DeclaredKind = null, string? EncryptedPreview = null) Parameters Stream Stream FileName string DeclaredKind string EncryptedPreview string Properties DeclaredKind public string? DeclaredKind { get; init; } Property Value string EncryptedPreview public string? EncryptedPreview { get; init; } Property Value string FileName public string FileName { get; init; } Property Value string Stream public Stream Stream { get; init; } Property Value Stream Methods Deconstruct(out Stream, out string, out string?, out string?) public void Deconstruct(out Stream Stream, out string FileName, out string? DeclaredKind, out string? EncryptedPreview) Parameters Stream Stream FileName string DeclaredKind string EncryptedPreview string Equals(OutgoingAttachment?) public bool Equals(OutgoingAttachment? other) Parameters other OutgoingAttachment Returns bool Equals(object?) public override bool Equals(object? obj) Parameters obj object Returns bool GetHashCode() public override int GetHashCode() Returns int ToString() public override string ToString() Returns string Operators operator ==(OutgoingAttachment?, OutgoingAttachment?) public static bool operator ==(OutgoingAttachment? left, OutgoingAttachment? right) Parameters left OutgoingAttachment right OutgoingAttachment Returns bool operator !=(OutgoingAttachment?, OutgoingAttachment?) public static bool operator !=(OutgoingAttachment? left, OutgoingAttachment? right) Parameters left OutgoingAttachment right OutgoingAttachment Returns bool"
},
"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.PickerOutcome.html": {
"href": "api/client/EchoHub.Client.Services.PickerOutcome.html",
"title": "Enum PickerOutcome | EchoHub Documentation",
"summary": "Enum PickerOutcome Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll public enum PickerOutcome Fields Cancelled = 1 The native dialog ran but the user cancelled it. Chosen = 0 The user picked a folder (Path is set). Unavailable = 2 No native picker is available on this machine (headless, missing tool, etc.)."
},
"api/client/EchoHub.Client.Services.RoomKeyProtector.html": {
"href": "api/client/EchoHub.Client.Services.RoomKeyProtector.html",
"title": "Class RoomKeyProtector | EchoHub Documentation",
"summary": "Class RoomKeyProtector Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll Encrypts cached room content keys at rest so the client config never holds them as plain base64. Windows uses DPAPI (current-user scope, format prefix \"dp1:\"). On other platforms the keys are AES-GCM encrypted with a per-user master key file stored next to the config with 0600 permissions (prefix \"k1:\") — without an OS keychain that is file-permission-level protection, not zero-knowledge: anyone who can read both the config and the key file can recover the room keys. Values with no recognized prefix are legacy plain-base64 keys from older clients; they load once and are re-encrypted. The room passphrase itself is never stored in any form. public sealed class RoomKeyProtector Inheritance object RoomKeyProtector Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors RoomKeyProtector(string, bool?) public RoomKeyProtector(string keyDirectory, bool? useDpapi = null) Parameters keyDirectory string Directory holding the master key file (the client config dir). useDpapi bool? Overrides the platform default (DPAPI on Windows) — for tests. Fields DpapiPrefix public const string DpapiPrefix = \"dp1:\" Field Value string KeyFilePrefix public const string KeyFilePrefix = \"k1:\" Field Value string Methods Protect(byte[]) Encrypts a room key for storage in the config file. public string Protect(byte[] roomKey) Parameters roomKey byte[] Returns string TryUnprotect(string, out byte[], out bool) Decrypts a stored value back into a room key. wasLegacy is true when the value was an unencrypted legacy entry that should be re-persisted via Protect(byte[]). Returns false for unreadable values (wrong user/machine, missing or regenerated key file, malformed data) — the caller drops the entry and the user can recover it by re-entering the passphrase. public bool TryUnprotect(string stored, out byte[] roomKey, out bool wasLegacy) Parameters stored string roomKey byte[] wasLegacy bool Returns bool"
},
"api/client/EchoHub.Client.Services.RoomKeyStore.html": {
"href": "api/client/EchoHub.Client.Services.RoomKeyStore.html",
"title": "Class RoomKeyStore | EchoHub Documentation",
"summary": "Class RoomKeyStore Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll Holds room content keys for end-to-end encrypted channels: in-memory for the active session, persisted per-server in the client config (like saved sessions) so users don't retype the passphrase every launch. Keys never leave this machine and are encrypted at rest by RoomKeyProtector. Also tracks which channels are known to be end-to-end encrypted, so senders can refuse to emit plaintext into a room whose key isn't cached yet. public sealed class RoomKeyStore Inheritance object RoomKeyStore Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors RoomKeyStore() public RoomKeyStore() RoomKeyStore(RoomKeyProtector) public RoomKeyStore(RoomKeyProtector protector) Parameters protector RoomKeyProtector Methods Clear() public void Clear() HasKey(string) public bool HasKey(string channelName) Parameters channelName string Returns bool IsChannelEncrypted(string) public bool IsChannelEncrypted(string channelName) Parameters channelName string Returns bool LoadForServer(string) Binds the store to a server and loads that server's cached keys from config. public void LoadForServer(string serverUrl) Parameters serverUrl string MarkChannelEncrypted(string, bool) Records whether a channel is end-to-end encrypted (from channel listings, crypto metadata, or join outcomes). Senders consult this to block plaintext into rooms whose key isn't cached. public void MarkChannelEncrypted(string channelName, bool isEncrypted) Parameters channelName string isEncrypted bool RemoveKey(string) public void RemoveKey(string channelName) Parameters channelName string StoreKey(string, byte[]) Stores a key for the session and persists it to the server's config entry. public void StoreKey(string channelName, byte[] key) Parameters channelName string key byte[] TryGetKey(string, out byte[]) public bool TryGetKey(string channelName, out byte[] key) Parameters channelName string key byte[] Returns bool TryStoreFromEnvelope(string, string, byte[]) Unwraps a fresh key envelope and caches the key, overwriting any stale cached key (e.g. the channel was deleted and recreated under the same name, so the old key would encrypt messages nobody else can read). Returns false when the KEK doesn't open the envelope — the cache is left untouched. public bool TryStoreFromEnvelope(string channelName, string wrappedRoomKey, byte[] kek) Parameters channelName string wrappedRoomKey string kek byte[] Returns bool"
},
"api/client/EchoHub.Client.Services.RoomLockedException.html": {
"href": "api/client/EchoHub.Client.Services.RoomLockedException.html",
"title": "Class RoomLockedException | EchoHub Documentation",
"summary": "Class RoomLockedException Namespace EchoHub.Client.Services Assembly EchoHub.Client.dll Thrown when sending into an end-to-end encrypted channel whose room key isn't cached: without the key the message would leave the client as plaintext, which must never happen. public sealed class RoomLockedException : Exception Inheritance object Exception RoomLockedException Inherited Members Exception.GetBaseException() Exception.ToString() Exception.GetType() Exception.TargetSite Exception.Message Exception.Data Exception.InnerException Exception.HelpLink Exception.Source Exception.HResult Exception.StackTrace object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors RoomLockedException(string) public RoomLockedException(string channelName) Parameters channelName string Properties ChannelName public string ChannelName { get; } Property Value string"
},
"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 PendingUpdate Set when the user confirms an update. The host runs this after the Terminal.Gui main loop has exited and the console is restored, so the library's in-place restart doesn't deadlock against a TUI that still owns the console. public Func? PendingUpdate { get; } Property Value Func 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 ChannelPasswordRequiredException Thrown when joining a channel fails because a password is required or incorrect. The UI catches this to prompt the user and retry. 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. ClipboardFiles Reads file paths that live on the OS clipboard as a file list (e.g. after copying a file in Explorer/Finder/Nautilus), which terminals do not paste as text. Lets Ctrl+V attach a copied file directly instead of requiring the user to paste a raw path. ClipboardImage Reads raw image data from the OS clipboard (e.g. an image copied from a browser, or a Win+Shift+S screenshot), which terminals cannot paste as text. Always returns PNG bytes: clipboard PNG data is passed through, clipboard bitmaps (CF_DIB) are re-encoded. EchoHubConnection FolderPickResult JoinOutcome Result of joining a channel: decrypted history plus, for end-to-end encrypted channels, the key envelope needed to unlock the room content key. NativeFolderPicker Opens the OS-native folder chooser (Windows Explorer, macOS Finder, Linux GTK/KDE) by shelling out, so the TUI doesn't need a GUI toolkit reference. Returns Unavailable when no native dialog can run, so callers can fall back to a configured path. NotificationSoundService OutgoingAttachment One file to upload as part of a message. For end-to-end encrypted channels the stream is already ciphertext, DeclaredKind is set (image/audio/file), and EncryptedPreview holds the room-encrypted ASCII art for images. For normal channels only Stream and FileName are set. PathSetup Ensures the application's directory is on the system PATH so users can run 'echohub' from any terminal session. RoomKeyProtector Encrypts cached room content keys at rest so the client config never holds them as plain base64. Windows uses DPAPI (current-user scope, format prefix \"dp1:\"). On other platforms the keys are AES-GCM encrypted with a per-user master key file stored next to the config with 0600 permissions (prefix \"k1:\") — without an OS keychain that is file-permission-level protection, not zero-knowledge: anyone who can read both the config and the key file can recover the room keys. Values with no recognized prefix are legacy plain-base64 keys from older clients; they load once and are re-encrypted. The room passphrase itself is never stored in any form. RoomKeyStore Holds room content keys for end-to-end encrypted channels: in-memory for the active session, persisted per-server in the client config (like saved sessions) so users don't retype the passphrase every launch. Keys never leave this machine and are encrypted at rest by RoomKeyProtector. Also tracks which channels are known to be end-to-end encrypted, so senders can refuse to emit plaintext into a room whose key isn't cached yet. RoomLockedException Thrown when sending into an end-to-end encrypted channel whose room key isn't cached: without the key the message would leave the client as plaintext, which must never happen. UpdateBackupService Manages pre-update backups and rollback restoration for the auto-updater. Backup location: ~/.echohub/update-backup/ UpdateChecker Enums PickerOutcome"
},
"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 Border Colors for the main-window frame borders (and their titles). Null falls back to Base. Lets themes tone borders down independently of text — e.g. the transparent themes use a dim gray for a subtler, glassy look. Supports hex values (\"#6E6E6E\") as well as named colors. public ThemeColors? Border { 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 GetAvailableThemes() Returns List 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.AttachmentAction.html": {
"href": "api/client/EchoHub.Client.UI.Chat.AttachmentAction.html",
"title": "Enum AttachmentAction | EchoHub Documentation",
"summary": "Enum AttachmentAction Namespace EchoHub.Client.UI.Chat Assembly EchoHub.Client.dll An action a click on an attachment line can trigger. public enum AttachmentAction Fields OpenImage = 0 SaveImage = 1"
},
"api/client/EchoHub.Client.UI.Chat.AttachmentActionSpan.html": {
"href": "api/client/EchoHub.Client.UI.Chat.AttachmentActionSpan.html",
"title": "Struct AttachmentActionSpan | EchoHub Documentation",
"summary": "Struct AttachmentActionSpan Namespace EchoHub.Client.UI.Chat Assembly EchoHub.Client.dll Inclusive column range on a chat line that triggers an attachment action when clicked. public readonly struct AttachmentActionSpan : IEquatable Implements IEquatable Inherited Members object.GetType() object.Equals(object, object) object.ReferenceEquals(object, object) Constructors AttachmentActionSpan(int, int, AttachmentAction) Inclusive column range on a chat line that triggers an attachment action when clicked. public AttachmentActionSpan(int StartCol, int EndCol, AttachmentAction Action) Parameters StartCol int EndCol int Action AttachmentAction Properties Action public AttachmentAction Action { get; init; } Property Value AttachmentAction EndCol public int EndCol { get; init; } Property Value int StartCol public int StartCol { get; init; } Property Value int Methods Deconstruct(out int, out int, out AttachmentAction) public void Deconstruct(out int StartCol, out int EndCol, out AttachmentAction Action) Parameters StartCol int EndCol int Action AttachmentAction Equals(AttachmentActionSpan) public bool Equals(AttachmentActionSpan other) Parameters other AttachmentActionSpan Returns bool Equals(object) public override bool Equals(object obj) Parameters obj object Returns bool GetHashCode() public override int GetHashCode() Returns int ToString() public override string ToString() Returns string Operators operator ==(AttachmentActionSpan, AttachmentActionSpan) public static bool operator ==(AttachmentActionSpan left, AttachmentActionSpan right) Parameters left AttachmentActionSpan right AttachmentActionSpan Returns bool operator !=(AttachmentActionSpan, AttachmentActionSpan) public static bool operator !=(AttachmentActionSpan left, AttachmentActionSpan right) Parameters left AttachmentActionSpan right AttachmentActionSpan Returns bool"
},
"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 DateRuleAttr Horizontal date-separator rules (── Wed, Jul 16 ──…). public static readonly Attribute DateRuleAttr 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 RailAttr The dim vertical rail (│) separating the nick column from message text. public static readonly Attribute RailAttr Field Value Attribute SystemAttr public static readonly Attribute SystemAttr Field Value Attribute TimestampAttr public static readonly Attribute TimestampAttr Field Value Attribute UnreadMarkerAttr The irssi-style \"new messages\" unread marker rule. public static readonly Attribute UnreadMarkerAttr 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 SplitMentions(string text, Attribute? defaultColor = null) Parameters text string defaultColor Attribute? Returns List"
},
"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) public ChatLine(List segments) Parameters segments List ChatLine(string) public ChatLine(string plainText) Parameters plainText string Properties ActionSpans Clickable sub-line targets (e.g. the \"[open]\" and \"[save original]\" brackets under an image). Columns are relative to the unwrapped line, so only the first wrapped line keeps them. Null means the whole line uses the kind's default action. public List? ActionSpans { get; set; } Property Value List AttachmentFileName public string? AttachmentFileName { get; set; } Property Value string AttachmentKind public AttachmentKind? AttachmentKind { get; set; } Property Value AttachmentKind? 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 ContinuationPrefixSegments Colored segments to prepend on continuation lines instead of plain spaces (e.g. the nick-column rail \" │ \"). When set, takes precedence over ContinuationIndent. public List? ContinuationPrefixSegments { get; set; } Property Value List IsMention public bool IsMention { get; set; } Property Value bool IsUnreadMarker True for the \"new messages\" unread-marker rule so it can be removed on channel switch. public bool IsUnreadMarker { get; set; } Property Value bool JumpToMessageId Set on a reply's quote line: activating the line jumps to this message if it is in the loaded history. public Guid? JumpToMessageId { get; set; } Property Value Guid? MessageId public Guid? MessageId { get; set; } Property Value Guid? RuleAttr Color for a rule line; null falls back to DateRuleAttr. public Attribute? RuleAttr { get; set; } Property Value Attribute? RuleLabel When set, this line is a horizontal separator rule (date change, unread marker). The view regenerates it to the current viewport width instead of word-wrapping. public string? RuleLabel { get; set; } Property Value string Segments public List Segments { get; } Property Value List SenderUsername public string? SenderUsername { get; set; } Property Value string TextLength public int TextLength { get; } Property Value int 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 Wrap(int width, int continuationIndent = 0) Parameters width int continuationIndent int Returns List"
},
"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) public void AddRange(IEnumerable lines) Parameters lines IEnumerable Clear() public void Clear() Dispose() public void Dispose() GetLine(int) public ChatLine? GetLine(int index) Parameters index int Returns ChatLine InsertRange(int, IEnumerable) public void InsertRange(int index, IEnumerable lines) Parameters index int lines IEnumerable 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() Fields ContentIndentCols Columns before message text starts: \"HH:mm \" + nick column + \" │ \". public const int ContentIndentCols = 21 Field Value int NickColWidth Columns reserved for the right-aligned nick column (WeeChat-style). public const int NickColWidth = 12 Field Value int 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 LastReadIds Last message the user has read per channel — persisted by the orchestrator so unread/mention state can be seeded from history on the next connect. public IReadOnlyDictionary LastReadIds { get; } Property Value IReadOnlyDictionary MentionChannels Channels with an unread @mention of the current user (cleared by ClearUnread(string)). public IReadOnlySet MentionChannels { get; } Property Value IReadOnlySet 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? GetMessages(string channelName) Parameters channelName string Returns List GetUnreadCount(string) public int GetUnreadCount(string channelName) Parameters channelName string Returns int LoadHistory(string, List, Guid?) Load historical messages into a channel, replacing any existing messages. When lastReadId is given (persisted from a previous session), messages after it seed the unread count, @mention highlight, and the \"new messages\" marker — so activity that happened while offline still lights up. public void LoadHistory(string channelName, List messages, Guid? lastReadId = null) Parameters channelName string messages List lastReadId Guid? PrependHistory(string, List) 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 olderMessages) Parameters channelName string olderMessages List 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? HistoryPrepended Event Type Action MessagesChanged Fired after any mutation to a channel's messages. Parameter is the channel name. public event Action? MessagesChanged Event Type Action"
},
"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 Inheritance object ChatSegment Implements IEquatable 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. Structs AttachmentActionSpan Inclusive column range on a chat line that triggers an attachment action when clicked. Enums AttachmentAction An action a click on an attachment line can trigger."
},
"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.ChannelPasswordDialog.html": {
"href": "api/client/EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.html",
"title": "Class ChannelPasswordDialog | EchoHub Documentation",
"summary": "Class ChannelPasswordDialog Namespace EchoHub.Client.UI.Dialogs Assembly EchoHub.Client.dll Prompts for a channel password when joining a protected channel. Returns the entered password, or null if the user cancels. public sealed class ChannelPasswordDialog Inheritance object ChannelPasswordDialog Inherited Members object.GetType() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Constructors ChannelPasswordDialog() public ChannelPasswordDialog() Methods Show(IApplication, string, string?) public static string? Show(IApplication app, string channelName, string? message = null) Parameters app IApplication channelName string message string Returns 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?) 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? savedServers = null) Parameters app IApplication savedServers List 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 Inheritance object ConnectDialogResult Implements IEquatable 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?, string?, string?) Result returned from the connect dialog. public ConnectDialogResult(string ServerUrl, string Username, string Password, bool IsRegister, bool RememberMe, string? SavedRefreshToken, string? DisplayName = null, string? InviteCode = null) Parameters ServerUrl string Username string Password string IsRegister bool RememberMe bool SavedRefreshToken string DisplayName string InviteCode string Properties DisplayName public string? DisplayName { get; init; } Property Value string EqualityContract protected virtual Type EqualityContract { get; } Property Value Type InviteCode public string? InviteCode { get; init; } Property Value string 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?, out string?, out string?) public void Deconstruct(out string ServerUrl, out string Username, out string Password, out bool IsRegister, out bool RememberMe, out string? SavedRefreshToken, out string? DisplayName, out string? InviteCode) Parameters ServerUrl string Username string Password string IsRegister bool RememberMe bool SavedRefreshToken string DisplayName string InviteCode 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 Inheritance object CreateChannelResult Implements IEquatable 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, string?) public CreateChannelResult(string Name, string? Topic, bool IsPublic, string? Password) Parameters Name string Topic string IsPublic bool Password string 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 Password public string? Password { get; init; } Property Value string Topic public string? Topic { get; init; } Property Value string Methods Deconstruct(out string, out string?, out bool, out string?) public void Deconstruct(out string Name, out string? Topic, out bool IsPublic, out string? Password) Parameters Name string Topic string IsPublic bool Password string 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 Inheritance object ProfileEditResult Implements IEquatable 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) public static SearchResult? Show(IApplication app, IReadOnlyList channels) Parameters app IApplication channels IReadOnlyList 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 Inheritance object SearchResult Implements IEquatable 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 Inheritance object StatusDialogResult Implements IEquatable 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.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 ChannelPasswordDialog Prompts for a channel password when joining a protected channel. Returns the entered password, or null if the user cancels. 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 Enums ProfileAction Action selected by the user in their own profile dialog. SearchResultType"
},
"api/client/EchoHub.Client.UI.Helpers.DroppedFileParser.html": {
"href": "api/client/EchoHub.Client.UI.Helpers.DroppedFileParser.html",
"title": "Class DroppedFileParser | EchoHub Documentation",
"summary": "Class DroppedFileParser Namespace EchoHub.Client.UI.Helpers Assembly EchoHub.Client.dll Recognizes a dragged-and-dropped file (or files) that a terminal delivers into the input as an absolute path. Terminals differ: some paste the whole path at once, others send it character by character; either way this checks whether the current input text resolves to existing file(s). public static class DroppedFileParser Inheritance object DroppedFileParser Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods LooksLikePath(string) Cheap pre-check so callers only stat the filesystem when the input plausibly holds a path: a quoted path, a Windows drive path (X:/X:/), a UNC path (\\), or a POSIX absolute path (/). Normal chat text never starts this way. public static bool LooksLikePath(string text) Parameters text string Returns bool TryGetFiles(string, out List, Func?) Returns true when text resolves to one or more existing files. Handles a single path (quoted or not, possibly containing spaces) and multiple space-separated (optionally quoted) paths. fileExists is injectable for testing; production passes Exists(string). public static bool TryGetFiles(string text, out List files, Func? fileExists = null) Parameters text string files List fileExists Func Returns bool"
},
"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.NickColorHelper.html": {
"href": "api/client/EchoHub.Client.UI.Helpers.NickColorHelper.html",
"title": "Class NickColorHelper | EchoHub Documentation",
"summary": "Class NickColorHelper Namespace EchoHub.Client.UI.Helpers Assembly EchoHub.Client.dll Deterministic per-nick colors for users who haven't picked a nickname color. The same nick always maps to the same palette entry (classic IRC client behavior), so a busy channel stays scannable without any configuration. public static class NickColorHelper Inheritance object NickColorHelper Inherited Members object.GetType() object.MemberwiseClone() object.ToString() object.Equals(object) object.Equals(object, object) object.ReferenceEquals(object, object) object.GetHashCode() Methods GetAttribute(string) The color attribute for a nick. Used as a fallback when the user has no explicit nickname color set. public static Attribute GetAttribute(string nick) Parameters nick string Returns Attribute GetPaletteIndex(string, int) Stable palette index for a nick: case-insensitive FNV-1a over the nick, reduced modulo paletteSize. Pure function (no Terminal.Gui types) so it is unit-testable without a display driver. public static int GetPaletteIndex(string nick, int paletteSize) Parameters nick string paletteSize int Returns int"
},
"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 DroppedFileParser Recognizes a dragged-and-dropped file (or files) that a terminal delivers into the input as an absolute path. Terminals differ: some paste the whole path at once, others send it character by character; either way this checks whether the current input text resolves to existing file(s). 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. NickColorHelper Deterministic per-nick colors for users who haven't picked a nickname color. The same nick always maps to the same palette entry (classic IRC client behavior), so a busy channel stays scannable without any configuration."
},
"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, Dictionary, string, IReadOnlySet?, IReadOnlySet