diff --git a/docs/api/client-articles/index.md b/docs/api/client-articles/index.md index 171da8f..504bade 100644 --- a/docs/api/client-articles/index.md +++ b/docs/api/client-articles/index.md @@ -5,7 +5,9 @@ Articles related to the EchoHub TUI client built with Terminal.Gui v2. ## Topics - Terminal.Gui v2 patterns and conventions -- Theme system and customization +- Theme system and customization (including transparent theme) - Command system reference -- Configuration management +- Configuration and session persistence +- Audio playback and file downloads +- Automatic update checking - [Notification sounds](../../articles/notification-sounds.md) diff --git a/docs/api/core-articles/index.md b/docs/api/core-articles/index.md index d8545b1..9eecf4c 100644 --- a/docs/api/core-articles/index.md +++ b/docs/api/core-articles/index.md @@ -5,5 +5,5 @@ Articles related to the EchoHub.Core shared library. ## Topics - Data models and DTOs -- Contract interfaces (IChatService, IChatBroadcaster, IEchoHubClient) +- Contract interfaces (IChatService, IChannelService, IChatBroadcaster, IEchoHubClient) - Validation constants and shared rules diff --git a/docs/api/index.md b/docs/api/index.md index b62904c..dc06867 100644 --- a/docs/api/index.md +++ b/docs/api/index.md @@ -10,11 +10,11 @@ Terminal.Gui v2 TUI application -- UI components, services, themes, and configur ### Core -Shared library -- DTOs, models, constants, and contracts (`IChatService`, `IChatBroadcaster`, `IEchoHubClient`). +Shared library -- DTOs, models, constants, and contracts (`IChatService`, `IChannelService`, `IChatBroadcaster`, `IEchoHubClient`). ### Server -ASP.NET Core server -- controllers, hubs, ChatService, SignalRBroadcaster, authentication, and data access. +ASP.NET Core server -- controllers, hubs, ChatService, ChannelService, SignalRBroadcaster, authentication, file cleanup, and data access. ### Server.Irc diff --git a/docs/api/server-articles/index.md b/docs/api/server-articles/index.md index 6cafdf8..9ceecae 100644 --- a/docs/api/server-articles/index.md +++ b/docs/api/server-articles/index.md @@ -8,6 +8,7 @@ Articles related to the EchoHub server built with ASP.NET Core. - SignalR hub and real-time messaging - IRC gateway and protocol bridging - ChatService and broadcaster pattern -- File upload and validation +- ChannelService and channel CRUD +- File upload, validation, and cleanup - Rate limiting configuration -- Database schema and migrations +- Database schema, migrations, and DataMigrationService diff --git a/docs/articles/architecture.md b/docs/articles/architecture.md index bc59652..7ab7075 100644 --- a/docs/articles/architecture.md +++ b/docs/articles/architecture.md @@ -22,7 +22,7 @@ Shared library containing: - **Models**: `User`, `Channel`, `Message`, `RefreshToken` - **DTOs**: Record types for API requests/responses -- **Contracts**: `IChatService` (protocol-agnostic chat operations), `IChatBroadcaster` (event fan-out interface), `IEchoHubClient` (SignalR client interface) +- **Contracts**: `IChatService` (protocol-agnostic chat operations), `IChannelService` (channel CRUD and membership), `IChatBroadcaster` (event fan-out interface), `IEchoHubClient` (SignalR client interface) - **Constants**: `ValidationConstants` (shared regex patterns), `HubConstants` ### EchoHub.Server @@ -33,7 +33,7 @@ ASP.NET Core web application: - **Hubs**: SignalR `ChatHub` -- thin adapter delegating to `IChatService` - **Auth**: JWT token service (15-min access tokens, 30-day refresh tokens) - **Data**: EF Core with SQLite -- **Services**: `ChatService` (core business logic), `SignalRBroadcaster`, presence tracking, file storage, image-to-ASCII conversion +- **Services**: `ChatService` (core business logic), `ChannelService` (channel CRUD and membership), `SignalRBroadcaster`, presence tracking, file storage, image-to-ASCII conversion, `FileCleanupService` (periodic removal of expired uploads), `DataMigrationService` (startup schema/data evolution) ### EchoHub.Server.Irc @@ -51,9 +51,9 @@ IRC users authenticate with existing EchoHub accounts via `PASS`/`NICK`/`USER` o Terminal.Gui v2 TUI application: - **UI**: Main window, dialogs, chat renderer with ANSI color support -- **Services**: API client with automatic token refresh, SignalR connection wrapper -- **Themes**: 13 built-in color themes -- **Config**: Client configuration management +- **Services**: API client with automatic token refresh, SignalR connection wrapper, audio playback (NetCoreAudio), automatic update checker (AlwaysUpToDate) +- **Themes**: 13 built-in color themes (including transparent theme with true terminal transparency) +- **Config**: Client configuration management with session persistence ("Remember Me" refresh tokens) ## Communication diff --git a/docs/changelog/index.md b/docs/changelog/index.md index f0a258b..f35822f 100644 --- a/docs/changelog/index.md +++ b/docs/changelog/index.md @@ -4,7 +4,7 @@ Release history for EchoHub. ## Releases -- [v0.2.5](v0.2.5.md) - Audio Playback, File Downloads & IRC Fixes +- [v0.2.5](v0.2.5.md) - Session Persistence, Auto-Updates, Audio & Transparent Theme - [v0.2.4](v0.2.4.md) - E2E Message Encryption - [v0.2.3](v0.2.3.md) - Moderation, Embeds & UI Overhaul - [v0.2.2](v0.2.2.md) - Startup & Shutdown Fixes diff --git a/docs/changelog/v0.2.5.md b/docs/changelog/v0.2.5.md index 22aa5b2..b4f3793 100644 --- a/docs/changelog/v0.2.5.md +++ b/docs/changelog/v0.2.5.md @@ -1,4 +1,4 @@ -# v0.2.5 - Audio Playback, File Downloads & IRC Fixes +# v0.2.5 - Session Persistence, Auto-Updates, Audio & Transparent Theme ## Features @@ -12,7 +12,7 @@ ### File Downloads -- Press Enter on a file message in the TUI client to download it to the local machine +- Press Enter on a file message in the TUI client to download and open it with the system default application - `ApiClient.DownloadFileAsync()` streams file downloads from the server - File and audio messages in the chat list now show colored indicators with interaction hints @@ -53,6 +53,27 @@ - New "Logout" menu item (Server menu): revokes the refresh token server-side and clears the saved session - Removed dead `SavedServer.Token` field (stored 15-min access token that was never read back) +### Automatic Update Checking + +- `UpdateChecker` rewritten to use the [AlwaysUpToDate](https://github.com/AuriRex/AlwaysUpToDate) library for self-updating +- Polls the EchoHub version manifest hourly (active only in `RELEASE` builds) +- `UpdateConfirmDialog` shows current vs. available version with Update/Cancel buttons +- `UpdateProgressDialog` displays real-time download progress bar +- Errors are logged via Serilog instead of being silently swallowed + +### Windows Installer + +- New Inno Setup script (`installer/Installer.iss`) to build a Windows installer +- Auto-reads product version from the built EXE +- User-level install by default (no admin required), with admin override option +- Creates desktop and quick-launch shortcuts (optional) +- Supports English and German languages + +### Application Icons + +- New `hue_icon` branding assets (ICO, PNG, SVG) in `assets/` +- Application icon set on both Client and Server projects + ### #general Channel Protection - `#general` channel is now auto-recreated if somehow missing (both in `GetChannels` endpoint and `JoinChannel` flow) @@ -82,6 +103,12 @@ ## Infrastructure - Audio MIME types in `FilesController` (mp3, wav, ogg, flac, aac, m4a, wma) +- CI workflows updated to handle Terminal.Gui submodule `nuget.config` workaround (`rm -f` step) +- Root `nuget.config` added for package source management +- Terminal.Gui formatting excluded from CI format checks +- Recursive submodule fetching enabled in CI workflows +- `Server:Admins` config array in `appsettings.example.json` for designating admin usernames +- `Storage:CleanupIntervalHours` and `Storage:RetentionDays` added to `appsettings.example.json` - `FakeChannelService` test helper added for IRC unit tests - Test suites: ChatLine, CommandHandler, DataMigrationService, FileValidationHelper, ImageToAsciiService, IrcMessageFormatter, JwtTokenService, LinkEmbedService - IRC abstraction layer test suite: IrcMessage parsing, IrcMessageFormatter, IrcClientConnection, IrcCommandHandler, IrcBroadcaster