Commit graph

4059 commits

Author SHA1 Message Date
Pat Hartl
a8efeb97e6 Better error handling for SteamCMD integration, add timeouts
Some checks failed
LANCommander Release / prep (push) Failing after 26s
LANCommander Release / build_server_linux_arm64 (push) Has been skipped
LANCommander Release / build_server_linux_x64 (push) Has been skipped
LANCommander Release / build_server_osx_arm64 (push) Has been skipped
LANCommander Release / build_server_osx_x64 (push) Has been skipped
LANCommander Release / build_server_win_arm64 (push) Has been skipped
LANCommander Release / build_server_win_x64 (push) Has been skipped
LANCommander Release / build_launcher_linux_arm64 (push) Has been skipped
LANCommander Release / build_launcher_linux_x64 (push) Has been skipped
LANCommander Release / build_launcher_osx_arm64 (push) Has been skipped
LANCommander Release / build_launcher_osx_x64 (push) Has been skipped
LANCommander Release / build_launcher_win_arm64 (push) Has been skipped
LANCommander Release / build_launcher_win_x64 (push) Has been skipped
LANCommander Release / build_release (push) Has been skipped
2026-01-23 02:31:48 -06:00
Pat Hartl
8e42a00f5a Validate username is valid Steam username 2026-01-23 01:36:41 -06:00
Pat Hartl
f23cf3384f Auto detect SteamCMD path 2026-01-23 01:36:26 -06:00
Aaron Powell
e3b0fe11dd Add Avalonia launcher builds to PR workflow 2026-01-23 16:16:55 +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
e87548d125 Replace LANCommander text with logo in sidebar header 2026-01-23 15:40:08 +11:00
Aaron Powell
1cf0191c46 Add LANCommander logo to splash screen
- Add Avalonia.Svg.Skia package for SVG support
- Copy logo.svg to Assets folder
- Update SplashView to display logo instead of text
2026-01-23 15:39:08 +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
f075ba5e0a Merge remote-tracking branch 'upstream' into avalonia-launcher 2026-01-23 10:00:20 +11:00
Pat Hartl
5d16b7fc82 Documentation dispatcher 2026-01-20 21:12:44 -06:00
Pat Hartl
fd282f6dda Trim documentation 2026-01-20 21:12:18 -06:00
Pat Hartl
676898608b Add basic PowerShell module for SteamCMD 2026-01-20 00:48:13 -06:00
Pat Hartl
fec743a630 Copy static assets on publish 2026-01-20 00:47:47 -06:00
Pat Hartl
f0ec242bc5 Set default snippets directory if blank 2026-01-20 00:46:53 -06:00
Pat Hartl
e777a061ea Persist SteamCMD credentials 2026-01-20 00:32:39 -06:00
Pat Hartl
60bbd6c22c Add documentation for v2.0.0-rc2 2026-01-19 17:37:14 -06:00
Aaron Powell
74f8bf11e4 ci: Add GitHub Actions workflow for Avalonia Launcher build
- Created LANCommander.Launcher.Avalonia.yml workflow for building cross-platform
- Builds for Linux x64, macOS ARM64/x64, Windows x64
- Uses single-file publish with native libraries included
- Updated LANCommander.Release.yml to include Avalonia launcher builds
- Artifacts are included in release draft
2026-01-20 10:08:26 +11:00
Pat Hartl
3936c58ff7 Show logo instead of auth form when loading on startup
Some checks failed
LANCommander Release / prep (push) Failing after 31s
LANCommander Release / build_server_linux_arm64 (push) Has been skipped
LANCommander Release / build_server_linux_x64 (push) Has been skipped
LANCommander Release / build_server_osx_arm64 (push) Has been skipped
LANCommander Release / build_server_osx_x64 (push) Has been skipped
LANCommander Release / build_server_win_arm64 (push) Has been skipped
LANCommander Release / build_server_win_x64 (push) Has been skipped
LANCommander Release / build_launcher_linux_arm64 (push) Has been skipped
LANCommander Release / build_launcher_linux_x64 (push) Has been skipped
LANCommander Release / build_launcher_osx_arm64 (push) Has been skipped
LANCommander Release / build_launcher_osx_x64 (push) Has been skipped
LANCommander Release / build_launcher_win_arm64 (push) Has been skipped
LANCommander Release / build_launcher_win_x64 (push) Has been skipped
LANCommander Release / build_release (push) Has been skipped
2026-01-19 17:04:28 -06: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
Pat Hartl
b33cc1fc54 Fix chat window opening 2026-01-19 16:54:31 -06:00
Aaron Powell
8d04aca485 chore: Add root Data folder to gitignore 2026-01-20 09:48:59 +11:00
Aaron Powell
5ce9230487 chore: Remove data files from tracking 2026-01-20 09:48:52 +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
2b840a05c1 chore: Add Avalonia data folder to gitignore 2026-01-20 09:05:28 +11:00
Aaron Powell
74ecaacd4a chore: Remove data files from tracking 2026-01-20 09:05:09 +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
eaffd30fb2 ui: Move action bar to top of game detail view 2026-01-20 08:44:39 +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
Pat Hartl
f7aedc9287 Fix adding game to library from game details 2026-01-19 14:52:40 -06: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
Pat Hartl
8955a87cb9 Fix calculation of width of game details drawer 2026-01-19 03:28:58 -06: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
52180edb31 feat: Change depot games to horizontal grid layout 2026-01-19 17:36:43 +11:00
Aaron Powell
53664e2751 feat: Add filtering and sorting to depot games list 2026-01-19 17:34:29 +11:00
Aaron Powell
f642ec5f2a fix: Add FilePathToBitmapConverter to load images without extensions 2026-01-19 16:42:15 +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
10068c9672 Merge branch 'main' into avalonia-launcher 2026-01-19 14:37:00 +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