275 Commits
Author SHA1 Message Date
Hue 0c2e8eae87 Merge pull request #62 from HueByte/dev_logs_room
Dev logs room
2026-07-17 21:08:48 +02:00
HueByte 75ff10c5fd fix: remove invisible character from migration file 2026-07-17 21:00:34 +02:00
HueByte 46afd2a195 feat: add unit tests for ChannelService, FileStorageService, and UserService 2026-07-17 20:59:59 +02:00
HueByte 38eca99fb1 feat: add server logs functionality with role-based access and system channel management
- Introduced a new migration to add the IsSystem column to the Channels table.
- Updated the DbContext model snapshot to reflect the new IsSystem property.
- Enhanced the ChannelService to manage system channels, including creation, visibility control, and protection against deletion.
- Implemented ServerLogsService to handle live server logging, including reading from log files and managing access based on user roles.
- Created ServerLogsSink to queue log events for streaming to the live log room.
- Developed ServerLogsStreamService to stream log events to clients in real-time.
- Added configuration options for server logs in appsettings.
- Implemented comprehensive unit tests for channel service system channel behavior and server logs functionality.
2026-07-17 20:44:47 +02:00
HueByte df1bd0119c feat: Update configuration files for storage path and spam protection settings 2026-07-17 19:54:30 +02:00
HueByte 71d82b45fb fix: Remove invisible character from using directive 2026-07-17 19:49:38 +02:00
HueByte 53d0d326cb feat: Implement spam protection with configurable limits and auto-mute escalation 2026-07-17 19:47:57 +02:00
HueByte 3281064720 feat: Add invite codes and message replies functionality
- Introduced a new migration to add InviteCodes table and ReplyToMessageId column in Messages.
- Updated ChatHub to support replying to messages.
- Enhanced ChatService to handle message replies and validate reply targets.
- Modified UserService to implement invite-only registration mode with invite code consumption.
- Added configuration options for registration modes in appsettings.
- Created unit tests for new features including invite code registration and message reply formatting.
2026-07-17 19:47:57 +02:00
Hue bb987dda82 Merge pull request #60 from HueByte/dev_irc_fixes_adjustments
Dev irc fixes adjustments
2026-07-17 18:01:00 +02:00
HueByte e71575d920 feat: update changelog for v0.2.15 release with new features and bug fixes 2026-07-17 17:11:06 +02:00
HueByte 96736d69df feat: enhance message broadcasting to exclude sender's connection and improve IRC compliance 2026-07-17 17:05:03 +02:00
HueByte 953e081123 feat: add image handling actions and improve IRC message formatting 2026-07-17 16:52:15 +02:00
Stone_Red b9d099dd73 chore: bump version and add changelog 2026-07-17 16:36:10 +02:00
Stone_Red a9519a52cc feat: add support for broadcasting and handling channel deletions across clients 2026-07-17 16:35:59 +02:00
Hue 4d25458717 Merge pull request #58 from HueByte/dev
Dev
2026-07-16 20:33:43 +02:00
Hue 584ce45979 Merge branch 'master' into dev 2026-07-16 20:26:16 +02:00
HueByte 53927b130c Add markdown linting tools and scripts
- Create package.json to manage markdownlint-cli2 as a dev dependency.
- Add PowerShell script for linting Markdown files with options for fixing issues.
- Update shell script to prefer locally installed markdownlint-cli2 or fallback to npx.
2026-07-16 20:22:57 +02:00
HueByte ca3c1ec2b5 feat: add documentation for TUI, messages & attachments, and IRC gateway; update index and TOC 2026-07-16 20:02:18 +02:00
Hue 35a4eec749 Merge pull request #57 from HueByte/dev_copy_paste_qol
Dev copy paste qol
2026-07-16 19:44:32 +02:00
HueByte 78f18a36ba docs: update changelog for v0.2.14 to include clipboard image and multi-file paste features 2026-07-16 19:41:15 +02:00
HueByte 2157884e61 refactor: replace Key constants with KeyCode for improved clarity and performance 2026-07-16 19:40:18 +02:00
HueByte 4f2cffa372 feat: add clipboard image handling for pasting and staging attachments 2026-07-16 19:40:18 +02:00
Hue 31a0bb8c9f Merge pull request #56 from HueByte/dev_fixes_features_and_nightmares
feat: enhance IRC support with display name handling, private channel…
2026-07-16 19:32:15 +02:00
HueByte e439c8ae72 feat: implement end-to-end encryption for room keys with secure storage and migration support 2026-07-16 18:47:28 +02:00
HueByte b6c01dab15 feat: enhance IRC support with display name handling, private channel tracking, and connection identification 2026-07-16 18:22:34 +02:00
Hue 1f4af9a543 Merge pull request #55 from HueByte/dev
Dev
2026-07-16 16:52:23 +02:00
HueByte b62729dc95 feat: enhance message decryption for IRC clients and improve attachment handling 2026-07-16 16:35:34 +02:00
HueByte aae788028e feat: enhance chat functionality with auto-join, persistent read positions, and theme border customization 2026-07-16 08:19:43 +02:00
HueByte c048b39e42 feat: release v0.2.13 with chat visual overhaul and new features 2026-07-16 07:54:17 +02:00
HueByte 3886e7148c feat(chat): enhance chat UI with new features and visual improvements
- Added new attributes for chat colors including rail, date rules, and unread markers.
- Enhanced ChatLine class to support colored segments for continuation lines and horizontal separator rules.
- Introduced a WelcomeBanner class to display a splash screen when no channel is selected.
- Implemented NickColorHelper for deterministic per-nick colors, ensuring consistent user color representation.
- Updated ChannelListSource to highlight channels with unread messages and mentions.
- Improved MainWindow to include a spinner for transitional connection states and display activity in the status bar.
- Added unit tests for NickColorHelper to ensure stable and predictable color indexing.
2026-07-16 07:48:47 +02:00
Hue b9a80806e1 Merge pull request #54 from HueByte/dev_update_fixes
Dev update fixes
2026-07-16 07:10:50 +02:00
HueByte e797ec2542 feat: add /meta command for channel metadata retrieval
- Implemented the `/meta` command to fetch and display channel metadata including room ID, topic, message count, unique user count, estimated size, and protection level.
- Added `ChannelMetaDto` to encapsulate channel metadata.
- Updated `ChannelsController` to handle the new `/meta` endpoint.
- Introduced `UploadLimits` configuration for admin-defined upload size limits for files, images, audio, and avatars.
- Enhanced error handling and user feedback for metadata retrieval.
- Updated documentation to reflect changes in encryption and room metadata.
- Added tests for the new functionality and upload limits.
2026-07-16 07:04:58 +02:00
HueByte dbf6565d18 feat: Implement update confirmation handling and streamline update process 2026-07-16 07:04:26 +02:00
HueByte 494dcb46cf feat: Update CI workflows to trigger on successful completion of previous CI runs 2026-07-16 05:59:27 +02:00
Hue ce41ef9c0a Merge pull request #53 from HueByte/dev_QOL_And_Gateway
Dev qol and gateway
2026-07-16 05:53:33 +02:00
HueByte 9aea6ecfc3 refactor: Update DroppedFileParserTests to use absolute path helper for improved readability and maintainability 2026-07-16 05:52:06 +02:00
HueByte 5040c5c201 feat: Enhance ThemeManager to ensure transparent themes render correctly for editable fields 2026-07-16 05:46:02 +02:00
HueByte a3a413f0b1 feat: Add "Copy message ID" option to message context menu 2026-07-16 05:38:41 +02:00
HueByte 6292e82cec feat: Add ASCII art size selection for image attachments and enhance message context menu 2026-07-16 05:35:11 +02:00
HueByte 2d33773c24 feat: Add support for message attachments
- Introduced Attachment model to handle file attachments associated with messages.
- Updated ModerationController to manage message deletions and attachment cleanup.
- Enhanced ChatService to include attachments in message retrieval.
- Implemented migration for legacy single-attachment messages to the new Attachments model.
- Added unit tests for attachment handling in message formatting and parsing.
- Updated database context and migrations to support new Attachments table.
2026-07-16 05:02:12 +02:00
HueByte e05b420ce9 feat: Implement end-to-end encryption for channels
- Added EncryptionSalt and WrappedRoomKey properties to Channel model.
- Introduced RoomCrypto class for client-side encryption and decryption.
- Updated ChannelService to handle encrypted channels, including creation and rekeying.
- Modified ChannelsController to expose crypto metadata and rekey functionality.
- Enhanced IrcCommandHandler to block joining encrypted channels over IRC.
- Updated database schema with migration for new encryption fields.
- Refactored file validation and image processing services to accommodate encrypted channels.
- Added unit tests for RoomCrypto functionality and updated existing tests for channel services.
2026-07-16 03:50:23 +02:00
HueByte ea8e583ee5 feat: add image validation and ASCII conversion services 2026-07-16 03:50:08 +02:00
HueByte 3ca9dbfd91 feat: add password protection for channels
- Updated IChatService to include password parameter in JoinChannelAsync method.
- Modified ChannelDto and related models to support password functionality.
- Implemented password handling in ChannelService for channel creation and membership validation.
- Enhanced IrcCommandHandler to manage channel join requests with passwords.
- Added ChannelPasswordDialog for user input when joining protected channels.
- Created database migration to add PasswordHash column to Channels table.
- Updated tests to cover new password functionality in channel joining and management.
2026-07-16 03:13:03 +02:00
Stone_Red 15187c4665 chore: bump version and add changelog 2026-07-16 01:05:21 +02:00
Stone_Red 64bca51619 feat: show date on messages older than a day and improve time formatting 2026-07-16 01:04:53 +02:00
Hue 3538ec8005 Merge pull request #49 from HueByte/dev
feat: update authors and project URL in nuspec file
2026-07-01 23:03:07 +02:00
HueByte 1b234e39e1 feat: update authors and project URL in nuspec file 2026-07-01 23:00:04 +02:00
Hue 19bf123c8c Merge pull request #48 from HueByte/dev
Dev
2026-07-01 22:40:16 +02:00
Stone_Red 6cf284a475 chore: remove LICENSE.txt and VERIFICATION.txt from choco tools directory 2026-07-01 22:35:44 +02:00
HueByte 3b45bb5661 feat: update DirectoryHubUrl to point to the production server 2026-04-24 16:39:16 +02:00
Hue 6235565480 Merge pull request #46 from HueByte/dev
Dev merge
2026-04-24 16:13:39 +02:00
HueByte ecb20c4c52 feat: update .env.example with additional server configuration comments and add release checklist workflow 2026-04-24 15:51:01 +02:00
HueByte a85d16fff8 feat: update installation script and documentation for version 0.2.11 release 2026-04-24 15:51:01 +02:00
HueByte 6db93ecfea feat: enhance server registration handling with response envelope and error management 2026-04-24 15:51:01 +02:00
HueByte 67587dafc2 feat: implement DirectoryClaimStore for managing directory claims and enhance ServerDirectoryService with registration error handling 2026-04-24 15:51:01 +02:00
HueByte 1bbe099835 feat: enhance presence tracking and server registration with user count updates and multi-host support 2026-04-24 15:51:01 +02:00
Hue 769aa5b468 Merge pull request #44 from HueByte/dev
fix: resolve client startup crash by explicitly passing Configuration…
2026-04-20 18:18:01 +02:00
Hue 6660944588 Merge branch 'master' into dev 2026-04-20 18:16:20 +02:00
HueByte 4b41438af0 fix: resolve client startup crash by explicitly passing ConfigurationReaderOptions for Serilog 2026-04-20 18:14:54 +02:00
Hue a4fe432992 Merge pull request #43 from HueByte/dev
Dev v0.2.10
2026-04-20 17:45:39 +02:00
HueByte 9279e8be06 fix: update release notes for v0.2.10 to reflect Command Palette and Infinite History Scroll features 2026-04-20 17:42:06 +02:00
Hue 7f9fcfe3cc Merge pull request #36 from HueByte/dev_fix_notification_sound
fix: error when playing notification sounds in quick succession
2026-04-20 17:42:06 +02:00
Hue 62c5ab27c5 Merge pull request #39 from HueByte/dev_load_more_messages_on_scroll
feat: load more messages on scroll
2026-04-20 17:42:05 +02:00
Stone_Red 240892495b chore: add notification bug fix to changelog 2026-04-20 17:42:05 +02:00
Stone_Red 6e7cbf39f0 chore: add channel history loading and refactor GetChannelHistory with offset to changelog 2026-04-20 17:42:05 +02:00
Stone_Red 83d257591e fix: error when playing notification sounds in quick succession 2026-04-20 17:42:05 +02:00
Stone_Red e42f1a0965 feat: load more message history when scrolling to top 2026-04-20 17:42:05 +02:00
Hue fe6dfd3d4d Merge pull request #40 from HueByte/dev_search_dialog
feat: add search dialog for quick navigation
2026-04-20 17:42:04 +02:00
Stone_Red d6282885e3 refactor: move search dialog handling to AppOrchestrator 2026-04-20 17:42:04 +02:00
Stone_Red bd8b88add2 chore: add command palette with Ctrl+K for quick navigation and actions to changelog 2026-04-20 17:42:04 +02:00
Stone_Red ff9a9e3dd0 chore: mark search bar/modal as completed in the todo list 2026-04-20 17:42:04 +02:00
Stone_Red aa6599a4e0 feat: search dialog to navigate app 2026-04-20 17:42:04 +02:00
Hue 3091a146eb Merge pull request #41 from HueByte/dev_move_cursor_to_end_on_autocomplete
fix: set input field insertion point to end after autocomplete
2026-04-20 17:42:03 +02:00
HueByte 000764fdb4 chore: update version to 0.2.10 and enhance installation scripts and changelog 2026-04-20 17:42:03 +02:00
Stone_Red 56fccf5cfb chore: add cursor position fix to changelog 2026-04-20 17:42:03 +02:00
Stone_Red b98673f8c5 fix: set input field insertion point to end after autocomplete 2026-04-20 17:42:03 +02:00
Stone_Red 335cfcc28a Merge pull request #42 from HueByte/dev_fix_update_service
fix: update service
2026-04-20 17:41:23 +02:00
HueByte 6aef6890cf fix: ensure progress dialog updates on the UI thread 2026-04-20 17:41:22 +02:00
Stone_Red 5b8df9d505 fix: remove unnecessary _app.Invoke calls around update progress dialog updates 2026-04-20 17:41:22 +02:00
Stone_Red 6dbc29818c fix: error when trying to zip open log file 2026-04-20 17:41:22 +02:00
HueByte 6758aceb5d chore: add v0.2.9 release notes to changelog and table of contents 2026-04-07 15:41:18 +02:00
Hue 06aba16303 Merge pull request #35 from HueByte/dev
Merge dev branch
2026-04-07 14:51:14 +02:00
Hue 89b028cf06 Merge branch 'master' into dev 2026-04-07 14:46:58 +02:00
Stone_Red eb4aac9861 Merge pull request #37 from HueByte/dev_fix_create_dialog_checkbox
fix: when users clicks public -> private -> public checkbox in the channel creation, it ends up creating the channel on 3rd check switch
2026-02-25 22:30:13 +01:00
Stone_Red 38d63d844d chore: mark checkbox issue in channel creation as completed in todo list 2026-02-25 22:29:06 +01:00
Stone_Red 3f2211f42a fix: double click on public checkbox creates channel by setting set CommandsToBubbleUp in dialog 2026-02-25 22:29:06 +01:00
Stone_Red 0606394af2 Merge pull request #38 from HueByte/dev_fix_choco_path
fix: choco install path by separating directory and file joins
2026-02-25 18:07:20 +01:00
Stone_Red ee18743721 fix: choco install path by separating directory and file joins 2026-02-25 18:04:13 +01:00
HueByte 0aaa371488 chore: update release process for single-file publish and enhance installer script 2026-02-25 10:08:50 +01:00
HueByte 8689dc2a01 fix: add TODO for incorrect embed color display 2026-02-24 23:08:32 +01:00
HueByte 5d61266fd7 docs: add configuration guide and update related documentation 2026-02-24 23:07:41 +01:00
HueByte ae342381e0 fix: update release workflow and README badges; reorganize table of contents 2026-02-24 22:50:29 +01:00
Stone_Red ba536c6f9c Merge pull request #33 from HueByte/dev_fix_docs_urls
fix: documentation URLs in echohub.nuspecch
2026-02-24 22:47:27 +01:00
Stone_Red 92b89fa8a0 fix: github repo URLs in echohub.nuspecch 2026-02-24 22:46:35 +01:00
Stone_Red 9029d63e54 fix: documentation URLs in echohub.nuspecch 2026-02-24 22:42:07 +01:00
HueByte 023e62dea6 fix: update release workflow to correctly handle version checks and Chocolatey publishing conditions 2026-02-24 22:27:30 +01:00
HueByte 36e1ea0dfa fix: update Chocolatey publish condition to check for source changes 2026-02-24 22:18:39 +01:00
Hue be18cf88df Merge pull request #32 from HueByte/dev
chore: update release workflow to include Chocolatey package publishing
2026-02-24 22:14:25 +01:00
Hue 595475c436 Merge branch 'master' into dev 2026-02-24 22:13:31 +01:00
HueByte 1b6c27247f chore: update release workflow to include Chocolatey package publishing 2026-02-24 22:12:26 +01:00
Hue 4a598aa8a8 Merge pull request #31 from HueByte/dev
Dev merge
2026-02-24 22:01:59 +01:00
Hue ed7d0a73a3 Merge branch 'master' into dev 2026-02-24 22:00:48 +01:00
HueByte 6af85559cb chore: update todo list with completed tasks 2026-02-24 21:59:42 +01:00
Stone_Red 43f1b97244 Merge pull request #26 from HueByte/todo_list
Add  todo list
2026-02-24 21:51:42 +01:00
Stone_Red 9baa3ff566 chore: fix lint errors in todo.md 2026-02-24 21:50:44 +01:00
Stone_Red 0330f24e45 Add todo list 2026-02-24 21:48:12 +01:00
Stone_Red ac98845c69 Merge pull request #28 from HueByte/dev_fix_ghost_channel_on_join
fix: ghost channel when trying to join a channel that doesn't exist
2026-02-24 21:47:53 +01:00
Stone_Red d4f540285b chore: add ghost channel fixes to changelog 2026-02-24 21:45:33 +01:00
Stone_Red 3896640ac7 refactor: Move JoinChannelResult to the correct position in ChatDtos.cs 2026-02-24 21:45:33 +01:00
Stone_Red 29bfd87d8b fix: ghost channel when trying to join a channel that doesn't exist 2026-02-24 21:45:33 +01:00
Stone_Red b0adb55b8f refactor: Move JoinChannelResult to the correct position in ChatDtos.cs 2026-02-24 21:45:33 +01:00
Stone_Red 24a5bdb9a1 fix: ghost channel when trying to join a channel that doesn't exist 2026-02-24 21:45:33 +01:00
HueByte 5391d2cb1c fix: improve role tag formatting and handle empty role cases in user status display 2026-02-24 21:44:43 +01:00
HueByte 62996f85e9 fix: add space between role tag and username in status display 2026-02-24 21:15:41 +01:00
Hue ac5348dbb0 Merge pull request #30 from HueByte/dev_bugs_attack
Dev bugs attack
2026-02-24 21:05:11 +01:00
Hue ad5627a4bb Merge branch 'dev' into dev_bugs_attack 2026-02-24 21:03:23 +01:00
Hue c7a5829fac Merge pull request #29 from HueByte/dev_pipelines
Dev pipelines
2026-02-24 21:02:00 +01:00
HueByte a0d9d86956 fix: update markdownlint configuration to allow compact table pipe style 2026-02-24 21:00:51 +01:00
HueByte 0c16f44db6 feat: enhance user presence and channel interaction features
- Fix userlist not refreshing after creating a new channel.
- Implement unmute timer with a background job to automatically unmute users.
- Improve userlist display by filtering invisible users and ensuring proper transitions between statuses.
- Add clickable usernames, @mentions, and #channels for easier navigation.
- Embed theme colors from source sites for a more cohesive UI.
- Introduce a stateful userlist that updates incrementally via SignalR events.
- Restrict auto-opening of files to safe types only, enhancing security.
- Refactor user management into a dedicated service to reduce code duplication.
- Add a MuteExpirationService to handle timed mutes.
- Update documentation with Mermaid diagrams for major flows.
2026-02-24 20:56:40 +01:00
HueByte fb4f6c34ed feat: add detailed documentation for authentication, connection, messaging, channels, moderation, and media flows 2026-02-24 20:50:20 +01:00
Hue 8647b05c12 Merge pull request #27 from HueByte/dev_distribution_update
Dev distribution update
2026-02-24 19:51:11 +01:00
Hue e2bab3d0d9 Merge branch 'dev' into dev_distribution_update 2026-02-24 19:50:11 +01:00
HueByte 6295831045 feat: update nuspec metadata and add PATH setup functionality for terminal access 2026-02-24 19:44:55 +01:00
HueByte 045515369c feat: add Chocolatey package and Linux/macOS install script with automated publishing 2026-02-24 19:44:46 +01:00
Stone_Red fe0e31f9a0 Merge pull request #25 from HueByte/dev_improve_word_wrapping
feat: improve word wrapping in ChatLine
2026-02-24 13:54:36 +01:00
Stone_Red 3273e62b37 feat: improve word wrapping in ChatLine 2026-02-24 13:53:40 +01:00
Hue cf5fca5772 Merge pull request #24 from HueByte/dev_update_adjustments
Dev update adjustments
2026-02-23 19:46:03 +01:00
HueByte 38df05df41 feat: implement rollback functionality with pre-update backup and recovery options | Rebase 2026-02-23 18:15:16 +01:00
Stone_Red 760693befe Merge pull request #22 from HueByte/dev_manual_update_entry
feat: Add "Check for Updates" menu item
2026-02-23 17:50:12 +01:00
Stone_Red 241fee67e8 chore: update AlwaysUpToDate package to version 2.0.2.20250223 2026-02-23 17:20:38 +01:00
Stone_Red 0e3dd932af feat: Add "Check for Updates" menu item 2026-02-23 17:20:38 +01:00
Hue 81b09b1af7 Merge pull request #23 from HueByte/dev_user_irc_improvements
Dev user irc improvements
2026-02-23 15:58:37 +01:00
HueByte 94b31b6056 refactor: replace FakeChatService with FakeUserService for user authentication and profile handling in tests 2026-02-23 15:52:18 +01:00
HueByte 6e76065dcb fix: correct markdown table formatting and specify code block type in Docker documentation 2026-02-23 14:53:58 +01:00
HueByte bdcff74ad5 Refactor user management: Extract IUserService and UserService, consolidate user registration, authentication, and profile management. Fix memory leaks in ApiClient, enhance connection management, and improve error handling in AuthController and UsersController. Update IRC command handling to utilize IUserService for user operations. 2026-02-23 14:51:24 +01:00
HueByte 27a25b1b43 feat: implement user registration and update SASL authentication handling 2026-02-23 14:51:04 +01:00
HueByte 28c4b2993f feat: handle SASL authentication abort scenario in IrcCommandHandler 2026-02-23 10:57:12 +01:00
HueByte 3c760b0bd8 feat: improve IRC command handling with debug logging for incoming messages 2026-02-23 10:54:02 +01:00
HueByte c2a8e9cfc8 feat: enhance SASL authentication logging for better traceability 2026-02-23 10:40:56 +01:00
HueByte 45fd382b13 feat: add Docker support with environment configuration and entrypoint script 2026-02-22 18:12:06 +01:00
HueByte 039390c8b0 feat: add Docker workflow for building and pushing multi-arch server image to GHCR 2026-02-22 18:03:25 +01:00
HueByte c5be63db25 feat: add Docker support for EchoHub.Server with Dockerfile and docker-compose.yml 2026-02-22 17:58:18 +01:00
HueByte 993bb1f973 refactor: enhance audio playback service with semaphore locking for thread safety 2026-02-22 16:43:05 +01:00
Hue 94f968ccf9 Merge pull request #21 from HueByte/dev
Dev
2026-02-22 16:31:37 +01:00
HueByte 4f96b8d986 refactor: consolidate and reorganize code structure; extract classes and improve readability 2026-02-22 16:25:06 +01:00
HueByte fbb2958fdd refactor: remove Terminal.Gui submodule and switch to NuGet package; update version to 0.2.7 2026-02-22 16:23:19 +01:00
HueByte 62e9d7fff5 fix: optimize user fetching after connection failure handling 2026-02-22 16:02:15 +01:00
Hue be4d686d4d Merge pull request #19 from HueByte/dev_cleanups
Dev cleanups
2026-02-22 15:32:03 +01:00
HueByte c8ea124198 Add hex color parsing helper and implement custom list sources for channels and users
- Introduced HexColorHelper for parsing hex color strings to Terminal.Gui Attributes and Colors.
- Created ChannelListSource for managing and rendering a list of channels with unread counts and active indicators.
- Developed UserListSource for displaying online users with per-user nickname colors.
- Refactored MainWindow to utilize ChatMessageManager for handling messages and channel state.
- Updated project references and removed unused content from the server project.
- Adjusted tests to reflect changes in namespaces and structure.
2026-02-22 08:08:21 +01:00
HueByte c5d8e25a86 Add dialogs for connection, channel creation, profile editing, and status management
- Implemented ConnectDialog for server connection and authentication.
- Added CreateChannelDialog for creating new channels with name and topic.
- Developed ProfileEditDialog for editing user profiles including display name, bio, and avatar.
- Created ProfileViewDialog for viewing user profiles with options to edit or set status.
- Introduced StatusDialog for setting user status and status message.
- Added UpdateConfirmDialog for confirming updates and UpdateProgressDialog for showing update progress.
- Removed obsolete hue_icon.ico file from the server.
2026-02-22 08:07:53 +01:00
HueByte 03f4685ae6 fix: update release workflow to use --notes-file for release notes to prevent shell expansion issues 2026-02-22 06:03:08 +01:00
Hue 17e64293b5 Merge pull request #18 from HueByte/dev
Dev merge
2026-02-22 05:56:01 +01:00
HueByte ce375c7619 fix: remove invisible character from using directive in migration file 2026-02-22 05:51:17 +01:00
HueByte d12f249222 fix: update transparent color handling to use 'None' instead of 'Transparent' across UI components 2026-02-22 05:50:28 +01:00
HueByte bc8e2fd7da feat: add attachment file size support for messages and update upload limits 2026-02-21 20:37:13 +01:00
HueByte 35a162d013 refactor: streamline audio service stop logic in AudioPlayerDialog 2026-02-21 20:36:57 +01:00
HueByte de34fb43b9 feat: enhance audio playback features and UI, including audio player dialog and improved file size handling 2026-02-21 19:50:09 +01:00
Hue 3e03a77aeb Merge pull request #17 from HueByte/dev_api_update
feat: add ApiResponse and ApiResponse<T> records for improved API res…
2026-02-21 18:08:09 +01:00
Hue 5ef338bbf7 Merge branch 'dev' into dev_api_update 2026-02-21 18:01:25 +01:00
HueByte f96f70f09a feat: add ApiResponse and ApiResponse<T> records for improved API response handling 2026-02-21 18:00:10 +01:00
Hue b7d58dc10d Merge pull request #16 from HueByte/dev_changelog_docs
Dev changelog docs
2026-02-21 17:59:04 +01:00
HueByte 7fadd08702 docs: update API documentation and changelog for v0.2.5 release 2026-02-21 17:55:08 +01:00
Hue 576dd4bc94 Merge pull request #14 from HueByte/dev_session_persistence
Dev session persistence
2026-02-21 17:31:19 +01:00
HueByte d4cf35e04e feat: implement session persistence with "Remember Me" functionality and logout support 2026-02-21 17:29:16 +01:00
Hue 23abb9b0bb Merge pull request #13 from HueByte/dev_channel_logic_update
feat: extract channel management to IChannelService and implement CRU…
2026-02-21 17:28:53 +01:00
HueByte dcb8bbc05f fix: exclude Terminal.Gui from formatting checks in CI workflow 2026-02-21 17:26:30 +01:00
HueByte 4930aee615 chore: update CI workflows to temporarily remove Terminal.Gui submodule's nuget.config to fix restore issues 2026-02-21 17:23:14 +01:00
HueByte 2cd3bbb570 chore: remove submodule NuGet config from CI workflows 2026-02-21 17:22:39 +01:00
HueByte 0d959e317e feat: extract channel management to IChannelService and implement CRUD operations 2026-02-21 17:16:41 +01:00
HueByte 75491d65e2 feat: add nuget.config for package source management and update CI workflows to restore dependencies correctly 2026-02-21 17:16:05 +01:00
Hue 1861fd00f9 Merge pull request #12 from Stone-Red-Code/dev
feat: installer & auto update system
2026-02-21 17:12:47 +01:00
Stone_Red 9996a6be97 chore: Add icon files and set application icon for installer and projects 2026-02-21 17:11:47 +01:00
Stone_Red cf9c647c03 feat: add automatic update checking with confirmation and progress dialogs 2026-02-21 17:11:47 +01:00
Stone_Red 1fa4348700 feat: add EchoHub installer Inno Setup script 2026-02-21 17:11:47 +01:00
HueByte 0c7c620f24 feat: enable recursive submodule fetching in CI workflows 2026-02-21 17:09:04 +01:00
HueByte 56a962c1af feat: add hue icon SVG asset for improved UI representation 2026-02-21 16:17:39 +01:00
HueByte a65b41fb7f feat: enhance channel management and status bar functionality 2026-02-21 16:02:49 +01:00
HueByte ab9e09a609 feat: add support for ignoring diff files in .gitignore 2026-02-21 15:44:13 +01:00
HueByte 1bdc6ec99e feat: update chat rendering to support transparent backgrounds 2026-02-21 13:59:32 +01:00
HueByte fb12848e9a feat: add true transparent background support via Terminal.Gui fork
Add Terminal.Gui fork as submodule with transparent color support
(Color.Transparent emitting CSI 39m/49m default bg/fg sequences).
Switch EchoHub.Client from NuGet to project reference.
Update Transparent theme to use real terminal transparency.
2026-02-21 12:53:46 +01:00
HueByte 7e78c57665 chore: update changelog for v0.2.5 release with new features and fixes 2026-02-21 11:31:55 +01:00
Hue 9d4979d4a7 Merge pull request #10 from HueByte/dev_irc_abstraction_fixes
Dev irc abstraction fixes
2026-02-21 11:26:34 +01:00
HueByte c0d38015ff Add comprehensive unit tests for IRC command handling and message formatting
- Implemented IrcCommandHandlerTests to cover various IRC commands including PING, JOIN, PART, and authentication scenarios.
- Added IrcMessageFormatterTests to validate message formatting for different message types such as text, images, files, and audio.
- Created IrcMessageTests to ensure correct parsing of IRC messages and handling of various command formats.
- Introduced TestHelpers to facilitate testing with mock connections and streams, including a FakeChatService and FakeEncryptionService for simulating chat behavior.
2026-02-21 11:25:34 +01:00
Hue 3bc1446d1c Merge pull request #9 from HueByte/dev_more_tests
Dev more tests
2026-02-21 11:18:07 +01:00
HueByte 411042c397 fix: correct formatting in JwtTokenServiceTests for improved readability 2026-02-20 23:02:51 +01:00
HueByte 50817ce6e9 Add unit tests for various services and functionalities
- Implement tests for ChatLine utility methods including color tag detection and stripping.
- Create comprehensive tests for CommandHandler to validate command handling and status updates.
- Add tests for DataMigrationService to ensure correct ANSI to color tag conversion.
- Enhance FileValidationHelperTests with audio file validation tests.
- Introduce ImageToAsciiServiceTests to verify image dimension retrieval.
- Develop IrcMessageFormatterTests for message formatting and color tag conversion.
- Add JwtTokenServiceTests to validate JWT token generation and hashing.
- Implement LinkEmbedServiceTests for URL extraction and Open Graph tag parsing.
- Update EchoHub.Tests.csproj to include necessary project references.
2026-02-20 23:02:51 +01:00
Hue 9265a9f312 Merge pull request #8 from HueByte/dev_send_rework
feat: add audio playback and file download features with correspondin…
2026-02-20 23:01:03 +01:00
HueByte a860a8fbc3 feat: add audio playback and file download features with corresponding UI updates 2026-02-20 20:47:28 +01:00
Hue ae06e7ae12 Merge pull request #7 from HueByte/dev_e2e_encrypt
feat: Implement message encryption and decryption support
2026-02-20 17:33:28 +01:00
HueByte f49148a85a fix: format table in encryption documentation for better readability 2026-02-20 17:29:52 +01:00
HueByte 575115cdca fix: update table of contents to include specific file paths for articles 2026-02-20 17:24:34 +01:00
HueByte ca9973b411 feat: Update table of contents for documentation and changelog with new sections 2026-02-20 17:20:49 +01:00
HueByte 4c850fc3c9 feat: Update encryption documentation with mermaid sequence diagram for clarity 2026-02-20 17:19:18 +01:00
HueByte 2efe54e417 feat: Implement message encryption and decryption support
- Added IMessageEncryptionService and its implementation MessageEncryptionService for handling message encryption.
- Updated ChannelsController and ChatService to encrypt messages before storing and sending.
- Introduced encryption key retrieval endpoint in ServerController.
- Modified EchoHubDbContext to accommodate increased message content and embed JSON lengths for encrypted data.
- Created migrations to support encryption-related database changes.
- Enhanced FirstRunSetup to ensure encryption key is generated if not present.
- Updated appsettings.example.json to include encryption configuration.
- Added comprehensive unit tests for encryption service and compatibility tests between client and server encryption.
2026-02-20 17:16:32 +01:00
Hue dfa1b21d32 Merge pull request #6 from HueByte/dev
Dev merge
2026-02-19 22:49:14 +01:00
HueByte 981875c495 fix: correct code block syntax for notification sound file path 2026-02-19 22:48:00 +01:00
HueByte c90ed27194 chore: update changelog for v0.2.3 with new features and improvements 2026-02-19 22:46:49 +01:00
HueByte 8f46ea0f2c Dotnet format 2026-02-19 22:45:47 +01:00
HueByte f20ce3d50f feat: add test sound command and enable notifications by default 2026-02-19 22:42:20 +01:00
HueByte 107152298e feat: add force disconnect handling and improve user ban notifications 2026-02-19 22:09:54 +01:00
HueByte 7a8b5f02d3 feat: implement notification sound functionality with user customization options 2026-02-19 22:03:16 +01:00
HueByte b508a5854a feat: Add notification sound functionality and embed support
- Introduced NotificationConfig to manage notification settings, including sound file.
- Added Notification.mp3 asset for notifications.
- Implemented NotificationSoundService to handle playing notification sounds.
- Enhanced ChatRenderer and MainWindow to support emoji rendering.
- Updated MessageDto to allow multiple embeds per message.
- Modified LinkEmbedService to fetch multiple embeds from message content.
- Added data migration for legacy embed JSON format to new array format.
- Adjusted embed handling in ChatService and IrcMessageFormatter to accommodate multiple embeds.
- Updated HubConstants for new embed dimensions and limits.
2026-02-19 21:52:18 +01:00
HueByte 7167b40013 feat: implement link embed functionality to enhance message previews with metadata and thumbnails 2026-02-19 21:21:51 +01:00
HueByte 6965ba573e fix: enhance chat message handling by implementing full Unicode support and collapsing excessive newlines 2026-02-19 21:11:06 +01:00
HueByte 9f303b5311 feat: enhance chat message handling by converting emojis to text shortcodes and improving newline sanitization 2026-02-19 20:41:36 +01:00
HueByte 8fc95e8189 fix: resolve crashes and command issues with emoji handling, file paths, and avatar rendering; implement newline spam protection 2026-02-19 20:01:57 +01:00
HueByte 5d51558c5c feat: implement newline sanitization in chat messages to prevent excessive newlines 2026-02-19 20:00:51 +01:00
HueByte 7181748d40 feat: enhance profile view dialog to render ASCII avatars with color tags 2026-02-19 19:48:48 +01:00
HueByte 0dbb02d12a feat: release v0.2.3 with moderation system, private channels, and UI enhancements 2026-02-19 19:37:45 +01:00
HueByte 38b60e5626 feat: implement channel membership management and ensure default channels are public 2026-02-19 19:21:27 +01:00
HueByte 246eb2b0bb feat: add @mention highlighting in chat lines with new SplitMentions method 2026-02-19 18:59:12 +01:00
HueByte d9a66749e7 feat: implement data migration service to convert ANSI escape codes to printable color tags 2026-02-19 18:57:57 +01:00
HueByte 8dfb1a4fb8 feat: add IsPublic property to channels and enhance channel creation with visibility options 2026-02-19 18:54:50 +01:00
HueByte 3a0ea0d321 feat: enhance file upload and URL sending with optional size parameter 2026-02-19 18:27:02 +01:00
HueByte baebc093f5 feat: implement background update check and add version notification in AppOrchestrator 2026-02-19 18:22:33 +01:00
HueByte b4c3ebd254 feat: enhance profile editing with avatar support and UI adjustments
- Added AvatarPath to ProfileEditResult for user profile updates.
- Updated ProfileEditDialog to include avatar selection with a browse button.
- Increased dialog height to accommodate new avatar input fields.
- Implemented avatar file path handling in the profile edit dialog.

feat: introduce moderation features and user roles

- Added ServerRole enum to define user roles (Member, Mod, Admin, Owner).
- Extended User model to include role, mute, and ban status.
- Created ModerationController for user role assignment, kicking, banning, and muting.
- Implemented methods in IChatBroadcaster and SignalRBroadcaster for user moderation actions.
- Updated database schema with new columns for user roles and moderation states.

fix: ensure muted users cannot send messages

- Added mute status checks in ChatService to prevent message sending for muted users.
- Updated user presence and status handling to reflect role changes and moderation actions.

chore: update constants for ASCII art rendering

