Namespace EchoHub.Client.Services
Classes
- AsyncRunner
Eliminates repeated Task.Run/try/catch/app.Invoke(ShowError) boilerplate. Runs async work on a background thread and routes exceptions to the UI.
- ChannelPasswordRequiredException
Thrown when joining a channel fails because a password is required or incorrect. The UI catches this to prompt the user and retry.
- ClientEncryptionService
Client-side encryption service. Uses the same AES-256-GCM format as the server so messages are encrypted end-to-end between client and server.
- ClipboardFiles
Reads file paths that live on the OS clipboard as a file list (e.g. after copying a file in Explorer/Finder/Nautilus), which terminals do not paste as text. Lets Ctrl+V attach a copied file directly instead of requiring the user to paste a raw path.
- JoinOutcome
Result of joining a channel: decrypted history plus, for end-to-end encrypted channels, the key envelope needed to unlock the room content key.
- NativeFolderPicker
Opens the OS-native folder chooser (Windows Explorer, macOS Finder, Linux GTK/KDE) by shelling out, so the TUI doesn't need a GUI toolkit reference. Returns Unavailable when no native dialog can run, so callers can fall back to a configured path.
- OutgoingAttachment
One file to upload as part of a message. For end-to-end encrypted channels the stream is already ciphertext, DeclaredKind is set (image/audio/file), and EncryptedPreview holds the room-encrypted ASCII art for images. For normal channels only Stream and FileName are set.
- PathSetup
Ensures the application's directory is on the system PATH so users can run 'echohub' from any terminal session.
- RoomKeyStore
Holds room content keys for end-to-end encrypted channels: in-memory for the active session, persisted per-server in the client config (like saved sessions) so users don't retype the passphrase every launch. Keys never leave this machine.
- UpdateBackupService
Manages pre-update backups and rollback restoration for the auto-updater. Backup location: ~/.echohub/update-backup/