Table of Contents

v0.2.6

Refactoring

  • Extracted ChatMessageManager from MainWindow — message storage, formatting, and mutation logic now in a dedicated class, reducing MainWindow complexity
  • Split ChatRenderer.cs (8 classes, 548 lines) into 7 individual files: ChatSegment, ChatLine, ChatListSource, ChannelListSource, UserListSource, ChatColors, ColorHelper, RenderHelpers
  • Extracted ConnectionManager from AppOrchestrator — connection lifecycle, authentication, SignalR event wiring, and channel tracking now in a dedicated service
  • Extracted AvatarHelper — deduplicated avatar upload logic previously duplicated in /avatar command and profile edit dialog
  • Consolidated ProfileEditDialog.ParseHexToTrueColor into shared ColorHelper.ParseHexToColor
  • Extracted UserSession — session state (Username, Status, StatusMessage) now in a dedicated class instead of scattered fields
  • Replaced 21 inline command handler lambdas with named HandleCmd* methods for improved readability
  • Extracted shared CleanupConnectionAsync to deduplicate disconnect/logout cleanup logic
  • Reorganized flat UI/ folder (19 files) into subfolders: Chat/, Dialogs/, ListSources/, Helpers/ with matching namespaces
  • Moved AsyncRunner from project root to Services/ with updated namespace
  • Renamed ColorHelperHexColorHelper to avoid namespace collision with Terminal.Gui's ColorHelper NuGet dependency
  • Moved hue_icon.ico to Client/Assets/, removed duplicate from Server (Server now references shared icon via relative path)
  • Add hex color parsing helper and implement custom list sources for channels and users
  • Add dialogs for connection, channel creation, profile editing, and status management

Infrastructure

  • Release workflow: use --notes-file instead of inline --notes interpolation to prevent shell expansion of special characters in commit messages