Table of Contents

v0.2.10

Follow-up patch release for v0.2.9 addressing auto-updater regressions, adding a command palette, infinite-scroll message history, and input polish.

New Features

  • Command palette — press Ctrl+K from the message input (or anywhere in the main window) to open a searchable dialog for navigating channels and triggering app actions (connect, disconnect, logout, profile, status, create/delete channel, saved servers, toggle users panel, check for updates, quit). Fuzzy matches against both the label and the underlying key so typing ch surfaces channel actions alongside #channel entries
  • Scroll-to-load message history — scrolling to the top of a channel now fetches the next batch of older messages in the background (previously only the most recent 100 messages were available). Duplicate messages are filtered by ID, a per-channel guard prevents concurrent fetches, and the scroll position is preserved after the prepend so your reading position doesn't jump

Bug Fixes

  • Fix update progress dialog freezing / not repainting — progress callbacks now run on the UI thread so the download and extraction percentage actually updates while an update is in progress
  • Fix pre-update backup failing when a Serilog-held log file is locked — UpdateBackupService now enumerates files manually, skips the logs/ directory and .log files, and logs-and-continues on IOException/UnauthorizedAccessException instead of aborting the whole backup
  • Simplify update progress dispatch — remove redundant Application.Invoke wrappers around progress updates that are already called from the UI thread (introduced while fixing the freeze above)
  • Fix cursor position being reset to the start of the line when auto-completing commands in the CLI app — insertion point is now moved to the end of the completed text
  • Fix notification sounds crashing or being silently dropped when several arrive in quick succession — playback is now serialized through a semaphore that's held for the duration of each sound (using PlaybackFinished with a 10s safety timeout) and always released in finally, so back-to-back notifications queue up and play in order instead of racing the underlying audio player (fixes #20)
  • Fix client crashing on startup with No Serilog:Using configuration section is defined under single-file publish — pass ConfigurationReaderOptions with the Serilog.Sinks.File assembly explicitly so Serilog can resolve sinks without scanning the filesystem for .dlls (which don't exist in a bundled exe)

Refactoring

  • Move search-dialog dispatch out of MainWindow into AppOrchestratorMainWindow now just raises OnSearchRequested, keeping the view dumb and letting the orchestrator own navigation/action routing
  • ChatHub.GetChannelHistory and IChatService.GetChannelHistoryAsync gain an additional offset parameter for paginated history loading (defaults to 0 — existing callers are unaffected)
  • ValidationConstants.MaxHistoryCount raised from 100 to 200 so power users and paginated fetches can request larger batches; DefaultHistoryCount stays at 100