Commit graph

48 commits

Author SHA1 Message Date
Pat Hartl
3f2b8e32d9 Add transfer speed chart to download queue items, arrange task list as timeline, restyle queue. 2026-04-22 01:54:07 -05:00
Pat Hartl
194f219e68 Add settings for notifications 2026-04-21 18:31:14 -05:00
Pat Hartl
692187b7e4 Add play/view in library buttons on completed downloads 2026-04-19 23:19:11 -05:00
Pat Hartl
538d6b4676 Fix download queue progress 2026-04-18 18:55:28 -05:00
Pat Hartl
eaaaf39b8d Refactor install process to use major/minor task queue
Tasks are broken down into major and minor tasks. Major tasks are like install game, redistributable, or tool. These are reported as individual tasks in the download queue. Minor tasks are running of a script, downloading saves, extracting/downloading, etc.
2026-04-17 22:24:47 -05:00
Pat Hartl
31dc9e4d3a Add verify files option to game dropdown 2026-04-17 20:35:44 -05:00
Pat Hartl
5a96d58b68 Update install status after install 2026-04-12 00:18:44 -05:00
Pat Hartl
ce85bf4531 Load manuals and actions after install 2026-04-12 00:18:26 -05:00
Pat Hartl
540e498ecc Fix filtering, hide installation status in action bar, add install status to download queue progress, reorganize detail view 2026-04-09 21:50:28 -05:00
Pat Hartl
3c17c4ac8d Adjust download progress positioning, fix icon 2026-04-08 18:08:06 -05:00
Pat Hartl
3494c48cc0 Fix library button, default to library view 2026-04-08 17:56:13 -05:00
Pat Hartl
354c92851a Fix server selection 2026-04-07 23:12:41 -05:00
Pat Hartl
caee4ca4e0 Separate views for library vs depot 2026-04-07 23:12:22 -05:00
Pat Hartl
0ab6ee5262 Basic chat window 2026-04-07 23:10:45 -05:00
Pat Hartl
422d4c041f Use discovered server address 2026-04-03 20:09:29 -05:00
Pat Hartl
83cf1389d1 Add new depot view with carousels for browsing 2026-04-03 19:28:31 -05:00
Pat Hartl
0f042f7cf9 Show grid image in inline image if exists 2026-04-03 19:26:10 -05:00
Pat Hartl
fd29bc0f01 Theme / UI tweaking, localization, notifications
- Started adding localization resources
- Implemented notifications using Notify.NET
- Reworked many control styling to use overall app theme instead of controlling them individually
- Adjusted display of play button in different states
- Fixed cover in download queue"
- Added play actions overlay
- Fixed grouped view reference to bitmap converter
2026-03-31 21:19:47 -05:00
Pat Hartl
f486b48c8d Split depot/library layouts to views, add advanced options to filter 2026-03-28 21:12:04 -05:00
Pat Hartl
fc1a1f1df3 Make install overlay full height/width 2026-03-28 21:10:56 -05:00
Pat Hartl
222492a24b Continue to tweak UI, add notifications, partial add gamepad support
- Add backgrounds for login / splash
- Fix logo to use uncut version
- Update titlebar icon
- WIP implementation of notifying on install complete/fail with cross-platform support
- WIP support for gamepads using SDL2
- Add lancommander:// protocol support for navigating to a specific game (currently used for notifications)
- WIP support for updating taskbar progress
- Don't show "in library" checkmark in library view
- Change back button text based on active view
- Adjust styling of download queue
- Add grouping by first letter + index control
- Change titlebar title based on view selected
- Adjust how titlebar overlaps main content
- Make chips clickable in game details
- Add overlay for game install options
- Add resizing to window
2026-03-28 16:59:33 -05:00
Pat Hartl
81a6a3a0fc Rework views / interactions
- Added a horizontal and list view for depot/library
- Games only show covers (with fallback cover)
- Added install addon / directory select dialog
- Fixed download queue
- Added footer somewhat matching Blazor launcher
- Temporarily removed sidebar
- Implemented custom window chrome
- Added profile button
- Reworked game details to better match Blazor launcher
- Added grouping by genre, collection, or first letter
2026-03-27 18:59:17 -04:00
Aaron Powell
025d12e1ca Show loading screen during login-to-shell transition
After login succeeds, switch to the splash view with a 'Loading library...'
message and progress bar before running ShellViewModel.InitializeAsync().
This gives immediate visual feedback instead of leaving the user staring
at the login screen wondering if the app has frozen.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-21 15:18:23 +11:00
Aaron Powell
73e310f349 Fix sidebar state issues on first login
- Initialize ShellViewModel fully before switching CurrentView in all paths
  (splash→shell, login→shell, offline→shell). Previously the UI rendered
  with uninitialized child ViewModels causing race conditions.