- Introduced AsciiArtHeightHalfBlock constant for improved ASCII art rendering.
2026-02-19 17:47:10 +01:00
HueByte 257ac34224 feat: Add heartbeat handling to ServerDirectoryService for connection health checks 2026-02-19 15:17:19 +01:00
Hue 159a28e890 Merge pull request #5 from HueByte/dev
Dev merge
2026-02-19 14:52:04 +01:00
HueByte 328821cd14 refactor: Update changelog for v0.2.2 to reflect startup and shutdown fixes, and standardize constructor injection 2026-02-19 14:45:14 +01:00
HueByte 46a30c6b80 refactor: Remove diagnostic logging from IrcGatewayService, Program, and ServerDirectoryService 2026-02-19 14:22:03 +01:00
HueByte 8dfdc163bf refactor: Update IrcGatewayService to use IServiceProvider for dependency resolution
feat: Simplify IChatBroadcaster registration in IrcServiceExtensions
feat: Add diagnostic logging for IRC configuration and environment
2026-02-19 14:09:56 +01:00
HueByte 13297fd017 Refactor classes to use constructor injection for dependencies
- Updated IrcBroadcaster to use constructor injection for IrcGatewayService.
- Refactored JwtTokenService to initialize configuration values in the constructor.
- Modified AuthController to use constructor injection for EchoHubDbContext and JwtTokenService.
- Refactored ChannelsController to utilize constructor injection for dependencies.
- Updated FilesController to use constructor injection for FileStorageService.
- Refactored ServerController to initialize EchoHubDbContext and IConfiguration via constructor.
- Modified UsersController to use constructor injection for EchoHubDbContext and ImageToAsciiService.
- Updated EchoHubDbContext to use constructor for DbContextOptions.
- Refactored ChatHub to use constructor injection for IChatService and ILogger.
- Modified ChatService to utilize constructor injection for dependencies.
- Refactored ServerDirectoryService to use constructor injection for IConfiguration, PresenceTracker, and ILogger.
2026-02-19 14:04:19 +01:00
HueByte 0422066851 refactor: Update SignalRBroadcaster to use IServiceProvider for hub context retrieval 2026-02-19 13:54:42 +01:00
HueByte cf5ef80c08 feat: Enhance diagnostic logging for service resolution during startup 2026-02-19 13:48:26 +01:00
HueByte c8e33c96ce feat: Add diagnostic logging for hosted services resolution and startup timing 2026-02-19 13:37:51 +01:00
HueByte 2a6dbb4461 feat: Add diagnostic hooks and heartbeat logging for application lifecycle events 2026-02-19 13:30:36 +01:00
HueByte caba400f43 Temp diagnostics 2026-02-19 13:22:13 +01:00
HueByte 552fe6afa3 feat: Release v0.2.2 with shutdown improvements and connection handling fixes 2026-02-19 13:01:51 +01:00
Hue 87e8df4ec5 Merge pull request #4 from HueByte/dev
fix: Improve shutdown process for IRC Gateway and Server Directory se…
2026-02-19 12:31:38 +01:00
HueByte 4c192717de feat: Release v0.2.1 with shutdown and CI fixes 2026-02-19 12:29:45 +01:00
HueByte 1bf32450fd fix: Improve shutdown process for IRC Gateway and Server Directory services 2026-02-19 12:25:33 +01:00
Hue 963c6d3384 Merge pull request #3 from HueByte/dev
Dev merge
2026-02-19 11:39:54 +01:00
HueByte fbc75ec744 fix: Update CI workflow to trigger only on master branch for push events 2026-02-19 11:38:56 +01:00
HueByte 7bd99be41e feat: Add IRC gateway functionality and update documentation 2026-02-19 11:34:26 +01:00
HueByte cb6b9d1e55 feat: Implement IRC Gateway Service and related functionality
- Add IrcGatewayService to handle IRC connections and commands.
- Create IrcMessage class for parsing IRC protocol lines.
- Implement IrcMessageFormatter for formatting messages as IRC lines.
- Define IrcNumericReply constants for IRC numeric replies.
- Add IrcOptions class for configuration settings related to IRC.
- Create IrcServiceExtensions for adding IRC services to the application.
- Refactor ChannelsController to use IChatService for broadcasting messages and channel updates.
- Update ChatHub to utilize IChatService for user connection and message handling.
- Introduce ChatService to manage chat-related operations and interactions.
- Implement SignalRBroadcaster for broadcasting messages to SignalR clients.
- Update PresenceTracker to retrieve usernames for connections.
- Modify appsettings.example.json to include IRC configuration options.
- Update solution file to include the new IRC project.
2026-02-19 11:31:20 +01:00
Hue 441aa679f6 Merge pull request #2 from HueByte/dev
dev merge
2026-02-19 11:21:12 +01:00
HueByte da7c16d5d0 feat: Add CI and Release workflows for automated markdown linting, formatting checks, and deployment 2026-02-19 11:18:30 +01:00
HueByte defc5873fe fix: Update git log command to reference HEAD for more accurate commit history 2026-02-19 11:03:20 +01:00
HueByte 7952c13c2b feat: Allow PR checks on dev branch and standardize dotnet version formatting 2026-02-19 11:01:11 +01:00
Hue 844313a8c6 Merge pull request #1 from HueByte/dev
feat: Enhance server connection handling with exponential backoff and…
2026-02-19 10:52:05 +01:00
HueByte efc6aa8a02 feat: Update changelog for v0.1.1 release and increment version to 0.1.1 2026-02-19 10:46:45 +01:00
HueByte ff184da095 feat: Enhance server connection handling with exponential backoff and improved reconnection logic 2026-02-19 10:44:00 +01:00
HueByte 9b8c648c8d fix: Remove invisible character from using directive in migration file 2026-02-19 10:18:02 +01:00
HueByte c553705c32 feat: Add format check step to CI workflows for .NET project 2026-02-19 10:12:34 +01:00
HueByte 9975f4e4be Refactor and update various components of EchoHub.Server
- Updated launchSettings.json for consistency.
- Refactored FileValidationHelper to improve image validation logic.
- Enhanced ServerDirectoryService for better connection handling and user count updates.
- Improved DatabaseSetup for legacy database handling and seeding default channels.
- Refined FirstRunSetup to ensure JWT secret generation.
- Removed appsettings.Development.json as it is no longer needed.
- Updated EchoHub.Tests project file for consistency.
- Added unit tests for FileValidationHelper and PresenceTracker with improved assertions.
- Updated ValidationConstantsTests to ensure regex validations are correct.
- Cleaned up solution file formatting for better readability.
2026-02-19 10:12:28 +01:00
HueByte 32e01e8d71 feat: Add .gitattributes to enforce LF line endings for shell scripts 2026-02-19 10:08:39 +01:00
HueByte aea29d3977 feat: Enable manual triggering of CI workflow with workflow_dispatch event 2026-02-19 10:00:01 +01:00
HueByte b0e1ec48af feat: Enable automatic release creation in CI workflow with versioning and artifact publishing 2026-02-19 09:56:58 +01:00
HueByte 16e0b0743d fix: Update API documentation links and remove unnecessary file types from docfx configuration 2026-02-19 09:55:52 +01:00
HueByte ff9c264f4b feat: Add documentation files including Code of Conduct, Contributing guidelines, and Security policy; update Markdown linting configuration and scripts 2026-02-19 09:53:06 +01:00
HueByte 653f25b70b feat: Add issue templates for bug reports and feature requests, and update PR template 2026-02-19 09:52:57 +01:00
HueByte c9f7d86529 feat: Add changelog and update documentation structure with new styles and assets 2026-02-19 09:52:46 +01:00
HueByte ad69420ec8 feat: Add avatar upload functionality and refactor profile handling in AppOrchestrator 2026-02-19 09:11:14 +01:00
HueByte bed6040f7c feat: Implement chat line wrapping and viewport resizing for message display 2026-02-19 09:11:01 +01:00
HueByte 96b31ec568 feat: Manage joined channels in AppOrchestrator and update channel history handling 2026-02-19 08:03:30 +01:00
HueByte eef9059b6a feat: Add documentation build and deployment workflow 2026-02-19 08:03:19 +01:00
HueByte 49240026b0 feat: Enhance CI workflows to check for source and documentation changes, and cache NuGet packages
feat: Embed appsettings.json as a resource and update configuration loading logic
2026-02-19 07:01:22 +01:00
HueByte 1827f25944 fix: Add yield statement to ensure host finishes starting before logging or connecting 2026-02-19 06:25:29 +01:00
HueByte ff0ab068dc feat: Log connection details when PublicServer is enabled 2026-02-19 06:21:40 +01:00
HueByte 15b6443cf0 refactor: Remove PublicPort configuration and update registration logic 2026-02-19 06:18:43 +01:00
HueByte a273ff6bea feat: Implement server directory registration and user count tracking 2026-02-19 06:05:31 +01:00
HueByte b45b4c3139 feat: Enhance chat UI with topic display and command autocomplete functionality 2026-02-19 05:50:24 +01:00
HueByte 0c2a94ef17 fix: Update src change detection logic to handle initial push scenario 2026-02-19 05:41:14 +01:00
HueByte 56ff6197a2 feat: Add initial implementation of CI/CD workflows, documentation, and testing framework 2026-02-19 05:35:05 +01:00
HueByte 3188d18da2 feat: Revamp README.md with detailed project overview and usage instructions 2026-02-19 05:13:48 +01:00
HueByte 70ca2da7ae fix: Update connection string handling to allow for empty configuration 2026-02-19 04:53:43 +01:00
HueByte d4d5a71ec4 fix: Update appsettings.example.json to include server URLs 2026-02-19 04:42:38 +01:00
HueByte c9c76c43fa feat: Add Create Channel dialog and related events
- Introduced CreateChannelDialog for user to create new channels with name and topic.
- Added OnCreateChannelRequested event in MainWindow for channel creation.
- Enhanced EchoHubConnection with OnReconnected event for connection state handling.
- Updated EchoHubDbContext to use application base directory for SQLite database path.
- Integrated Serilog for logging in EchoHub.Server.
- Refactored database initialization and migration logic into DatabaseSetup class.
- Implemented FirstRunSetup to ensure appsettings.json and generate JWT secret if needed.
- Updated appsettings files to configure Serilog logging.
- Enhanced error handling and logging in ChatHub methods for better traceability.
2026-02-19 04:36:40 +01:00
HueByte ebc8fffec8 Refactor EchoHub solution structure and remove unused components
- Deleted EchoHub.slnx and related project files for EchoHub.Web and EchoHub.Api.
- Removed ServerDirectoryDbContext, ServerDirectoryService, and related extensions and DTOs.
- Updated CommandHandler and Program.cs in EchoHub.Client to handle URL sending instead of file downloading.
- Added SendUrlRequest DTO and corresponding API endpoint in ChannelsController for handling URL uploads.
- Implemented database migration support in EchoHub.Server with initial migration setup.
- Adjusted Program.cs to include HTTP client configuration for image downloading.
- Cleaned up unnecessary files and references to streamline the project.
2026-02-19 03:51:38 +01:00
HueByte 287270b26d feat: Refactor authentication and token management
- Updated EchoHubConnection to use ApiClient for token retrieval.
- Introduced ValidationConstants for common validation patterns and limits.
- Enhanced AuthDtos with refresh token support and expiration details.
- Added new ChatDtos for channel creation and topic updates.
- Created CommonDtos for error and paginated responses.
- Implemented RefreshToken model for managing refresh tokens.
- Modified JwtTokenService to generate and hash refresh tokens.
- Updated AuthController to handle registration, login, token refresh, and logout with improved error handling.
- Enhanced ChannelsController with channel creation, topic updates, and pagination for channel retrieval.
- Added FilesController for file management with rate limiting.
- Improved UsersController for profile updates and avatar uploads with validation.
- Integrated rate limiting across controllers to manage request load.
- Introduced FileValidationHelper for validating uploaded image files.
- Updated database context to include RefreshToken and enforce unique constraints.
- Enhanced ChatHub for improved channel and message handling with validation.
- Updated Program.cs to configure rate limiting and CORS policies.
2026-02-19 03:25:01 +01:00
HueByte ed1bf13302 Implement chat rendering and message handling with colored segments 2026-02-19 02:53:29 +01:00
HueByte 1e6ecab583 Enhance configuration and logging setup
- Added Microsoft.Extensions.Configuration.Json and Serilog.Settings.Configuration packages.
- Configured Serilog to read settings from appsettings.json.
- Updated .gitignore to exclude database and upload files.
- Refactored MainWindow to improve key handling and menu structure.
- Introduced appsettings.example.json for logging configuration.
2026-02-19 02:53:11 +01:00
HueByte fe3a120134 Update .gitignore to exclude appsettings files and add appsettings.example.json 2026-02-18 13:56:30 +01:00
HueByte cfa8b90d04 Add core models, DTOs, and services for EchoHub chat application
- Created User, Channel, Message, and ServerInfo models with necessary properties.
- Added DTOs for user profiles, server information, and message handling.
- Implemented JWT authentication service for user login and token generation.
- Developed Entity Framework Core DbContext for database interactions.
- Introduced SignalR ChatHub for real-time messaging and presence tracking.
- Implemented file storage and image to ASCII conversion services.
- Set up CORS and middleware for API endpoints.
- Created launch settings and development configuration for server and web projects.
2026-02-18 13:52:19 +01:00
Hue 20a341947a Initial commit 2026-02-18 08:58:49 +01:00
924 changed files with 39566 additions and 170404 deletions
+12
View File
@@ -0,0 +1,12 @@
{
"version": 1,
"isRoot": true,
"tools": {
"docfx": {
"version": "2.78.3",
"commands": [
"docfx"
]
}
}
}
+24
View File
@@ -0,0 +1,24 @@
root = true
[*]
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
charset = utf-8
indent_style = space
indent_size = 4
[*.{cs,csx}]
indent_size = 4
[*.{json,yml,yaml}]
indent_size = 2
[*.{xml,csproj,props,targets,slnx}]
indent_size = 2
[*.md]
trim_trailing_whitespace = false
[Makefile]
indent_style = tab
+77
View File
@@ -0,0 +1,77 @@
# EchoHub Server Configuration
# Copy this file to .env and customize as needed: cp .env.example .env
# These override appsettings.json via ASP.NET Core's configuration hierarchy.
# ── Server ───────────────────────────────────────────────────────────
Server__Name=My EchoHub Server
Server__Description=A self-hosted EchoHub chat server
Server__PublicServer=false
# Registration mode: open (default), invite (codes via /invite, Admin+), or closed.
# Server__Registration=open
# Hostnames advertised to the EchoHubSpace directory. Index per entry.
# Server__PublicHosts__0=echohub.example.com
# Server__PublicHosts__1=alias.example.com
# Topic tags surfaced in the EchoHubSpace browser. Index per entry.
# Server__Tags__0=community
# Server__Tags__1=gaming
# Server__Admins__0=adminUsername
# Override where the EchoHubSpace claim token file is stored (defaults next to the DB).
# Server__DirectoryClaimPath=
# ── JWT ──────────────────────────────────────────────────────────────
# Auto-generated on first run if left empty. Only set if you need a stable secret across containers.
# Jwt__Secret=
# Jwt__Issuer=EchoHub.Server
# Jwt__Audience=EchoHub.Client
# ── Encryption ───────────────────────────────────────────────────────
# Auto-generated on first run if left empty.
# Encryption__Key=
# Encryption__EncryptDatabase=false
# ── Storage ──────────────────────────────────────────────────────────
# Defaults are set in the Dockerfile to use /app/data for persistence.
# Storage__Path=
# Storage__CleanupIntervalHours=1
# Storage__RetentionDays=30
# ── Uploads ──────────────────────────────────────────────────────────
# Uploads__MaxFileSizeMB=100
# Uploads__MaxImageSizeMB=10
# Uploads__MaxAudioSizeMB=10
# Uploads__MaxAvatarSizeMB=2
# Uploads__MaxAttachmentsPerMessage=10
# ── Spam protection ──────────────────────────────────────────────────
# Per-user flood/duplicate limits with auto-mute escalation; Mods and above are exempt.
# Spam__Enabled=true
# Spam__MaxMessagesPerWindow=8
# Spam__WindowSeconds=5
# Spam__MaxDuplicateMessages=3
# Spam__AutoMuteMinutes=5
# Spam__ViolationThreshold=5
# Spam__ViolationWindowMinutes=5
# Only first-time channel joins count — keep this above your public channel count.
# Spam__MaxJoinsPerWindow=25
# Spam__JoinWindowSeconds=30
# Spam__MaxChannelCreatesPerWindow=3
# Spam__ChannelCreateWindowMinutes=10
# ── IRC Gateway ──────────────────────────────────────────────────────
Irc__Enabled=false
# Irc__Port=6667
# Irc__TlsEnabled=false
# Irc__TlsPort=6697
# Irc__TlsCertPath=
# Irc__TlsCertPassword=
# Irc__ServerName=echohub
# Irc__Motd=Welcome to EchoHub IRC Gateway!
# Public base URL used to make attachment links absolute for IRC clients.
# Irc__PublicBaseUrl=https://chat.example.com
# ── CORS ─────────────────────────────────────────────────────────────
# Leave unset to allow all origins. Index per entry to whitelist.
# Cors__AllowedOrigins__0=https://chat.example.com
# ── Logging ──────────────────────────────────────────────────────────
# Serilog__MinimumLevel__Default=Information
+13
View File
@@ -0,0 +1,13 @@
# Normalize all text files to LF in the repository
* text=auto eol=lf
# Explicitly mark binary files
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.woff binary
*.woff2 binary
*.zip binary
*.db binary
+79
View File
@@ -0,0 +1,79 @@
name: Bug report
description: Report a reproducible bug
title: "bug: "
labels: [bug]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to report a bug.
If this is a security issue (auth bypass, token leak, file upload exploit, etc.), please follow SECURITY.md instead of filing a public issue.
- type: dropdown
id: component
attributes:
label: Affected component
options:
- Client (EchoHub.Client)
- Server (EchoHub.Server)
- Core/shared (EchoHub.Core)
- Docs
- CI
validations:
required: true
- type: textarea
id: description
attributes:
label: What happened?
description: Describe the bug and what you expected to happen.
placeholder: "When I..., I expected..., but ..."
validations:
required: true
- type: textarea
id: repro
attributes:
label: Steps to reproduce
description: Include minimal, numbered steps.
placeholder: |
1. ...
2. ...
3. ...
validations:
required: true
- type: textarea
id: logs
attributes:
label: Logs / stack traces
description: Paste relevant logs (redact tokens/secrets).
render: text
- type: input
id: version
attributes:
label: Version
description: App version, commit SHA, or release tag.
placeholder: v0.1.0
- type: textarea
id: environment
attributes:
label: Environment
description: OS, terminal, .NET SDK version.
placeholder: |
OS: Windows 11
Terminal: Windows Terminal
.NET SDK: 10.0.x
- type: checkboxes
id: confirmations
attributes:
label: Confirmations
options:
- label: I searched existing issues and this is not a duplicate
required: true
- label: I removed sensitive info (tokens/keys) from logs
required: true
+5
View File
@@ -0,0 +1,5 @@
blank_issues_enabled: true
contact_links:
- name: Security policy
url: https://github.com/HueByte/EchoHub/security/policy
about: Please report security vulnerabilities here (or see SECURITY.md).
@@ -0,0 +1,51 @@
name: Feature request
description: Suggest an idea or improvement
title: "feat: "
labels: [enhancement]
body:
- type: markdown
attributes:
value: |
Thanks for suggesting an improvement.
EchoHub tries to stay lightweight: terminal-first, self-hosted, and no upsells.
- type: dropdown
id: area
attributes:
label: Area
options:
- Client (TUI)
- Server (API/SignalR)
- Auth/security
- Files/uploads
- Docs
- Build/CI
validations:
required: true
- type: textarea
id: problem
attributes:
label: What problem are you trying to solve?
placeholder: "Its hard to..., because ..."
validations:
required: true
- type: textarea
id: proposal
attributes:
label: Proposed solution
placeholder: "Add/Change ..., so that ..."
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
description: Any other approaches youve thought about.
- type: textarea
id: extra
attributes:
label: Additional context
description: Mockups, examples, links, etc.
+28
View File
@@ -0,0 +1,28 @@
# Summary
<!-- What does this PR change, and why? Keep it brief. -->
## Changes
- Describe the changes here
## Screenshots / recordings (optional)
<!-- If you changed the TUI UI/UX, add a screenshot or short recording. -->
## How to test
- [ ] `dotnet build src/EchoHub.slnx`
- [ ] `dotnet test src/EchoHub.slnx`
## Checklist
- [ ] I ran tests locally (or explained why not)
- [ ] I kept changes focused and easy to review
- [ ] I updated docs where needed (README/docs)
- [ ] I verified no secrets/keys are committed
- [ ] If this touches files/uploads/auth, I considered security implications
## Related issues
- Closes #
+98
View File
@@ -0,0 +1,98 @@
name: CI
on:
push:
branches: [master]
pull_request:
branches: [master, dev]
workflow_dispatch:
jobs:
lint-markdown:
name: Markdown Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 24
cache: npm
- name: Install pinned linter
run: npm ci
- name: Run markdownlint
run: bash scripts/lint-markdown.sh
format-check:
name: Format Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET 10
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
- name: Check formatting
run: dotnet format src/EchoHub.slnx --verify-no-changes --verbosity diagnostic
build-and-test:
name: Build & Test
# Run the cheap, fast checks first; only spend build/test compute if they pass.
needs: [format-check, lint-markdown]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check for src/ changes
id: changes
env:
EVENT: ${{ github.event_name }}
BEFORE: ${{ github.event.before }}
BASE_REF: ${{ github.base_ref }}
run: |
if [ "$EVENT" = "pull_request" ]; then
git fetch origin "$BASE_REF" --depth=1
CHANGED=$(git diff --name-only "origin/$BASE_REF"...HEAD -- 'src/' | wc -l)
elif [ -z "$BEFORE" ] || [ "$BEFORE" = "0000000000000000000000000000000000000000" ]; then
CHANGED=1
else
CHANGED=$(git diff --name-only "$BEFORE" HEAD -- 'src/' | wc -l)
fi
[ "$CHANGED" -gt 0 ] && echo "src_changed=true" >> "$GITHUB_OUTPUT" || echo "src_changed=false" >> "$GITHUB_OUTPUT"
- name: Setup .NET 10
if: steps.changes.outputs.src_changed == 'true'
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
- name: Cache NuGet packages
if: steps.changes.outputs.src_changed == 'true'
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: nuget-${{ runner.os }}-${{ hashFiles('src/**/*.csproj') }}
restore-keys: nuget-${{ runner.os }}-
- name: Restore dependencies
if: steps.changes.outputs.src_changed == 'true'
run: dotnet restore src/EchoHub.slnx
- name: Build
if: steps.changes.outputs.src_changed == 'true'
run: dotnet build src/EchoHub.slnx --no-restore --configuration Release
- name: Test
if: steps.changes.outputs.src_changed == 'true'
run: dotnet test src/EchoHub.slnx --no-build --configuration Release --verbosity normal
- name: Skip notice
if: steps.changes.outputs.src_changed == 'false'
run: echo "No changes in src/ — skipping build and test"
+102
View File
@@ -0,0 +1,102 @@
name: Docker
# Runs only after the CI workflow completes, so an image is never pushed for a commit
# whose formatting, lint, build, or tests failed.
on:
workflow_run:
workflows: ["CI"]
types: [completed]
branches: [master]
workflow_dispatch:
permissions:
contents: read
packages: write
env:
IMAGE: ghcr.io/huebyte/echohub-server
jobs:
docker:
name: Build & Push Docker Image
# Proceed only for a successful CI run on a master push, or a manual dispatch.
if: >-
github.event_name == 'workflow_dispatch' ||
(github.event.workflow_run.conclusion == 'success' &&
github.event.workflow_run.event == 'push' &&
github.event.workflow_run.head_branch == 'master')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
# The exact commit CI tested (workflow_run), or the current tip (manual dispatch).
ref: ${{ github.event.workflow_run.head_sha || github.sha }}
- name: Check for src/ changes
id: changes
run: |
if git rev-parse HEAD~1 >/dev/null 2>&1; then
CHANGED=$(git diff --name-only HEAD~1 HEAD -- 'src/' | wc -l)
else
CHANGED=1
fi
[ "$CHANGED" -gt 0 ] && echo "src_changed=true" >> "$GITHUB_OUTPUT" || echo "src_changed=false" >> "$GITHUB_OUTPUT"
- name: Read version
if: steps.changes.outputs.src_changed == 'true'
id: version
run: |
VERSION=$(grep -oP '(?<=<Version>)[^<]+' src/Directory.Build.props)
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "tag=v$VERSION" >> "$GITHUB_OUTPUT"
- name: Check if image tag exists
if: steps.changes.outputs.src_changed == 'true'
id: check_image
run: |
TAG="${{ steps.version.outputs.tag }}"
if docker manifest inspect "${{ env.IMAGE }}:${TAG}" &>/dev/null; then
echo "exists=true" >> "$GITHUB_OUTPUT"
else
echo "exists=false" >> "$GITHUB_OUTPUT"
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Set up QEMU
if: steps.changes.outputs.src_changed == 'true' && steps.check_image.outputs.exists == 'false'
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
if: steps.changes.outputs.src_changed == 'true' && steps.check_image.outputs.exists == 'false'
uses: docker/setup-buildx-action@v3
- name: Log in to GHCR
if: steps.changes.outputs.src_changed == 'true' && steps.check_image.outputs.exists == 'false'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
if: steps.changes.outputs.src_changed == 'true' && steps.check_image.outputs.exists == 'false'
uses: docker/build-push-action@v6
with:
context: ./src
file: ./src/EchoHub.Server/Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: |
${{ env.IMAGE }}:latest
${{ env.IMAGE }}:${{ steps.version.outputs.tag }}
labels: |
org.opencontainers.image.title=EchoHub Server
org.opencontainers.image.description=Self-hosted IRC-style chat server
org.opencontainers.image.version=${{ steps.version.outputs.version }}
org.opencontainers.image.source=https://github.com/${{ github.repository }}
- name: Skip notice
if: steps.changes.outputs.src_changed != 'true' || steps.check_image.outputs.exists == 'true'
run: echo "⏭️ Skipped — no src/ changes or image tag already exists."
+46
View File
@@ -0,0 +1,46 @@
name: Docs
on:
push:
branches: [master]
paths:
- 'docs/**'
- 'src/**'
permissions:
contents: write
jobs:
build-deploy:
name: Build & Deploy Docs
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET 10
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: nuget-${{ runner.os }}-${{ hashFiles('src/**/*.csproj') }}
restore-keys: nuget-${{ runner.os }}-
- name: Restore .NET tools
run: dotnet tool restore
- name: Build solution
run: dotnet build src/EchoHub.slnx --configuration Release
- name: Generate documentation
run: dotnet docfx docs/docfx.json
- name: Deploy to web branch
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs/_site
publish_branch: web
+60
View File
@@ -0,0 +1,60 @@
name: Release Checklist
on:
pull_request:
branches: [master]
workflow_dispatch:
jobs:
release-checklist:
name: Release Checklist
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Extract version
id: version
run: |
VERSION=$(grep -oP '(?<=<Version>)[^<]+' src/Directory.Build.props)
if [ -z "$VERSION" ]; then
echo "::error file=src/Directory.Build.props::Could not read version from Directory.Build.props"
exit 1
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "Version: $VERSION"
- name: Check version was bumped from master
run: |
BRANCH_VERSION="${{ steps.version.outputs.version }}"
git fetch origin master --depth=1
MASTER_VERSION=$(git show origin/master:src/Directory.Build.props | grep -oP '(?<=<Version>)[^<]+')
echo "Branch: $BRANCH_VERSION | Master: $MASTER_VERSION"
if [ "$BRANCH_VERSION" = "$MASTER_VERSION" ]; then
echo "::error file=src/Directory.Build.props::Version $BRANCH_VERSION was not bumped from master. Update <Version> in src/Directory.Build.props."
exit 1
fi
- name: Check changelog file exists
run: |
VERSION="${{ steps.version.outputs.version }}"
FILE="docs/changelog/v${VERSION}.md"
if [ ! -f "$FILE" ]; then
echo "::error::Missing changelog file: $FILE"
exit 1
fi
echo "Found: $FILE"
- name: Check changelog TOC
run: |
VERSION="${{ steps.version.outputs.version }}"
if ! grep -q "v${VERSION}.md" docs/changelog/toc.yml; then
echo "::error file=docs/changelog/toc.yml::v${VERSION} not found in changelog TOC. Add it to docs/changelog/toc.yml."
exit 1
fi
if ! grep -q "v${VERSION}" docs/changelog/index.md; then
echo "::error file=docs/changelog/index.md::v${VERSION} not found in changelog index. Add it to docs/changelog/index.md."
exit 1
fi
echo "toc.yml and index.md: OK"
+218
View File
@@ -0,0 +1,218 @@
name: Release
# Runs only after the CI workflow completes, so a release is never published on a commit
# whose formatting, lint, build, or tests failed.
on:
workflow_run:
workflows: ["CI"]
types: [completed]
branches: [master]
workflow_dispatch:
permissions:
contents: write
jobs:
release:
name: Create Release
# Proceed only for a successful CI run on a master push, or a manual dispatch.
if: >-
github.event_name == 'workflow_dispatch' ||
(github.event.workflow_run.conclusion == 'success' &&
github.event.workflow_run.event == 'push' &&
github.event.workflow_run.head_branch == 'master')
runs-on: ubuntu-latest
outputs:
should_release: ${{ steps.changes.outputs.src_changed == 'true' && steps.check_release.outputs.exists == 'false' }}
release_exists: ${{ steps.check_release.outputs.exists }}
version: ${{ steps.version.outputs.version }}
tag: ${{ steps.version.outputs.tag }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
# The exact commit CI tested (workflow_run), or the current tip (manual dispatch).
ref: ${{ github.event.workflow_run.head_sha || github.sha }}
- name: Check for src/ changes
id: changes
run: |
if git rev-parse HEAD~1 >/dev/null 2>&1; then
CHANGED=$(git diff --name-only HEAD~1 HEAD -- 'src/' | wc -l)
else
CHANGED=1
fi
[ "$CHANGED" -gt 0 ] && echo "src_changed=true" >> "$GITHUB_OUTPUT" || echo "src_changed=false" >> "$GITHUB_OUTPUT"
- name: Read version
id: version
run: |
VERSION=$(grep -oP '(?<=<Version>)[^<]+' src/Directory.Build.props)
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "tag=v$VERSION" >> "$GITHUB_OUTPUT"
- name: Check if release exists
id: check_release
run: |
if gh release view "${{ steps.version.outputs.tag }}" &>/dev/null; then
echo "exists=true" >> "$GITHUB_OUTPUT"
else
echo "exists=false" >> "$GITHUB_OUTPUT"
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Setup .NET 10
if: steps.changes.outputs.src_changed == 'true' && steps.check_release.outputs.exists == 'false'
uses: actions/setup-dotnet@v4
with:
dotnet-version: "10.0.x"
- name: Publish Server win-x64
if: steps.changes.outputs.src_changed == 'true' && steps.check_release.outputs.exists == 'false'
run: dotnet publish src/EchoHub.Server/EchoHub.Server.csproj -c Release -r win-x64 --self-contained true -o publish/server-win-x64
- name: Publish Server linux-x64
if: steps.changes.outputs.src_changed == 'true' && steps.check_release.outputs.exists == 'false'
run: dotnet publish src/EchoHub.Server/EchoHub.Server.csproj -c Release -r linux-x64 --self-contained true -o publish/server-linux-x64
- name: Publish Server osx-x64
if: steps.changes.outputs.src_changed == 'true' && steps.check_release.outputs.exists == 'false'
run: dotnet publish src/EchoHub.Server/EchoHub.Server.csproj -c Release -r osx-x64 --self-contained true -o publish/server-osx-x64
- name: Publish Server osx-arm64
if: steps.changes.outputs.src_changed == 'true' && steps.check_release.outputs.exists == 'false'
run: dotnet publish src/EchoHub.Server/EchoHub.Server.csproj -c Release -r osx-arm64 --self-contained true -o publish/server-osx-arm64
- name: Publish Server linux-arm64
if: steps.changes.outputs.src_changed == 'true' && steps.check_release.outputs.exists == 'false'
run: dotnet publish src/EchoHub.Server/EchoHub.Server.csproj -c Release -r linux-arm64 --self-contained true -o publish/server-linux-arm64
- name: Publish Client win-x64
if: steps.changes.outputs.src_changed == 'true' && steps.check_release.outputs.exists == 'false'
run: dotnet publish src/EchoHub.Client/EchoHub.Client.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o publish/client-win-x64
- name: Publish Client linux-x64
if: steps.changes.outputs.src_changed == 'true' && steps.check_release.outputs.exists == 'false'
run: dotnet publish src/EchoHub.Client/EchoHub.Client.csproj -c Release -r linux-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o publish/client-linux-x64
- name: Publish Client osx-x64
if: steps.changes.outputs.src_changed == 'true' && steps.check_release.outputs.exists == 'false'
run: dotnet publish src/EchoHub.Client/EchoHub.Client.csproj -c Release -r osx-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o publish/client-osx-x64
- name: Publish Client osx-arm64
if: steps.changes.outputs.src_changed == 'true' && steps.check_release.outputs.exists == 'false'
run: dotnet publish src/EchoHub.Client/EchoHub.Client.csproj -c Release -r osx-arm64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o publish/client-osx-arm64
- name: Publish Client linux-arm64
if: steps.changes.outputs.src_changed == 'true' && steps.check_release.outputs.exists == 'false'
run: dotnet publish src/EchoHub.Client/EchoHub.Client.csproj -c Release -r linux-arm64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o publish/client-linux-arm64
- name: Zip artifacts
if: steps.changes.outputs.src_changed == 'true' && steps.check_release.outputs.exists == 'false'
run: |
cd publish
zip -r ../EchoHub-Server-win-x64.zip server-win-x64/
zip -r ../EchoHub-Server-linux-x64.zip server-linux-x64/
zip -r ../EchoHub-Server-osx-x64.zip server-osx-x64/
zip -r ../EchoHub-Server-osx-arm64.zip server-osx-arm64/
zip -r ../EchoHub-Server-linux-arm64.zip server-linux-arm64/
zip -r ../EchoHub-Client-win-x64.zip client-win-x64/
zip -r ../EchoHub-Client-linux-x64.zip client-linux-x64/
zip -r ../EchoHub-Client-osx-x64.zip client-osx-x64/
zip -r ../EchoHub-Client-osx-arm64.zip client-osx-arm64/
zip -r ../EchoHub-Client-linux-arm64.zip client-linux-arm64/
- name: Build release notes
if: steps.changes.outputs.src_changed == 'true' && steps.check_release.outputs.exists == 'false'
run: |
TAG="${{ steps.version.outputs.tag }}"
CHANGELOG_URL="https://huebyte.github.io/EchoHub/changelog/${TAG}.html"
REPO="https://github.com/${{ github.repository }}"
PREV_TAG=$(git tag --sort=-v:refname | grep -v "^${TAG}$" | head -n 1)
{
echo "📋 **[Full Changelog](${CHANGELOG_URL})**"
echo ""
echo "---"
echo ""
echo "### Commits"
echo ""
if [ -n "$PREV_TAG" ]; then
git log "${PREV_TAG}..HEAD" --pretty=format:"- %s (%h)" --no-merges
else
git log HEAD --pretty=format:"- %s (%h)" --no-merges
fi
echo ""
echo ""
if [ -n "$PREV_TAG" ]; then
echo "*Version diff: [${PREV_TAG}...${TAG}](${REPO}/compare/${PREV_TAG}...${TAG})*"
else
echo "*Version diff: [${TAG}](${REPO}/commits/${TAG})*"
fi
} > release-notes.md
- name: Create GitHub Release
if: steps.changes.outputs.src_changed == 'true' && steps.check_release.outputs.exists == 'false'
run: |
gh release create "${{ steps.version.outputs.tag }}" \
--title "EchoHub ${{ steps.version.outputs.tag }}" \
--notes-file release-notes.md \
EchoHub-Server-win-x64.zip \
EchoHub-Server-linux-x64.zip \
EchoHub-Server-osx-x64.zip \
EchoHub-Server-osx-arm64.zip \
EchoHub-Server-linux-arm64.zip \
EchoHub-Client-win-x64.zip \
EchoHub-Client-linux-x64.zip \
EchoHub-Client-osx-x64.zip \
EchoHub-Client-osx-arm64.zip \
EchoHub-Client-linux-arm64.zip
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
choco:
name: Publish to Chocolatey
needs: release
if: needs.release.outputs.release_exists == 'true' || needs.release.outputs.should_release == 'true'
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Check if version already published
id: choco_check
shell: pwsh
run: |
$version = "${{ needs.release.outputs.version }}"
$result = choco search echohub --version $version --exact --source https://community.chocolatey.org/api/v2/ 2>&1
if ($result -match "echohub $version") {
echo "exists=true" >> $env:GITHUB_OUTPUT
Write-Host "Chocolatey package echohub $version already published — skipping."
} else {
echo "exists=false" >> $env:GITHUB_OUTPUT
}
- name: Download release asset
if: steps.choco_check.outputs.exists == 'false'
run: gh release download "v${{ needs.release.outputs.version }}" --pattern "EchoHub-Client-win-x64.zip"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Pack and push
if: steps.choco_check.outputs.exists == 'false'
shell: pwsh
run: |
$version = "${{ needs.release.outputs.version }}"
$checksum = (Get-FileHash EchoHub-Client-win-x64.zip -Algorithm SHA256).Hash.ToLower()
# Stamp version and checksum into package templates
(Get-Content packaging/choco/echohub.nuspec) -replace '__VERSION__', $version | Set-Content packaging/choco/echohub.nuspec
(Get-Content packaging/choco/tools/chocolateyInstall.ps1) -replace '__VERSION__', $version | Set-Content packaging/choco/tools/chocolateyInstall.ps1
(Get-Content packaging/choco/tools/chocolateyInstall.ps1) -replace '__CHECKSUM64__', $checksum | Set-Content packaging/choco/tools/chocolateyInstall.ps1
cd packaging/choco
choco pack echohub.nuspec --output-directory $env:TEMP
$pkg = Get-ChildItem "$env:TEMP\echohub.*.nupkg" | Select-Object -First 1
choco push $pkg.FullName --source https://push.chocolatey.org/ --api-key $env:CHOCO_API_KEY
env:
CHOCO_API_KEY: ${{ secrets.CHOCOLATEY_API_KEY }}
+438
View File
@@ -0,0 +1,438 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
*.env
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
[Aa][Rr][Mm]64[Ee][Cc]/
bld/
[Oo]bj/
[Oo]ut/
[Ll]og/
[Ll]ogs/
# Build results on 'Bin' directories
**/[Bb]in/*
# Uncomment if you have tasks that rely on *.refresh files to move binaries
# (https://github.com/github/gitignore/pull/3736)
#!**/[Bb]in/*.refresh
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
*.trx
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Approval Tests result files
*.received.*
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.idb
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
# but not Directory.Build.rsp, as it configures directory-level build defaults
!Directory.Build.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
**/.paket/paket.exe
paket-files/
# FAKE - F# Make
**/.fake/
# CodeRush personal settings
**/.cr/personal
# Python Tools for Visual Studio (PTVS)
**/__pycache__/
*.pyc
# Cake - Uncomment if you are using it
#tools/**
#!tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
MSBuild_Logs/
# AWS SAM Build and Temporary Artifacts folder
.aws-sam
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
**/.mfractor/
# Local History for Visual Studio
**/.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
**/.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets
# Local History for Visual Studio Code
.history/
# Built Visual Studio Code Extensions
*.vsix
# Dev folder
.dev/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
.dev/*
appsettings.json
appsettings.*.json
!appsettings.example.json
CLAUDE.md
*.db
*.db-*
src/EchoHub.Server/uploads/*
.claude/*
# DocFx generated output
docs/_site/
docs/_api_meta/
# Diff files
*.diff
+29
View File
@@ -0,0 +1,29 @@
{
// https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md
"config": {
"default": true,
// Allow long lines (common in docs with URLs and code)
"MD013": false,
// Allow duplicate headings in different sections
"MD024": { "siblings_only": true },
// Allow inline HTML (docfx uses it)
"MD033": false,
// Allow bare URLs
"MD034": false,
// Allow compact table pipe style (flow docs use compact tables)
"MD060": false
},
"globs": ["**/*.md"],
"ignores": [
".dev/**",
"docs/_site/**",
"docs/api/**",
"node_modules/**",
"**/bin/**",
"**/obj/**",
"publish/**",
".claude/**"
]
}
View File
+32
View File
@@ -0,0 +1,32 @@
# Code of Conduct
EchoHub is an open source project. We want it to be a welcoming place for everyone who wants to help.
## Our standards
We expect all participants (contributors, reviewers, and maintainers) to:
- Be respectful and constructive
- Assume good intent and communicate clearly
- Welcome differing viewpoints and experience levels
- Focus on whats best for the community and the project
Unacceptable behavior includes:
- Harassment, discrimination, or personal attacks
- Trolling, insults, or inflammatory comments
- Publishing someone elses private information (doxxing)
- Sexualized language or unwanted attention
## Enforcement
Project maintainers may remove, edit, or reject contributions (issues, comments, PRs) that violate this Code of Conduct.
## Reporting
If you experience or witness unacceptable behavior:
- Use GitHubs built-in reporting tools where appropriate, and/or
- Contact the project maintainer via GitHub: https://github.com/HueByte
Please include as much context as you can (links, screenshots, timestamps). Reports will be handled as discreetly as possible.
+101
View File
@@ -0,0 +1,101 @@
# Contributing to EchoHub
Thanks for your interest in contributing — EchoHub aims to stay lightweight, terminal-first, and self-hosted.
## Quick start (dev)
### Prerequisites
- .NET 10 SDK
### Build
```bash
dotnet build src/EchoHub.slnx
```
### Test
```bash
dotnet test src/EchoHub.slnx
```
### Run (local)
Server:
```bash
dotnet run --project src/EchoHub.Server
```
Client:
```bash
dotnet run --project src/EchoHub.Client
```
## What to work on
- Check open issues (especially `good first issue` / `help wanted` if present)
- Docs fixes in `docs/` are always welcome
- Tests: `src/EchoHub.Tests/`
If youre proposing a larger change, open an issue first so we can align on approach.
## Code style & expectations
- Keep PRs focused (small and reviewable)
- Prefer clear naming over cleverness
- Add/adjust tests for bug fixes when its practical
- Avoid committing secrets (JWT secrets, tokens, connection strings)
## Docs
This repo uses DocFX for the site in `docs/`.
To build docs locally you typically need the assemblies built in Release first:
```bash
dotnet build src/EchoHub.slnx --configuration Release
```
Then run DocFX:
```bash
docfx docs/docfx.json
```
## Markdown lint
CI lints Markdown. Locally:
- On Linux/macOS (or Windows with Git Bash/WSL):
```bash
./scripts/lint-markdown.sh
```
- Anywhere with Node.js installed:
```bash
npx --yes markdownlint-cli2
```
## Pull requests
- Fill out the PR template
- Ensure `dotnet test src/EchoHub.slnx` is green
- Mention any behavioral changes (client UX, auth, uploads)
## Commit messages
Any consistent style is fine; descriptive subjects help reviews.
Examples:
- `fix(server): validate image magic bytes`
- `feat(client): add /servers improvements`
- `docs: clarify getting started`
## Reporting security issues
Please do **not** file public issues for security problems. See `SECURITY.md`.
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 Hue
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+397
View File
@@ -0,0 +1,397 @@
# EchoHub
<p align="center">
<img src="https://cdn.voidcube.cloud/assets/hue_icon.svg" alt="EchoHub Logo" width="120" />
</p>
<h1 align="center">EchoHub</h1>
<p align="center">
No tracking. No subscriptions. No "enhanced AI features". Just chat.
</p>
<p align="center">
<a href="#what-is-this">What</a> •
<a href="#getting-started">Setup</a> •
<a href="#irc-gateway">IRC</a> •
<a href="#deployment-with-nginx">Deploy</a> •
<a href="#client-commands">Commands</a> •
<a href="#configuration">Config</a> •
<a href="#license">License</a>
</p>
<p align="center">
<a href="https://echohub.voidcube.cloud/">Website</a> •
<a href="https://echohub.voidcube.cloud/servers">Public Servers</a> •
<a href="https://huebyte.github.io/EchoHub/">Documentation</a>
</p>
<p align="center">
<a href="https://github.com/HueByte/EchoHub/actions/workflows/ci.yml"><img alt="Build" src="https://img.shields.io/github/actions/workflow/status/HueByte/EchoHub/ci.yml?branch=master&style=flat-square&logo=github&label=Build" /></a>
<a href="https://github.com/HueByte/EchoHub/releases/latest"><img alt="Release" src="https://img.shields.io/github/v/release/HueByte/EchoHub?style=flat-square&logo=github&label=Release" /></a>
<a href="https://community.chocolatey.org/packages/echohub"><img alt="Chocolatey" src="https://img.shields.io/chocolatey/v/echohub?style=flat-square&logo=chocolatey&label=Chocolatey" /></a>
<a href="https://github.com/HueByte/EchoHub/pkgs/container/echohub-server"><img alt="Docker" src="https://img.shields.io/badge/Docker-GHCR-2496ED?style=flat-square&logo=docker&logoColor=white" /></a>
<img alt=".NET 10" src="https://img.shields.io/badge/.NET-10-512BD4?style=flat-square&logo=dotnet&logoColor=white" />
<img alt="Terminal.Gui" src="https://img.shields.io/badge/TUI-Terminal.Gui%20v2-yellow?style=flat-square" />
<a href="LICENSE"><img alt="License" src="https://img.shields.io/github/license/HueByte/EchoHub?style=flat-square" /></a>
<img alt="Repo size" src="https://img.shields.io/github/repo-size/HueByte/EchoHub?style=flat-square&label=Size" />
</p>
---
## What is this?
Chat apps used to be simple. You connected to a server, joined a channel, and talked to people. No one was mining your messages for ad targeting, no one was selling your "engagement metrics", and the app didn't need 2GB of RAM to display text.
EchoHub is a return to that. Self-hosted, IRC-inspired chat that runs in your terminal. You own the server, you own the data, and the client won't try to upsell you on a premium tier.
Each server is fully independent — no central authority, no account federation, no corporate overlord. Just spin one up and go.
```mermaid
graph TD
subgraph Server["Server"]
ChatSvc["ChatService"]
Hub["SignalR ChatHub"]
IRC["IRC Gateway :6667"]
Auth["JWT Auth"]
DB["SQLite DB (EF Core)"]
Files["File Storage"]
end
subgraph Clients["Clients"]
TUI["Terminal GUI (TUI)"]
IRCClient["IRC Client (irssi, WeeChat, ...)"]
end
TUI -- "WebSocket" --> Hub
TUI -- "REST" --> Auth
IRCClient -- "TCP" --> IRC
Hub --> ChatSvc
IRC --> ChatSvc
ChatSvc --> DB
Auth --> DB
Files --> DB
```
## What you get
### Server
- **Self-hostable** — your server, your rules, your data
- **Docker ready** — `docker compose up -d` and you're done
- **Real-time messaging** via SignalR WebSockets
- **IRC gateway** — native IRC clients connect alongside TUI users, full cross-protocol messaging
- **JWT auth** with short-lived access tokens and 30-day refresh tokens
- **Channels** — create, set topics, delete (no 47-step permission wizard required)
- **Moderation** — ban, mute (timed or permanent), kick, role assignment
- **Registration control** — open, invite-code-gated (`/invite`), or closed; codes live in your own database
- **File & image uploads** with actual validation (magic bytes, not just trusting the extension)
- **Image-to-ASCII** — because images in a terminal is objectively cool
- **Presence tracking** — online/away/DND/invisible with custom status messages
- **Rate limiting** — in case someone gets too excited
- **Spam protection** — per-user flood/duplicate limits with auto-mute escalation, covering TUI and IRC alike; configurable under `Spam`, Mods exempt
- **Auto-restart** on crash with exponential backoff — it picks itself back up
- **Serilog logging** — console + rolling file, because `Console.WriteLine` isn't a logging strategy
- **Zero config first run** — generates its own JWT secret and config on launch
### Client
- **Runs in your terminal** — no browser, no Electron, no 500MB of bundled Chromium
- **14 built-in themes** — including `hacker` for when you want to feel like you're in a movie
- **Slash commands** — `/join`, `/send`, `/status`, `/theme`, etc.
- **Colored nicknames** — pick your hex color, express yourself
- **Clickable everything** — usernames, @mentions, #channels — just press Enter
- **File/image sharing** — local files or URLs; drag & drop a file onto the terminal to send it; save the original behind any ASCII-art image
- **End-to-end encrypted rooms** — password-protected channels are encrypted with a passphrase-derived key that never reaches the server, so not even the server owner can read messages or files (they can still see counts and storage size)
- **Replies** — quote a message, jump back to the original; being replied to pings like a mention
- **Your data is yours** — `/export` everything the server holds about you; `/deleteaccount` removes it
- **Multi-server** — save and switch between servers
- **Auto-reconnect** — drops happen, it rejoins your channels automatically
- **Auto-updater** — updates in-place with automatic rollback if something goes wrong
- **Message history** on join — you won't miss context
## Getting Started
### Install the Client
**Windows (Chocolatey):**
```bash
choco install echohub
```
**Linux / macOS:**
```bash
curl -sSfL https://raw.githubusercontent.com/HueByte/EchoHub/master/scripts/install.sh | sh
```
**Manual download:** grab a self-contained binary from [Releases](../../releases) — no runtime needed, just run it.
### Host a Server
**Docker (recommended):**
```bash
cp .env.example .env
docker compose up -d
```
Pre-built images on [GHCR](https://github.com/HueByte/EchoHub/pkgs/container/echohub-server) — `linux/amd64` and `linux/arm64`.
**From source:**
```bash
dotnet run --project src/EchoHub.Server
```
Requires [.NET 10 SDK](https://dotnet.microsoft.com/download). First run does everything for you:
1. Creates `appsettings.json` from the example config
2. Generates a secure JWT secret
3. Creates the database with a `#general` channel
### Run the Client (from source)
```bash
dotnet run --project src/EchoHub.Client
```
Connect, register, chat. That's the whole onboarding flow.
### Build from Source
```bash
dotnet build src/EchoHub.slnx
```
## IRC Gateway
EchoHub includes a built-in IRC protocol gateway. Any standard IRC client can connect to the same server and chat alongside TUI users — messages flow both ways in real time.
### Enable It
In the server's `appsettings.json`:
```json
{
"Irc": {
"Enabled": true,
"Port": 6667,
"ServerName": "echohub",
"Motd": "Welcome to EchoHub IRC Gateway!"
}
}
```
### Connect
```bash
# irssi
irssi -c your-server.com -p 6667 -w <password> -n <username>
# WeeChat
/server add echohub your-server.com/6667 -password=<password> -nicks=<username>
/connect echohub
```
Auth works via `PASS`/`NICK`/`USER` or SASL PLAIN. New usernames are auto-registered on first connect — no separate signup needed.
### What Works
| Feature | How it maps to IRC |
| ------- | ------------------ |
| Text messages | Standard `PRIVMSG` (long messages split at ~400 byte chunks) |
| `/me` actions | Native CTCP ACTION in both directions |
| Replies | TUI replies arrive as `> nick: snippet \| text` |
| Images | `[Image: filename]` + download URL + ASCII art line-by-line |
| File uploads | `[File: filename] /api/files/{id}` |
| Channels | `JOIN`, `PART`, `NAMES`, `TOPIC`, `LIST` |
| Presence | `AWAY`, `WHO`, `WHOIS` |
| Status | Maps to IRC away/here |
### TLS
If running behind **nginx** (recommended), let nginx handle TLS -- see [Deployment with nginx](#deployment-with-nginx) below.
For direct TLS without a reverse proxy, the IRC gateway can terminate TLS itself:
```json
{
"Irc": {
"TlsEnabled": true,
"TlsPort": 6697,
"TlsCertPath": "/path/to/cert.pfx",
"TlsCertPassword": "your-password"
}
}
```
## Client Commands
| Command | Description |
| ------- | ----------- |
| `/join <channel> [password]` | Join a channel (passphrase for encrypted channels) |
| `/me <action>` | Action message — `* nick waves` (native CTCP ACTION over IRC) |
| `/banner <text>` | Render short text as a big ASCII banner |
| `/passwd <old> <new>` | Change the current encrypted channel's passphrase (creator only) |
| `/size [s\|m\|l]` | ASCII-art size for attached images (no arg = picker) |
| `/downloadpath [path]` | Set the download folder (no path = native folder picker) |
| `/leave` | Leave current channel |
| `/topic <text>` | Set channel topic (creator only) |
| `/send <file or URL>` | Upload a file or image |
| `/status <online\|away\|dnd\|invisible>` | Set your status |
| `/status msg <text>` | Set a status message (keeps your status; empty text clears it) |
| `/nick <name>` | Set display name |
| `/color <#hex>` | Set nickname color |
| `/theme <name>` | Switch theme |
| `/profile` | Open profile editor |
| `/users` | List online users in channel |
| `/servers` | Manage saved servers |
| `/invite [uses] [hours]` | Create a registration invite code (Admin+); also `list` / `revoke <code>` |
| `/export` | Download everything the server stores about you as JSON |
| `/deleteaccount` | Permanently delete your account (password re-confirmed) |
| `/help` | Show help |
| `/quit` | Exit |
**Message actions:** **right-click a message** for a context menu — reply (quotes the message; Esc cancels a pending reply), delete, save/download/play its attachment, mention the sender, view their profile, or copy the text. (Keyboard alternative: press <kbd>F6</kbd> to focus the message list, select with the arrow keys, and press <kbd>Delete</kbd>; <kbd>F6</kbd> again returns to the input.) You can always delete your own messages; moderators and above can delete others' messages, but only from users below their own role.
## Themes
`/theme <name>` to switch:
| Theme | Vibe |
| ----- | ---- |
| `default` | Gray on black — clean and quiet |
| `transparent` | White on black — for fancy transparent terminals |
| `transparentlight` | Black on transparent — dark characters for light transparent terminals |
| `classic` | White on blue — IRC nostalgia |
| `light` | Black on white — for the brave |
| `hacker` | Green on black — *I'm in* |
| `solarized` | Cyan/yellow on dark gray — for the refined |
| `dracula` | Purple accents on black — the classic dark theme |
| `monokai` | Yellow highlights on black — warm and familiar |
| `nord` | Cool blues — arctic vibes |
| `gruvbox` | Earthy yellows on black — retro warmth |
| `ocean` | Cyan on deep blue — underwater aesthetics |
| `highcontrast` | Bright yellow on black — maximum readability |
| `rosepine` | Muted pinks on black — cozy and soft |
## Configuration
`appsettings.json` is auto-generated on first run. Tweak what you need:
| Key | Default | Description |
| --- | ------- | ----------- |
| `Urls` | `http://0.0.0.0:5000` | Listen address and port |
| `ConnectionStrings:DefaultConnection` | *(empty — app directory)* | SQLite connection string |
| `Jwt:Secret` | *(auto-generated)* | JWT signing key |
| `Server:Name` | `My EchoHub Server` | Server display name |
| `Server:Description` | `A self-hosted EchoHub chat server` | Server description |
| `Server:Registration` | `open` | `open`, `invite` (codes via `/invite`, Admin+), or `closed` |
| `Server:PublicServer` | `false` | List on the [public directory](https://echohub.voidcube.cloud/servers) |
| `Server:PublicHost` | *(empty)* | Public hostname for directory listing |
| `Irc:Enabled` | `false` | Enable the IRC gateway |
| `Irc:Port` | `6667` | IRC listen port |
| `Irc:TlsEnabled` | `false` | Enable TLS for IRC |
| `Irc:TlsPort` | `6697` | IRC TLS port |
| `Irc:ServerName` | `echohub` | IRC server name in protocol messages |
| `Irc:Motd` | `Welcome to EchoHub IRC Gateway!` | Message of the day |
| `Cors:AllowedOrigins` | *(all origins)* | CORS whitelist |
Logging uses Serilog — console + daily rolling files with 14-day retention. Configure in the `Serilog` section.
## Deployment with nginx
Most production deployments run behind nginx. Here's a config that handles both the HTTP/WebSocket server and the IRC gateway:
```nginx
# HTTP + WebSocket (EchoHub Server API + SignalR)
server {
listen 443 ssl;
server_name echohub.example.com;
ssl_certificate /etc/letsencrypt/live/echohub.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/echohub.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Required for SignalR WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
}
# Increase max upload size for file sharing
client_max_body_size 10m;
}
# HTTP → HTTPS redirect
server {
listen 80;
server_name echohub.example.com;
return 301 https://$host$request_uri;
}
# IRC TLS (port 6697 → plain IRC on 6667)
stream {
upstream irc_backend {
server 127.0.0.1:6667;
}
server {
listen 6697 ssl;
proxy_pass irc_backend;
ssl_certificate /etc/letsencrypt/live/echohub.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/echohub.example.com/privkey.pem;
}
}
```
With this setup, keep the EchoHub IRC gateway's `TlsEnabled` set to `false` — nginx terminates TLS. See the full example at [`examples/nginx.conf`](examples/nginx.conf).
## Project Structure
```text
src/
├── EchoHub.Core/ # Shared models, DTOs, contracts, validation
│ ├── Constants/ # ValidationConstants, HubConstants
│ ├── Contracts/ # IChatService, IChatBroadcaster, IEchoHubClient
│ ├── DTOs/ # Record DTOs
│ └── Models/ # Entity models
├── EchoHub.Server/ # ASP.NET Core server
│ ├── Auth/ # JWT token service
│ ├── Controllers/ # REST API endpoints
│ ├── Data/ # EF Core DbContext + migrations
│ ├── Hubs/ # SignalR ChatHub
│ ├── Services/ # ChatService, presence, file storage, image processing
│ └── Setup/ # First-run setup, DB initialization
├── EchoHub.Server.Irc/ # IRC protocol gateway
│ ├── IrcGatewayService # TCP listener (BackgroundService)
│ ├── IrcCommandHandler # IRC command dispatch (JOIN, PRIVMSG, etc.)
│ ├── IrcBroadcaster # Fans chat events to IRC connections
│ └── IrcMessageFormatter # MessageDto → IRC PRIVMSG lines
├── EchoHub.Client/ # Terminal.Gui TUI client
│ ├── Config/ # Client configuration
│ ├── Services/ # API client, SignalR connection
│ ├── Themes/ # 13 built-in themes
│ └── UI/ # MainWindow, dialogs, chat renderer
└── EchoHub.slnx # Solution file
```
## License
[MIT](LICENSE) — do whatever you want with it.
+24
View File
@@ -0,0 +1,24 @@
# Security Policy
## Reporting a vulnerability
If you believe youve found a security vulnerability in EchoHub (for example: auth bypass, token leakage, file upload validation bypass, RCE, etc.), please **do not** open a public GitHub issue.
Preferred: use GitHubs private vulnerability reporting ("Report a vulnerability"):
- https://github.com/HueByte/EchoHub/security/advisories/new
If that link is unavailable for your account, contact the maintainer via GitHub:
- https://github.com/HueByte
## What to include
- A clear description of the issue and potential impact
- Reproduction steps or a proof-of-concept
- Affected versions / commit SHA
- Any relevant logs (with secrets removed)
## Disclosure
Ill acknowledge receipt, investigate, and work on a fix. Please avoid publicly disclosing details until a fix is available.
-127
View File
@@ -1,127 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Client Articles | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Client Articles | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/blob/master/docs/#L1">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="client-articles">Client Articles</h1>
<p>Articles related to the EchoHub TUI client built with Terminal.Gui v2.</p>
<h2 id="topics">Topics</h2>
<ul>
<li>Terminal.Gui v2 patterns and conventions</li>
<li>Theme system and customization (including transparent theme)</li>
<li>Command system reference</li>
<li>Configuration and session persistence</li>
<li>Audio playback and file downloads</li>
<li>Automatic update checking</li>
<li><a href="../../articles/notification-sounds.html">Notification sounds</a></li>
</ul>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/docs/#L1" class="edit-link">Edit this page</a>
</div>
<div class="next-article d-print-none border-top" id="nextArticle"></div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
-22
View File
@@ -1,22 +0,0 @@
<div id="sidetoggle">
<div>
<div class="sidefilter">
<form class="toc-filter">
<span class="glyphicon glyphicon-filter filter-icon"></span>
<span class="glyphicon glyphicon-remove clear-icon" id="toc_filter_clear"></span>
<input type="text" id="toc_filter_input" placeholder="Filter by title" onkeypress="if(event.keyCode==13) {return false;}">
</form>
</div>
<div class="sidetoc">
<div class="toc" id="toc">
<ul class="nav level1">
<li>
<a href="index.html" name="" title="Overview">Overview</a>
</li>
</ul>
</div>
</div>
</div>
</div>
-2
View File
@@ -1,2 +0,0 @@
{"order":100,"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"}]}
@@ -1,316 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class AppOrchestrator | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class AppOrchestrator | EchoHub Documentation ">
<meta name="description" content="Central orchestrator for the EchoHub TUI client. Wires UI events to service calls and connection events to UI updates.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_AppOrchestrator.md&amp;value=---%0Auid%3A%20EchoHub.Client.AppOrchestrator%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.AppOrchestrator">
<h1 id="EchoHub_Client_AppOrchestrator" data-uid="EchoHub.Client.AppOrchestrator" class="text-break">
Class AppOrchestrator <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/AppOrchestrator.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Central orchestrator for the EchoHub TUI client.
Wires UI events to service calls and connection events to UI updates.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class AppOrchestrator : IDisposable</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">AppOrchestrator</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.idisposable">IDisposable</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_AppOrchestrator__ctor_" data-uid="EchoHub.Client.AppOrchestrator.#ctor*"></a>
<h3 id="EchoHub_Client_AppOrchestrator__ctor_Terminal_Gui_App_IApplication_EchoHub_Client_Config_ClientConfig_" data-uid="EchoHub.Client.AppOrchestrator.#ctor(Terminal.Gui.App.IApplication,EchoHub.Client.Config.ClientConfig)">
AppOrchestrator(IApplication, ClientConfig)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/AppOrchestrator.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public AppOrchestrator(IApplication app, ClientConfig config)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>app</code> <span class="xref">IApplication</span></dt>
<dd></dd>
<dt><code>config</code> <a class="xref" href="EchoHub.Client.Config.ClientConfig.html">ClientConfig</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_AppOrchestrator_MainWindow_" data-uid="EchoHub.Client.AppOrchestrator.MainWindow*"></a>
<h3 id="EchoHub_Client_AppOrchestrator_MainWindow" data-uid="EchoHub.Client.AppOrchestrator.MainWindow">
MainWindow
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/AppOrchestrator.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public MainWindow MainWindow { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.UI.MainWindow.html">MainWindow</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_AppOrchestrator_PendingUpdate_" data-uid="EchoHub.Client.AppOrchestrator.PendingUpdate*"></a>
<h3 id="EchoHub_Client_AppOrchestrator_PendingUpdate" data-uid="EchoHub.Client.AppOrchestrator.PendingUpdate">
PendingUpdate
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/AppOrchestrator.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>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.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Func&lt;Task&gt;? PendingUpdate { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-1">Func</a>&lt;<span class="xref">Task</span>&gt;</dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_AppOrchestrator_Dispose_" data-uid="EchoHub.Client.AppOrchestrator.Dispose*"></a>
<h3 id="EchoHub_Client_AppOrchestrator_Dispose" data-uid="EchoHub.Client.AppOrchestrator.Dispose">
Dispose()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/AppOrchestrator.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Dispose()</code></pre>
</div>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/AppOrchestrator.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
File diff suppressed because it is too large Load Diff
@@ -1,660 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class CommandResult | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class CommandResult | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Commands_CommandResult.md&amp;value=---%0Auid%3A%20EchoHub.Client.Commands.CommandResult%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Commands.CommandResult">
<h1 id="EchoHub_Client_Commands_CommandResult" data-uid="EchoHub.Client.Commands.CommandResult" class="text-break">
Class CommandResult <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Commands.html">Commands</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public record CommandResult : IEquatable&lt;CommandResult&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">CommandResult</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Client.Commands.CommandResult.html">CommandResult</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Commands_CommandResult__ctor_" data-uid="EchoHub.Client.Commands.CommandResult.#ctor*"></a>
<h3 id="EchoHub_Client_Commands_CommandResult__ctor_EchoHub_Client_Commands_CommandResult_" data-uid="EchoHub.Client.Commands.CommandResult.#ctor(EchoHub.Client.Commands.CommandResult)">
CommandResult(CommandResult)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected CommandResult(CommandResult original)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>original</code> <a class="xref" href="EchoHub.Client.Commands.CommandResult.html">CommandResult</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Commands_CommandResult__ctor_" data-uid="EchoHub.Client.Commands.CommandResult.#ctor*"></a>
<h3 id="EchoHub_Client_Commands_CommandResult__ctor_System_Boolean_System_String_System_Boolean_" data-uid="EchoHub.Client.Commands.CommandResult.#ctor(System.Boolean,System.String,System.Boolean)">
CommandResult(bool, string?, bool)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public CommandResult(bool Handled, string? Message = null, bool IsError = false)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Handled</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>Message</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>IsError</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Commands_CommandResult_EqualityContract_" data-uid="EchoHub.Client.Commands.CommandResult.EqualityContract*"></a>
<h3 id="EchoHub_Client_Commands_CommandResult_EqualityContract" data-uid="EchoHub.Client.Commands.CommandResult.EqualityContract">
EqualityContract
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual Type EqualityContract { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.type">Type</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Commands_CommandResult_Handled_" data-uid="EchoHub.Client.Commands.CommandResult.Handled*"></a>
<h3 id="EchoHub_Client_Commands_CommandResult_Handled" data-uid="EchoHub.Client.Commands.CommandResult.Handled">
Handled
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool Handled { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Commands_CommandResult_IsError_" data-uid="EchoHub.Client.Commands.CommandResult.IsError*"></a>
<h3 id="EchoHub_Client_Commands_CommandResult_IsError" data-uid="EchoHub.Client.Commands.CommandResult.IsError">
IsError
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsError { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Commands_CommandResult_Message_" data-uid="EchoHub.Client.Commands.CommandResult.Message*"></a>
<h3 id="EchoHub_Client_Commands_CommandResult_Message" data-uid="EchoHub.Client.Commands.CommandResult.Message">
Message
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? Message { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Commands_CommandResult_Deconstruct_" data-uid="EchoHub.Client.Commands.CommandResult.Deconstruct*"></a>
<h3 id="EchoHub_Client_Commands_CommandResult_Deconstruct_System_Boolean__System_String__System_Boolean__" data-uid="EchoHub.Client.Commands.CommandResult.Deconstruct(System.Boolean@,System.String@,System.Boolean@)">
Deconstruct(out bool, out string?, out bool)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out bool Handled, out string? Message, out bool IsError)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Handled</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>Message</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>IsError</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Commands_CommandResult_Equals_" data-uid="EchoHub.Client.Commands.CommandResult.Equals*"></a>
<h3 id="EchoHub_Client_Commands_CommandResult_Equals_EchoHub_Client_Commands_CommandResult_" data-uid="EchoHub.Client.Commands.CommandResult.Equals(EchoHub.Client.Commands.CommandResult)">
Equals(CommandResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual bool Equals(CommandResult? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Client.Commands.CommandResult.html">CommandResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Commands_CommandResult_Equals_" data-uid="EchoHub.Client.Commands.CommandResult.Equals*"></a>
<h3 id="EchoHub_Client_Commands_CommandResult_Equals_System_Object_" data-uid="EchoHub.Client.Commands.CommandResult.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Commands_CommandResult_GetHashCode_" data-uid="EchoHub.Client.Commands.CommandResult.GetHashCode*"></a>
<h3 id="EchoHub_Client_Commands_CommandResult_GetHashCode" data-uid="EchoHub.Client.Commands.CommandResult.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Commands_CommandResult_PrintMembers_" data-uid="EchoHub.Client.Commands.CommandResult.PrintMembers*"></a>
<h3 id="EchoHub_Client_Commands_CommandResult_PrintMembers_System_Text_StringBuilder_" data-uid="EchoHub.Client.Commands.CommandResult.PrintMembers(System.Text.StringBuilder)">
PrintMembers(StringBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual bool PrintMembers(StringBuilder builder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>builder</code> <span class="xref">StringBuilder</span></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Commands_CommandResult_ToString_" data-uid="EchoHub.Client.Commands.CommandResult.ToString*"></a>
<h3 id="EchoHub_Client_Commands_CommandResult_ToString" data-uid="EchoHub.Client.Commands.CommandResult.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Client_Commands_CommandResult_op_Equality_" data-uid="EchoHub.Client.Commands.CommandResult.op_Equality*"></a>
<h3 id="EchoHub_Client_Commands_CommandResult_op_Equality_EchoHub_Client_Commands_CommandResult_EchoHub_Client_Commands_CommandResult_" data-uid="EchoHub.Client.Commands.CommandResult.op_Equality(EchoHub.Client.Commands.CommandResult,EchoHub.Client.Commands.CommandResult)">
operator ==(CommandResult?, CommandResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(CommandResult? left, CommandResult? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.Commands.CommandResult.html">CommandResult</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.Commands.CommandResult.html">CommandResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Commands_CommandResult_op_Inequality_" data-uid="EchoHub.Client.Commands.CommandResult.op_Inequality*"></a>
<h3 id="EchoHub_Client_Commands_CommandResult_op_Inequality_EchoHub_Client_Commands_CommandResult_EchoHub_Client_Commands_CommandResult_" data-uid="EchoHub.Client.Commands.CommandResult.op_Inequality(EchoHub.Client.Commands.CommandResult,EchoHub.Client.Commands.CommandResult)">
operator !=(CommandResult?, CommandResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(CommandResult? left, CommandResult? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.Commands.CommandResult.html">CommandResult</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.Commands.CommandResult.html">CommandResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Commands/CommandHandler.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
-130
View File
@@ -1,130 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace EchoHub.Client.Commands | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace EchoHub.Client.Commands | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Commands">
<h1 id="EchoHub_Client_Commands" data-uid="EchoHub.Client.Commands" class="text-break">Namespace EchoHub.Client.Commands</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Commands.CommandHandler.html">CommandHandler</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Commands.CommandResult.html">CommandResult</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,303 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class AccountPreset | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class AccountPreset | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Config_AccountPreset.md&amp;value=---%0Auid%3A%20EchoHub.Client.Config.AccountPreset%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Config.AccountPreset">
<h1 id="EchoHub_Client_Config_AccountPreset" data-uid="EchoHub.Client.Config.AccountPreset" class="text-break">
Class AccountPreset <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Config.html">Config</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class AccountPreset</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">AccountPreset</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Config_AccountPreset__ctor_" data-uid="EchoHub.Client.Config.AccountPreset.#ctor*"></a>
<h3 id="EchoHub_Client_Config_AccountPreset__ctor" data-uid="EchoHub.Client.Config.AccountPreset.#ctor">
AccountPreset()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public AccountPreset()</code></pre>
</div>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Config_AccountPreset_Bio_" data-uid="EchoHub.Client.Config.AccountPreset.Bio*"></a>
<h3 id="EchoHub_Client_Config_AccountPreset_Bio" data-uid="EchoHub.Client.Config.AccountPreset.Bio">
Bio
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? Bio { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_AccountPreset_DisplayName_" data-uid="EchoHub.Client.Config.AccountPreset.DisplayName*"></a>
<h3 id="EchoHub_Client_Config_AccountPreset_DisplayName" data-uid="EchoHub.Client.Config.AccountPreset.DisplayName">
DisplayName
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? DisplayName { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_AccountPreset_NicknameColor_" data-uid="EchoHub.Client.Config.AccountPreset.NicknameColor*"></a>
<h3 id="EchoHub_Client_Config_AccountPreset_NicknameColor" data-uid="EchoHub.Client.Config.AccountPreset.NicknameColor">
NicknameColor
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? NicknameColor { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,400 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ClientConfig | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ClientConfig | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Config_ClientConfig.md&amp;value=---%0Auid%3A%20EchoHub.Client.Config.ClientConfig%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Config.ClientConfig">
<h1 id="EchoHub_Client_Config_ClientConfig" data-uid="EchoHub.Client.Config.ClientConfig" class="text-break">
Class ClientConfig <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Config.html">Config</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class ClientConfig</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ClientConfig</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Config_ClientConfig__ctor_" data-uid="EchoHub.Client.Config.ClientConfig.#ctor*"></a>
<h3 id="EchoHub_Client_Config_ClientConfig__ctor" data-uid="EchoHub.Client.Config.ClientConfig.#ctor">
ClientConfig()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ClientConfig()</code></pre>
</div>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Config_ClientConfig_ActiveTheme_" data-uid="EchoHub.Client.Config.ClientConfig.ActiveTheme*"></a>
<h3 id="EchoHub_Client_Config_ClientConfig_ActiveTheme" data-uid="EchoHub.Client.Config.ClientConfig.ActiveTheme">
ActiveTheme
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string ActiveTheme { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_ClientConfig_DefaultAsciiSize_" data-uid="EchoHub.Client.Config.ClientConfig.DefaultAsciiSize*"></a>
<h3 id="EchoHub_Client_Config_ClientConfig_DefaultAsciiSize" data-uid="EchoHub.Client.Config.ClientConfig.DefaultAsciiSize">
DefaultAsciiSize
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>ASCII-art rendering size for images you attach: &quot;s&quot; (40×40), &quot;m&quot; (80×80), or &quot;l&quot; (120×120).
Applies to copy-paste/drag-drop attachments, which have no per-file size flag.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string DefaultAsciiSize { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_ClientConfig_DefaultPreset_" data-uid="EchoHub.Client.Config.ClientConfig.DefaultPreset*"></a>
<h3 id="EchoHub_Client_Config_ClientConfig_DefaultPreset" data-uid="EchoHub.Client.Config.ClientConfig.DefaultPreset">
DefaultPreset
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public AccountPreset DefaultPreset { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.Config.AccountPreset.html">AccountPreset</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_ClientConfig_DownloadPath_" data-uid="EchoHub.Client.Config.ClientConfig.DownloadPath*"></a>
<h3 id="EchoHub_Client_Config_ClientConfig_DownloadPath" data-uid="EchoHub.Client.Config.ClientConfig.DownloadPath">
DownloadPath
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Folder where downloaded attachments and saved images are written. When null, the
OS Downloads folder is used. Set via the native folder picker or <code>/downloadpath</code>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? DownloadPath { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_ClientConfig_Notifications_" data-uid="EchoHub.Client.Config.ClientConfig.Notifications*"></a>
<h3 id="EchoHub_Client_Config_ClientConfig_Notifications" data-uid="EchoHub.Client.Config.ClientConfig.Notifications">
Notifications
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public NotificationConfig Notifications { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.Config.NotificationConfig.html">NotificationConfig</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_ClientConfig_SavedServers_" data-uid="EchoHub.Client.Config.ClientConfig.SavedServers*"></a>
<h3 id="EchoHub_Client_Config_ClientConfig_SavedServers" data-uid="EchoHub.Client.Config.ClientConfig.SavedServers">
SavedServers
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;SavedServer&gt; SavedServers { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Client.Config.SavedServer.html">SavedServer</a>&gt;</dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,340 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ConfigManager | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ConfigManager | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Config_ConfigManager.md&amp;value=---%0Auid%3A%20EchoHub.Client.Config.ConfigManager%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Config.ConfigManager">
<h1 id="EchoHub_Client_Config_ConfigManager" data-uid="EchoHub.Client.Config.ConfigManager" class="text-break">
Class ConfigManager <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ConfigManager.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Config.html">Config</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class ConfigManager</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ConfigManager</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Config_ConfigManager_ConfigDirectory_" data-uid="EchoHub.Client.Config.ConfigManager.ConfigDirectory*"></a>
<h3 id="EchoHub_Client_Config_ConfigManager_ConfigDirectory" data-uid="EchoHub.Client.Config.ConfigManager.ConfigDirectory">
ConfigDirectory
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ConfigManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Directory holding the client config and local key material.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string ConfigDirectory { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Config_ConfigManager_Load_" data-uid="EchoHub.Client.Config.ConfigManager.Load*"></a>
<h3 id="EchoHub_Client_Config_ConfigManager_Load" data-uid="EchoHub.Client.Config.ConfigManager.Load">
Load()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ConfigManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static ClientConfig Load()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.Config.ClientConfig.html">ClientConfig</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_ConfigManager_RemoveServer_" data-uid="EchoHub.Client.Config.ConfigManager.RemoveServer*"></a>
<h3 id="EchoHub_Client_Config_ConfigManager_RemoveServer_System_String_" data-uid="EchoHub.Client.Config.ConfigManager.RemoveServer(System.String)">
RemoveServer(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ConfigManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void RemoveServer(string url)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>url</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_ConfigManager_Save_" data-uid="EchoHub.Client.Config.ConfigManager.Save*"></a>
<h3 id="EchoHub_Client_Config_ConfigManager_Save_EchoHub_Client_Config_ClientConfig_" data-uid="EchoHub.Client.Config.ConfigManager.Save(EchoHub.Client.Config.ClientConfig)">
Save(ClientConfig)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ConfigManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void Save(ClientConfig config)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>config</code> <a class="xref" href="EchoHub.Client.Config.ClientConfig.html">ClientConfig</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_ConfigManager_SaveServer_" data-uid="EchoHub.Client.Config.ConfigManager.SaveServer*"></a>
<h3 id="EchoHub_Client_Config_ConfigManager_SaveServer_EchoHub_Client_Config_SavedServer_" data-uid="EchoHub.Client.Config.ConfigManager.SaveServer(EchoHub.Client.Config.SavedServer)">
SaveServer(SavedServer)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ConfigManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void SaveServer(SavedServer server)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>server</code> <a class="xref" href="EchoHub.Client.Config.SavedServer.html">SavedServer</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ConfigManager.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,303 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class NotificationConfig | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class NotificationConfig | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Config_NotificationConfig.md&amp;value=---%0Auid%3A%20EchoHub.Client.Config.NotificationConfig%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Config.NotificationConfig">
<h1 id="EchoHub_Client_Config_NotificationConfig" data-uid="EchoHub.Client.Config.NotificationConfig" class="text-break">
Class NotificationConfig <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Config.html">Config</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class NotificationConfig</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">NotificationConfig</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Config_NotificationConfig__ctor_" data-uid="EchoHub.Client.Config.NotificationConfig.#ctor*"></a>
<h3 id="EchoHub_Client_Config_NotificationConfig__ctor" data-uid="EchoHub.Client.Config.NotificationConfig.#ctor">
NotificationConfig()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public NotificationConfig()</code></pre>
</div>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Config_NotificationConfig_Enabled_" data-uid="EchoHub.Client.Config.NotificationConfig.Enabled*"></a>
<h3 id="EchoHub_Client_Config_NotificationConfig_Enabled" data-uid="EchoHub.Client.Config.NotificationConfig.Enabled">
Enabled
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool Enabled { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_NotificationConfig_SoundFile_" data-uid="EchoHub.Client.Config.NotificationConfig.SoundFile*"></a>
<h3 id="EchoHub_Client_Config_NotificationConfig_SoundFile" data-uid="EchoHub.Client.Config.NotificationConfig.SoundFile">
SoundFile
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? SoundFile { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_NotificationConfig_Volume_" data-uid="EchoHub.Client.Config.NotificationConfig.Volume*"></a>
<h3 id="EchoHub_Client_Config_NotificationConfig_Volume" data-uid="EchoHub.Client.Config.NotificationConfig.Volume">
Volume
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public byte Volume { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,497 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class SavedServer | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class SavedServer | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Config_SavedServer.md&amp;value=---%0Auid%3A%20EchoHub.Client.Config.SavedServer%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Config.SavedServer">
<h1 id="EchoHub_Client_Config_SavedServer" data-uid="EchoHub.Client.Config.SavedServer" class="text-break">
Class SavedServer <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Config.html">Config</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class SavedServer</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">SavedServer</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Config_SavedServer__ctor_" data-uid="EchoHub.Client.Config.SavedServer.#ctor*"></a>
<h3 id="EchoHub_Client_Config_SavedServer__ctor" data-uid="EchoHub.Client.Config.SavedServer.#ctor">
SavedServer()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public SavedServer()</code></pre>
</div>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Config_SavedServer_ChannelKeys_" data-uid="EchoHub.Client.Config.SavedServer.ChannelKeys*"></a>
<h3 id="EchoHub_Client_Config_SavedServer_ChannelKeys" data-uid="EchoHub.Client.Config.SavedServer.ChannelKeys">
ChannelKeys
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Cached room content keys for end-to-end encrypted channels on this server,
keyed by channel name 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.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Dictionary&lt;string, string&gt; ChannelKeys { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">Dictionary</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_SavedServer_LastConnected_" data-uid="EchoHub.Client.Config.SavedServer.LastConnected*"></a>
<h3 id="EchoHub_Client_Config_SavedServer_LastConnected" data-uid="EchoHub.Client.Config.SavedServer.LastConnected">
LastConnected
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public DateTimeOffset LastConnected { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.datetimeoffset">DateTimeOffset</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_SavedServer_LastReadMessages_" data-uid="EchoHub.Client.Config.SavedServer.LastReadMessages*"></a>
<h3 id="EchoHub_Client_Config_SavedServer_LastReadMessages" data-uid="EchoHub.Client.Config.SavedServer.LastReadMessages">
LastReadMessages
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Last message the user has read per channel (message id as string), persisted so
unread counts, @mention highlights, and the &quot;new messages&quot; marker survive restarts.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Dictionary&lt;string, string&gt; LastReadMessages { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">Dictionary</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_SavedServer_LeftChannels_" data-uid="EchoHub.Client.Config.SavedServer.LeftChannels*"></a>
<h3 id="EchoHub_Client_Config_SavedServer_LeftChannels" data-uid="EchoHub.Client.Config.SavedServer.LeftChannels">
LeftChannels
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Channels the user explicitly left with /leave. Excluded from the automatic
join-all-channels pass at connect until the user joins them again.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;string&gt; LeftChannels { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">List</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_SavedServer_Name_" data-uid="EchoHub.Client.Config.SavedServer.Name*"></a>
<h3 id="EchoHub_Client_Config_SavedServer_Name" data-uid="EchoHub.Client.Config.SavedServer.Name">
Name
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public required string Name { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_SavedServer_RefreshToken_" data-uid="EchoHub.Client.Config.SavedServer.RefreshToken*"></a>
<h3 id="EchoHub_Client_Config_SavedServer_RefreshToken" data-uid="EchoHub.Client.Config.SavedServer.RefreshToken">
RefreshToken
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? RefreshToken { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_SavedServer_RememberMe_" data-uid="EchoHub.Client.Config.SavedServer.RememberMe*"></a>
<h3 id="EchoHub_Client_Config_SavedServer_RememberMe" data-uid="EchoHub.Client.Config.SavedServer.RememberMe">
RememberMe
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool RememberMe { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_SavedServer_Url_" data-uid="EchoHub.Client.Config.SavedServer.Url*"></a>
<h3 id="EchoHub_Client_Config_SavedServer_Url" data-uid="EchoHub.Client.Config.SavedServer.Url">
Url
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public required string Url { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Config_SavedServer_Username_" data-uid="EchoHub.Client.Config.SavedServer.Username*"></a>
<h3 id="EchoHub_Client_Config_SavedServer_Username" data-uid="EchoHub.Client.Config.SavedServer.Username">
Username
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? Username { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Config/ClientConfig.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
-142
View File
@@ -1,142 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace EchoHub.Client.Config | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace EchoHub.Client.Config | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Config">
<h1 id="EchoHub_Client_Config" data-uid="EchoHub.Client.Config" class="text-break">Namespace EchoHub.Client.Config</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Config.AccountPreset.html">AccountPreset</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Config.ClientConfig.html">ClientConfig</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Config.ConfigManager.html">ConfigManager</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Config.NotificationConfig.html">NotificationConfig</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Config.SavedServer.html">SavedServer</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
File diff suppressed because it is too large Load Diff
@@ -1,221 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class AsyncRunner | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class AsyncRunner | EchoHub Documentation ">
<meta name="description" content="Eliminates repeated Task.Run/try/catch/app.Invoke(ShowError) boilerplate. Runs async work on a background thread and routes exceptions to the UI.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_AsyncRunner.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.AsyncRunner%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.AsyncRunner">
<h1 id="EchoHub_Client_Services_AsyncRunner" data-uid="EchoHub.Client.Services.AsyncRunner" class="text-break">
Class AsyncRunner <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/AsyncRunner.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Eliminates repeated Task.Run/try/catch/app.Invoke(ShowError) boilerplate.
Runs async work on a background thread and routes exceptions to the UI.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class AsyncRunner</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">AsyncRunner</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_AsyncRunner_Run_" data-uid="EchoHub.Client.Services.AsyncRunner.Run*"></a>
<h3 id="EchoHub_Client_Services_AsyncRunner_Run_Terminal_Gui_App_IApplication_System_Func_System_Threading_Tasks_Task__System_Action_System_String__System_String_System_String_" data-uid="EchoHub.Client.Services.AsyncRunner.Run(Terminal.Gui.App.IApplication,System.Func{System.Threading.Tasks.Task},System.Action{System.String},System.String,System.String)">
Run(IApplication, Func&lt;Task&gt;, Action&lt;string&gt;, string, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/AsyncRunner.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void Run(IApplication app, Func&lt;Task&gt; work, Action&lt;string&gt; showError, string errorPrefix, string? logContext = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>app</code> <span class="xref">IApplication</span></dt>
<dd></dd>
<dt><code>work</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-1">Func</a>&lt;<span class="xref">Task</span>&gt;</dt>
<dd></dd>
<dt><code>showError</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.action-1">Action</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
<dt><code>errorPrefix</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>logContext</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/AsyncRunner.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,475 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class AudioPlaybackService | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class AudioPlaybackService | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_AudioPlaybackService.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.AudioPlaybackService%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.AudioPlaybackService">
<h1 id="EchoHub_Client_Services_AudioPlaybackService" data-uid="EchoHub.Client.Services.AudioPlaybackService" class="text-break">
Class AudioPlaybackService <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/AudioPlaybackService.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class AudioPlaybackService</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">AudioPlaybackService</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_AudioPlaybackService__ctor_" data-uid="EchoHub.Client.Services.AudioPlaybackService.#ctor*"></a>
<h3 id="EchoHub_Client_Services_AudioPlaybackService__ctor" data-uid="EchoHub.Client.Services.AudioPlaybackService.#ctor">
AudioPlaybackService()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/AudioPlaybackService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public AudioPlaybackService()</code></pre>
</div>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Services_AudioPlaybackService_IsPaused_" data-uid="EchoHub.Client.Services.AudioPlaybackService.IsPaused*"></a>
<h3 id="EchoHub_Client_Services_AudioPlaybackService_IsPaused" data-uid="EchoHub.Client.Services.AudioPlaybackService.IsPaused">
IsPaused
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/AudioPlaybackService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsPaused { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_AudioPlaybackService_IsPlaying_" data-uid="EchoHub.Client.Services.AudioPlaybackService.IsPlaying*"></a>
<h3 id="EchoHub_Client_Services_AudioPlaybackService_IsPlaying" data-uid="EchoHub.Client.Services.AudioPlaybackService.IsPlaying">
IsPlaying
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/AudioPlaybackService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsPlaying { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_AudioPlaybackService_PauseAsync_" data-uid="EchoHub.Client.Services.AudioPlaybackService.PauseAsync*"></a>
<h3 id="EchoHub_Client_Services_AudioPlaybackService_PauseAsync" data-uid="EchoHub.Client.Services.AudioPlaybackService.PauseAsync">
PauseAsync()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/AudioPlaybackService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task PauseAsync()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_AudioPlaybackService_PlayAsync_" data-uid="EchoHub.Client.Services.AudioPlaybackService.PlayAsync*"></a>
<h3 id="EchoHub_Client_Services_AudioPlaybackService_PlayAsync_System_String_" data-uid="EchoHub.Client.Services.AudioPlaybackService.PlayAsync(System.String)">
PlayAsync(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/AudioPlaybackService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task PlayAsync(string filePath)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>filePath</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_AudioPlaybackService_ResumeAsync_" data-uid="EchoHub.Client.Services.AudioPlaybackService.ResumeAsync*"></a>
<h3 id="EchoHub_Client_Services_AudioPlaybackService_ResumeAsync" data-uid="EchoHub.Client.Services.AudioPlaybackService.ResumeAsync">
ResumeAsync()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/AudioPlaybackService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task ResumeAsync()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_AudioPlaybackService_SetVolumeAsync_" data-uid="EchoHub.Client.Services.AudioPlaybackService.SetVolumeAsync*"></a>
<h3 id="EchoHub_Client_Services_AudioPlaybackService_SetVolumeAsync_System_Byte_" data-uid="EchoHub.Client.Services.AudioPlaybackService.SetVolumeAsync(System.Byte)">
SetVolumeAsync(byte)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/AudioPlaybackService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task SetVolumeAsync(byte volume)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>volume</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_AudioPlaybackService_StopAsync_" data-uid="EchoHub.Client.Services.AudioPlaybackService.StopAsync*"></a>
<h3 id="EchoHub_Client_Services_AudioPlaybackService_StopAsync" data-uid="EchoHub.Client.Services.AudioPlaybackService.StopAsync">
StopAsync()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/AudioPlaybackService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task StopAsync()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span></dt>
<dd></dd>
</dl>
<h2 class="section" id="events">Events
</h2>
<h3 id="EchoHub_Client_Services_AudioPlaybackService_PlaybackFinished" data-uid="EchoHub.Client.Services.AudioPlaybackService.PlaybackFinished">
PlaybackFinished
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/AudioPlaybackService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public event EventHandler? PlaybackFinished</code></pre>
</div>
<h4 class="section">Event Type</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.eventhandler">EventHandler</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/AudioPlaybackService.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,660 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class BackupInfo | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class BackupInfo | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_BackupInfo.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.BackupInfo%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.BackupInfo">
<h1 id="EchoHub_Client_Services_BackupInfo" data-uid="EchoHub.Client.Services.BackupInfo" class="text-break">
Class BackupInfo <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public record BackupInfo : IEquatable&lt;BackupInfo&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">BackupInfo</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Client.Services.BackupInfo.html">BackupInfo</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_BackupInfo__ctor_" data-uid="EchoHub.Client.Services.BackupInfo.#ctor*"></a>
<h3 id="EchoHub_Client_Services_BackupInfo__ctor_EchoHub_Client_Services_BackupInfo_" data-uid="EchoHub.Client.Services.BackupInfo.#ctor(EchoHub.Client.Services.BackupInfo)">
BackupInfo(BackupInfo)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected BackupInfo(BackupInfo original)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>original</code> <a class="xref" href="EchoHub.Client.Services.BackupInfo.html">BackupInfo</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_BackupInfo__ctor_" data-uid="EchoHub.Client.Services.BackupInfo.#ctor*"></a>
<h3 id="EchoHub_Client_Services_BackupInfo__ctor_System_String_System_String_System_DateTimeOffset_" data-uid="EchoHub.Client.Services.BackupInfo.#ctor(System.String,System.String,System.DateTimeOffset)">
BackupInfo(string, string, DateTimeOffset)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public BackupInfo(string Version, string AppDirectory, DateTimeOffset CreatedAt)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Version</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>AppDirectory</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>CreatedAt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.datetimeoffset">DateTimeOffset</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Services_BackupInfo_AppDirectory_" data-uid="EchoHub.Client.Services.BackupInfo.AppDirectory*"></a>
<h3 id="EchoHub_Client_Services_BackupInfo_AppDirectory" data-uid="EchoHub.Client.Services.BackupInfo.AppDirectory">
AppDirectory
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string AppDirectory { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_BackupInfo_CreatedAt_" data-uid="EchoHub.Client.Services.BackupInfo.CreatedAt*"></a>
<h3 id="EchoHub_Client_Services_BackupInfo_CreatedAt" data-uid="EchoHub.Client.Services.BackupInfo.CreatedAt">
CreatedAt
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public DateTimeOffset CreatedAt { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.datetimeoffset">DateTimeOffset</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_BackupInfo_EqualityContract_" data-uid="EchoHub.Client.Services.BackupInfo.EqualityContract*"></a>
<h3 id="EchoHub_Client_Services_BackupInfo_EqualityContract" data-uid="EchoHub.Client.Services.BackupInfo.EqualityContract">
EqualityContract
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual Type EqualityContract { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.type">Type</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_BackupInfo_Version_" data-uid="EchoHub.Client.Services.BackupInfo.Version*"></a>
<h3 id="EchoHub_Client_Services_BackupInfo_Version" data-uid="EchoHub.Client.Services.BackupInfo.Version">
Version
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Version { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_BackupInfo_Deconstruct_" data-uid="EchoHub.Client.Services.BackupInfo.Deconstruct*"></a>
<h3 id="EchoHub_Client_Services_BackupInfo_Deconstruct_System_String__System_String__System_DateTimeOffset__" data-uid="EchoHub.Client.Services.BackupInfo.Deconstruct(System.String@,System.String@,System.DateTimeOffset@)">
Deconstruct(out string, out string, out DateTimeOffset)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out string Version, out string AppDirectory, out DateTimeOffset CreatedAt)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Version</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>AppDirectory</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>CreatedAt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.datetimeoffset">DateTimeOffset</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_BackupInfo_Equals_" data-uid="EchoHub.Client.Services.BackupInfo.Equals*"></a>
<h3 id="EchoHub_Client_Services_BackupInfo_Equals_EchoHub_Client_Services_BackupInfo_" data-uid="EchoHub.Client.Services.BackupInfo.Equals(EchoHub.Client.Services.BackupInfo)">
Equals(BackupInfo?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual bool Equals(BackupInfo? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Client.Services.BackupInfo.html">BackupInfo</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_BackupInfo_Equals_" data-uid="EchoHub.Client.Services.BackupInfo.Equals*"></a>
<h3 id="EchoHub_Client_Services_BackupInfo_Equals_System_Object_" data-uid="EchoHub.Client.Services.BackupInfo.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_BackupInfo_GetHashCode_" data-uid="EchoHub.Client.Services.BackupInfo.GetHashCode*"></a>
<h3 id="EchoHub_Client_Services_BackupInfo_GetHashCode" data-uid="EchoHub.Client.Services.BackupInfo.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_BackupInfo_PrintMembers_" data-uid="EchoHub.Client.Services.BackupInfo.PrintMembers*"></a>
<h3 id="EchoHub_Client_Services_BackupInfo_PrintMembers_System_Text_StringBuilder_" data-uid="EchoHub.Client.Services.BackupInfo.PrintMembers(System.Text.StringBuilder)">
PrintMembers(StringBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual bool PrintMembers(StringBuilder builder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>builder</code> <span class="xref">StringBuilder</span></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_BackupInfo_ToString_" data-uid="EchoHub.Client.Services.BackupInfo.ToString*"></a>
<h3 id="EchoHub_Client_Services_BackupInfo_ToString" data-uid="EchoHub.Client.Services.BackupInfo.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Client_Services_BackupInfo_op_Equality_" data-uid="EchoHub.Client.Services.BackupInfo.op_Equality*"></a>
<h3 id="EchoHub_Client_Services_BackupInfo_op_Equality_EchoHub_Client_Services_BackupInfo_EchoHub_Client_Services_BackupInfo_" data-uid="EchoHub.Client.Services.BackupInfo.op_Equality(EchoHub.Client.Services.BackupInfo,EchoHub.Client.Services.BackupInfo)">
operator ==(BackupInfo?, BackupInfo?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(BackupInfo? left, BackupInfo? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.Services.BackupInfo.html">BackupInfo</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.Services.BackupInfo.html">BackupInfo</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_BackupInfo_op_Inequality_" data-uid="EchoHub.Client.Services.BackupInfo.op_Inequality*"></a>
<h3 id="EchoHub_Client_Services_BackupInfo_op_Inequality_EchoHub_Client_Services_BackupInfo_EchoHub_Client_Services_BackupInfo_" data-uid="EchoHub.Client.Services.BackupInfo.op_Inequality(EchoHub.Client.Services.BackupInfo,EchoHub.Client.Services.BackupInfo)">
operator !=(BackupInfo?, BackupInfo?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(BackupInfo? left, BackupInfo? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.Services.BackupInfo.html">BackupInfo</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.Services.BackupInfo.html">BackupInfo</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,275 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ChannelPasswordRequiredException | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ChannelPasswordRequiredException | EchoHub Documentation ">
<meta name="description" content="Thrown when joining a channel fails because a password is required or incorrect. The UI catches this to prompt the user and retry.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_ChannelPasswordRequiredException.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.ChannelPasswordRequiredException%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.ChannelPasswordRequiredException">
<h1 id="EchoHub_Client_Services_ChannelPasswordRequiredException" data-uid="EchoHub.Client.Services.ChannelPasswordRequiredException" class="text-break">
Class ChannelPasswordRequiredException <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Thrown when joining a channel fails because a password is required or incorrect.
The UI catches this to prompt the user and retry.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class ChannelPasswordRequiredException : Exception</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception">Exception</a></div>
<div><span class="xref">ChannelPasswordRequiredException</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.getbaseexception">Exception.GetBaseException()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.tostring">Exception.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.gettype">Exception.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.targetsite">Exception.TargetSite</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.message">Exception.Message</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.data">Exception.Data</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.innerexception">Exception.InnerException</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.helplink">Exception.HelpLink</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.source">Exception.Source</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.hresult">Exception.HResult</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.stacktrace">Exception.StackTrace</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_ChannelPasswordRequiredException__ctor_" data-uid="EchoHub.Client.Services.ChannelPasswordRequiredException.#ctor*"></a>
<h3 id="EchoHub_Client_Services_ChannelPasswordRequiredException__ctor_System_String_System_String_" data-uid="EchoHub.Client.Services.ChannelPasswordRequiredException.#ctor(System.String,System.String)">
ChannelPasswordRequiredException(string, string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ChannelPasswordRequiredException(string channelName, string message)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>message</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Services_ChannelPasswordRequiredException_ChannelName_" data-uid="EchoHub.Client.Services.ChannelPasswordRequiredException.ChannelName*"></a>
<h3 id="EchoHub_Client_Services_ChannelPasswordRequiredException_ChannelName" data-uid="EchoHub.Client.Services.ChannelPasswordRequiredException.ChannelName">
ChannelName
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string ChannelName { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,458 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ClientEncryptionService | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ClientEncryptionService | EchoHub Documentation ">
<meta name="description" content="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.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_ClientEncryptionService.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.ClientEncryptionService%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.ClientEncryptionService">
<h1 id="EchoHub_Client_Services_ClientEncryptionService" data-uid="EchoHub.Client.Services.ClientEncryptionService" class="text-break">
Class ClientEncryptionService <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClientEncryptionService.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Client-side encryption service. Uses the same AES-256-GCM format as the server
so messages are encrypted end-to-end between client and server.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class ClientEncryptionService : IMessageEncryptionService</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ClientEncryptionService</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="../core/EchoHub.Core.Contracts.IMessageEncryptionService.html">IMessageEncryptionService</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_ClientEncryptionService__ctor_" data-uid="EchoHub.Client.Services.ClientEncryptionService.#ctor*"></a>
<h3 id="EchoHub_Client_Services_ClientEncryptionService__ctor" data-uid="EchoHub.Client.Services.ClientEncryptionService.#ctor">
ClientEncryptionService()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClientEncryptionService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ClientEncryptionService()</code></pre>
</div>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Services_ClientEncryptionService_EncryptDatabaseEnabled_" data-uid="EchoHub.Client.Services.ClientEncryptionService.EncryptDatabaseEnabled*"></a>
<h3 id="EchoHub_Client_Services_ClientEncryptionService_EncryptDatabaseEnabled" data-uid="EchoHub.Client.Services.ClientEncryptionService.EncryptDatabaseEnabled">
EncryptDatabaseEnabled
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClientEncryptionService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Whether database content should be encrypted at rest (server setting).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool EncryptDatabaseEnabled { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_ClientEncryptionService_IsInitialized_" data-uid="EchoHub.Client.Services.ClientEncryptionService.IsInitialized*"></a>
<h3 id="EchoHub_Client_Services_ClientEncryptionService_IsInitialized" data-uid="EchoHub.Client.Services.ClientEncryptionService.IsInitialized">
IsInitialized
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClientEncryptionService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsInitialized { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_ClientEncryptionService_Decrypt_" data-uid="EchoHub.Client.Services.ClientEncryptionService.Decrypt*"></a>
<h3 id="EchoHub_Client_Services_ClientEncryptionService_Decrypt_System_String_" data-uid="EchoHub.Client.Services.ClientEncryptionService.Decrypt(System.String)">
Decrypt(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClientEncryptionService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Decrypt(string content)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>content</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_ClientEncryptionService_DecryptNullable_" data-uid="EchoHub.Client.Services.ClientEncryptionService.DecryptNullable*"></a>
<h3 id="EchoHub_Client_Services_ClientEncryptionService_DecryptNullable_System_String_" data-uid="EchoHub.Client.Services.ClientEncryptionService.DecryptNullable(System.String)">
DecryptNullable(string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClientEncryptionService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? DecryptNullable(string? value)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>value</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_ClientEncryptionService_Encrypt_" data-uid="EchoHub.Client.Services.ClientEncryptionService.Encrypt*"></a>
<h3 id="EchoHub_Client_Services_ClientEncryptionService_Encrypt_System_String_" data-uid="EchoHub.Client.Services.ClientEncryptionService.Encrypt(System.String)">
Encrypt(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClientEncryptionService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Encrypt(string plaintext)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>plaintext</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_ClientEncryptionService_EncryptNullable_" data-uid="EchoHub.Client.Services.ClientEncryptionService.EncryptNullable*"></a>
<h3 id="EchoHub_Client_Services_ClientEncryptionService_EncryptNullable_System_String_" data-uid="EchoHub.Client.Services.ClientEncryptionService.EncryptNullable(System.String)">
EncryptNullable(string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClientEncryptionService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? EncryptNullable(string? value)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>value</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_ClientEncryptionService_SetKey_" data-uid="EchoHub.Client.Services.ClientEncryptionService.SetKey*"></a>
<h3 id="EchoHub_Client_Services_ClientEncryptionService_SetKey_System_String_" data-uid="EchoHub.Client.Services.ClientEncryptionService.SetKey(System.String)">
SetKey(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClientEncryptionService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Initialize with the server's encryption key (fetched after login).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void SetKey(string base64Key)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>base64Key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClientEncryptionService.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,219 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ClipboardFiles | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ClipboardFiles | EchoHub Documentation ">
<meta name="description" content="Reads file paths that live on the OS clipboard as a file list (e.g. after copying a file in Explorer/Finder/Nautilus), which terminals do not paste as text. Lets Ctrl+V attach a copied file directly instead of requiring the user to paste a raw path.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_ClipboardFiles.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.ClipboardFiles%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.ClipboardFiles">
<h1 id="EchoHub_Client_Services_ClipboardFiles" data-uid="EchoHub.Client.Services.ClipboardFiles" class="text-break">
Class ClipboardFiles <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClipboardFiles.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Reads file paths that live on the OS clipboard as a <em>file list</em> (e.g. after copying a file in
Explorer/Finder/Nautilus), which terminals do not paste as text. Lets Ctrl+V attach a copied
file directly instead of requiring the user to paste a raw path.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class ClipboardFiles</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ClipboardFiles</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_ClipboardFiles_TryGetFiles_" data-uid="EchoHub.Client.Services.ClipboardFiles.TryGetFiles*"></a>
<h3 id="EchoHub_Client_Services_ClipboardFiles_TryGetFiles_System_Collections_Generic_List_System_String___" data-uid="EchoHub.Client.Services.ClipboardFiles.TryGetFiles(System.Collections.Generic.List{System.String}@)">
TryGetFiles(out List&lt;string&gt;)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClipboardFiles.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool TryGetFiles(out List&lt;string&gt; files)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>files</code> <span class="xref">List</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClipboardFiles.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,258 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ClipboardImage | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ClipboardImage | EchoHub Documentation ">
<meta name="description" content="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.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_ClipboardImage.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.ClipboardImage%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.ClipboardImage">
<h1 id="EchoHub_Client_Services_ClipboardImage" data-uid="EchoHub.Client.Services.ClipboardImage" class="text-break">
Class ClipboardImage <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClipboardImage.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Reads 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.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class ClipboardImage</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ClipboardImage</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_ClipboardImage_DibToPng_" data-uid="EchoHub.Client.Services.ClipboardImage.DibToPng*"></a>
<h3 id="EchoHub_Client_Services_ClipboardImage_DibToPng_System_Byte___" data-uid="EchoHub.Client.Services.ClipboardImage.DibToPng(System.Byte[])">
DibToPng(byte[])
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClipboardImage.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>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.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static byte[]? DibToPng(byte[] dib)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>dib</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_ClipboardImage_TryGetPng_" data-uid="EchoHub.Client.Services.ClipboardImage.TryGetPng*"></a>
<h3 id="EchoHub_Client_Services_ClipboardImage_TryGetPng_System_Byte____" data-uid="EchoHub.Client.Services.ClipboardImage.TryGetPng(System.Byte[]@)">
TryGetPng(out byte[])
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClipboardImage.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool TryGetPng(out byte[] png)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>png</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/ClipboardImage.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
File diff suppressed because it is too large Load Diff
@@ -1,524 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class FolderPickResult | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class FolderPickResult | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_FolderPickResult.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.FolderPickResult%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.FolderPickResult">
<h1 id="EchoHub_Client_Services_FolderPickResult" data-uid="EchoHub.Client.Services.FolderPickResult" class="text-break">
Class FolderPickResult <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed record FolderPickResult : IEquatable&lt;FolderPickResult&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">FolderPickResult</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Client.Services.FolderPickResult.html">FolderPickResult</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_FolderPickResult__ctor_" data-uid="EchoHub.Client.Services.FolderPickResult.#ctor*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult__ctor_EchoHub_Client_Services_PickerOutcome_System_String_" data-uid="EchoHub.Client.Services.FolderPickResult.#ctor(EchoHub.Client.Services.PickerOutcome,System.String)">
FolderPickResult(PickerOutcome, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public FolderPickResult(PickerOutcome Outcome, string? Path)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Outcome</code> <a class="xref" href="EchoHub.Client.Services.PickerOutcome.html">PickerOutcome</a></dt>
<dd></dd>
<dt><code>Path</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Services_FolderPickResult_Outcome_" data-uid="EchoHub.Client.Services.FolderPickResult.Outcome*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_Outcome" data-uid="EchoHub.Client.Services.FolderPickResult.Outcome">
Outcome
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public PickerOutcome Outcome { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.Services.PickerOutcome.html">PickerOutcome</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_FolderPickResult_Path_" data-uid="EchoHub.Client.Services.FolderPickResult.Path*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_Path" data-uid="EchoHub.Client.Services.FolderPickResult.Path">
Path
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? Path { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_FolderPickResult_Deconstruct_" data-uid="EchoHub.Client.Services.FolderPickResult.Deconstruct*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_Deconstruct_EchoHub_Client_Services_PickerOutcome__System_String__" data-uid="EchoHub.Client.Services.FolderPickResult.Deconstruct(EchoHub.Client.Services.PickerOutcome@,System.String@)">
Deconstruct(out PickerOutcome, out string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out PickerOutcome Outcome, out string? Path)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Outcome</code> <a class="xref" href="EchoHub.Client.Services.PickerOutcome.html">PickerOutcome</a></dt>
<dd></dd>
<dt><code>Path</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_FolderPickResult_Equals_" data-uid="EchoHub.Client.Services.FolderPickResult.Equals*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_Equals_EchoHub_Client_Services_FolderPickResult_" data-uid="EchoHub.Client.Services.FolderPickResult.Equals(EchoHub.Client.Services.FolderPickResult)">
Equals(FolderPickResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool Equals(FolderPickResult? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Client.Services.FolderPickResult.html">FolderPickResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_FolderPickResult_Equals_" data-uid="EchoHub.Client.Services.FolderPickResult.Equals*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_Equals_System_Object_" data-uid="EchoHub.Client.Services.FolderPickResult.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_FolderPickResult_GetHashCode_" data-uid="EchoHub.Client.Services.FolderPickResult.GetHashCode*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_GetHashCode" data-uid="EchoHub.Client.Services.FolderPickResult.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_FolderPickResult_ToString_" data-uid="EchoHub.Client.Services.FolderPickResult.ToString*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_ToString" data-uid="EchoHub.Client.Services.FolderPickResult.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Client_Services_FolderPickResult_op_Equality_" data-uid="EchoHub.Client.Services.FolderPickResult.op_Equality*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_op_Equality_EchoHub_Client_Services_FolderPickResult_EchoHub_Client_Services_FolderPickResult_" data-uid="EchoHub.Client.Services.FolderPickResult.op_Equality(EchoHub.Client.Services.FolderPickResult,EchoHub.Client.Services.FolderPickResult)">
operator ==(FolderPickResult?, FolderPickResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(FolderPickResult? left, FolderPickResult? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.Services.FolderPickResult.html">FolderPickResult</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.Services.FolderPickResult.html">FolderPickResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_FolderPickResult_op_Inequality_" data-uid="EchoHub.Client.Services.FolderPickResult.op_Inequality*"></a>
<h3 id="EchoHub_Client_Services_FolderPickResult_op_Inequality_EchoHub_Client_Services_FolderPickResult_EchoHub_Client_Services_FolderPickResult_" data-uid="EchoHub.Client.Services.FolderPickResult.op_Inequality(EchoHub.Client.Services.FolderPickResult,EchoHub.Client.Services.FolderPickResult)">
operator !=(FolderPickResult?, FolderPickResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(FolderPickResult? left, FolderPickResult? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.Services.FolderPickResult.html">FolderPickResult</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.Services.FolderPickResult.html">FolderPickResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,563 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class JoinOutcome | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class JoinOutcome | EchoHub Documentation ">
<meta name="description" content="Result of joining a channel: decrypted history plus, for end-to-end encrypted channels, the key envelope needed to unlock the room content key.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_JoinOutcome.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.JoinOutcome%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.JoinOutcome">
<h1 id="EchoHub_Client_Services_JoinOutcome" data-uid="EchoHub.Client.Services.JoinOutcome" class="text-break">
Class JoinOutcome <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Result of joining a channel: decrypted history plus, for end-to-end encrypted
channels, the key envelope needed to unlock the room content key.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed record JoinOutcome : IEquatable&lt;JoinOutcome&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">JoinOutcome</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Client.Services.JoinOutcome.html">JoinOutcome</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_JoinOutcome__ctor_" data-uid="EchoHub.Client.Services.JoinOutcome.#ctor*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome__ctor_System_Collections_Generic_List_EchoHub_Core_DTOs_MessageDto__System_String_System_String_" data-uid="EchoHub.Client.Services.JoinOutcome.#ctor(System.Collections.Generic.List{EchoHub.Core.DTOs.MessageDto},System.String,System.String)">
JoinOutcome(List&lt;MessageDto&gt;, string?, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Result of joining a channel: decrypted history plus, for end-to-end encrypted
channels, the key envelope needed to unlock the room content key.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public JoinOutcome(List&lt;MessageDto&gt; History, string? EncryptionSalt, string? WrappedRoomKey)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>History</code> <span class="xref">List</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs">MessageDto</a>&gt;</dt>
<dd></dd>
<dt><code>EncryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>WrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Services_JoinOutcome_EncryptionSalt_" data-uid="EchoHub.Client.Services.JoinOutcome.EncryptionSalt*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_EncryptionSalt" data-uid="EchoHub.Client.Services.JoinOutcome.EncryptionSalt">
EncryptionSalt
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? EncryptionSalt { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_JoinOutcome_History_" data-uid="EchoHub.Client.Services.JoinOutcome.History*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_History" data-uid="EchoHub.Client.Services.JoinOutcome.History">
History
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;MessageDto&gt; History { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">List</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs">MessageDto</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_JoinOutcome_WrappedRoomKey_" data-uid="EchoHub.Client.Services.JoinOutcome.WrappedRoomKey*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_WrappedRoomKey" data-uid="EchoHub.Client.Services.JoinOutcome.WrappedRoomKey">
WrappedRoomKey
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? WrappedRoomKey { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_JoinOutcome_Deconstruct_" data-uid="EchoHub.Client.Services.JoinOutcome.Deconstruct*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_Deconstruct_System_Collections_Generic_List_EchoHub_Core_DTOs_MessageDto___System_String__System_String__" data-uid="EchoHub.Client.Services.JoinOutcome.Deconstruct(System.Collections.Generic.List{EchoHub.Core.DTOs.MessageDto}@,System.String@,System.String@)">
Deconstruct(out List&lt;MessageDto&gt;, out string?, out string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out List&lt;MessageDto&gt; History, out string? EncryptionSalt, out string? WrappedRoomKey)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>History</code> <span class="xref">List</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs">MessageDto</a>&gt;</dt>
<dd></dd>
<dt><code>EncryptionSalt</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>WrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_JoinOutcome_Equals_" data-uid="EchoHub.Client.Services.JoinOutcome.Equals*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_Equals_EchoHub_Client_Services_JoinOutcome_" data-uid="EchoHub.Client.Services.JoinOutcome.Equals(EchoHub.Client.Services.JoinOutcome)">
Equals(JoinOutcome?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool Equals(JoinOutcome? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Client.Services.JoinOutcome.html">JoinOutcome</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_JoinOutcome_Equals_" data-uid="EchoHub.Client.Services.JoinOutcome.Equals*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_Equals_System_Object_" data-uid="EchoHub.Client.Services.JoinOutcome.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_JoinOutcome_GetHashCode_" data-uid="EchoHub.Client.Services.JoinOutcome.GetHashCode*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_GetHashCode" data-uid="EchoHub.Client.Services.JoinOutcome.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_JoinOutcome_ToString_" data-uid="EchoHub.Client.Services.JoinOutcome.ToString*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_ToString" data-uid="EchoHub.Client.Services.JoinOutcome.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Client_Services_JoinOutcome_op_Equality_" data-uid="EchoHub.Client.Services.JoinOutcome.op_Equality*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_op_Equality_EchoHub_Client_Services_JoinOutcome_EchoHub_Client_Services_JoinOutcome_" data-uid="EchoHub.Client.Services.JoinOutcome.op_Equality(EchoHub.Client.Services.JoinOutcome,EchoHub.Client.Services.JoinOutcome)">
operator ==(JoinOutcome?, JoinOutcome?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(JoinOutcome? left, JoinOutcome? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.Services.JoinOutcome.html">JoinOutcome</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.Services.JoinOutcome.html">JoinOutcome</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_JoinOutcome_op_Inequality_" data-uid="EchoHub.Client.Services.JoinOutcome.op_Inequality*"></a>
<h3 id="EchoHub_Client_Services_JoinOutcome_op_Inequality_EchoHub_Client_Services_JoinOutcome_EchoHub_Client_Services_JoinOutcome_" data-uid="EchoHub.Client.Services.JoinOutcome.op_Inequality(EchoHub.Client.Services.JoinOutcome,EchoHub.Client.Services.JoinOutcome)">
operator !=(JoinOutcome?, JoinOutcome?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(JoinOutcome? left, JoinOutcome? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.Services.JoinOutcome.html">JoinOutcome</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.Services.JoinOutcome.html">JoinOutcome</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,219 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class NativeFolderPicker | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class NativeFolderPicker | EchoHub Documentation ">
<meta name="description" content="Opens the OS-native folder chooser (Windows Explorer, macOS Finder, Linux GTK/KDE) by shelling out, so the TUI doesn&#39;t need a GUI toolkit reference. Returns when no native dialog can run, so callers can fall back to a configured path.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_NativeFolderPicker.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.NativeFolderPicker%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.NativeFolderPicker">
<h1 id="EchoHub_Client_Services_NativeFolderPicker" data-uid="EchoHub.Client.Services.NativeFolderPicker" class="text-break">
Class NativeFolderPicker <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Opens the OS-native folder chooser (Windows Explorer, macOS Finder, Linux GTK/KDE) by shelling
out, so the TUI doesn't need a GUI toolkit reference. Returns <a class="xref" href="EchoHub.Client.Services.PickerOutcome.html#EchoHub_Client_Services_PickerOutcome_Unavailable">Unavailable</a>
when no native dialog can run, so callers can fall back to a configured path.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class NativeFolderPicker</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">NativeFolderPicker</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_NativeFolderPicker_PickFolderAsync_" data-uid="EchoHub.Client.Services.NativeFolderPicker.PickFolderAsync*"></a>
<h3 id="EchoHub_Client_Services_NativeFolderPicker_PickFolderAsync_System_String_" data-uid="EchoHub.Client.Services.NativeFolderPicker.PickFolderAsync(System.String)">
PickFolderAsync(string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static Task&lt;FolderPickResult&gt; PickFolderAsync(string? initialDir)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>initialDir</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span>&lt;<a class="xref" href="EchoHub.Client.Services.FolderPickResult.html">FolderPickResult</a>&gt;</dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,340 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class NotificationSoundService | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class NotificationSoundService | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_NotificationSoundService.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.NotificationSoundService%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.NotificationSoundService">
<h1 id="EchoHub_Client_Services_NotificationSoundService" data-uid="EchoHub.Client.Services.NotificationSoundService" class="text-break">
Class NotificationSoundService <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NotificationSoundService.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class NotificationSoundService</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">NotificationSoundService</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_NotificationSoundService__ctor_" data-uid="EchoHub.Client.Services.NotificationSoundService.#ctor*"></a>
<h3 id="EchoHub_Client_Services_NotificationSoundService__ctor_EchoHub_Client_Config_NotificationConfig_" data-uid="EchoHub.Client.Services.NotificationSoundService.#ctor(EchoHub.Client.Config.NotificationConfig)">
NotificationSoundService(NotificationConfig)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NotificationSoundService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public NotificationSoundService(NotificationConfig config)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>config</code> <a class="xref" href="EchoHub.Client.Config.NotificationConfig.html">NotificationConfig</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_NotificationSoundService_PlayAsync_" data-uid="EchoHub.Client.Services.NotificationSoundService.PlayAsync*"></a>
<h3 id="EchoHub_Client_Services_NotificationSoundService_PlayAsync" data-uid="EchoHub.Client.Services.NotificationSoundService.PlayAsync">
PlayAsync()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NotificationSoundService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task PlayAsync()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_NotificationSoundService_PlayTestAsync_" data-uid="EchoHub.Client.Services.NotificationSoundService.PlayTestAsync*"></a>
<h3 id="EchoHub_Client_Services_NotificationSoundService_PlayTestAsync" data-uid="EchoHub.Client.Services.NotificationSoundService.PlayTestAsync">
PlayTestAsync()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NotificationSoundService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Plays the notification sound regardless of the Enabled setting (for /test-sound).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task PlayTestAsync()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_NotificationSoundService_SetEnabled_" data-uid="EchoHub.Client.Services.NotificationSoundService.SetEnabled*"></a>
<h3 id="EchoHub_Client_Services_NotificationSoundService_SetEnabled_System_Boolean_" data-uid="EchoHub.Client.Services.NotificationSoundService.SetEnabled(System.Boolean)">
SetEnabled(bool)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NotificationSoundService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void SetEnabled(bool enabled)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>enabled</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_NotificationSoundService_SetVolume_" data-uid="EchoHub.Client.Services.NotificationSoundService.SetVolume*"></a>
<h3 id="EchoHub_Client_Services_NotificationSoundService_SetVolume_System_Byte_" data-uid="EchoHub.Client.Services.NotificationSoundService.SetVolume(System.Byte)">
SetVolume(byte)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NotificationSoundService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void SetVolume(byte volume)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>volume</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NotificationSoundService.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,602 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class OutgoingAttachment | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class OutgoingAttachment | EchoHub Documentation ">
<meta name="description" content="One file to upload as part of a message. For end-to-end encrypted channels the stream is already ciphertext, is set (image/audio/file), and holds the room-encrypted ASCII art for images. For normal channels only and are set.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_OutgoingAttachment.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.OutgoingAttachment%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.OutgoingAttachment">
<h1 id="EchoHub_Client_Services_OutgoingAttachment" data-uid="EchoHub.Client.Services.OutgoingAttachment" class="text-break">
Class OutgoingAttachment <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>One file to upload as part of a message. For end-to-end encrypted channels the stream
is already ciphertext, <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_DeclaredKind">DeclaredKind</a> is set (image/audio/file), and
<a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_EncryptedPreview">EncryptedPreview</a> holds the room-encrypted ASCII art for images.
For normal channels only <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_Stream">Stream</a> and <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_FileName">FileName</a> are set.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed record OutgoingAttachment : IEquatable&lt;OutgoingAttachment&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">OutgoingAttachment</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html">OutgoingAttachment</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_OutgoingAttachment__ctor_" data-uid="EchoHub.Client.Services.OutgoingAttachment.#ctor*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment__ctor_System_IO_Stream_System_String_System_String_System_String_" data-uid="EchoHub.Client.Services.OutgoingAttachment.#ctor(System.IO.Stream,System.String,System.String,System.String)">
OutgoingAttachment(Stream, string, string?, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>One file to upload as part of a message. For end-to-end encrypted channels the stream
is already ciphertext, <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_DeclaredKind">DeclaredKind</a> is set (image/audio/file), and
<a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_EncryptedPreview">EncryptedPreview</a> holds the room-encrypted ASCII art for images.
For normal channels only <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_Stream">Stream</a> and <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_FileName">FileName</a> are set.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public OutgoingAttachment(Stream Stream, string FileName, string? DeclaredKind = null, string? EncryptedPreview = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Stream</code> <span class="xref">Stream</span></dt>
<dd></dd>
<dt><code>FileName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>DeclaredKind</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>EncryptedPreview</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Services_OutgoingAttachment_DeclaredKind_" data-uid="EchoHub.Client.Services.OutgoingAttachment.DeclaredKind*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_DeclaredKind" data-uid="EchoHub.Client.Services.OutgoingAttachment.DeclaredKind">
DeclaredKind
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? DeclaredKind { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_OutgoingAttachment_EncryptedPreview_" data-uid="EchoHub.Client.Services.OutgoingAttachment.EncryptedPreview*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_EncryptedPreview" data-uid="EchoHub.Client.Services.OutgoingAttachment.EncryptedPreview">
EncryptedPreview
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? EncryptedPreview { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_OutgoingAttachment_FileName_" data-uid="EchoHub.Client.Services.OutgoingAttachment.FileName*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_FileName" data-uid="EchoHub.Client.Services.OutgoingAttachment.FileName">
FileName
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string FileName { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_OutgoingAttachment_Stream_" data-uid="EchoHub.Client.Services.OutgoingAttachment.Stream*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_Stream" data-uid="EchoHub.Client.Services.OutgoingAttachment.Stream">
Stream
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Stream Stream { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">Stream</span></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_OutgoingAttachment_Deconstruct_" data-uid="EchoHub.Client.Services.OutgoingAttachment.Deconstruct*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_Deconstruct_System_IO_Stream__System_String__System_String__System_String__" data-uid="EchoHub.Client.Services.OutgoingAttachment.Deconstruct(System.IO.Stream@,System.String@,System.String@,System.String@)">
Deconstruct(out Stream, out string, out string?, out string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out Stream Stream, out string FileName, out string? DeclaredKind, out string? EncryptedPreview)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Stream</code> <span class="xref">Stream</span></dt>
<dd></dd>
<dt><code>FileName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>DeclaredKind</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>EncryptedPreview</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_OutgoingAttachment_Equals_" data-uid="EchoHub.Client.Services.OutgoingAttachment.Equals*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_Equals_EchoHub_Client_Services_OutgoingAttachment_" data-uid="EchoHub.Client.Services.OutgoingAttachment.Equals(EchoHub.Client.Services.OutgoingAttachment)">
Equals(OutgoingAttachment?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool Equals(OutgoingAttachment? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html">OutgoingAttachment</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_OutgoingAttachment_Equals_" data-uid="EchoHub.Client.Services.OutgoingAttachment.Equals*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_Equals_System_Object_" data-uid="EchoHub.Client.Services.OutgoingAttachment.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_OutgoingAttachment_GetHashCode_" data-uid="EchoHub.Client.Services.OutgoingAttachment.GetHashCode*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_GetHashCode" data-uid="EchoHub.Client.Services.OutgoingAttachment.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_OutgoingAttachment_ToString_" data-uid="EchoHub.Client.Services.OutgoingAttachment.ToString*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_ToString" data-uid="EchoHub.Client.Services.OutgoingAttachment.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Client_Services_OutgoingAttachment_op_Equality_" data-uid="EchoHub.Client.Services.OutgoingAttachment.op_Equality*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_op_Equality_EchoHub_Client_Services_OutgoingAttachment_EchoHub_Client_Services_OutgoingAttachment_" data-uid="EchoHub.Client.Services.OutgoingAttachment.op_Equality(EchoHub.Client.Services.OutgoingAttachment,EchoHub.Client.Services.OutgoingAttachment)">
operator ==(OutgoingAttachment?, OutgoingAttachment?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(OutgoingAttachment? left, OutgoingAttachment? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html">OutgoingAttachment</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html">OutgoingAttachment</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_OutgoingAttachment_op_Inequality_" data-uid="EchoHub.Client.Services.OutgoingAttachment.op_Inequality*"></a>
<h3 id="EchoHub_Client_Services_OutgoingAttachment_op_Inequality_EchoHub_Client_Services_OutgoingAttachment_EchoHub_Client_Services_OutgoingAttachment_" data-uid="EchoHub.Client.Services.OutgoingAttachment.op_Inequality(EchoHub.Client.Services.OutgoingAttachment,EchoHub.Client.Services.OutgoingAttachment)">
operator !=(OutgoingAttachment?, OutgoingAttachment?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(OutgoingAttachment? left, OutgoingAttachment? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html">OutgoingAttachment</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html">OutgoingAttachment</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/OutgoingAttachment.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,211 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class PathSetup | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class PathSetup | EchoHub Documentation ">
<meta name="description" content="Ensures the application&#39;s directory is on the system PATH so users can run &#39;echohub&#39; from any terminal session.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_PathSetup.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.PathSetup%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.PathSetup">
<h1 id="EchoHub_Client_Services_PathSetup" data-uid="EchoHub.Client.Services.PathSetup" class="text-break">
Class PathSetup <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/PathSetup.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Ensures the application's directory is on the system PATH so users
can run 'echohub' from any terminal session.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class PathSetup</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">PathSetup</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_PathSetup_EnsureOnPath_" data-uid="EchoHub.Client.Services.PathSetup.EnsureOnPath*"></a>
<h3 id="EchoHub_Client_Services_PathSetup_EnsureOnPath" data-uid="EchoHub.Client.Services.PathSetup.EnsureOnPath">
EnsureOnPath()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/PathSetup.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>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.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void EnsureOnPath()</code></pre>
</div>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/PathSetup.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,159 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Enum PickerOutcome | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Enum PickerOutcome | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_PickerOutcome.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.PickerOutcome%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.PickerOutcome">
<h1 id="EchoHub_Client_Services_PickerOutcome" data-uid="EchoHub.Client.Services.PickerOutcome" class="text-break">
Enum PickerOutcome <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public enum PickerOutcome</code></pre>
</div>
<h2 id="fields">Fields
</h2>
<dl class="parameters">
<dt id="EchoHub_Client_Services_PickerOutcome_Cancelled"><code>Cancelled = 1</code></dt>
<dd><p>The native dialog ran but the user cancelled it.</p>
</dd>
<dt id="EchoHub_Client_Services_PickerOutcome_Chosen"><code>Chosen = 0</code></dt>
<dd><p>The user picked a folder (<a class="xref" href="EchoHub.Client.Services.FolderPickResult.html#EchoHub_Client_Services_FolderPickResult_Path">Path</a> is set).</p>
</dd>
<dt id="EchoHub_Client_Services_PickerOutcome_Unavailable"><code>Unavailable = 2</code></dt>
<dd><p>No native picker is available on this machine (headless, missing tool, etc.).</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/NativeFolderPicker.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,370 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class RoomKeyProtector | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class RoomKeyProtector | EchoHub Documentation ">
<meta name="description" content="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 &amp;quot;dp1:&amp;quot;). 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 &amp;quot;k1:&amp;quot;) — 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.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_RoomKeyProtector.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.RoomKeyProtector%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.RoomKeyProtector">
<h1 id="EchoHub_Client_Services_RoomKeyProtector" data-uid="EchoHub.Client.Services.RoomKeyProtector" class="text-break">
Class RoomKeyProtector <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyProtector.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>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 &quot;dp1:&quot;). 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 &quot;k1:&quot;) — 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.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class RoomKeyProtector</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">RoomKeyProtector</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_RoomKeyProtector__ctor_" data-uid="EchoHub.Client.Services.RoomKeyProtector.#ctor*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyProtector__ctor_System_String_System_Nullable_System_Boolean__" data-uid="EchoHub.Client.Services.RoomKeyProtector.#ctor(System.String,System.Nullable{System.Boolean})">
RoomKeyProtector(string, bool?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyProtector.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public RoomKeyProtector(string keyDirectory, bool? useDpapi = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>keyDirectory</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>Directory holding the master key file (the client config dir).</p>
</dd>
<dt><code>useDpapi</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>?</dt>
<dd><p>Overrides the platform default (DPAPI on Windows) — for tests.</p>
</dd>
</dl>
<h2 class="section" id="fields">Fields
</h2>
<h3 id="EchoHub_Client_Services_RoomKeyProtector_DpapiPrefix" data-uid="EchoHub.Client.Services.RoomKeyProtector.DpapiPrefix">
DpapiPrefix
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyProtector.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const string DpapiPrefix = &quot;dp1:&quot;</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_Services_RoomKeyProtector_KeyFilePrefix" data-uid="EchoHub.Client.Services.RoomKeyProtector.KeyFilePrefix">
KeyFilePrefix
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyProtector.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const string KeyFilePrefix = &quot;k1:&quot;</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_RoomKeyProtector_Protect_" data-uid="EchoHub.Client.Services.RoomKeyProtector.Protect*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyProtector_Protect_System_Byte___" data-uid="EchoHub.Client.Services.RoomKeyProtector.Protect(System.Byte[])">
Protect(byte[])
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyProtector.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Encrypts a room key for storage in the config file.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Protect(byte[] roomKey)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>roomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_RoomKeyProtector_TryUnprotect_" data-uid="EchoHub.Client.Services.RoomKeyProtector.TryUnprotect*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyProtector_TryUnprotect_System_String_System_Byte____System_Boolean__" data-uid="EchoHub.Client.Services.RoomKeyProtector.TryUnprotect(System.String,System.Byte[]@,System.Boolean@)">
TryUnprotect(string, out byte[], out bool)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyProtector.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Decrypts a stored value back into a room key. <code class="paramref">wasLegacy</code> is true when
the value was an unencrypted legacy entry that should be re-persisted via
<a class="xref" href="EchoHub.Client.Services.RoomKeyProtector.html#EchoHub_Client_Services_RoomKeyProtector_Protect_System_Byte___">Protect(byte[])</a>. 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.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool TryUnprotect(string stored, out byte[] roomKey, out bool wasLegacy)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>stored</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>roomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
<dt><code>wasLegacy</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyProtector.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,557 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class RoomKeyStore | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class RoomKeyStore | EchoHub Documentation ">
<meta name="description" content="Holds room content keys for end-to-end encrypted channels: in-memory for the active session, persisted per-server in the client config (like saved sessions) so users don&#39;t retype the passphrase every launch. Keys never leave this machine and are encrypted at rest by . 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&#39;t cached yet.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_RoomKeyStore.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.RoomKeyStore%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.RoomKeyStore">
<h1 id="EchoHub_Client_Services_RoomKeyStore" data-uid="EchoHub.Client.Services.RoomKeyStore" class="text-break">
Class RoomKeyStore <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Holds room content keys for end-to-end encrypted channels: in-memory for the
active session, persisted per-server in the client config (like saved sessions)
so users don't retype the passphrase every launch. Keys never leave this machine
and are encrypted at rest by <a class="xref" href="EchoHub.Client.Services.RoomKeyProtector.html">RoomKeyProtector</a>. 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.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class RoomKeyStore</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">RoomKeyStore</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_RoomKeyStore__ctor_" data-uid="EchoHub.Client.Services.RoomKeyStore.#ctor*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore__ctor" data-uid="EchoHub.Client.Services.RoomKeyStore.#ctor">
RoomKeyStore()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public RoomKeyStore()</code></pre>
</div>
<a id="EchoHub_Client_Services_RoomKeyStore__ctor_" data-uid="EchoHub.Client.Services.RoomKeyStore.#ctor*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore__ctor_EchoHub_Client_Services_RoomKeyProtector_" data-uid="EchoHub.Client.Services.RoomKeyStore.#ctor(EchoHub.Client.Services.RoomKeyProtector)">
RoomKeyStore(RoomKeyProtector)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public RoomKeyStore(RoomKeyProtector protector)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>protector</code> <a class="xref" href="EchoHub.Client.Services.RoomKeyProtector.html">RoomKeyProtector</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_RoomKeyStore_Clear_" data-uid="EchoHub.Client.Services.RoomKeyStore.Clear*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore_Clear" data-uid="EchoHub.Client.Services.RoomKeyStore.Clear">
Clear()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Clear()</code></pre>
</div>
<a id="EchoHub_Client_Services_RoomKeyStore_HasKey_" data-uid="EchoHub.Client.Services.RoomKeyStore.HasKey*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore_HasKey_System_String_" data-uid="EchoHub.Client.Services.RoomKeyStore.HasKey(System.String)">
HasKey(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool HasKey(string channelName)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_RoomKeyStore_IsChannelEncrypted_" data-uid="EchoHub.Client.Services.RoomKeyStore.IsChannelEncrypted*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore_IsChannelEncrypted_System_String_" data-uid="EchoHub.Client.Services.RoomKeyStore.IsChannelEncrypted(System.String)">
IsChannelEncrypted(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsChannelEncrypted(string channelName)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_RoomKeyStore_LoadForServer_" data-uid="EchoHub.Client.Services.RoomKeyStore.LoadForServer*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore_LoadForServer_System_String_" data-uid="EchoHub.Client.Services.RoomKeyStore.LoadForServer(System.String)">
LoadForServer(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Binds the store to a server and loads that server's cached keys from config.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void LoadForServer(string serverUrl)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>serverUrl</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_RoomKeyStore_MarkChannelEncrypted_" data-uid="EchoHub.Client.Services.RoomKeyStore.MarkChannelEncrypted*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore_MarkChannelEncrypted_System_String_System_Boolean_" data-uid="EchoHub.Client.Services.RoomKeyStore.MarkChannelEncrypted(System.String,System.Boolean)">
MarkChannelEncrypted(string, bool)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>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.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void MarkChannelEncrypted(string channelName, bool isEncrypted)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>isEncrypted</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_RoomKeyStore_RemoveKey_" data-uid="EchoHub.Client.Services.RoomKeyStore.RemoveKey*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore_RemoveKey_System_String_" data-uid="EchoHub.Client.Services.RoomKeyStore.RemoveKey(System.String)">
RemoveKey(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void RemoveKey(string channelName)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_RoomKeyStore_StoreKey_" data-uid="EchoHub.Client.Services.RoomKeyStore.StoreKey*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore_StoreKey_System_String_System_Byte___" data-uid="EchoHub.Client.Services.RoomKeyStore.StoreKey(System.String,System.Byte[])">
StoreKey(string, byte[])
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Stores a key for the session and persists it to the server's config entry.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void StoreKey(string channelName, byte[] key)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_RoomKeyStore_TryGetKey_" data-uid="EchoHub.Client.Services.RoomKeyStore.TryGetKey*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore_TryGetKey_System_String_System_Byte____" data-uid="EchoHub.Client.Services.RoomKeyStore.TryGetKey(System.String,System.Byte[]@)">
TryGetKey(string, out byte[])
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool TryGetKey(string channelName, out byte[] key)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_RoomKeyStore_TryStoreFromEnvelope_" data-uid="EchoHub.Client.Services.RoomKeyStore.TryStoreFromEnvelope*"></a>
<h3 id="EchoHub_Client_Services_RoomKeyStore_TryStoreFromEnvelope_System_String_System_String_System_Byte___" data-uid="EchoHub.Client.Services.RoomKeyStore.TryStoreFromEnvelope(System.String,System.String,System.Byte[])">
TryStoreFromEnvelope(string, string, byte[])
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>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.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool TryStoreFromEnvelope(string channelName, string wrappedRoomKey, byte[] kek)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>wrappedRoomKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>kek</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>[]</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/RoomKeyStore.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,273 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class RoomLockedException | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class RoomLockedException | EchoHub Documentation ">
<meta name="description" content="Thrown when sending into an end-to-end encrypted channel whose room key isn&#39;t cached: without the key the message would leave the client as plaintext, which must never happen.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_RoomLockedException.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.RoomLockedException%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.RoomLockedException">
<h1 id="EchoHub_Client_Services_RoomLockedException" data-uid="EchoHub.Client.Services.RoomLockedException" class="text-break">
Class RoomLockedException <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Thrown when 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.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class RoomLockedException : Exception</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception">Exception</a></div>
<div><span class="xref">RoomLockedException</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.getbaseexception">Exception.GetBaseException()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.tostring">Exception.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.gettype">Exception.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.targetsite">Exception.TargetSite</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.message">Exception.Message</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.data">Exception.Data</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.innerexception">Exception.InnerException</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.helplink">Exception.HelpLink</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.source">Exception.Source</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.hresult">Exception.HResult</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.stacktrace">Exception.StackTrace</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_RoomLockedException__ctor_" data-uid="EchoHub.Client.Services.RoomLockedException.#ctor*"></a>
<h3 id="EchoHub_Client_Services_RoomLockedException__ctor_System_String_" data-uid="EchoHub.Client.Services.RoomLockedException.#ctor(System.String)">
RoomLockedException(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public RoomLockedException(string channelName)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Services_RoomLockedException_ChannelName_" data-uid="EchoHub.Client.Services.RoomLockedException.ChannelName*"></a>
<h3 id="EchoHub_Client_Services_RoomLockedException_ChannelName" data-uid="EchoHub.Client.Services.RoomLockedException.ChannelName">
ChannelName
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string ChannelName { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/EchoHubConnection.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,365 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class UpdateBackupService | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class UpdateBackupService | EchoHub Documentation ">
<meta name="description" content="Manages pre-update backups and rollback restoration for the auto-updater. Backup location: ~/.echohub/update-backup/">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_UpdateBackupService.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.UpdateBackupService%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.UpdateBackupService">
<h1 id="EchoHub_Client_Services_UpdateBackupService" data-uid="EchoHub.Client.Services.UpdateBackupService" class="text-break">
Class UpdateBackupService <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Manages pre-update backups and rollback restoration for the auto-updater.
Backup location: ~/.echohub/update-backup/</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class UpdateBackupService</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">UpdateBackupService</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Services_UpdateBackupService_IsPostUpdate_" data-uid="EchoHub.Client.Services.UpdateBackupService.IsPostUpdate*"></a>
<h3 id="EchoHub_Client_Services_UpdateBackupService_IsPostUpdate" data-uid="EchoHub.Client.Services.UpdateBackupService.IsPostUpdate">
IsPostUpdate
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>True if a backup exists from a recent update (set at startup).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool IsPostUpdate { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_UpdateBackupService_BackupExists_" data-uid="EchoHub.Client.Services.UpdateBackupService.BackupExists*"></a>
<h3 id="EchoHub_Client_Services_UpdateBackupService_BackupExists" data-uid="EchoHub.Client.Services.UpdateBackupService.BackupExists">
BackupExists()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Returns true if a valid backup exists (both ZIP and metadata file present).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool BackupExists()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_UpdateBackupService_CreateBackup_" data-uid="EchoHub.Client.Services.UpdateBackupService.CreateBackup*"></a>
<h3 id="EchoHub_Client_Services_UpdateBackupService_CreateBackup" data-uid="EchoHub.Client.Services.UpdateBackupService.CreateBackup">
CreateBackup()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Creates a ZIP backup of the current app directory before an update.
Deletes any previous backup first. Uses fastest compression for speed.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void CreateBackup()</code></pre>
</div>
<a id="EchoHub_Client_Services_UpdateBackupService_DeleteBackup_" data-uid="EchoHub.Client.Services.UpdateBackupService.DeleteBackup*"></a>
<h3 id="EchoHub_Client_Services_UpdateBackupService_DeleteBackup" data-uid="EchoHub.Client.Services.UpdateBackupService.DeleteBackup">
DeleteBackup()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Deletes the backup directory and all contents.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void DeleteBackup()</code></pre>
</div>
<a id="EchoHub_Client_Services_UpdateBackupService_GetBackupInfo_" data-uid="EchoHub.Client.Services.UpdateBackupService.GetBackupInfo*"></a>
<h3 id="EchoHub_Client_Services_UpdateBackupService_GetBackupInfo" data-uid="EchoHub.Client.Services.UpdateBackupService.GetBackupInfo">
GetBackupInfo()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Reads backup metadata. Returns null if no backup exists or metadata is unreadable.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static BackupInfo? GetBackupInfo()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.Services.BackupInfo.html">BackupInfo</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_UpdateBackupService_RestoreBackup_" data-uid="EchoHub.Client.Services.UpdateBackupService.RestoreBackup*"></a>
<h3 id="EchoHub_Client_Services_UpdateBackupService_RestoreBackup" data-uid="EchoHub.Client.Services.UpdateBackupService.RestoreBackup">
RestoreBackup()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Restores the backup ZIP to the app directory, then restarts the process.
This method does not return — it calls Environment.Exit(0).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void RestoreBackup()</code></pre>
</div>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateBackupService.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,370 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class UpdateChecker | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class UpdateChecker | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Services_UpdateChecker.md&amp;value=---%0Auid%3A%20EchoHub.Client.Services.UpdateChecker%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services.UpdateChecker">
<h1 id="EchoHub_Client_Services_UpdateChecker" data-uid="EchoHub.Client.Services.UpdateChecker" class="text-break">
Class UpdateChecker <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateChecker.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Services.html">Services</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class UpdateChecker : IDisposable</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">UpdateChecker</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.idisposable">IDisposable</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Services_UpdateChecker__ctor_" data-uid="EchoHub.Client.Services.UpdateChecker.#ctor*"></a>
<h3 id="EchoHub_Client_Services_UpdateChecker__ctor_Terminal_Gui_App_IApplication_" data-uid="EchoHub.Client.Services.UpdateChecker.#ctor(Terminal.Gui.App.IApplication)">
UpdateChecker(IApplication)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateChecker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public UpdateChecker(IApplication app)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>app</code> <span class="xref">IApplication</span></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Services_UpdateChecker_CurrentVersion_" data-uid="EchoHub.Client.Services.UpdateChecker.CurrentVersion*"></a>
<h3 id="EchoHub_Client_Services_UpdateChecker_CurrentVersion" data-uid="EchoHub.Client.Services.UpdateChecker.CurrentVersion">
CurrentVersion
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateChecker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string CurrentVersion { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_UpdateChecker_PendingUpdate_" data-uid="EchoHub.Client.Services.UpdateChecker.PendingUpdate*"></a>
<h3 id="EchoHub_Client_Services_UpdateChecker_PendingUpdate" data-uid="EchoHub.Client.Services.UpdateChecker.PendingUpdate">
PendingUpdate
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateChecker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Set when the user confirms an update. The host runs this <b>after</b> 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.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Func&lt;Task&gt;? PendingUpdate { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-1">Func</a>&lt;<span class="xref">Task</span>&gt;</dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Services_UpdateChecker_CheckNowAsync_" data-uid="EchoHub.Client.Services.UpdateChecker.CheckNowAsync*"></a>
<h3 id="EchoHub_Client_Services_UpdateChecker_CheckNowAsync" data-uid="EchoHub.Client.Services.UpdateChecker.CheckNowAsync">
CheckNowAsync()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateChecker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task CheckNowAsync()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Task</span></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Services_UpdateChecker_Dispose_" data-uid="EchoHub.Client.Services.UpdateChecker.Dispose*"></a>
<h3 id="EchoHub_Client_Services_UpdateChecker_Dispose" data-uid="EchoHub.Client.Services.UpdateChecker.Dispose">
Dispose()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateChecker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Dispose()</code></pre>
</div>
<a id="EchoHub_Client_Services_UpdateChecker_Start_" data-uid="EchoHub.Client.Services.UpdateChecker.Start*"></a>
<h3 id="EchoHub_Client_Services_UpdateChecker_Start" data-uid="EchoHub.Client.Services.UpdateChecker.Start">
Start()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateChecker.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Start()</code></pre>
</div>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Services/UpdateChecker.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
-250
View File
@@ -1,250 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace EchoHub.Client.Services | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace EchoHub.Client.Services | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Services">
<h1 id="EchoHub_Client_Services" data-uid="EchoHub.Client.Services" class="text-break">Namespace EchoHub.Client.Services</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.ApiClient.html">ApiClient</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.AsyncRunner.html">AsyncRunner</a></dt>
<dd><p>Eliminates repeated Task.Run/try/catch/app.Invoke(ShowError) boilerplate.
Runs async work on a background thread and routes exceptions to the UI.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.AudioPlaybackService.html">AudioPlaybackService</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.BackupInfo.html">BackupInfo</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.ChannelPasswordRequiredException.html">ChannelPasswordRequiredException</a></dt>
<dd><p>Thrown when joining a channel fails because a password is required or incorrect.
The UI catches this to prompt the user and retry.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.ClientEncryptionService.html">ClientEncryptionService</a></dt>
<dd><p>Client-side encryption service. Uses the same AES-256-GCM format as the server
so messages are encrypted end-to-end between client and server.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.ClipboardFiles.html">ClipboardFiles</a></dt>
<dd><p>Reads file paths that live on the OS clipboard as a <em>file list</em> (e.g. after copying a file in
Explorer/Finder/Nautilus), which terminals do not paste as text. Lets Ctrl+V attach a copied
file directly instead of requiring the user to paste a raw path.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.ClipboardImage.html">ClipboardImage</a></dt>
<dd><p>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.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.EchoHubConnection.html">EchoHubConnection</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.FolderPickResult.html">FolderPickResult</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.JoinOutcome.html">JoinOutcome</a></dt>
<dd><p>Result of joining a channel: decrypted history plus, for end-to-end encrypted
channels, the key envelope needed to unlock the room content key.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.NativeFolderPicker.html">NativeFolderPicker</a></dt>
<dd><p>Opens the OS-native folder chooser (Windows Explorer, macOS Finder, Linux GTK/KDE) by shelling
out, so the TUI doesn't need a GUI toolkit reference. Returns <a class="xref" href="EchoHub.Client.Services.PickerOutcome.html#EchoHub_Client_Services_PickerOutcome_Unavailable">Unavailable</a>
when no native dialog can run, so callers can fall back to a configured path.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.NotificationSoundService.html">NotificationSoundService</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html">OutgoingAttachment</a></dt>
<dd><p>One file to upload as part of a message. For end-to-end encrypted channels the stream
is already ciphertext, <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_DeclaredKind">DeclaredKind</a> is set (image/audio/file), and
<a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_EncryptedPreview">EncryptedPreview</a> holds the room-encrypted ASCII art for images.
For normal channels only <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_Stream">Stream</a> and <a class="xref" href="EchoHub.Client.Services.OutgoingAttachment.html#EchoHub_Client_Services_OutgoingAttachment_FileName">FileName</a> are set.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.PathSetup.html">PathSetup</a></dt>
<dd><p>Ensures the application's directory is on the system PATH so users
can run 'echohub' from any terminal session.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.RoomKeyProtector.html">RoomKeyProtector</a></dt>
<dd><p>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 &quot;dp1:&quot;). 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 &quot;k1:&quot;) — 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.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.RoomKeyStore.html">RoomKeyStore</a></dt>
<dd><p>Holds room content keys for end-to-end encrypted channels: in-memory for the
active session, persisted per-server in the client config (like saved sessions)
so users don't retype the passphrase every launch. Keys never leave this machine
and are encrypted at rest by <a class="xref" href="EchoHub.Client.Services.RoomKeyProtector.html">RoomKeyProtector</a>. 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.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.RoomLockedException.html">RoomLockedException</a></dt>
<dd><p>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.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.UpdateBackupService.html">UpdateBackupService</a></dt>
<dd><p>Manages pre-update backups and rollback restoration for the auto-updater.
Backup location: ~/.echohub/update-backup/</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.UpdateChecker.html">UpdateChecker</a></dt>
<dd></dd>
</dl>
<h3 id="enums">
Enums
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Services.PickerOutcome.html">PickerOutcome</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
-400
View File
@@ -1,400 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class Theme | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class Theme | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Themes_Theme.md&amp;value=---%0Auid%3A%20EchoHub.Client.Themes.Theme%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Themes.Theme">
<h1 id="EchoHub_Client_Themes_Theme" data-uid="EchoHub.Client.Themes.Theme" class="text-break">
Class Theme <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/Theme.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Themes.html">Themes</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class Theme</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">Theme</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Themes_Theme__ctor_" data-uid="EchoHub.Client.Themes.Theme.#ctor*"></a>
<h3 id="EchoHub_Client_Themes_Theme__ctor" data-uid="EchoHub.Client.Themes.Theme.#ctor">
Theme()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/Theme.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Theme()</code></pre>
</div>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Themes_Theme_Base_" data-uid="EchoHub.Client.Themes.Theme.Base*"></a>
<h3 id="EchoHub_Client_Themes_Theme_Base" data-uid="EchoHub.Client.Themes.Theme.Base">
Base
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/Theme.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ThemeColors Base { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.Themes.ThemeColors.html">ThemeColors</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Themes_Theme_Border_" data-uid="EchoHub.Client.Themes.Theme.Border*"></a>
<h3 id="EchoHub_Client_Themes_Theme_Border" data-uid="EchoHub.Client.Themes.Theme.Border">
Border
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/Theme.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Colors for the main-window frame borders (and their titles). Null falls back
to <a class="xref" href="EchoHub.Client.Themes.Theme.html#EchoHub_Client_Themes_Theme_Base">Base</a>. 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 (&quot;#6E6E6E&quot;) as well as named colors.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ThemeColors? Border { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.Themes.ThemeColors.html">ThemeColors</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Themes_Theme_Dialog_" data-uid="EchoHub.Client.Themes.Theme.Dialog*"></a>
<h3 id="EchoHub_Client_Themes_Theme_Dialog" data-uid="EchoHub.Client.Themes.Theme.Dialog">
Dialog
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/Theme.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ThemeColors Dialog { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.Themes.ThemeColors.html">ThemeColors</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Themes_Theme_Menu_" data-uid="EchoHub.Client.Themes.Theme.Menu*"></a>
<h3 id="EchoHub_Client_Themes_Theme_Menu" data-uid="EchoHub.Client.Themes.Theme.Menu">
Menu
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/Theme.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ThemeColors Menu { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.Themes.ThemeColors.html">ThemeColors</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Themes_Theme_Name_" data-uid="EchoHub.Client.Themes.Theme.Name*"></a>
<h3 id="EchoHub_Client_Themes_Theme_Name" data-uid="EchoHub.Client.Themes.Theme.Name">
Name
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/Theme.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public required string Name { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Themes_Theme_Status_" data-uid="EchoHub.Client.Themes.Theme.Status*"></a>
<h3 id="EchoHub_Client_Themes_Theme_Status" data-uid="EchoHub.Client.Themes.Theme.Status">
Status
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/Theme.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ThemeColors Status { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.Themes.ThemeColors.html">ThemeColors</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/Theme.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,334 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ThemeColors | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ThemeColors | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Themes_ThemeColors.md&amp;value=---%0Auid%3A%20EchoHub.Client.Themes.ThemeColors%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Themes.ThemeColors">
<h1 id="EchoHub_Client_Themes_ThemeColors" data-uid="EchoHub.Client.Themes.ThemeColors" class="text-break">
Class ThemeColors <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/Theme.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Themes.html">Themes</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class ThemeColors</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ThemeColors</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_Themes_ThemeColors__ctor_" data-uid="EchoHub.Client.Themes.ThemeColors.#ctor*"></a>
<h3 id="EchoHub_Client_Themes_ThemeColors__ctor" data-uid="EchoHub.Client.Themes.ThemeColors.#ctor">
ThemeColors()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/Theme.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ThemeColors()</code></pre>
</div>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_Themes_ThemeColors_Background_" data-uid="EchoHub.Client.Themes.ThemeColors.Background*"></a>
<h3 id="EchoHub_Client_Themes_ThemeColors_Background" data-uid="EchoHub.Client.Themes.ThemeColors.Background">
Background
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/Theme.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Background { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Themes_ThemeColors_FocusBackground_" data-uid="EchoHub.Client.Themes.ThemeColors.FocusBackground*"></a>
<h3 id="EchoHub_Client_Themes_ThemeColors_FocusBackground" data-uid="EchoHub.Client.Themes.ThemeColors.FocusBackground">
FocusBackground
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/Theme.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string FocusBackground { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Themes_ThemeColors_FocusForeground_" data-uid="EchoHub.Client.Themes.ThemeColors.FocusForeground*"></a>
<h3 id="EchoHub_Client_Themes_ThemeColors_FocusForeground" data-uid="EchoHub.Client.Themes.ThemeColors.FocusForeground">
FocusForeground
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/Theme.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string FocusForeground { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Themes_ThemeColors_Foreground_" data-uid="EchoHub.Client.Themes.ThemeColors.Foreground*"></a>
<h3 id="EchoHub_Client_Themes_ThemeColors_Foreground" data-uid="EchoHub.Client.Themes.ThemeColors.Foreground">
Foreground
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/Theme.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Foreground { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/Theme.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,309 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ThemeManager | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ThemeManager | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_Themes_ThemeManager.md&amp;value=---%0Auid%3A%20EchoHub.Client.Themes.ThemeManager%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Themes.ThemeManager">
<h1 id="EchoHub_Client_Themes_ThemeManager" data-uid="EchoHub.Client.Themes.ThemeManager" class="text-break">
Class ThemeManager <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/ThemeManager.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.Themes.html">Themes</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class ThemeManager</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ThemeManager</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_Themes_ThemeManager_ApplyTheme_" data-uid="EchoHub.Client.Themes.ThemeManager.ApplyTheme*"></a>
<h3 id="EchoHub_Client_Themes_ThemeManager_ApplyTheme_EchoHub_Client_Themes_Theme_" data-uid="EchoHub.Client.Themes.ThemeManager.ApplyTheme(EchoHub.Client.Themes.Theme)">
ApplyTheme(Theme)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/ThemeManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void ApplyTheme(Theme theme)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>theme</code> <a class="xref" href="EchoHub.Client.Themes.Theme.html">Theme</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Themes_ThemeManager_GetAvailableThemes_" data-uid="EchoHub.Client.Themes.ThemeManager.GetAvailableThemes*"></a>
<h3 id="EchoHub_Client_Themes_ThemeManager_GetAvailableThemes" data-uid="EchoHub.Client.Themes.ThemeManager.GetAvailableThemes">
GetAvailableThemes()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/ThemeManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static List&lt;Theme&gt; GetAvailableThemes()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Client.Themes.Theme.html">Theme</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Themes_ThemeManager_GetTheme_" data-uid="EchoHub.Client.Themes.ThemeManager.GetTheme*"></a>
<h3 id="EchoHub_Client_Themes_ThemeManager_GetTheme_System_String_" data-uid="EchoHub.Client.Themes.ThemeManager.GetTheme(System.String)">
GetTheme(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/ThemeManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static Theme GetTheme(string name)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.Themes.Theme.html">Theme</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_Themes_ThemeManager_SaveTheme_" data-uid="EchoHub.Client.Themes.ThemeManager.SaveTheme*"></a>
<h3 id="EchoHub_Client_Themes_ThemeManager_SaveTheme_EchoHub_Client_Themes_Theme_" data-uid="EchoHub.Client.Themes.ThemeManager.SaveTheme(EchoHub.Client.Themes.Theme)">
SaveTheme(Theme)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/ThemeManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void SaveTheme(Theme theme)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>theme</code> <a class="xref" href="EchoHub.Client.Themes.Theme.html">Theme</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/Themes/ThemeManager.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
-134
View File
@@ -1,134 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace EchoHub.Client.Themes | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace EchoHub.Client.Themes | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.Themes">
<h1 id="EchoHub_Client_Themes" data-uid="EchoHub.Client.Themes" class="text-break">Namespace EchoHub.Client.Themes</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Themes.Theme.html">Theme</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Themes.ThemeColors.html">ThemeColors</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.Themes.ThemeManager.html">ThemeManager</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,154 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Enum AttachmentAction | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Enum AttachmentAction | EchoHub Documentation ">
<meta name="description" content="An action a click on an attachment line can trigger.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Chat_AttachmentAction.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Chat.AttachmentAction%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Chat.AttachmentAction">
<h1 id="EchoHub_Client_UI_Chat_AttachmentAction" data-uid="EchoHub.Client.UI.Chat.AttachmentAction" class="text-break">
Enum AttachmentAction <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Chat.html">Chat</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>An action a click on an attachment line can trigger.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public enum AttachmentAction</code></pre>
</div>
<h2 id="fields">Fields
</h2>
<dl class="parameters">
<dt id="EchoHub_Client_UI_Chat_AttachmentAction_OpenImage"><code>OpenImage = 0</code></dt>
<dd></dd>
<dt id="EchoHub_Client_UI_Chat_AttachmentAction_SaveImage"><code>SaveImage = 1</code></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,554 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Struct AttachmentActionSpan | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Struct AttachmentActionSpan | EchoHub Documentation ">
<meta name="description" content="Inclusive column range on a chat line that triggers an attachment action when clicked.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Chat_AttachmentActionSpan.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Chat.AttachmentActionSpan%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan">
<h1 id="EchoHub_Client_UI_Chat_AttachmentActionSpan" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan" class="text-break">
Struct AttachmentActionSpan <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Chat.html">Chat</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Inclusive column range on a chat line that triggers an attachment action when clicked.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public readonly struct AttachmentActionSpan : IEquatable&lt;AttachmentActionSpan&gt;</code></pre>
</div>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Client.UI.Chat.AttachmentActionSpan.html">AttachmentActionSpan</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Chat_AttachmentActionSpan__ctor_" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Chat_AttachmentActionSpan__ctor_System_Int32_System_Int32_EchoHub_Client_UI_Chat_AttachmentAction_" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.#ctor(System.Int32,System.Int32,EchoHub.Client.UI.Chat.AttachmentAction)">
AttachmentActionSpan(int, int, AttachmentAction)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Inclusive column range on a chat line that triggers an attachment action when clicked.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public AttachmentActionSpan(int StartCol, int EndCol, AttachmentAction Action)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>StartCol</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>EndCol</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>Action</code> <a class="xref" href="EchoHub.Client.UI.Chat.AttachmentAction.html">AttachmentAction</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_UI_Chat_AttachmentActionSpan_Action_" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.Action*"></a>
<h3 id="EchoHub_Client_UI_Chat_AttachmentActionSpan_Action" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.Action">
Action
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public AttachmentAction Action { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.UI.Chat.AttachmentAction.html">AttachmentAction</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_AttachmentActionSpan_EndCol_" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.EndCol*"></a>
<h3 id="EchoHub_Client_UI_Chat_AttachmentActionSpan_EndCol" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.EndCol">
EndCol
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int EndCol { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_AttachmentActionSpan_StartCol_" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.StartCol*"></a>
<h3 id="EchoHub_Client_UI_Chat_AttachmentActionSpan_StartCol" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.StartCol">
StartCol
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int StartCol { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Chat_AttachmentActionSpan_Deconstruct_" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.Deconstruct*"></a>
<h3 id="EchoHub_Client_UI_Chat_AttachmentActionSpan_Deconstruct_System_Int32__System_Int32__EchoHub_Client_UI_Chat_AttachmentAction__" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.Deconstruct(System.Int32@,System.Int32@,EchoHub.Client.UI.Chat.AttachmentAction@)">
Deconstruct(out int, out int, out AttachmentAction)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out int StartCol, out int EndCol, out AttachmentAction Action)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>StartCol</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>EndCol</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>Action</code> <a class="xref" href="EchoHub.Client.UI.Chat.AttachmentAction.html">AttachmentAction</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_AttachmentActionSpan_Equals_" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.Equals*"></a>
<h3 id="EchoHub_Client_UI_Chat_AttachmentActionSpan_Equals_EchoHub_Client_UI_Chat_AttachmentActionSpan_" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.Equals(EchoHub.Client.UI.Chat.AttachmentActionSpan)">
Equals(AttachmentActionSpan)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool Equals(AttachmentActionSpan other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Client.UI.Chat.AttachmentActionSpan.html">AttachmentActionSpan</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_AttachmentActionSpan_Equals_" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.Equals*"></a>
<h3 id="EchoHub_Client_UI_Chat_AttachmentActionSpan_Equals_System_Object_" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.Equals(System.Object)">
Equals(object)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_AttachmentActionSpan_GetHashCode_" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.GetHashCode*"></a>
<h3 id="EchoHub_Client_UI_Chat_AttachmentActionSpan_GetHashCode" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_AttachmentActionSpan_ToString_" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.ToString*"></a>
<h3 id="EchoHub_Client_UI_Chat_AttachmentActionSpan_ToString" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Client_UI_Chat_AttachmentActionSpan_op_Equality_" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.op_Equality*"></a>
<h3 id="EchoHub_Client_UI_Chat_AttachmentActionSpan_op_Equality_EchoHub_Client_UI_Chat_AttachmentActionSpan_EchoHub_Client_UI_Chat_AttachmentActionSpan_" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.op_Equality(EchoHub.Client.UI.Chat.AttachmentActionSpan,EchoHub.Client.UI.Chat.AttachmentActionSpan)">
operator ==(AttachmentActionSpan, AttachmentActionSpan)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(AttachmentActionSpan left, AttachmentActionSpan right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.UI.Chat.AttachmentActionSpan.html">AttachmentActionSpan</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.UI.Chat.AttachmentActionSpan.html">AttachmentActionSpan</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_AttachmentActionSpan_op_Inequality_" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.op_Inequality*"></a>
<h3 id="EchoHub_Client_UI_Chat_AttachmentActionSpan_op_Inequality_EchoHub_Client_UI_Chat_AttachmentActionSpan_EchoHub_Client_UI_Chat_AttachmentActionSpan_" data-uid="EchoHub.Client.UI.Chat.AttachmentActionSpan.op_Inequality(EchoHub.Client.UI.Chat.AttachmentActionSpan,EchoHub.Client.UI.Chat.AttachmentActionSpan)">
operator !=(AttachmentActionSpan, AttachmentActionSpan)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(AttachmentActionSpan left, AttachmentActionSpan right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.UI.Chat.AttachmentActionSpan.html">AttachmentActionSpan</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.UI.Chat.AttachmentActionSpan.html">AttachmentActionSpan</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,648 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ChatColors | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ChatColors | EchoHub Documentation ">
<meta name="description" content="Shared color attributes for chat rendering (timestamps, system messages).">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Chat_ChatColors.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Chat.ChatColors%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Chat.ChatColors">
<h1 id="EchoHub_Client_UI_Chat_ChatColors" data-uid="EchoHub.Client.UI.Chat.ChatColors" class="text-break">
Class ChatColors <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Chat.html">Chat</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Shared color attributes for chat rendering (timestamps, system messages).</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class ChatColors</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ChatColors</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="fields">Fields
</h2>
<h3 id="EchoHub_Client_UI_Chat_ChatColors_AudioAttr" data-uid="EchoHub.Client.UI.Chat.ChatColors.AudioAttr">
AudioAttr
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static readonly Attribute AudioAttr</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_Chat_ChatColors_ChannelRefAttr" data-uid="EchoHub.Client.UI.Chat.ChatColors.ChannelRefAttr">
ChannelRefAttr
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static readonly Attribute ChannelRefAttr</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_Chat_ChatColors_DateRuleAttr" data-uid="EchoHub.Client.UI.Chat.ChatColors.DateRuleAttr">
DateRuleAttr
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Horizontal date-separator rules (── Wed, Jul 16 ──…).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static readonly Attribute DateRuleAttr</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_Chat_ChatColors_EmbedBorderAttr" data-uid="EchoHub.Client.UI.Chat.ChatColors.EmbedBorderAttr">
EmbedBorderAttr
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static readonly Attribute EmbedBorderAttr</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_Chat_ChatColors_EmbedDescAttr" data-uid="EchoHub.Client.UI.Chat.ChatColors.EmbedDescAttr">
EmbedDescAttr
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static readonly Attribute EmbedDescAttr</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_Chat_ChatColors_EmbedTitleAttr" data-uid="EchoHub.Client.UI.Chat.ChatColors.EmbedTitleAttr">
EmbedTitleAttr
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static readonly Attribute EmbedTitleAttr</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_Chat_ChatColors_EmbedUrlAttr" data-uid="EchoHub.Client.UI.Chat.ChatColors.EmbedUrlAttr">
EmbedUrlAttr
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static readonly Attribute EmbedUrlAttr</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_Chat_ChatColors_FileAttr" data-uid="EchoHub.Client.UI.Chat.ChatColors.FileAttr">
FileAttr
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static readonly Attribute FileAttr</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_Chat_ChatColors_MentionHighlightAttr" data-uid="EchoHub.Client.UI.Chat.ChatColors.MentionHighlightAttr">
MentionHighlightAttr
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static readonly Attribute MentionHighlightAttr</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_Chat_ChatColors_MentionTextAttr" data-uid="EchoHub.Client.UI.Chat.ChatColors.MentionTextAttr">
MentionTextAttr
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static readonly Attribute MentionTextAttr</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_Chat_ChatColors_RailAttr" data-uid="EchoHub.Client.UI.Chat.ChatColors.RailAttr">
RailAttr
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>The dim vertical rail (│) separating the nick column from message text.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static readonly Attribute RailAttr</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_Chat_ChatColors_SystemAttr" data-uid="EchoHub.Client.UI.Chat.ChatColors.SystemAttr">
SystemAttr
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static readonly Attribute SystemAttr</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_Chat_ChatColors_TimestampAttr" data-uid="EchoHub.Client.UI.Chat.ChatColors.TimestampAttr">
TimestampAttr
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static readonly Attribute TimestampAttr</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_Chat_ChatColors_UnreadMarkerAttr" data-uid="EchoHub.Client.UI.Chat.ChatColors.UnreadMarkerAttr">
UnreadMarkerAttr
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>The irssi-style &quot;new messages&quot; unread marker rule.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static readonly Attribute UnreadMarkerAttr</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Chat_ChatColors_SplitMentions_" data-uid="EchoHub.Client.UI.Chat.ChatColors.SplitMentions*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatColors_SplitMentions_System_String_System_Nullable_Terminal_Gui_Drawing_Attribute__" data-uid="EchoHub.Client.UI.Chat.ChatColors.SplitMentions(System.String,System.Nullable{Terminal.Gui.Drawing.Attribute})">
SplitMentions(string, Attribute?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Split text around @mentions and #channels, giving each the appropriate accent color.
Non-special text uses the provided default color.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static List&lt;ChatSegment&gt; SplitMentions(string text, Attribute? defaultColor = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>text</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>defaultColor</code> <span class="xref">Attribute</span>?</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Client.UI.Chat.ChatSegment.html">ChatSegment</a>&gt;</dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatColors.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,911 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ChatLine | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ChatLine | EchoHub Documentation ">
<meta name="description" content="A single line in the chat, composed of colored segments.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Chat_ChatLine.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Chat.ChatLine%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Chat.ChatLine">
<h1 id="EchoHub_Client_UI_Chat_ChatLine" data-uid="EchoHub.Client.UI.Chat.ChatLine" class="text-break">
Class ChatLine <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Chat.html">Chat</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>A single line in the chat, composed of colored segments.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class ChatLine</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ChatLine</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Chat_ChatLine__ctor_" data-uid="EchoHub.Client.UI.Chat.ChatLine.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine__ctor_System_Collections_Generic_List_EchoHub_Client_UI_Chat_ChatSegment__" data-uid="EchoHub.Client.UI.Chat.ChatLine.#ctor(System.Collections.Generic.List{EchoHub.Client.UI.Chat.ChatSegment})">
ChatLine(List&lt;ChatSegment&gt;)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ChatLine(List&lt;ChatSegment&gt; segments)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>segments</code> <span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Client.UI.Chat.ChatSegment.html">ChatSegment</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine__ctor_" data-uid="EchoHub.Client.UI.Chat.ChatLine.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine__ctor_System_String_" data-uid="EchoHub.Client.UI.Chat.ChatLine.#ctor(System.String)">
ChatLine(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ChatLine(string plainText)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>plainText</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_UI_Chat_ChatLine_ActionSpans_" data-uid="EchoHub.Client.UI.Chat.ChatLine.ActionSpans*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_ActionSpans" data-uid="EchoHub.Client.UI.Chat.ChatLine.ActionSpans">
ActionSpans
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Clickable sub-line targets (e.g. the &quot;[open]&quot; and &quot;[save original]&quot; 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.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;AttachmentActionSpan&gt;? ActionSpans { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Client.UI.Chat.AttachmentActionSpan.html">AttachmentActionSpan</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_AttachmentFileName_" data-uid="EchoHub.Client.UI.Chat.ChatLine.AttachmentFileName*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_AttachmentFileName" data-uid="EchoHub.Client.UI.Chat.ChatLine.AttachmentFileName">
AttachmentFileName
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? AttachmentFileName { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_AttachmentKind_" data-uid="EchoHub.Client.UI.Chat.ChatLine.AttachmentKind*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_AttachmentKind" data-uid="EchoHub.Client.UI.Chat.ChatLine.AttachmentKind">
AttachmentKind
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public AttachmentKind? AttachmentKind { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/Models/AttachmentKind.cs">AttachmentKind</a>?</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_AttachmentUrl_" data-uid="EchoHub.Client.UI.Chat.ChatLine.AttachmentUrl*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_AttachmentUrl" data-uid="EchoHub.Client.UI.Chat.ChatLine.AttachmentUrl">
AttachmentUrl
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? AttachmentUrl { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_ContinuationIndent_" data-uid="EchoHub.Client.UI.Chat.ChatLine.ContinuationIndent*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_ContinuationIndent" data-uid="EchoHub.Client.UI.Chat.ChatLine.ContinuationIndent">
ContinuationIndent
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Number of spaces to prepend on continuation lines when this line is word-wrapped.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int ContinuationIndent { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_ContinuationPrefixSegments_" data-uid="EchoHub.Client.UI.Chat.ChatLine.ContinuationPrefixSegments*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_ContinuationPrefixSegments" data-uid="EchoHub.Client.UI.Chat.ChatLine.ContinuationPrefixSegments">
ContinuationPrefixSegments
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Colored segments to prepend on continuation lines instead of plain spaces
(e.g. the nick-column rail &quot;&quot;). When set, takes
precedence over <a class="xref" href="EchoHub.Client.UI.Chat.ChatLine.html#EchoHub_Client_UI_Chat_ChatLine_ContinuationIndent">ContinuationIndent</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;ChatSegment&gt;? ContinuationPrefixSegments { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Client.UI.Chat.ChatSegment.html">ChatSegment</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_IsMention_" data-uid="EchoHub.Client.UI.Chat.ChatLine.IsMention*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_IsMention" data-uid="EchoHub.Client.UI.Chat.ChatLine.IsMention">
IsMention
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsMention { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_IsUnreadMarker_" data-uid="EchoHub.Client.UI.Chat.ChatLine.IsUnreadMarker*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_IsUnreadMarker" data-uid="EchoHub.Client.UI.Chat.ChatLine.IsUnreadMarker">
IsUnreadMarker
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>True for the &quot;new messages&quot; unread-marker rule so it can be removed on channel switch.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsUnreadMarker { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_JumpToMessageId_" data-uid="EchoHub.Client.UI.Chat.ChatLine.JumpToMessageId*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_JumpToMessageId" data-uid="EchoHub.Client.UI.Chat.ChatLine.JumpToMessageId">
JumpToMessageId
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Set on a reply's quote line: activating the line jumps to this message
if it is in the loaded history.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Guid? JumpToMessageId { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.guid">Guid</a>?</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_MessageId_" data-uid="EchoHub.Client.UI.Chat.ChatLine.MessageId*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_MessageId" data-uid="EchoHub.Client.UI.Chat.ChatLine.MessageId">
MessageId
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Guid? MessageId { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.guid">Guid</a>?</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_RuleAttr_" data-uid="EchoHub.Client.UI.Chat.ChatLine.RuleAttr*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_RuleAttr" data-uid="EchoHub.Client.UI.Chat.ChatLine.RuleAttr">
RuleAttr
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Color for a rule line; null falls back to <a class="xref" href="EchoHub.Client.UI.Chat.ChatColors.html#EchoHub_Client_UI_Chat_ChatColors_DateRuleAttr">DateRuleAttr</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Attribute? RuleAttr { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span>?</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_RuleLabel_" data-uid="EchoHub.Client.UI.Chat.ChatLine.RuleLabel*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_RuleLabel" data-uid="EchoHub.Client.UI.Chat.ChatLine.RuleLabel">
RuleLabel
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>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.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? RuleLabel { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_Segments_" data-uid="EchoHub.Client.UI.Chat.ChatLine.Segments*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_Segments" data-uid="EchoHub.Client.UI.Chat.ChatLine.Segments">
Segments
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;ChatSegment&gt; Segments { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Client.UI.Chat.ChatSegment.html">ChatSegment</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_SenderUsername_" data-uid="EchoHub.Client.UI.Chat.ChatLine.SenderUsername*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_SenderUsername" data-uid="EchoHub.Client.UI.Chat.ChatLine.SenderUsername">
SenderUsername
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? SenderUsername { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_TextLength_" data-uid="EchoHub.Client.UI.Chat.ChatLine.TextLength*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_TextLength" data-uid="EchoHub.Client.UI.Chat.ChatLine.TextLength">
TextLength
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int TextLength { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Chat_ChatLine_FromColoredText_" data-uid="EchoHub.Client.UI.Chat.ChatLine.FromColoredText*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_FromColoredText_System_String_System_Nullable_Terminal_Gui_Drawing_Attribute__" data-uid="EchoHub.Client.UI.Chat.ChatLine.FromColoredText(System.String,System.Nullable{Terminal.Gui.Drawing.Attribute})">
FromColoredText(string, Attribute?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Parse a string containing printable color tags into colored segments.
Format: {F:RRGGBB} (foreground), {B:RRGGBB} (background), {X} (reset).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static ChatLine FromColoredText(string text, Attribute? defaultAttr = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>text</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>defaultAttr</code> <span class="xref">Attribute</span>?</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.UI.Chat.ChatLine.html">ChatLine</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_HasColorTags_" data-uid="EchoHub.Client.UI.Chat.ChatLine.HasColorTags*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_HasColorTags_System_String_" data-uid="EchoHub.Client.UI.Chat.ChatLine.HasColorTags(System.String)">
HasColorTags(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Returns true if a line contains printable color tags.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool HasColorTags(string text)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>text</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_StripColorTags_" data-uid="EchoHub.Client.UI.Chat.ChatLine.StripColorTags*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_StripColorTags_System_String_" data-uid="EchoHub.Client.UI.Chat.ChatLine.StripColorTags(System.String)">
StripColorTags(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Remove all color tags from text, returning only the visible characters.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string StripColorTags(string text)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>text</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_ToString_" data-uid="EchoHub.Client.UI.Chat.ChatLine.ToString*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_ToString" data-uid="EchoHub.Client.UI.Chat.ChatLine.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatLine_Wrap_" data-uid="EchoHub.Client.UI.Chat.ChatLine.Wrap*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatLine_Wrap_System_Int32_System_Int32_" data-uid="EchoHub.Client.UI.Chat.ChatLine.Wrap(System.Int32,System.Int32)">
Wrap(int, int)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Wrap this line into multiple lines that fit within the given width.
Continuation lines are indented with the specified number of spaces.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;ChatLine&gt; Wrap(int width, int continuationIndent = 0)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>width</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>continuationIndent</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Client.UI.Chat.ChatLine.html">ChatLine</a>&gt;</dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatLine.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,675 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ChatListSource | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ChatListSource | EchoHub Documentation ">
<meta name="description" content="Custom list data source for chat messages with per-segment coloring.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Chat_ChatListSource.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Chat.ChatListSource%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Chat.ChatListSource">
<h1 id="EchoHub_Client_UI_Chat_ChatListSource" data-uid="EchoHub.Client.UI.Chat.ChatListSource" class="text-break">
Class ChatListSource <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Chat.html">Chat</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Custom list data source for chat messages with per-segment coloring.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class ChatListSource : IListDataSource, IDisposable</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ChatListSource</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><span class="xref">IListDataSource</span></div>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.idisposable">IDisposable</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Chat_ChatListSource__ctor_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatListSource__ctor" data-uid="EchoHub.Client.UI.Chat.ChatListSource.#ctor">
ChatListSource()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ChatListSource()</code></pre>
</div>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_UI_Chat_ChatListSource_Count_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.Count*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatListSource_Count" data-uid="EchoHub.Client.UI.Chat.ChatListSource.Count">
Count
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int Count { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatListSource_MaxItemLength_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.MaxItemLength*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatListSource_MaxItemLength" data-uid="EchoHub.Client.UI.Chat.ChatListSource.MaxItemLength">
MaxItemLength
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int MaxItemLength { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatListSource_SuspendCollectionChangedEvent_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.SuspendCollectionChangedEvent*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatListSource_SuspendCollectionChangedEvent" data-uid="EchoHub.Client.UI.Chat.ChatListSource.SuspendCollectionChangedEvent">
SuspendCollectionChangedEvent
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool SuspendCollectionChangedEvent { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Chat_ChatListSource_Add_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.Add*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatListSource_Add_EchoHub_Client_UI_Chat_ChatLine_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.Add(EchoHub.Client.UI.Chat.ChatLine)">
Add(ChatLine)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Add(ChatLine line)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>line</code> <a class="xref" href="EchoHub.Client.UI.Chat.ChatLine.html">ChatLine</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatListSource_AddRange_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.AddRange*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatListSource_AddRange_System_Collections_Generic_IEnumerable_EchoHub_Client_UI_Chat_ChatLine__" data-uid="EchoHub.Client.UI.Chat.ChatListSource.AddRange(System.Collections.Generic.IEnumerable{EchoHub.Client.UI.Chat.ChatLine})">
AddRange(IEnumerable&lt;ChatLine&gt;)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void AddRange(IEnumerable&lt;ChatLine&gt; lines)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>lines</code> <span class="xref">IEnumerable</span>&lt;<a class="xref" href="EchoHub.Client.UI.Chat.ChatLine.html">ChatLine</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatListSource_Clear_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.Clear*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatListSource_Clear" data-uid="EchoHub.Client.UI.Chat.ChatListSource.Clear">
Clear()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Clear()</code></pre>
</div>
<a id="EchoHub_Client_UI_Chat_ChatListSource_Dispose_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.Dispose*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatListSource_Dispose" data-uid="EchoHub.Client.UI.Chat.ChatListSource.Dispose">
Dispose()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Dispose()</code></pre>
</div>
<a id="EchoHub_Client_UI_Chat_ChatListSource_GetLine_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.GetLine*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatListSource_GetLine_System_Int32_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.GetLine(System.Int32)">
GetLine(int)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ChatLine? GetLine(int index)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>index</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.UI.Chat.ChatLine.html">ChatLine</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatListSource_InsertRange_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.InsertRange*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatListSource_InsertRange_System_Int32_System_Collections_Generic_IEnumerable_EchoHub_Client_UI_Chat_ChatLine__" data-uid="EchoHub.Client.UI.Chat.ChatListSource.InsertRange(System.Int32,System.Collections.Generic.IEnumerable{EchoHub.Client.UI.Chat.ChatLine})">
InsertRange(int, IEnumerable&lt;ChatLine&gt;)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void InsertRange(int index, IEnumerable&lt;ChatLine&gt; lines)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>index</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>lines</code> <span class="xref">IEnumerable</span>&lt;<a class="xref" href="EchoHub.Client.UI.Chat.ChatLine.html">ChatLine</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatListSource_IsMarked_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.IsMarked*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatListSource_IsMarked_System_Int32_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.IsMarked(System.Int32)">
IsMarked(int)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsMarked(int item)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>item</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatListSource_Render_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.Render*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatListSource_Render_Terminal_Gui_Views_ListView_System_Boolean_System_Int32_System_Int32_System_Int32_System_Int32_System_Int32_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.Render(Terminal.Gui.Views.ListView,System.Boolean,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)">
Render(ListView, bool, int, int, int, int, int)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Render(ListView listView, bool selected, int item, int col, int row, int width, int viewportX = 0)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>listView</code> <span class="xref">ListView</span></dt>
<dd></dd>
<dt><code>selected</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>item</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>col</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>row</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>width</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>viewportX</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatListSource_SetMark_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.SetMark*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatListSource_SetMark_System_Int32_System_Boolean_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.SetMark(System.Int32,System.Boolean)">
SetMark(int, bool)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void SetMark(int item, bool value)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>item</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>value</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatListSource_ToList_" data-uid="EchoHub.Client.UI.Chat.ChatListSource.ToList*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatListSource_ToList" data-uid="EchoHub.Client.UI.Chat.ChatListSource.ToList">
ToList()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public IList ToList()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">IList</span></dt>
<dd></dd>
</dl>
<h2 class="section" id="events">Events
</h2>
<h3 id="EchoHub_Client_UI_Chat_ChatListSource_CollectionChanged" data-uid="EchoHub.Client.UI.Chat.ChatListSource.CollectionChanged">
CollectionChanged
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public event NotifyCollectionChangedEventHandler? CollectionChanged</code></pre>
</div>
<h4 class="section">Event Type</h4>
<dl class="parameters">
<dt><span class="xref">NotifyCollectionChangedEventHandler</span></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatListSource.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,908 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ChatMessageManager | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ChatMessageManager | EchoHub Documentation ">
<meta name="description" content="Owns chat message storage, formatting, and mutation. Fires when a channel&#39;s message list is modified so the UI layer can refresh.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Chat_ChatMessageManager.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Chat.ChatMessageManager%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Chat.ChatMessageManager">
<h1 id="EchoHub_Client_UI_Chat_ChatMessageManager" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager" class="text-break">
Class ChatMessageManager <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Chat.html">Chat</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Owns chat message storage, formatting, and mutation.
Fires <a class="xref" href="EchoHub.Client.UI.Chat.ChatMessageManager.html#EchoHub_Client_UI_Chat_ChatMessageManager_MessagesChanged">MessagesChanged</a> when a channel's message list is modified
so the UI layer can refresh.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class ChatMessageManager</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ChatMessageManager</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager__ctor_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager__ctor" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.#ctor">
ChatMessageManager()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ChatMessageManager()</code></pre>
</div>
<h2 class="section" id="fields">Fields
</h2>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_ContentIndentCols" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.ContentIndentCols">
ContentIndentCols
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Columns before message text starts: &quot;HH:mm &quot; + nick column + &quot;&quot;.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const int ContentIndentCols = 21</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_NickColWidth" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.NickColWidth">
NickColWidth
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Columns reserved for the right-aligned nick column (WeeChat-style).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const int NickColWidth = 12</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_CurrentChannel_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.CurrentChannel*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_CurrentChannel" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.CurrentChannel">
CurrentChannel
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>The currently active channel (used for unread tracking and @mention detection).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string CurrentChannel { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_CurrentUser_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.CurrentUser*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_CurrentUser" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.CurrentUser">
CurrentUser
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string CurrentUser { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_LastReadIds_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.LastReadIds*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_LastReadIds" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.LastReadIds">
LastReadIds
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>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.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public IReadOnlyDictionary&lt;string, Guid&gt; LastReadIds { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">IReadOnlyDictionary</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.guid">Guid</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_MentionChannels_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.MentionChannels*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_MentionChannels" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.MentionChannels">
MentionChannels
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Channels with an unread @mention of the current user (cleared by <a class="xref" href="EchoHub.Client.UI.Chat.ChatMessageManager.html#EchoHub_Client_UI_Chat_ChatMessageManager_ClearUnread_System_String_">ClearUnread(string)</a>).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public IReadOnlySet&lt;string&gt; MentionChannels { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">IReadOnlySet</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_AddMessage_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.AddMessage*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_AddMessage_EchoHub_Core_DTOs_MessageDto_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.AddMessage(EchoHub.Core.DTOs.MessageDto)">
AddMessage(MessageDto)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Format and store a received message. Increments unread count if not the active channel.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void AddMessage(MessageDto message)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>message</code> <a class="xref" href="../core/EchoHub.Core.DTOs.MessageDto.html">MessageDto</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_AddStatusMessage_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.AddStatusMessage*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_AddStatusMessage_System_String_System_String_System_String_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.AddStatusMessage(System.String,System.String,System.String)">
AddStatusMessage(string, string, string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Add a status change message to a channel with colored styling.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void AddStatusMessage(string channelName, string username, string status)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>username</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>status</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_AddSystemMessage_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.AddSystemMessage*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_AddSystemMessage_System_String_System_String_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.AddSystemMessage(System.String,System.String)">
AddSystemMessage(string, string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Add a system/informational message to a channel with colored styling.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void AddSystemMessage(string channelName, string text)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>text</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_ClearAll_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.ClearAll*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_ClearAll" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.ClearAll">
ClearAll()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Reset all message state (used on disconnect).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void ClearAll()</code></pre>
</div>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_ClearChannelMessages_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.ClearChannelMessages*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_ClearChannelMessages_System_String_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.ClearChannelMessages(System.String)">
ClearChannelMessages(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Clear all messages from a specific channel.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void ClearChannelMessages(string channelName)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_ClearUnread_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.ClearUnread*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_ClearUnread_System_String_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.ClearUnread(System.String)">
ClearUnread(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void ClearUnread(string channelName)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_GetMessages_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.GetMessages*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_GetMessages_System_String_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.GetMessages(System.String)">
GetMessages(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;ChatLine&gt;? GetMessages(string channelName)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Client.UI.Chat.ChatLine.html">ChatLine</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_GetUnreadCount_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.GetUnreadCount*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_GetUnreadCount_System_String_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.GetUnreadCount(System.String)">
GetUnreadCount(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int GetUnreadCount(string channelName)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_LoadHistory_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.LoadHistory*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_LoadHistory_System_String_System_Collections_Generic_List_EchoHub_Core_DTOs_MessageDto__System_Nullable_System_Guid__" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.LoadHistory(System.String,System.Collections.Generic.List{EchoHub.Core.DTOs.MessageDto},System.Nullable{System.Guid})">
LoadHistory(string, List&lt;MessageDto&gt;, Guid?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Load historical messages into a channel, replacing any existing messages.
When <code class="paramref">lastReadId</code> is given (persisted from a previous session),
messages after it seed the unread count, @mention highlight, and the
&quot;new messages&quot; marker — so activity that happened while offline still lights up.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void LoadHistory(string channelName, List&lt;MessageDto&gt; messages, Guid? lastReadId = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>messages</code> <span class="xref">List</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs">MessageDto</a>&gt;</dt>
<dd></dd>
<dt><code>lastReadId</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.guid">Guid</a>?</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_PrependHistory_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.PrependHistory*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_PrependHistory_System_String_System_Collections_Generic_List_EchoHub_Core_DTOs_MessageDto__" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.PrependHistory(System.String,System.Collections.Generic.List{EchoHub.Core.DTOs.MessageDto})">
PrependHistory(string, List&lt;MessageDto&gt;)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Prepend older messages at the front of a channel's buffer, skipping any that are already present.
Fires <a class="xref" href="EchoHub.Client.UI.Chat.ChatMessageManager.html#EchoHub_Client_UI_Chat_ChatMessageManager_HistoryPrepended">HistoryPrepended</a> when new lines are actually inserted.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void PrependHistory(string channelName, List&lt;MessageDto&gt; olderMessages)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>olderMessages</code> <span class="xref">List</span>&lt;<a class="xref" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Core/DTOs/ChatDtos.cs">MessageDto</a>&gt;</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_RemoveMessage_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.RemoveMessage*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_RemoveMessage_System_String_System_Guid_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.RemoveMessage(System.String,System.Guid)">
RemoveMessage(string, Guid)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Remove all lines associated with a specific message ID.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void RemoveMessage(string channelName, Guid messageId)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>messageId</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.guid">Guid</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_SetChatWidth_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.SetChatWidth*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_SetChatWidth_System_Int32_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.SetChatWidth(System.Int32)">
SetChatWidth(int)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void SetChatWidth(int width)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>width</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatMessageManager_SetCurrentUser_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.SetCurrentUser*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_SetCurrentUser_System_String_" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.SetCurrentUser(System.String)">
SetCurrentUser(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void SetCurrentUser(string username)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>username</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="events">Events
</h2>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_HistoryPrepended" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.HistoryPrepended">
HistoryPrepended
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Fired after older messages are prepended to a channel's buffer. Parameter is the channel name.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public event Action&lt;string&gt;? HistoryPrepended</code></pre>
</div>
<h4 class="section">Event Type</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.action-1">Action</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<h3 id="EchoHub_Client_UI_Chat_ChatMessageManager_MessagesChanged" data-uid="EchoHub.Client.UI.Chat.ChatMessageManager.MessagesChanged">
MessagesChanged
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Fired after any mutation to a channel's messages. Parameter is the channel name.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public event Action&lt;string&gt;? MessagesChanged</code></pre>
</div>
<h4 class="section">Event Type</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.action-1">Action</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,627 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ChatSegment | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ChatSegment | EchoHub Documentation ">
<meta name="description" content="A colored text segment within a chat line.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Chat_ChatSegment.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Chat.ChatSegment%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Chat.ChatSegment">
<h1 id="EchoHub_Client_UI_Chat_ChatSegment" data-uid="EchoHub.Client.UI.Chat.ChatSegment" class="text-break">
Class ChatSegment <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatSegment.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Chat.html">Chat</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>A colored text segment within a chat line.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public record ChatSegment : IEquatable&lt;ChatSegment&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ChatSegment</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Client.UI.Chat.ChatSegment.html">ChatSegment</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Chat_ChatSegment__ctor_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatSegment__ctor_EchoHub_Client_UI_Chat_ChatSegment_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.#ctor(EchoHub.Client.UI.Chat.ChatSegment)">
ChatSegment(ChatSegment)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatSegment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected ChatSegment(ChatSegment original)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>original</code> <a class="xref" href="EchoHub.Client.UI.Chat.ChatSegment.html">ChatSegment</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatSegment__ctor_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatSegment__ctor_System_String_System_Nullable_Terminal_Gui_Drawing_Attribute__" data-uid="EchoHub.Client.UI.Chat.ChatSegment.#ctor(System.String,System.Nullable{Terminal.Gui.Drawing.Attribute})">
ChatSegment(string, Attribute?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatSegment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>A colored text segment within a chat line.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ChatSegment(string Text, Attribute? Color)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Text</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>Color</code> <span class="xref">Attribute</span>?</dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_UI_Chat_ChatSegment_Color_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.Color*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatSegment_Color" data-uid="EchoHub.Client.UI.Chat.ChatSegment.Color">
Color
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatSegment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Attribute? Color { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span>?</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatSegment_EqualityContract_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.EqualityContract*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatSegment_EqualityContract" data-uid="EchoHub.Client.UI.Chat.ChatSegment.EqualityContract">
EqualityContract
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatSegment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual Type EqualityContract { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.type">Type</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatSegment_Text_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.Text*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatSegment_Text" data-uid="EchoHub.Client.UI.Chat.ChatSegment.Text">
Text
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatSegment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Text { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Chat_ChatSegment_Deconstruct_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.Deconstruct*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatSegment_Deconstruct_System_String__System_Nullable_Terminal_Gui_Drawing_Attribute___" data-uid="EchoHub.Client.UI.Chat.ChatSegment.Deconstruct(System.String@,System.Nullable{Terminal.Gui.Drawing.Attribute}@)">
Deconstruct(out string, out Attribute?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatSegment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out string Text, out Attribute? Color)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Text</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>Color</code> <span class="xref">Attribute</span>?</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatSegment_Equals_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.Equals*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatSegment_Equals_EchoHub_Client_UI_Chat_ChatSegment_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.Equals(EchoHub.Client.UI.Chat.ChatSegment)">
Equals(ChatSegment?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatSegment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual bool Equals(ChatSegment? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Client.UI.Chat.ChatSegment.html">ChatSegment</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatSegment_Equals_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.Equals*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatSegment_Equals_System_Object_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatSegment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatSegment_GetHashCode_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.GetHashCode*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatSegment_GetHashCode" data-uid="EchoHub.Client.UI.Chat.ChatSegment.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatSegment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatSegment_PrintMembers_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.PrintMembers*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatSegment_PrintMembers_System_Text_StringBuilder_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.PrintMembers(System.Text.StringBuilder)">
PrintMembers(StringBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatSegment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual bool PrintMembers(StringBuilder builder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>builder</code> <span class="xref">StringBuilder</span></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatSegment_ToString_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.ToString*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatSegment_ToString" data-uid="EchoHub.Client.UI.Chat.ChatSegment.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatSegment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Client_UI_Chat_ChatSegment_op_Equality_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.op_Equality*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatSegment_op_Equality_EchoHub_Client_UI_Chat_ChatSegment_EchoHub_Client_UI_Chat_ChatSegment_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.op_Equality(EchoHub.Client.UI.Chat.ChatSegment,EchoHub.Client.UI.Chat.ChatSegment)">
operator ==(ChatSegment?, ChatSegment?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatSegment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(ChatSegment? left, ChatSegment? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.UI.Chat.ChatSegment.html">ChatSegment</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.UI.Chat.ChatSegment.html">ChatSegment</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Chat_ChatSegment_op_Inequality_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.op_Inequality*"></a>
<h3 id="EchoHub_Client_UI_Chat_ChatSegment_op_Inequality_EchoHub_Client_UI_Chat_ChatSegment_EchoHub_Client_UI_Chat_ChatSegment_" data-uid="EchoHub.Client.UI.Chat.ChatSegment.op_Inequality(EchoHub.Client.UI.Chat.ChatSegment,EchoHub.Client.UI.Chat.ChatSegment)">
operator !=(ChatSegment?, ChatSegment?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatSegment.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(ChatSegment? left, ChatSegment? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.UI.Chat.ChatSegment.html">ChatSegment</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.UI.Chat.ChatSegment.html">ChatSegment</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Chat/ChatSegment.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
-165
View File
@@ -1,165 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace EchoHub.Client.UI.Chat | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace EchoHub.Client.UI.Chat | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Chat">
<h1 id="EchoHub_Client_UI_Chat" data-uid="EchoHub.Client.UI.Chat" class="text-break">Namespace EchoHub.Client.UI.Chat</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Chat.ChatColors.html">ChatColors</a></dt>
<dd><p>Shared color attributes for chat rendering (timestamps, system messages).</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Chat.ChatLine.html">ChatLine</a></dt>
<dd><p>A single line in the chat, composed of colored segments.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Chat.ChatListSource.html">ChatListSource</a></dt>
<dd><p>Custom list data source for chat messages with per-segment coloring.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Chat.ChatMessageManager.html">ChatMessageManager</a></dt>
<dd><p>Owns chat message storage, formatting, and mutation.
Fires <a class="xref" href="EchoHub.Client.UI.Chat.ChatMessageManager.html#EchoHub_Client_UI_Chat_ChatMessageManager_MessagesChanged">MessagesChanged</a> when a channel's message list is modified
so the UI layer can refresh.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Chat.ChatSegment.html">ChatSegment</a></dt>
<dd><p>A colored text segment within a chat line.</p>
</dd>
</dl>
<h3 id="structs">
Structs
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Chat.AttachmentActionSpan.html">AttachmentActionSpan</a></dt>
<dd><p>Inclusive column range on a chat line that triggers an attachment action when clicked.</p>
</dd>
</dl>
<h3 id="enums">
Enums
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Chat.AttachmentAction.html">AttachmentAction</a></dt>
<dd><p>An action a click on an attachment line can trigger.</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,244 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class AudioPlayerDialog | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class AudioPlayerDialog | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_AudioPlayerDialog.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.AudioPlayerDialog%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.AudioPlayerDialog">
<h1 id="EchoHub_Client_UI_Dialogs_AudioPlayerDialog" data-uid="EchoHub.Client.UI.Dialogs.AudioPlayerDialog" class="text-break">
Class AudioPlayerDialog <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/AudioPlayerDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class AudioPlayerDialog</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">AudioPlayerDialog</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Dialogs_AudioPlayerDialog__ctor_" data-uid="EchoHub.Client.UI.Dialogs.AudioPlayerDialog.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_AudioPlayerDialog__ctor" data-uid="EchoHub.Client.UI.Dialogs.AudioPlayerDialog.#ctor">
AudioPlayerDialog()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/AudioPlayerDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public AudioPlayerDialog()</code></pre>
</div>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Dialogs_AudioPlayerDialog_Show_" data-uid="EchoHub.Client.UI.Dialogs.AudioPlayerDialog.Show*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_AudioPlayerDialog_Show_Terminal_Gui_App_IApplication_EchoHub_Client_Services_AudioPlaybackService_System_String_System_String_" data-uid="EchoHub.Client.UI.Dialogs.AudioPlayerDialog.Show(Terminal.Gui.App.IApplication,EchoHub.Client.Services.AudioPlaybackService,System.String,System.String)">
Show(IApplication, AudioPlaybackService, string, string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/AudioPlayerDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void Show(IApplication app, AudioPlaybackService audioService, string filePath, string fileName)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>app</code> <span class="xref">IApplication</span></dt>
<dd></dd>
<dt><code>audioService</code> <a class="xref" href="EchoHub.Client.Services.AudioPlaybackService.html">AudioPlaybackService</a></dt>
<dd></dd>
<dt><code>filePath</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>fileName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/AudioPlayerDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,249 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ChannelPasswordDialog | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ChannelPasswordDialog | EchoHub Documentation ">
<meta name="description" content="Prompts for a channel password when joining a protected channel. Returns the entered password, or null if the user cancels.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_ChannelPasswordDialog.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.ChannelPasswordDialog%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.ChannelPasswordDialog">
<h1 id="EchoHub_Client_UI_Dialogs_ChannelPasswordDialog" data-uid="EchoHub.Client.UI.Dialogs.ChannelPasswordDialog" class="text-break">
Class ChannelPasswordDialog <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ChannelPasswordDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Prompts for a channel password when joining a protected channel.
Returns the entered password, or null if the user cancels.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class ChannelPasswordDialog</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ChannelPasswordDialog</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Dialogs_ChannelPasswordDialog__ctor_" data-uid="EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ChannelPasswordDialog__ctor" data-uid="EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.#ctor">
ChannelPasswordDialog()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ChannelPasswordDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ChannelPasswordDialog()</code></pre>
</div>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Dialogs_ChannelPasswordDialog_Show_" data-uid="EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.Show*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ChannelPasswordDialog_Show_Terminal_Gui_App_IApplication_System_String_System_String_" data-uid="EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.Show(Terminal.Gui.App.IApplication,System.String,System.String)">
Show(IApplication, string, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ChannelPasswordDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string? Show(IApplication app, string channelName, string? message = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>app</code> <span class="xref">IApplication</span></dt>
<dd></dd>
<dt><code>channelName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>message</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ChannelPasswordDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,249 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ConnectDialog | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ConnectDialog | EchoHub Documentation ">
<meta name="description" content="A Terminal.Gui dialog for entering server connection and authentication details. Includes a saved servers selector when saved servers are available.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_ConnectDialog.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.ConnectDialog%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.ConnectDialog">
<h1 id="EchoHub_Client_UI_Dialogs_ConnectDialog" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialog" class="text-break">
Class ConnectDialog <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>A Terminal.Gui dialog for entering server connection and authentication details.
Includes a saved servers selector when saved servers are available.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class ConnectDialog</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ConnectDialog</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialog__ctor_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialog.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialog__ctor" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialog.#ctor">
ConnectDialog()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ConnectDialog()</code></pre>
</div>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialog_Show_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialog.Show*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialog_Show_Terminal_Gui_App_IApplication_System_Collections_Generic_List_EchoHub_Client_Config_SavedServer__" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialog.Show(Terminal.Gui.App.IApplication,System.Collections.Generic.List{EchoHub.Client.Config.SavedServer})">
Show(IApplication, List&lt;SavedServer&gt;?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Shows the connect dialog with an optional list of saved servers.
Returns the result, or null if cancelled.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static ConnectDialogResult? Show(IApplication app, List&lt;SavedServer&gt;? savedServers = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>app</code> <span class="xref">IApplication</span></dt>
<dd></dd>
<dt><code>savedServers</code> <span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Client.Config.SavedServer.html">SavedServer</a>&gt;</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.ConnectDialogResult.html">ConnectDialogResult</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,837 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ConnectDialogResult | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ConnectDialogResult | EchoHub Documentation ">
<meta name="description" content="Result returned from the connect dialog.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_ConnectDialogResult.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.ConnectDialogResult%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult">
<h1 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult" class="text-break">
Class ConnectDialogResult <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Result returned from the connect dialog.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public record ConnectDialogResult : IEquatable&lt;ConnectDialogResult&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ConnectDialogResult</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Client.UI.Dialogs.ConnectDialogResult.html">ConnectDialogResult</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult__ctor_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult__ctor_EchoHub_Client_UI_Dialogs_ConnectDialogResult_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.#ctor(EchoHub.Client.UI.Dialogs.ConnectDialogResult)">
ConnectDialogResult(ConnectDialogResult)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected ConnectDialogResult(ConnectDialogResult original)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>original</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.ConnectDialogResult.html">ConnectDialogResult</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult__ctor_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult__ctor_System_String_System_String_System_String_System_Boolean_System_Boolean_System_String_System_String_System_String_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.#ctor(System.String,System.String,System.String,System.Boolean,System.Boolean,System.String,System.String,System.String)">
ConnectDialogResult(string, string, string, bool, bool, string?, string?, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Result returned from the connect dialog.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ConnectDialogResult(string ServerUrl, string Username, string Password, bool IsRegister, bool RememberMe, string? SavedRefreshToken, string? DisplayName = null, string? InviteCode = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>ServerUrl</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>Username</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>Password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>IsRegister</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>RememberMe</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>SavedRefreshToken</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>DisplayName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>InviteCode</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_DisplayName_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.DisplayName*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_DisplayName" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.DisplayName">
DisplayName
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? DisplayName { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_EqualityContract_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.EqualityContract*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_EqualityContract" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.EqualityContract">
EqualityContract
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual Type EqualityContract { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.type">Type</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_InviteCode_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.InviteCode*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_InviteCode" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.InviteCode">
InviteCode
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? InviteCode { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_IsRegister_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.IsRegister*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_IsRegister" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.IsRegister">
IsRegister
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsRegister { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_Password_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.Password*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_Password" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.Password">
Password
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Password { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_RememberMe_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.RememberMe*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_RememberMe" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.RememberMe">
RememberMe
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool RememberMe { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_SavedRefreshToken_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.SavedRefreshToken*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_SavedRefreshToken" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.SavedRefreshToken">
SavedRefreshToken
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? SavedRefreshToken { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_ServerUrl_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.ServerUrl*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_ServerUrl" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.ServerUrl">
ServerUrl
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string ServerUrl { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_Username_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.Username*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_Username" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.Username">
Username
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Username { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_Deconstruct_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.Deconstruct*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_Deconstruct_System_String__System_String__System_String__System_Boolean__System_Boolean__System_String__System_String__System_String__" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.Deconstruct(System.String@,System.String@,System.String@,System.Boolean@,System.Boolean@,System.String@,System.String@,System.String@)">
Deconstruct(out string, out string, out string, out bool, out bool, out string?, out string?, out string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out string ServerUrl, out string Username, out string Password, out bool IsRegister, out bool RememberMe, out string? SavedRefreshToken, out string? DisplayName, out string? InviteCode)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>ServerUrl</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>Username</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>Password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>IsRegister</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>RememberMe</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>SavedRefreshToken</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>DisplayName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>InviteCode</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_Equals_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.Equals*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_Equals_EchoHub_Client_UI_Dialogs_ConnectDialogResult_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.Equals(EchoHub.Client.UI.Dialogs.ConnectDialogResult)">
Equals(ConnectDialogResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual bool Equals(ConnectDialogResult? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.ConnectDialogResult.html">ConnectDialogResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_Equals_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.Equals*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_Equals_System_Object_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_GetHashCode_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.GetHashCode*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_GetHashCode" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_PrintMembers_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.PrintMembers*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_PrintMembers_System_Text_StringBuilder_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.PrintMembers(System.Text.StringBuilder)">
PrintMembers(StringBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual bool PrintMembers(StringBuilder builder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>builder</code> <span class="xref">StringBuilder</span></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_ToString_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.ToString*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_ToString" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_op_Equality_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.op_Equality*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_op_Equality_EchoHub_Client_UI_Dialogs_ConnectDialogResult_EchoHub_Client_UI_Dialogs_ConnectDialogResult_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.op_Equality(EchoHub.Client.UI.Dialogs.ConnectDialogResult,EchoHub.Client.UI.Dialogs.ConnectDialogResult)">
operator ==(ConnectDialogResult?, ConnectDialogResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(ConnectDialogResult? left, ConnectDialogResult? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.ConnectDialogResult.html">ConnectDialogResult</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.ConnectDialogResult.html">ConnectDialogResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_op_Inequality_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.op_Inequality*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ConnectDialogResult_op_Inequality_EchoHub_Client_UI_Dialogs_ConnectDialogResult_EchoHub_Client_UI_Dialogs_ConnectDialogResult_" data-uid="EchoHub.Client.UI.Dialogs.ConnectDialogResult.op_Inequality(EchoHub.Client.UI.Dialogs.ConnectDialogResult,EchoHub.Client.UI.Dialogs.ConnectDialogResult)">
operator !=(ConnectDialogResult?, ConnectDialogResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(ConnectDialogResult? left, ConnectDialogResult? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.ConnectDialogResult.html">ConnectDialogResult</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.ConnectDialogResult.html">ConnectDialogResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,243 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class CreateChannelDialog | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class CreateChannelDialog | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_CreateChannelDialog.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.CreateChannelDialog%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.CreateChannelDialog">
<h1 id="EchoHub_Client_UI_Dialogs_CreateChannelDialog" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelDialog" class="text-break">
Class CreateChannelDialog <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class CreateChannelDialog</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">CreateChannelDialog</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelDialog__ctor_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelDialog.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelDialog__ctor" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelDialog.#ctor">
CreateChannelDialog()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public CreateChannelDialog()</code></pre>
</div>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelDialog_Show_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelDialog.Show*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelDialog_Show_Terminal_Gui_App_IApplication_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelDialog.Show(Terminal.Gui.App.IApplication)">
Show(IApplication)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static CreateChannelResult? Show(IApplication app)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>app</code> <span class="xref">IApplication</span></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.CreateChannelResult.html">CreateChannelResult</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,695 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class CreateChannelResult | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class CreateChannelResult | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_CreateChannelResult.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.CreateChannelResult%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult">
<h1 id="EchoHub_Client_UI_Dialogs_CreateChannelResult" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult" class="text-break">
Class CreateChannelResult <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public record CreateChannelResult : IEquatable&lt;CreateChannelResult&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">CreateChannelResult</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Client.UI.Dialogs.CreateChannelResult.html">CreateChannelResult</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult__ctor_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult__ctor_EchoHub_Client_UI_Dialogs_CreateChannelResult_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.#ctor(EchoHub.Client.UI.Dialogs.CreateChannelResult)">
CreateChannelResult(CreateChannelResult)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected CreateChannelResult(CreateChannelResult original)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>original</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.CreateChannelResult.html">CreateChannelResult</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult__ctor_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult__ctor_System_String_System_String_System_Boolean_System_String_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.#ctor(System.String,System.String,System.Boolean,System.String)">
CreateChannelResult(string, string?, bool, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public CreateChannelResult(string Name, string? Topic, bool IsPublic, string? Password)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>Topic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>IsPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>Password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_EqualityContract_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.EqualityContract*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_EqualityContract" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.EqualityContract">
EqualityContract
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual Type EqualityContract { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.type">Type</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_IsPublic_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.IsPublic*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_IsPublic" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.IsPublic">
IsPublic
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsPublic { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Name_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Name*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Name" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Name">
Name
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Name { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Password_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Password*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Password" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Password">
Password
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? Password { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Topic_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Topic*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Topic" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Topic">
Topic
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? Topic { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Deconstruct_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Deconstruct*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Deconstruct_System_String__System_String__System_Boolean__System_String__" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Deconstruct(System.String@,System.String@,System.Boolean@,System.String@)">
Deconstruct(out string, out string?, out bool, out string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out string Name, out string? Topic, out bool IsPublic, out string? Password)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>Topic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>IsPublic</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>Password</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Equals_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Equals*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Equals_EchoHub_Client_UI_Dialogs_CreateChannelResult_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Equals(EchoHub.Client.UI.Dialogs.CreateChannelResult)">
Equals(CreateChannelResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual bool Equals(CreateChannelResult? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.CreateChannelResult.html">CreateChannelResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Equals_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Equals*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_Equals_System_Object_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_GetHashCode_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.GetHashCode*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_GetHashCode" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_PrintMembers_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.PrintMembers*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_PrintMembers_System_Text_StringBuilder_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.PrintMembers(System.Text.StringBuilder)">
PrintMembers(StringBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual bool PrintMembers(StringBuilder builder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>builder</code> <span class="xref">StringBuilder</span></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_ToString_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.ToString*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_ToString" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_op_Equality_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.op_Equality*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_op_Equality_EchoHub_Client_UI_Dialogs_CreateChannelResult_EchoHub_Client_UI_Dialogs_CreateChannelResult_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.op_Equality(EchoHub.Client.UI.Dialogs.CreateChannelResult,EchoHub.Client.UI.Dialogs.CreateChannelResult)">
operator ==(CreateChannelResult?, CreateChannelResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(CreateChannelResult? left, CreateChannelResult? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.CreateChannelResult.html">CreateChannelResult</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.CreateChannelResult.html">CreateChannelResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_CreateChannelResult_op_Inequality_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.op_Inequality*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_CreateChannelResult_op_Inequality_EchoHub_Client_UI_Dialogs_CreateChannelResult_EchoHub_Client_UI_Dialogs_CreateChannelResult_" data-uid="EchoHub.Client.UI.Dialogs.CreateChannelResult.op_Inequality(EchoHub.Client.UI.Dialogs.CreateChannelResult,EchoHub.Client.UI.Dialogs.CreateChannelResult)">
operator !=(CreateChannelResult?, CreateChannelResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(CreateChannelResult? left, CreateChannelResult? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.CreateChannelResult.html">CreateChannelResult</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.CreateChannelResult.html">CreateChannelResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,157 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Enum ProfileAction | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Enum ProfileAction | EchoHub Documentation ">
<meta name="description" content="Action selected by the user in their own profile dialog.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_ProfileAction.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.ProfileAction%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.ProfileAction">
<h1 id="EchoHub_Client_UI_Dialogs_ProfileAction" data-uid="EchoHub.Client.UI.Dialogs.ProfileAction" class="text-break">
Enum ProfileAction <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileViewDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Action selected by the user in their own profile dialog.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public enum ProfileAction</code></pre>
</div>
<h2 id="fields">Fields
</h2>
<dl class="parameters">
<dt id="EchoHub_Client_UI_Dialogs_ProfileAction_Close"><code>Close = 0</code></dt>
<dd></dd>
<dt id="EchoHub_Client_UI_Dialogs_ProfileAction_EditProfile"><code>EditProfile = 1</code></dt>
<dd></dd>
<dt id="EchoHub_Client_UI_Dialogs_ProfileAction_SetStatus"><code>SetStatus = 2</code></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileViewDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,255 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ProfileEditDialog | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ProfileEditDialog | EchoHub Documentation ">
<meta name="description" content="A Terminal.Gui dialog for editing the user&#39;s profile (display name, bio, nickname color).">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_ProfileEditDialog.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.ProfileEditDialog%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.ProfileEditDialog">
<h1 id="EchoHub_Client_UI_Dialogs_ProfileEditDialog" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditDialog" class="text-break">
Class ProfileEditDialog <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>A Terminal.Gui dialog for editing the user's profile (display name, bio, nickname color).</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class ProfileEditDialog</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ProfileEditDialog</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditDialog__ctor_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditDialog.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditDialog__ctor" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditDialog.#ctor">
ProfileEditDialog()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ProfileEditDialog()</code></pre>
</div>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditDialog_Show_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditDialog.Show*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditDialog_Show_Terminal_Gui_App_IApplication_System_String_System_String_System_String_System_Boolean_System_Byte_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditDialog.Show(Terminal.Gui.App.IApplication,System.String,System.String,System.String,System.Boolean,System.Byte)">
Show(IApplication, string?, string?, string?, bool, byte)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Shows the profile edit dialog and returns the result, or null if cancelled.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static ProfileEditResult? Show(IApplication app, string? currentDisplayName, string? currentBio, string? currentColor, bool notificationSoundEnabled = false, byte notificationVolume = 30)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>app</code> <span class="xref">IApplication</span></dt>
<dd></dd>
<dt><code>currentDisplayName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>currentBio</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>currentColor</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>notificationSoundEnabled</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>notificationVolume</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.ProfileEditResult.html">ProfileEditResult</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,767 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ProfileEditResult | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ProfileEditResult | EchoHub Documentation ">
<meta name="description" content="Result returned from the profile edit dialog.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_ProfileEditResult.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.ProfileEditResult%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult">
<h1 id="EchoHub_Client_UI_Dialogs_ProfileEditResult" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult" class="text-break">
Class ProfileEditResult <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Result returned from the profile edit dialog.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public record ProfileEditResult : IEquatable&lt;ProfileEditResult&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ProfileEditResult</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Client.UI.Dialogs.ProfileEditResult.html">ProfileEditResult</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult__ctor_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult__ctor_EchoHub_Client_UI_Dialogs_ProfileEditResult_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.#ctor(EchoHub.Client.UI.Dialogs.ProfileEditResult)">
ProfileEditResult(ProfileEditResult)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected ProfileEditResult(ProfileEditResult original)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>original</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.ProfileEditResult.html">ProfileEditResult</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult__ctor_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult__ctor_System_String_System_String_System_String_System_String_System_Nullable_System_Boolean__System_Nullable_System_Byte__" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.#ctor(System.String,System.String,System.String,System.String,System.Nullable{System.Boolean},System.Nullable{System.Byte})">
ProfileEditResult(string?, string?, string?, string?, bool?, byte?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Result returned from the profile edit dialog.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ProfileEditResult(string? DisplayName, string? Bio, string? NicknameColor, string? AvatarPath, bool? NotificationSoundEnabled, byte? NotificationVolume)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>DisplayName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>Bio</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>NicknameColor</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>AvatarPath</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>NotificationSoundEnabled</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>?</dt>
<dd></dd>
<dt><code>NotificationVolume</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>?</dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult_AvatarPath_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.AvatarPath*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult_AvatarPath" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.AvatarPath">
AvatarPath
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? AvatarPath { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult_Bio_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.Bio*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult_Bio" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.Bio">
Bio
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? Bio { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult_DisplayName_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.DisplayName*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult_DisplayName" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.DisplayName">
DisplayName
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? DisplayName { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult_EqualityContract_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.EqualityContract*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult_EqualityContract" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.EqualityContract">
EqualityContract
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual Type EqualityContract { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.type">Type</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult_NicknameColor_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.NicknameColor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult_NicknameColor" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.NicknameColor">
NicknameColor
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? NicknameColor { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult_NotificationSoundEnabled_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.NotificationSoundEnabled*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult_NotificationSoundEnabled" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.NotificationSoundEnabled">
NotificationSoundEnabled
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool? NotificationSoundEnabled { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>?</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult_NotificationVolume_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.NotificationVolume*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult_NotificationVolume" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.NotificationVolume">
NotificationVolume
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public byte? NotificationVolume { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>?</dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult_Deconstruct_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.Deconstruct*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult_Deconstruct_System_String__System_String__System_String__System_String__System_Nullable_System_Boolean___System_Nullable_System_Byte___" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.Deconstruct(System.String@,System.String@,System.String@,System.String@,System.Nullable{System.Boolean}@,System.Nullable{System.Byte}@)">
Deconstruct(out string?, out string?, out string?, out string?, out bool?, out byte?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out string? DisplayName, out string? Bio, out string? NicknameColor, out string? AvatarPath, out bool? NotificationSoundEnabled, out byte? NotificationVolume)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>DisplayName</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>Bio</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>NicknameColor</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>AvatarPath</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>NotificationSoundEnabled</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>?</dt>
<dd></dd>
<dt><code>NotificationVolume</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.byte">byte</a>?</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult_Equals_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.Equals*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult_Equals_EchoHub_Client_UI_Dialogs_ProfileEditResult_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.Equals(EchoHub.Client.UI.Dialogs.ProfileEditResult)">
Equals(ProfileEditResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual bool Equals(ProfileEditResult? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.ProfileEditResult.html">ProfileEditResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult_Equals_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.Equals*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult_Equals_System_Object_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult_GetHashCode_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.GetHashCode*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult_GetHashCode" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult_PrintMembers_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.PrintMembers*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult_PrintMembers_System_Text_StringBuilder_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.PrintMembers(System.Text.StringBuilder)">
PrintMembers(StringBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual bool PrintMembers(StringBuilder builder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>builder</code> <span class="xref">StringBuilder</span></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult_ToString_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.ToString*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult_ToString" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult_op_Equality_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.op_Equality*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult_op_Equality_EchoHub_Client_UI_Dialogs_ProfileEditResult_EchoHub_Client_UI_Dialogs_ProfileEditResult_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.op_Equality(EchoHub.Client.UI.Dialogs.ProfileEditResult,EchoHub.Client.UI.Dialogs.ProfileEditResult)">
operator ==(ProfileEditResult?, ProfileEditResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(ProfileEditResult? left, ProfileEditResult? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.ProfileEditResult.html">ProfileEditResult</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.ProfileEditResult.html">ProfileEditResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ProfileEditResult_op_Inequality_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.op_Inequality*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileEditResult_op_Inequality_EchoHub_Client_UI_Dialogs_ProfileEditResult_EchoHub_Client_UI_Dialogs_ProfileEditResult_" data-uid="EchoHub.Client.UI.Dialogs.ProfileEditResult.op_Inequality(EchoHub.Client.UI.Dialogs.ProfileEditResult,EchoHub.Client.UI.Dialogs.ProfileEditResult)">
operator !=(ProfileEditResult?, ProfileEditResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(ProfileEditResult? left, ProfileEditResult? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.ProfileEditResult.html">ProfileEditResult</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.ProfileEditResult.html">ProfileEditResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,287 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ProfileViewDialog | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ProfileViewDialog | EchoHub Documentation ">
<meta name="description" content="Dialog for viewing a user&#39;s server profile. Shows Edit Profile / Set Status buttons when viewing own profile.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_ProfileViewDialog.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.ProfileViewDialog%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.ProfileViewDialog">
<h1 id="EchoHub_Client_UI_Dialogs_ProfileViewDialog" data-uid="EchoHub.Client.UI.Dialogs.ProfileViewDialog" class="text-break">
Class ProfileViewDialog <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileViewDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Dialog for viewing a user's server profile.
Shows Edit Profile / Set Status buttons when viewing own profile.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class ProfileViewDialog</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ProfileViewDialog</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Dialogs_ProfileViewDialog__ctor_" data-uid="EchoHub.Client.UI.Dialogs.ProfileViewDialog.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileViewDialog__ctor" data-uid="EchoHub.Client.UI.Dialogs.ProfileViewDialog.#ctor">
ProfileViewDialog()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileViewDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ProfileViewDialog()</code></pre>
</div>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Dialogs_ProfileViewDialog_Show_" data-uid="EchoHub.Client.UI.Dialogs.ProfileViewDialog.Show*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileViewDialog_Show_Terminal_Gui_App_IApplication_EchoHub_Core_DTOs_UserProfileDto_" data-uid="EchoHub.Client.UI.Dialogs.ProfileViewDialog.Show(Terminal.Gui.App.IApplication,EchoHub.Core.DTOs.UserProfileDto)">
Show(IApplication, UserProfileDto?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileViewDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Show a read-only profile view for another user.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void Show(IApplication app, UserProfileDto? profile)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>app</code> <span class="xref">IApplication</span></dt>
<dd></dd>
<dt><code>profile</code> <a class="xref" href="../core/EchoHub.Core.DTOs.UserProfileDto.html">UserProfileDto</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_ProfileViewDialog_ShowOwn_" data-uid="EchoHub.Client.UI.Dialogs.ProfileViewDialog.ShowOwn*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_ProfileViewDialog_ShowOwn_Terminal_Gui_App_IApplication_EchoHub_Core_DTOs_UserProfileDto_EchoHub_Core_Models_UserStatus_System_String_" data-uid="EchoHub.Client.UI.Dialogs.ProfileViewDialog.ShowOwn(Terminal.Gui.App.IApplication,EchoHub.Core.DTOs.UserProfileDto,EchoHub.Core.Models.UserStatus,System.String)">
ShowOwn(IApplication, UserProfileDto?, UserStatus, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileViewDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Show the profile view for the current user with action buttons.
Returns the action the user selected.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static ProfileAction ShowOwn(IApplication app, UserProfileDto? profile, UserStatus currentStatus, string? currentStatusMessage)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>app</code> <span class="xref">IApplication</span></dt>
<dd></dd>
<dt><code>profile</code> <a class="xref" href="../core/EchoHub.Core.DTOs.UserProfileDto.html">UserProfileDto</a></dt>
<dd></dd>
<dt><code>currentStatus</code> <a class="xref" href="../core/EchoHub.Core.Models.UserStatus.html">UserStatus</a></dt>
<dd></dd>
<dt><code>currentStatusMessage</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.ProfileAction.html">ProfileAction</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/ProfileViewDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,219 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class SearchDialog | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class SearchDialog | EchoHub Documentation ">
<meta name="description" content="Command-palette style search dialog (Ctrl+K) for navigating channels and triggering app actions.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_SearchDialog.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.SearchDialog%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.SearchDialog">
<h1 id="EchoHub_Client_UI_Dialogs_SearchDialog" data-uid="EchoHub.Client.UI.Dialogs.SearchDialog" class="text-break">
Class SearchDialog <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Command-palette style search dialog (Ctrl+K) for navigating channels and triggering app actions.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class SearchDialog</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">SearchDialog</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Dialogs_SearchDialog_Show_" data-uid="EchoHub.Client.UI.Dialogs.SearchDialog.Show*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_SearchDialog_Show_Terminal_Gui_App_IApplication_System_Collections_Generic_IReadOnlyList_System_String__" data-uid="EchoHub.Client.UI.Dialogs.SearchDialog.Show(Terminal.Gui.App.IApplication,System.Collections.Generic.IReadOnlyList{System.String})">
Show(IApplication, IReadOnlyList&lt;string&gt;)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static SearchResult? Show(IApplication app, IReadOnlyList&lt;string&gt; channels)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>app</code> <span class="xref">IApplication</span></dt>
<dd></dd>
<dt><code>channels</code> <span class="xref">IReadOnlyList</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.SearchResult.html">SearchResult</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,660 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class SearchResult | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class SearchResult | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_SearchResult.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.SearchResult%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.SearchResult">
<h1 id="EchoHub_Client_UI_Dialogs_SearchResult" data-uid="EchoHub.Client.UI.Dialogs.SearchResult" class="text-break">
Class SearchResult <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public record SearchResult : IEquatable&lt;SearchResult&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">SearchResult</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Client.UI.Dialogs.SearchResult.html">SearchResult</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Dialogs_SearchResult__ctor_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_SearchResult__ctor_EchoHub_Client_UI_Dialogs_SearchResult_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.#ctor(EchoHub.Client.UI.Dialogs.SearchResult)">
SearchResult(SearchResult)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected SearchResult(SearchResult original)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>original</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.SearchResult.html">SearchResult</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_SearchResult__ctor_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_SearchResult__ctor_EchoHub_Client_UI_Dialogs_SearchResultType_System_String_System_String_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.#ctor(EchoHub.Client.UI.Dialogs.SearchResultType,System.String,System.String)">
SearchResult(SearchResultType, string, string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public SearchResult(SearchResultType Type, string Key, string Label)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Type</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.SearchResultType.html">SearchResultType</a></dt>
<dd></dd>
<dt><code>Key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>Label</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_UI_Dialogs_SearchResult_EqualityContract_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.EqualityContract*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_SearchResult_EqualityContract" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.EqualityContract">
EqualityContract
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual Type EqualityContract { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.type">Type</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_SearchResult_Key_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.Key*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_SearchResult_Key" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.Key">
Key
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Key { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_SearchResult_Label_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.Label*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_SearchResult_Label" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.Label">
Label
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Label { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_SearchResult_Type_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.Type*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_SearchResult_Type" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.Type">
Type
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public SearchResultType Type { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.SearchResultType.html">SearchResultType</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Dialogs_SearchResult_Deconstruct_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.Deconstruct*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_SearchResult_Deconstruct_EchoHub_Client_UI_Dialogs_SearchResultType__System_String__System_String__" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.Deconstruct(EchoHub.Client.UI.Dialogs.SearchResultType@,System.String@,System.String@)">
Deconstruct(out SearchResultType, out string, out string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out SearchResultType Type, out string Key, out string Label)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Type</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.SearchResultType.html">SearchResultType</a></dt>
<dd></dd>
<dt><code>Key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>Label</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_SearchResult_Equals_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.Equals*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_SearchResult_Equals_EchoHub_Client_UI_Dialogs_SearchResult_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.Equals(EchoHub.Client.UI.Dialogs.SearchResult)">
Equals(SearchResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual bool Equals(SearchResult? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.SearchResult.html">SearchResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_SearchResult_Equals_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.Equals*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_SearchResult_Equals_System_Object_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_SearchResult_GetHashCode_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.GetHashCode*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_SearchResult_GetHashCode" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_SearchResult_PrintMembers_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.PrintMembers*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_SearchResult_PrintMembers_System_Text_StringBuilder_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.PrintMembers(System.Text.StringBuilder)">
PrintMembers(StringBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual bool PrintMembers(StringBuilder builder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>builder</code> <span class="xref">StringBuilder</span></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_SearchResult_ToString_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.ToString*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_SearchResult_ToString" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Client_UI_Dialogs_SearchResult_op_Equality_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.op_Equality*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_SearchResult_op_Equality_EchoHub_Client_UI_Dialogs_SearchResult_EchoHub_Client_UI_Dialogs_SearchResult_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.op_Equality(EchoHub.Client.UI.Dialogs.SearchResult,EchoHub.Client.UI.Dialogs.SearchResult)">
operator ==(SearchResult?, SearchResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(SearchResult? left, SearchResult? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.SearchResult.html">SearchResult</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.SearchResult.html">SearchResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_SearchResult_op_Inequality_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.op_Inequality*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_SearchResult_op_Inequality_EchoHub_Client_UI_Dialogs_SearchResult_EchoHub_Client_UI_Dialogs_SearchResult_" data-uid="EchoHub.Client.UI.Dialogs.SearchResult.op_Inequality(EchoHub.Client.UI.Dialogs.SearchResult,EchoHub.Client.UI.Dialogs.SearchResult)">
operator !=(SearchResult?, SearchResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(SearchResult? left, SearchResult? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.SearchResult.html">SearchResult</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.SearchResult.html">SearchResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,153 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Enum SearchResultType | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Enum SearchResultType | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_SearchResultType.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.SearchResultType%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.SearchResultType">
<h1 id="EchoHub_Client_UI_Dialogs_SearchResultType" data-uid="EchoHub.Client.UI.Dialogs.SearchResultType" class="text-break">
Enum SearchResultType <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public enum SearchResultType</code></pre>
</div>
<h2 id="fields">Fields
</h2>
<dl class="parameters">
<dt id="EchoHub_Client_UI_Dialogs_SearchResultType_Action"><code>Action = 1</code></dt>
<dd></dd>
<dt id="EchoHub_Client_UI_Dialogs_SearchResultType_Channel"><code>Channel = 0</code></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,249 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class StatusDialog | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class StatusDialog | EchoHub Documentation ">
<meta name="description" content="A Terminal.Gui dialog for setting the user&#39;s status and status message.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_StatusDialog.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.StatusDialog%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.StatusDialog">
<h1 id="EchoHub_Client_UI_Dialogs_StatusDialog" data-uid="EchoHub.Client.UI.Dialogs.StatusDialog" class="text-break">
Class StatusDialog <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>A Terminal.Gui dialog for setting the user's status and status message.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class StatusDialog</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">StatusDialog</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Dialogs_StatusDialog__ctor_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialog.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_StatusDialog__ctor" data-uid="EchoHub.Client.UI.Dialogs.StatusDialog.#ctor">
StatusDialog()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public StatusDialog()</code></pre>
</div>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Dialogs_StatusDialog_Show_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialog.Show*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_StatusDialog_Show_Terminal_Gui_App_IApplication_EchoHub_Core_Models_UserStatus_System_String_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialog.Show(Terminal.Gui.App.IApplication,EchoHub.Core.Models.UserStatus,System.String)">
Show(IApplication, UserStatus, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Shows the status dialog and returns the result, or null if cancelled.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static StatusDialogResult? Show(IApplication app, UserStatus currentStatus, string? currentMessage)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>app</code> <span class="xref">IApplication</span></dt>
<dd></dd>
<dt><code>currentStatus</code> <a class="xref" href="../core/EchoHub.Core.Models.UserStatus.html">UserStatus</a></dt>
<dd></dd>
<dt><code>currentMessage</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.StatusDialogResult.html">StatusDialogResult</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,627 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class StatusDialogResult | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class StatusDialogResult | EchoHub Documentation ">
<meta name="description" content="Result returned from the status dialog.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_StatusDialogResult.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.StatusDialogResult%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult">
<h1 id="EchoHub_Client_UI_Dialogs_StatusDialogResult" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult" class="text-break">
Class StatusDialogResult <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Result returned from the status dialog.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public record StatusDialogResult : IEquatable&lt;StatusDialogResult&gt;</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">StatusDialogResult</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="EchoHub.Client.UI.Dialogs.StatusDialogResult.html">StatusDialogResult</a>&gt;</div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Dialogs_StatusDialogResult__ctor_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_StatusDialogResult__ctor_EchoHub_Client_UI_Dialogs_StatusDialogResult_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.#ctor(EchoHub.Client.UI.Dialogs.StatusDialogResult)">
StatusDialogResult(StatusDialogResult)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected StatusDialogResult(StatusDialogResult original)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>original</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.StatusDialogResult.html">StatusDialogResult</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_StatusDialogResult__ctor_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_StatusDialogResult__ctor_EchoHub_Core_Models_UserStatus_System_String_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.#ctor(EchoHub.Core.Models.UserStatus,System.String)">
StatusDialogResult(UserStatus, string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Result returned from the status dialog.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public StatusDialogResult(UserStatus Status, string? StatusMessage)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Status</code> <a class="xref" href="../core/EchoHub.Core.Models.UserStatus.html">UserStatus</a></dt>
<dd></dd>
<dt><code>StatusMessage</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_UI_Dialogs_StatusDialogResult_EqualityContract_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.EqualityContract*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_StatusDialogResult_EqualityContract" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.EqualityContract">
EqualityContract
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual Type EqualityContract { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.type">Type</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_StatusDialogResult_Status_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.Status*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_StatusDialogResult_Status" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.Status">
Status
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public UserStatus Status { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="../core/EchoHub.Core.Models.UserStatus.html">UserStatus</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_StatusDialogResult_StatusMessage_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.StatusMessage*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_StatusDialogResult_StatusMessage" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.StatusMessage">
StatusMessage
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? StatusMessage { get; init; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Dialogs_StatusDialogResult_Deconstruct_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.Deconstruct*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_StatusDialogResult_Deconstruct_EchoHub_Core_Models_UserStatus__System_String__" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.Deconstruct(EchoHub.Core.Models.UserStatus@,System.String@)">
Deconstruct(out UserStatus, out string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Deconstruct(out UserStatus Status, out string? StatusMessage)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>Status</code> <a class="xref" href="../core/EchoHub.Core.Models.UserStatus.html">UserStatus</a></dt>
<dd></dd>
<dt><code>StatusMessage</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_StatusDialogResult_Equals_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.Equals*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_StatusDialogResult_Equals_EchoHub_Client_UI_Dialogs_StatusDialogResult_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.Equals(EchoHub.Client.UI.Dialogs.StatusDialogResult)">
Equals(StatusDialogResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual bool Equals(StatusDialogResult? other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.StatusDialogResult.html">StatusDialogResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_StatusDialogResult_Equals_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.Equals*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_StatusDialogResult_Equals_System_Object_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.Equals(System.Object)">
Equals(object?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object? obj)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>obj</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_StatusDialogResult_GetHashCode_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.GetHashCode*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_StatusDialogResult_GetHashCode" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.GetHashCode">
GetHashCode()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_StatusDialogResult_PrintMembers_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.PrintMembers*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_StatusDialogResult_PrintMembers_System_Text_StringBuilder_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.PrintMembers(System.Text.StringBuilder)">
PrintMembers(StringBuilder)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual bool PrintMembers(StringBuilder builder)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>builder</code> <span class="xref">StringBuilder</span></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_StatusDialogResult_ToString_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.ToString*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_StatusDialogResult_ToString" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.ToString">
ToString()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="operators">Operators
</h2>
<a id="EchoHub_Client_UI_Dialogs_StatusDialogResult_op_Equality_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.op_Equality*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_StatusDialogResult_op_Equality_EchoHub_Client_UI_Dialogs_StatusDialogResult_EchoHub_Client_UI_Dialogs_StatusDialogResult_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.op_Equality(EchoHub.Client.UI.Dialogs.StatusDialogResult,EchoHub.Client.UI.Dialogs.StatusDialogResult)">
operator ==(StatusDialogResult?, StatusDialogResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator ==(StatusDialogResult? left, StatusDialogResult? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.StatusDialogResult.html">StatusDialogResult</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.StatusDialogResult.html">StatusDialogResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Dialogs_StatusDialogResult_op_Inequality_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.op_Inequality*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_StatusDialogResult_op_Inequality_EchoHub_Client_UI_Dialogs_StatusDialogResult_EchoHub_Client_UI_Dialogs_StatusDialogResult_" data-uid="EchoHub.Client.UI.Dialogs.StatusDialogResult.op_Inequality(EchoHub.Client.UI.Dialogs.StatusDialogResult,EchoHub.Client.UI.Dialogs.StatusDialogResult)">
operator !=(StatusDialogResult?, StatusDialogResult?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool operator !=(StatusDialogResult? left, StatusDialogResult? right)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>left</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.StatusDialogResult.html">StatusDialogResult</a></dt>
<dd></dd>
<dt><code>right</code> <a class="xref" href="EchoHub.Client.UI.Dialogs.StatusDialogResult.html">StatusDialogResult</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,247 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class UpdateConfirmDialog | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class UpdateConfirmDialog | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Dialogs_UpdateConfirmDialog.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Dialogs.UpdateConfirmDialog%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs.UpdateConfirmDialog">
<h1 id="EchoHub_Client_UI_Dialogs_UpdateConfirmDialog" data-uid="EchoHub.Client.UI.Dialogs.UpdateConfirmDialog" class="text-break">
Class UpdateConfirmDialog <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/UpdateConfirmDialog.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Dialogs.html">Dialogs</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"></div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class UpdateConfirmDialog</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">UpdateConfirmDialog</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_Dialogs_UpdateConfirmDialog__ctor_" data-uid="EchoHub.Client.UI.Dialogs.UpdateConfirmDialog.#ctor*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_UpdateConfirmDialog__ctor" data-uid="EchoHub.Client.UI.Dialogs.UpdateConfirmDialog.#ctor">
UpdateConfirmDialog()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/UpdateConfirmDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public UpdateConfirmDialog()</code></pre>
</div>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Dialogs_UpdateConfirmDialog_Show_" data-uid="EchoHub.Client.UI.Dialogs.UpdateConfirmDialog.Show*"></a>
<h3 id="EchoHub_Client_UI_Dialogs_UpdateConfirmDialog_Show_Terminal_Gui_App_IApplication_System_String_System_String_" data-uid="EchoHub.Client.UI.Dialogs.UpdateConfirmDialog.Show(Terminal.Gui.App.IApplication,System.String,System.String)">
Show(IApplication, string, string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/UpdateConfirmDialog.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool Show(IApplication app, string currentVersion, string newVersion)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>app</code> <span class="xref">IApplication</span></dt>
<dd></dd>
<dt><code>currentVersion</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>newVersion</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Dialogs/UpdateConfirmDialog.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
-202
View File
@@ -1,202 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace EchoHub.Client.UI.Dialogs | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace EchoHub.Client.UI.Dialogs | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Dialogs">
<h1 id="EchoHub_Client_UI_Dialogs" data-uid="EchoHub.Client.UI.Dialogs" class="text-break">Namespace EchoHub.Client.UI.Dialogs</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.AudioPlayerDialog.html">AudioPlayerDialog</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.html">ChannelPasswordDialog</a></dt>
<dd><p>Prompts for a channel password when joining a protected channel.
Returns the entered password, or null if the user cancels.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.ConnectDialog.html">ConnectDialog</a></dt>
<dd><p>A Terminal.Gui dialog for entering server connection and authentication details.
Includes a saved servers selector when saved servers are available.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.ConnectDialogResult.html">ConnectDialogResult</a></dt>
<dd><p>Result returned from the connect dialog.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.CreateChannelDialog.html">CreateChannelDialog</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.CreateChannelResult.html">CreateChannelResult</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.ProfileEditDialog.html">ProfileEditDialog</a></dt>
<dd><p>A Terminal.Gui dialog for editing the user's profile (display name, bio, nickname color).</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.ProfileEditResult.html">ProfileEditResult</a></dt>
<dd><p>Result returned from the profile edit dialog.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.ProfileViewDialog.html">ProfileViewDialog</a></dt>
<dd><p>Dialog for viewing a user's server profile.
Shows Edit Profile / Set Status buttons when viewing own profile.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.SearchDialog.html">SearchDialog</a></dt>
<dd><p>Command-palette style search dialog (Ctrl+K) for navigating channels and triggering app actions.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.SearchResult.html">SearchResult</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.StatusDialog.html">StatusDialog</a></dt>
<dd><p>A Terminal.Gui dialog for setting the user's status and status message.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.StatusDialogResult.html">StatusDialogResult</a></dt>
<dd><p>Result returned from the status dialog.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.UpdateConfirmDialog.html">UpdateConfirmDialog</a></dt>
<dd></dd>
</dl>
<h3 id="enums">
Enums
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.ProfileAction.html">ProfileAction</a></dt>
<dd><p>Action selected by the user in their own profile dialog.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.SearchResultType.html">SearchResultType</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,266 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class DroppedFileParser | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class DroppedFileParser | EchoHub Documentation ">
<meta name="description" content="Recognizes a dragged-and-dropped file (or files) that a terminal delivers into the input as an absolute path. Terminals differ: some paste the whole path at once, others send it character by character; either way this checks whether the current input text resolves to existing file(s).">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Helpers_DroppedFileParser.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Helpers.DroppedFileParser%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Helpers.DroppedFileParser">
<h1 id="EchoHub_Client_UI_Helpers_DroppedFileParser" data-uid="EchoHub.Client.UI.Helpers.DroppedFileParser" class="text-break">
Class DroppedFileParser <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/DroppedFileParser.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Helpers.html">Helpers</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Recognizes a dragged-and-dropped file (or files) that a terminal delivers into the input as an
absolute path. Terminals differ: some paste the whole path at once, others send it character by
character; either way this checks whether the current input text resolves to existing file(s).</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class DroppedFileParser</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">DroppedFileParser</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Helpers_DroppedFileParser_LooksLikePath_" data-uid="EchoHub.Client.UI.Helpers.DroppedFileParser.LooksLikePath*"></a>
<h3 id="EchoHub_Client_UI_Helpers_DroppedFileParser_LooksLikePath_System_String_" data-uid="EchoHub.Client.UI.Helpers.DroppedFileParser.LooksLikePath(System.String)">
LooksLikePath(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/DroppedFileParser.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Cheap pre-check so callers only stat the filesystem when the input plausibly holds a path:
a quoted path, a Windows drive path (<code>X:&lt;/code&gt;/<code>X:/</code>), a UNC path (<code>\</code>), or a
POSIX absolute path (<code>/</code>). Normal chat text never starts this way.</code></p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool LooksLikePath(string text)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>text</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Helpers_DroppedFileParser_TryGetFiles_" data-uid="EchoHub.Client.UI.Helpers.DroppedFileParser.TryGetFiles*"></a>
<h3 id="EchoHub_Client_UI_Helpers_DroppedFileParser_TryGetFiles_System_String_System_Collections_Generic_List_System_String___System_Func_System_String_System_Boolean__" data-uid="EchoHub.Client.UI.Helpers.DroppedFileParser.TryGetFiles(System.String,System.Collections.Generic.List{System.String}@,System.Func{System.String,System.Boolean})">
TryGetFiles(string, out List&lt;string&gt;, Func&lt;string, bool&gt;?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/DroppedFileParser.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Returns true when <code class="paramref">text</code> resolves to one or more existing files.
Handles a single path (quoted or not, possibly containing spaces) and multiple
space-separated (optionally quoted) paths. <code class="paramref">fileExists</code> is injectable
for testing; production passes <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">Exists(string)</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool TryGetFiles(string text, out List&lt;string&gt; files, Func&lt;string, bool&gt;? fileExists = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>text</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>files</code> <span class="xref">List</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
<dt><code>fileExists</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>&gt;</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/DroppedFileParser.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,221 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class EmojiHelper | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class EmojiHelper | EchoHub Documentation ">
<meta name="description" content="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.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Helpers_EmojiHelper.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Helpers.EmojiHelper%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Helpers.EmojiHelper">
<h1 id="EchoHub_Client_UI_Helpers_EmojiHelper" data-uid="EchoHub.Client.UI.Helpers.EmojiHelper" class="text-break">
Class EmojiHelper <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/EmojiHelper.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Helpers.html">Helpers</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>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.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class EmojiHelper</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">EmojiHelper</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Helpers_EmojiHelper_ReplaceEmoji_" data-uid="EchoHub.Client.UI.Helpers.EmojiHelper.ReplaceEmoji*"></a>
<h3 id="EchoHub_Client_UI_Helpers_EmojiHelper_ReplaceEmoji_System_String_" data-uid="EchoHub.Client.UI.Helpers.EmojiHelper.ReplaceEmoji(System.String)">
ReplaceEmoji(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/EmojiHelper.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Replace emoji graphemes in the text with :shortcode: equivalents.
Non-emoji text passes through unchanged.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string ReplaceEmoji(string text)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>text</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/EmojiHelper.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,257 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class HexColorHelper | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class HexColorHelper | EchoHub Documentation ">
<meta name="description" content="Helper to parse hex colors to Terminal.Gui Attributes.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Helpers_HexColorHelper.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Helpers.HexColorHelper%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Helpers.HexColorHelper">
<h1 id="EchoHub_Client_UI_Helpers_HexColorHelper" data-uid="EchoHub.Client.UI.Helpers.HexColorHelper" class="text-break">
Class HexColorHelper <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/HexColorHelper.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Helpers.html">Helpers</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Helper to parse hex colors to Terminal.Gui Attributes.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class HexColorHelper</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">HexColorHelper</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Helpers_HexColorHelper_ParseHexColor_" data-uid="EchoHub.Client.UI.Helpers.HexColorHelper.ParseHexColor*"></a>
<h3 id="EchoHub_Client_UI_Helpers_HexColorHelper_ParseHexColor_System_String_" data-uid="EchoHub.Client.UI.Helpers.HexColorHelper.ParseHexColor(System.String)">
ParseHexColor(string?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/HexColorHelper.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static Attribute? ParseHexColor(string? hex)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>hex</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span>?</dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Helpers_HexColorHelper_ParseHexToColor_" data-uid="EchoHub.Client.UI.Helpers.HexColorHelper.ParseHexToColor*"></a>
<h3 id="EchoHub_Client_UI_Helpers_HexColorHelper_ParseHexToColor_System_String_Terminal_Gui_Drawing_Color_" data-uid="EchoHub.Client.UI.Helpers.HexColorHelper.ParseHexToColor(System.String,Terminal.Gui.Drawing.Color)">
ParseHexToColor(string?, Color)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/HexColorHelper.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Parse a hex color string (with or without #) to a Terminal.Gui Color.
Returns <code class="paramref">fallback</code> if parsing fails.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static Color ParseHexToColor(string? hex, Color fallback = default)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>hex</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>fallback</code> <span class="xref">Color</span></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Color</span></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/HexColorHelper.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,262 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class NickColorHelper | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class NickColorHelper | EchoHub Documentation ">
<meta name="description" content="Deterministic per-nick colors for users who haven&#39;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.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_Helpers_NickColorHelper.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.Helpers.NickColorHelper%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Helpers.NickColorHelper">
<h1 id="EchoHub_Client_UI_Helpers_NickColorHelper" data-uid="EchoHub.Client.UI.Helpers.NickColorHelper" class="text-break">
Class NickColorHelper <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/NickColorHelper.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.Helpers.html">Helpers</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>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.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class NickColorHelper</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">NickColorHelper</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_Helpers_NickColorHelper_GetAttribute_" data-uid="EchoHub.Client.UI.Helpers.NickColorHelper.GetAttribute*"></a>
<h3 id="EchoHub_Client_UI_Helpers_NickColorHelper_GetAttribute_System_String_" data-uid="EchoHub.Client.UI.Helpers.NickColorHelper.GetAttribute(System.String)">
GetAttribute(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/NickColorHelper.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>The color attribute for a nick. Used as a fallback when the user has no
explicit nickname color set.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static Attribute GetAttribute(string nick)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>nick</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">Attribute</span></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_Helpers_NickColorHelper_GetPaletteIndex_" data-uid="EchoHub.Client.UI.Helpers.NickColorHelper.GetPaletteIndex*"></a>
<h3 id="EchoHub_Client_UI_Helpers_NickColorHelper_GetPaletteIndex_System_String_System_Int32_" data-uid="EchoHub.Client.UI.Helpers.NickColorHelper.GetPaletteIndex(System.String,System.Int32)">
GetPaletteIndex(string, int)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/NickColorHelper.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>Stable palette index for a nick: case-insensitive FNV-1a over the nick,
reduced modulo <code class="paramref">paletteSize</code>. Pure function (no Terminal.Gui
types) so it is unit-testable without a display driver.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static int GetPaletteIndex(string nick, int paletteSize)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>nick</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>paletteSize</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/Helpers/NickColorHelper.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
-148
View File
@@ -1,148 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace EchoHub.Client.UI.Helpers | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace EchoHub.Client.UI.Helpers | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.Helpers">
<h1 id="EchoHub_Client_UI_Helpers" data-uid="EchoHub.Client.UI.Helpers" class="text-break">Namespace EchoHub.Client.UI.Helpers</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Helpers.DroppedFileParser.html">DroppedFileParser</a></dt>
<dd><p>Recognizes a dragged-and-dropped file (or files) that a terminal delivers into the input as an
absolute path. Terminals differ: some paste the whole path at once, others send it character by
character; either way this checks whether the current input text resolves to existing file(s).</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Helpers.EmojiHelper.html">EmojiHelper</a></dt>
<dd><p>Converts emoji grapheme clusters to text shortcodes for safe TUI rendering.
Terminal width calculations for emoji are unreliable across different terminals,
so we replace them with fixed-width ASCII shortcodes for display only.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Helpers.HexColorHelper.html">HexColorHelper</a></dt>
<dd><p>Helper to parse hex colors to Terminal.Gui Attributes.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.Helpers.NickColorHelper.html">NickColorHelper</a></dt>
<dd><p>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.</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,562 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ChannelListSource | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ChannelListSource | EchoHub Documentation ">
<meta name="description" content="Custom list data source for colored channel list rendering. Active channel gets a &amp;gt; indicator, unread channels are bright with a count badge.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_ListSources_ChannelListSource.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.ListSources.ChannelListSource%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.ListSources.ChannelListSource">
<h1 id="EchoHub_Client_UI_ListSources_ChannelListSource" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource" class="text-break">
Class ChannelListSource <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.ListSources.html">ListSources</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Custom list data source for colored channel list rendering.
Active channel gets a &gt; indicator, unread channels are bright with a count badge.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class ChannelListSource : IListDataSource, IDisposable</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ChannelListSource</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><span class="xref">IListDataSource</span></div>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.idisposable">IDisposable</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_ListSources_ChannelListSource__ctor_" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.#ctor*"></a>
<h3 id="EchoHub_Client_UI_ListSources_ChannelListSource__ctor" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.#ctor">
ChannelListSource()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ChannelListSource()</code></pre>
</div>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_UI_ListSources_ChannelListSource_Count_" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.Count*"></a>
<h3 id="EchoHub_Client_UI_ListSources_ChannelListSource_Count" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.Count">
Count
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int Count { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_ChannelListSource_MaxItemLength_" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.MaxItemLength*"></a>
<h3 id="EchoHub_Client_UI_ListSources_ChannelListSource_MaxItemLength" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.MaxItemLength">
MaxItemLength
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int MaxItemLength { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_ChannelListSource_SuspendCollectionChangedEvent_" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.SuspendCollectionChangedEvent*"></a>
<h3 id="EchoHub_Client_UI_ListSources_ChannelListSource_SuspendCollectionChangedEvent" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.SuspendCollectionChangedEvent">
SuspendCollectionChangedEvent
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool SuspendCollectionChangedEvent { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_ListSources_ChannelListSource_Dispose_" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.Dispose*"></a>
<h3 id="EchoHub_Client_UI_ListSources_ChannelListSource_Dispose" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.Dispose">
Dispose()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Dispose()</code></pre>
</div>
<a id="EchoHub_Client_UI_ListSources_ChannelListSource_IsMarked_" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.IsMarked*"></a>
<h3 id="EchoHub_Client_UI_ListSources_ChannelListSource_IsMarked_System_Int32_" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.IsMarked(System.Int32)">
IsMarked(int)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsMarked(int item)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>item</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_ChannelListSource_Render_" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.Render*"></a>
<h3 id="EchoHub_Client_UI_ListSources_ChannelListSource_Render_Terminal_Gui_Views_ListView_System_Boolean_System_Int32_System_Int32_System_Int32_System_Int32_System_Int32_" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.Render(Terminal.Gui.Views.ListView,System.Boolean,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)">
Render(ListView, bool, int, int, int, int, int)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Render(ListView listView, bool selected, int item, int col, int row, int width, int viewportX = 0)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>listView</code> <span class="xref">ListView</span></dt>
<dd></dd>
<dt><code>selected</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>item</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>col</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>row</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>width</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>viewportX</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_ChannelListSource_SetMark_" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.SetMark*"></a>
<h3 id="EchoHub_Client_UI_ListSources_ChannelListSource_SetMark_System_Int32_System_Boolean_" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.SetMark(System.Int32,System.Boolean)">
SetMark(int, bool)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void SetMark(int item, bool value)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>item</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>value</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_ChannelListSource_ToList_" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.ToList*"></a>
<h3 id="EchoHub_Client_UI_ListSources_ChannelListSource_ToList" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.ToList">
ToList()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public IList ToList()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">IList</span></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_ChannelListSource_Update_" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.Update*"></a>
<h3 id="EchoHub_Client_UI_ListSources_ChannelListSource_Update_System_Collections_Generic_List_System_String__System_Collections_Generic_Dictionary_System_String_System_Int32__System_String_System_Collections_Generic_IReadOnlySet_System_String__System_Collections_Generic_IReadOnlySet_System_String__System_Collections_Generic_IReadOnlySet_System_String__System_Collections_Generic_IReadOnlySet_System_String__" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.Update(System.Collections.Generic.List{System.String},System.Collections.Generic.Dictionary{System.String,System.Int32},System.String,System.Collections.Generic.IReadOnlySet{System.String},System.Collections.Generic.IReadOnlySet{System.String},System.Collections.Generic.IReadOnlySet{System.String},System.Collections.Generic.IReadOnlySet{System.String})">
Update(List&lt;string&gt;, Dictionary&lt;string, int&gt;, string, IReadOnlySet&lt;string&gt;?, IReadOnlySet&lt;string&gt;?, IReadOnlySet&lt;string&gt;?, IReadOnlySet&lt;string&gt;?)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Update(List&lt;string&gt; channels, Dictionary&lt;string, int&gt; unread, string activeChannel, IReadOnlySet&lt;string&gt;? protectedChannels = null, IReadOnlySet&lt;string&gt;? mentionChannels = null, IReadOnlySet&lt;string&gt;? privateChannels = null, IReadOnlySet&lt;string&gt;? systemChannels = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channels</code> <span class="xref">List</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
<dt><code>unread</code> <span class="xref">Dictionary</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a>&gt;</dt>
<dd></dd>
<dt><code>activeChannel</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>protectedChannels</code> <span class="xref">IReadOnlySet</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
<dt><code>mentionChannels</code> <span class="xref">IReadOnlySet</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
<dt><code>privateChannels</code> <span class="xref">IReadOnlySet</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
<dt><code>systemChannels</code> <span class="xref">IReadOnlySet</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<h2 class="section" id="events">Events
</h2>
<h3 id="EchoHub_Client_UI_ListSources_ChannelListSource_CollectionChanged" data-uid="EchoHub.Client.UI.ListSources.ChannelListSource.CollectionChanged">
CollectionChanged
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public event NotifyCollectionChangedEventHandler? CollectionChanged</code></pre>
</div>
<h4 class="section">Event Type</h4>
<dl class="parameters">
<dt><span class="xref">NotifyCollectionChangedEventHandler</span></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,591 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class SearchListSource | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class SearchListSource | EchoHub Documentation ">
<meta name="description" content="List data source for the search dialog with filtering and colored rendering.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_ListSources_SearchListSource.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.ListSources.SearchListSource%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.ListSources.SearchListSource">
<h1 id="EchoHub_Client_UI_ListSources_SearchListSource" data-uid="EchoHub.Client.UI.ListSources.SearchListSource" class="text-break">
Class SearchListSource <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/SearchListSource.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.ListSources.html">ListSources</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>List data source for the search dialog with filtering and colored rendering.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class SearchListSource : IListDataSource, IDisposable</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">SearchListSource</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><span class="xref">IListDataSource</span></div>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.idisposable">IDisposable</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_ListSources_SearchListSource__ctor_" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.#ctor*"></a>
<h3 id="EchoHub_Client_UI_ListSources_SearchListSource__ctor_System_Collections_Generic_List_EchoHub_Client_UI_Dialogs_SearchResult__" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.#ctor(System.Collections.Generic.List{EchoHub.Client.UI.Dialogs.SearchResult})">
SearchListSource(List&lt;SearchResult&gt;)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/SearchListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"><p>List data source for the search dialog with filtering and colored rendering.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public SearchListSource(List&lt;SearchResult&gt; items)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>items</code> <span class="xref">List</span>&lt;<a class="xref" href="EchoHub.Client.UI.Dialogs.SearchResult.html">SearchResult</a>&gt;</dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_UI_ListSources_SearchListSource_Count_" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.Count*"></a>
<h3 id="EchoHub_Client_UI_ListSources_SearchListSource_Count" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.Count">
Count
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/SearchListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int Count { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_SearchListSource_MaxItemLength_" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.MaxItemLength*"></a>
<h3 id="EchoHub_Client_UI_ListSources_SearchListSource_MaxItemLength" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.MaxItemLength">
MaxItemLength
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/SearchListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int MaxItemLength { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_SearchListSource_SuspendCollectionChangedEvent_" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.SuspendCollectionChangedEvent*"></a>
<h3 id="EchoHub_Client_UI_ListSources_SearchListSource_SuspendCollectionChangedEvent" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.SuspendCollectionChangedEvent">
SuspendCollectionChangedEvent
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/SearchListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool SuspendCollectionChangedEvent { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_ListSources_SearchListSource_Dispose_" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.Dispose*"></a>
<h3 id="EchoHub_Client_UI_ListSources_SearchListSource_Dispose" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.Dispose">
Dispose()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/SearchListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Dispose()</code></pre>
</div>
<a id="EchoHub_Client_UI_ListSources_SearchListSource_Filter_" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.Filter*"></a>
<h3 id="EchoHub_Client_UI_ListSources_SearchListSource_Filter_System_String_" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.Filter(System.String)">
Filter(string)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/SearchListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Filter(string query)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>query</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_SearchListSource_GetItem_" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.GetItem*"></a>
<h3 id="EchoHub_Client_UI_ListSources_SearchListSource_GetItem_System_Int32_" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.GetItem(System.Int32)">
GetItem(int)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/SearchListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public SearchResult? GetItem(int index)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>index</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="EchoHub.Client.UI.Dialogs.SearchResult.html">SearchResult</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_SearchListSource_IsMarked_" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.IsMarked*"></a>
<h3 id="EchoHub_Client_UI_ListSources_SearchListSource_IsMarked_System_Int32_" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.IsMarked(System.Int32)">
IsMarked(int)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/SearchListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsMarked(int item)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>item</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_SearchListSource_Render_" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.Render*"></a>
<h3 id="EchoHub_Client_UI_ListSources_SearchListSource_Render_Terminal_Gui_Views_ListView_System_Boolean_System_Int32_System_Int32_System_Int32_System_Int32_System_Int32_" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.Render(Terminal.Gui.Views.ListView,System.Boolean,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)">
Render(ListView, bool, int, int, int, int, int)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/SearchListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Render(ListView listView, bool selected, int item, int col, int row, int width, int viewportX = 0)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>listView</code> <span class="xref">ListView</span></dt>
<dd></dd>
<dt><code>selected</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>item</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>col</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>row</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>width</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>viewportX</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_SearchListSource_SetMark_" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.SetMark*"></a>
<h3 id="EchoHub_Client_UI_ListSources_SearchListSource_SetMark_System_Int32_System_Boolean_" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.SetMark(System.Int32,System.Boolean)">
SetMark(int, bool)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/SearchListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void SetMark(int item, bool value)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>item</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>value</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_SearchListSource_ToList_" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.ToList*"></a>
<h3 id="EchoHub_Client_UI_ListSources_SearchListSource_ToList" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.ToList">
ToList()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/SearchListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public IList ToList()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">IList</span></dt>
<dd></dd>
</dl>
<h2 class="section" id="events">Events
</h2>
<h3 id="EchoHub_Client_UI_ListSources_SearchListSource_CollectionChanged" data-uid="EchoHub.Client.UI.ListSources.SearchListSource.CollectionChanged">
CollectionChanged
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/SearchListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public event NotifyCollectionChangedEventHandler? CollectionChanged</code></pre>
</div>
<h4 class="section">Event Type</h4>
<dl class="parameters">
<dt><span class="xref">NotifyCollectionChangedEventHandler</span></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/SearchListSource.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,585 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class UserListSource | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class UserListSource | EchoHub Documentation ">
<meta name="description" content="Custom list data source for the online users panel with per-user nickname colors.">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/new/master/apiSpec/new?filename=EchoHub_Client_UI_ListSources_UserListSource.md&amp;value=---%0Auid%3A%20EchoHub.Client.UI.ListSources.UserListSource%0Asummary%3A%20&#39;*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax&#39;%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.ListSources.UserListSource">
<h1 id="EchoHub_Client_UI_ListSources_UserListSource" data-uid="EchoHub.Client.UI.ListSources.UserListSource" class="text-break">
Class UserListSource <a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/UserListSource.cs"><i class="bi bi-code-slash"></i></a>
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="EchoHub.html">EchoHub</a>.<a class="xref" href="EchoHub.Client.html">Client</a>.<a class="xref" href="EchoHub.Client.UI.html">UI</a>.<a class="xref" href="EchoHub.Client.UI.ListSources.html">ListSources</a></dd></dl>
<dl><dt>Assembly</dt><dd>EchoHub.Client.dll</dd></dl>
</div>
<div class="markdown summary"><p>Custom list data source for the online users panel with per-user nickname colors.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class UserListSource : IListDataSource, IDisposable</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">UserListSource</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><span class="xref">IListDataSource</span></div>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.idisposable">IDisposable</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="EchoHub_Client_UI_ListSources_UserListSource__ctor_" data-uid="EchoHub.Client.UI.ListSources.UserListSource.#ctor*"></a>
<h3 id="EchoHub_Client_UI_ListSources_UserListSource__ctor" data-uid="EchoHub.Client.UI.ListSources.UserListSource.#ctor">
UserListSource()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/UserListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public UserListSource()</code></pre>
</div>
<h2 class="section" id="properties">Properties
</h2>
<a id="EchoHub_Client_UI_ListSources_UserListSource_Count_" data-uid="EchoHub.Client.UI.ListSources.UserListSource.Count*"></a>
<h3 id="EchoHub_Client_UI_ListSources_UserListSource_Count" data-uid="EchoHub.Client.UI.ListSources.UserListSource.Count">
Count
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/UserListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int Count { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_UserListSource_MaxItemLength_" data-uid="EchoHub.Client.UI.ListSources.UserListSource.MaxItemLength*"></a>
<h3 id="EchoHub_Client_UI_ListSources_UserListSource_MaxItemLength" data-uid="EchoHub.Client.UI.ListSources.UserListSource.MaxItemLength">
MaxItemLength
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/UserListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int MaxItemLength { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_UserListSource_SuspendCollectionChangedEvent_" data-uid="EchoHub.Client.UI.ListSources.UserListSource.SuspendCollectionChangedEvent*"></a>
<h3 id="EchoHub_Client_UI_ListSources_UserListSource_SuspendCollectionChangedEvent" data-uid="EchoHub.Client.UI.ListSources.UserListSource.SuspendCollectionChangedEvent">
SuspendCollectionChangedEvent
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/UserListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool SuspendCollectionChangedEvent { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="EchoHub_Client_UI_ListSources_UserListSource_Dispose_" data-uid="EchoHub.Client.UI.ListSources.UserListSource.Dispose*"></a>
<h3 id="EchoHub_Client_UI_ListSources_UserListSource_Dispose" data-uid="EchoHub.Client.UI.ListSources.UserListSource.Dispose">
Dispose()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/UserListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Dispose()</code></pre>
</div>
<a id="EchoHub_Client_UI_ListSources_UserListSource_GetUsername_" data-uid="EchoHub.Client.UI.ListSources.UserListSource.GetUsername*"></a>
<h3 id="EchoHub_Client_UI_ListSources_UserListSource_GetUsername_System_Int32_" data-uid="EchoHub.Client.UI.ListSources.UserListSource.GetUsername(System.Int32)">
GetUsername(int)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/UserListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string? GetUsername(int index)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>index</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_UserListSource_IsMarked_" data-uid="EchoHub.Client.UI.ListSources.UserListSource.IsMarked*"></a>
<h3 id="EchoHub_Client_UI_ListSources_UserListSource_IsMarked_System_Int32_" data-uid="EchoHub.Client.UI.ListSources.UserListSource.IsMarked(System.Int32)">
IsMarked(int)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/UserListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsMarked(int item)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>item</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_UserListSource_Render_" data-uid="EchoHub.Client.UI.ListSources.UserListSource.Render*"></a>
<h3 id="EchoHub_Client_UI_ListSources_UserListSource_Render_Terminal_Gui_Views_ListView_System_Boolean_System_Int32_System_Int32_System_Int32_System_Int32_System_Int32_" data-uid="EchoHub.Client.UI.ListSources.UserListSource.Render(Terminal.Gui.Views.ListView,System.Boolean,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)">
Render(ListView, bool, int, int, int, int, int)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/UserListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Render(ListView listView, bool selected, int item, int col, int row, int width, int viewportX = 0)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>listView</code> <span class="xref">ListView</span></dt>
<dd></dd>
<dt><code>selected</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>item</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>col</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>row</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>width</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>viewportX</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_UserListSource_SetMark_" data-uid="EchoHub.Client.UI.ListSources.UserListSource.SetMark*"></a>
<h3 id="EchoHub_Client_UI_ListSources_UserListSource_SetMark_System_Int32_System_Boolean_" data-uid="EchoHub.Client.UI.ListSources.UserListSource.SetMark(System.Int32,System.Boolean)">
SetMark(int, bool)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/UserListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void SetMark(int item, bool value)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>item</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>value</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_UserListSource_ToList_" data-uid="EchoHub.Client.UI.ListSources.UserListSource.ToList*"></a>
<h3 id="EchoHub_Client_UI_ListSources_UserListSource_ToList" data-uid="EchoHub.Client.UI.ListSources.UserListSource.ToList">
ToList()
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/UserListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public IList ToList()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><span class="xref">IList</span></dt>
<dd></dd>
</dl>
<a id="EchoHub_Client_UI_ListSources_UserListSource_Update_" data-uid="EchoHub.Client.UI.ListSources.UserListSource.Update*"></a>
<h3 id="EchoHub_Client_UI_ListSources_UserListSource_Update_System_Collections_Generic_List_System_ValueTuple_System_String_System_Nullable_Terminal_Gui_Drawing_Attribute__System_String___" data-uid="EchoHub.Client.UI.ListSources.UserListSource.Update(System.Collections.Generic.List{System.ValueTuple{System.String,System.Nullable{Terminal.Gui.Drawing.Attribute},System.String}})">
Update(List&lt;(string Text, Attribute? NameColor, string Username)&gt;)
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/UserListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Update(List&lt;(string Text, Attribute? NameColor, string Username)&gt; users)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>users</code> <span class="xref">List</span>&lt;(<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.string,system.nullable-terminal.gui.drawing.attribute-,system.string-.text">Text</a>, <span class="xref">Attribute</span>? <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.string,system.nullable-terminal.gui.drawing.attribute-,system.string-.namecolor">NameColor</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.string,system.nullable-terminal.gui.drawing.attribute-,system.string-.username">Username</a>)&gt;</dt>
<dd></dd>
</dl>
<h2 class="section" id="events">Events
</h2>
<h3 id="EchoHub_Client_UI_ListSources_UserListSource_CollectionChanged" data-uid="EchoHub.Client.UI.ListSources.UserListSource.CollectionChanged">
CollectionChanged
<a class="header-action link-secondary" title="View source" href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/UserListSource.cs"><i class="bi bi-code-slash"></i></a>
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public event NotifyCollectionChangedEventHandler? CollectionChanged</code></pre>
</div>
<h4 class="section">Event Type</h4>
<dl class="parameters">
<dt><span class="xref">NotifyCollectionChangedEventHandler</span></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/src/EchoHub.Client/UI/ListSources/UserListSource.cs" class="edit-link">Edit this page</a>
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,138 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace EchoHub.Client.UI.ListSources | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace EchoHub.Client.UI.ListSources | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI.ListSources">
<h1 id="EchoHub_Client_UI_ListSources" data-uid="EchoHub.Client.UI.ListSources" class="text-break">Namespace EchoHub.Client.UI.ListSources</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.ListSources.ChannelListSource.html">ChannelListSource</a></dt>
<dd><p>Custom list data source for colored channel list rendering.
Active channel gets a &gt; indicator, unread channels are bright with a count badge.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.ListSources.SearchListSource.html">SearchListSource</a></dt>
<dd><p>List data source for the search dialog with filtering and colored rendering.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.ListSources.UserListSource.html">UserListSource</a></dt>
<dd><p>Custom list data source for the online users panel with per-user nickname colors.</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
File diff suppressed because it is too large Load Diff
-127
View File
@@ -1,127 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace EchoHub.Client.UI | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace EchoHub.Client.UI | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client.UI">
<h1 id="EchoHub_Client_UI" data-uid="EchoHub.Client.UI" class="text-break">Namespace EchoHub.Client.UI</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.UI.MainWindow.html">MainWindow</a></dt>
<dd><p>Main Terminal.Gui window for the EchoHub chat client.</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
-128
View File
@@ -1,128 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace EchoHub.Client | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace EchoHub.Client | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="EchoHub.Client">
<h1 id="EchoHub_Client" data-uid="EchoHub.Client" class="text-break">Namespace EchoHub.Client</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="EchoHub.Client.AppOrchestrator.html">AppOrchestrator</a></dt>
<dd><p>Central orchestrator for the EchoHub TUI client.
Wires UI events to service calls and connection events to UI updates.</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
-123
View File
@@ -1,123 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Core Articles | EchoHub Documentation </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Core Articles | EchoHub Documentation ">
<link rel="icon" href="../../images/hue_icon.svg">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="docfx:docurl" content="https://github.com/HueByte/EchoHub/blob/master/docs/#L1">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../images/hue_icon.svg" alt="EchoHub">
EchoHub
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="core-articles">Core Articles</h1>
<p>Articles related to the EchoHub.Core shared library.</p>
<h2 id="topics">Topics</h2>
<ul>
<li>Data models and DTOs</li>
<li>Contract interfaces (IChatService, IChannelService, IChatBroadcaster, IEchoHubClient)</li>
<li>Validation constants and shared rules</li>
</ul>
</article>
<div class="contribution d-print-none">
<a href="https://github.com/HueByte/EchoHub/blob/master/docs/#L1" class="edit-link">Edit this page</a>
</div>
<div class="next-article d-print-none border-top" id="nextArticle"></div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<div class='footer-custom'><div class='footer-inner'><span class='footer-brand'>EchoHub</span><span class='footer-sep'>&middot;</span><a href='https://github.com/HueByte/EchoHub'>GitHub</a><span class='footer-sep'>&middot;</span><a href='https://echohub.voidcube.cloud'>Website</a></div></div>
</div>
</div>
</footer>
</body>
</html>
-22
View File
@@ -1,22 +0,0 @@
<div id="sidetoggle">
<div>
<div class="sidefilter">
<form class="toc-filter">
<span class="glyphicon glyphicon-filter filter-icon"></span>
<span class="glyphicon glyphicon-remove clear-icon" id="toc_filter_clear"></span>
<input type="text" id="toc_filter_input" placeholder="Filter by title" onkeypress="if(event.keyCode==13) {return false;}">
</form>
</div>
<div class="sidetoc">
<div class="toc" id="toc">
<ul class="nav level1">
<li>
<a href="index.html" name="" title="Overview">Overview</a>
</li>
</ul>
</div>
</div>
</div>
</div>
-2
View File
@@ -1,2 +0,0 @@
{"order":100,"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"}]}

Some files were not shown because too many files have changed in this diff Show More