- Hide download queue panel entirely when no items (removes confusing
  'No active downloads' panel and empty header on first login)
- Collapsed download progress only shows when there's an active download

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-21 14:56:43 +11:00
Aaron Powell
a83528d743 Fix SDK API changes after merge from main
- Replace SDK.Client.Games with GameClient (resolved from DI directly)
- Rename ScriptClient methods to Game_ prefix: Game_RunInstallScriptAsync,
  Game_RunUninstallScriptAsync, Game_RunNameChangeScriptAsync,
  Game_RunKeyChangeScriptAsync

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-21 14:49:45 +11:00
Aaron Powell
c15801d064 Fix CanInstall property notification for IsInstalled/IsInstalling changes
Added NotifyPropertyChangedFor(nameof(CanInstall)) to IsInstalled and IsInstalling properties so the install button properly enables/disables when going online/offline
2026-01-23 16:05:53 +11:00
Aaron Powell
827629e68b Add offline mode support for Avalonia launcher
- Detect server unreachable at startup and enter offline mode if user was previously logged in
- Skip server import when offline, load library from local database only
- Add offline indicator bar in sidebar (orange warning with 'Go Online' button)
- Add manual 'Go Offline' button in sidebar footer
- Disable install button when offline (CanInstall property)
- Propagate offline state from ShellViewModel to Sidebar, GamesListViewModel, GameDetailViewModel, and GameActionBarViewModel
- TryGoOnlineAsync attempts to reconnect and re-authenticate when user clicks 'Go Online'
2026-01-23 16:00:15 +11:00
Aaron Powell
8d53430ff8 Add script debugging console for Avalonia launcher
- Create ScriptConsoleControl for displaying script output and interactive input
- Create PowerShellConsoleWindow to host the script console
- Wire up ScriptDebugger events to console control for real-time output
- Add debug scripts menu to GameActionBarView (visible when EnableScriptDebugging=true)
- Scripts run via SDK's ScriptClient and stay interactive after completion
- Fix MediaImporter.ExistsAsync to check database record instead of file existence
- Remove Iciclecreek.Avalonia.Terminal dependency, revert Avalonia to 11.2.3
2026-01-23 15:05:59 +11:00
Aaron Powell
73cd83c8bd Add PDF viewer for game manuals
- Create custom PdfViewerControl using PDFtoImage library
- Replace AvaloniaPdfViewer (had DynamicData version conflict) with PDFtoImage
- Add page navigation and zoom (DPI) controls to PDF viewer
- Update GameActionBarView with proper MenuFlyout bindings for manuals
- Add OpenFirstManualCommand property for safe binding to first manual
2026-01-23 12:04:38 +11:00
Aaron Powell
cd480ac2e3 fix: Fix In Library filter and add library indicator to depot games
- Changed IsInLibrary() to IsInLibraryAsync() which checks database directly
- The sync version was checking Items collection which may not be populated
- Added 📚 badge overlay on game covers for games in user's library
- Badge appears in top-right corner of cover image
2026-01-20 10:02:34 +11:00
Aaron Powell
a9020e4e4c feat: Add PDF manual viewer using AvaloniaPdfViewer
- Added AvaloniaPdfViewer NuGet package (0.0.2-pre) for PDF rendering
- Created ManualViewerWindow to display game manuals
- Created ManualViewerViewModel with title and file path binding
- Added ManualViewModel for managing manual items in the action bar
- Added LoadManuals() to GameActionBarViewModel to load available manuals
- Added manual button (📖) to GameActionBarView with dropdown for multiple manuals
- Manuals are detected from game media with MediaType.Manual
2026-01-20 09:48:42 +11:00
Aaron Powell
ad05fb2c1d fix: Update play stats on UI thread after game stops
- Use Dispatcher.UIThread to post property updates from timer callback
- Ensures PlayTime and LastPlayed update immediately when game closes
- Fixed thread synchronization for CheckRunningState and RefreshPlayStatsAsync
2026-01-20 09:40:23 +11:00
Aaron Powell
d6de9fb810 feat: Add SplitButton for multiple game actions and combined uninstall/remove
- Play button uses SplitButton when game has multiple actions
- Clicking dropdown shows all available actions to run
- Uninstall button combines with Remove from Library as dropdown option
- Added GameActionViewModel class to wrap actions with commands
- Added ShowSimplePlayButton computed property for visibility logic
2026-01-20 09:05:03 +11:00
Aaron Powell
5c07c103b6 refactor: Extract GameActionBar into separate component 2026-01-20 08:39:19 +11:00
Aaron Powell
b92f218adb fix: Refresh game UI after install completes, move download queue to sidebar 2026-01-20 08:19:36 +11:00
Aaron Powell
04c62b9e89 feat: Add game action bar with play/stop, stats, and file browsing 2026-01-19 22:23:09 +11:00
Aaron Powell
7f64550602 feat: Add splash screen on startup while checking connection 2026-01-19 22:15:02 +11:00
Aaron Powell
b45944ebab fix: Use async database check for IsInLibrary status 2026-01-19 22:12:18 +11:00
Aaron Powell
281bf14af3 feat: Add settings page with install directories, media, UI, and debug options 2026-01-19 18:34:33 +11:00
Aaron Powell
2a42da4ac0 refactor: Consolidate game action buttons and add uninstall 2026-01-19 18:23:12 +11:00
Aaron Powell
594c18cd91 feat: Add game installation with download queue panel 2026-01-19 18:10:56 +11:00
Aaron Powell
ac2ebeef29 feat: Add library management (add/remove game from library) 2026-01-19 17:55:32 +11:00
Aaron Powell
e3b3d0ab90 fix: Download cover images for all depot games, not just library games 2026-01-19 17:47:24 +11:00
Aaron Powell
b419e5971e fix: Download media for depot games when viewing details 2026-01-19 17:40:18 +11:00
Aaron Powell
53664e2751 feat: Add filtering and sorting to depot games list 2026-01-19 17:34:29 +11:00
Aaron Powell
e719ad25bc feat: Show game covers instead of icons in games list 2026-01-19 15:34:05 +11:00
Aaron Powell
7d51fbb6ad refactor: Extract UI components for better organization
- Create ViewModels/Components/ and Views/Components/ folders
- Extract LibrarySidebarView and LibrarySidebarViewModel from ShellView
- Move LibraryItemViewModel to Components folder
- Move GameItemViewModel to Components folder
- Create GameBannerView component (not yet integrated)
- Create PageHeaderView component (not yet integrated)
- Simplify ShellView to use LibrarySidebarView component
- Update GamesListView to reference Components namespace

This improves code organization and makes it easier to navigate
the codebase as the UI grows.
2026-01-19 14:55:27 +11:00
Aaron Powell
8cf2139ccf feat: Add Avalonia launcher PoC with cross-platform UI
- Create LANCommander.Launcher.Avalonia project using Avalonia MVVM
- Implement server selection, login, and game library views
- Add library sidebar showing user's games
- Add depot/games list view with game details
- Integrate with LANCommander.Launcher.Services for:
  - DepotService, LibraryService, ImportService, MediaService
  - SDK authentication and connection clients
- Fix async initialization pattern to prevent UI thread deadlocks
- Add ConfigureAwait(false) to ServerConfigurationProvider.RefreshAsync
- Add Microsoft.Extensions.Http package for HttpClient DI

Key features:
- Server discovery and connection
- User authentication with credential persistence
- Library import from server to local SQLite cache
- Game icons and banners via MediaService
- Navigation between library, depot, and game details
2026-01-19 14:24:49 +11:00