bundle.js is built by webpack as an ES module (output.library.type:
'module'), ending with named exports such as:
export { Be as ChunkUploader, s as InfiniteScroll, ... }
All three inclusion sites (App.razor, _Layout.cshtml,
ScriptLoader.razor) loaded it via a plain <script> tag, which is for
classic scripts only and does not support the 'export' keyword.
Edge throws a visible SyntaxError and uploading does not work.
Fixed by adding type="module" to the bundle.js script tag in all three
locations.
- 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
- 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
- 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
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>
TokenProvider.GetToken() was reading solely from settingsProvider.CurrentValue,
which rebuilds from the YAML file after configRefresher.RefreshAsync() calls
OnReload(). Since the settings file save is debounced by 1 second, the rebuilt
Settings object has a null token.
Fix: TokenProvider now keeps a local _cachedToken field that is set immediately
during SetToken() and used as the primary source in GetToken(), falling back
to the settings provider only for tokens loaded from disk (e.g., app restart
with stored credentials).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
ApiRequestBuilder.UseAuthenticationToken() was reading the token eagerly
at construction time (line 22 initializer). After login, configRefresher.RefreshAsync()
calls OnReload() which invalidates the IOptionsMonitor cache. The next
CurrentValue access creates a new Settings from the YAML file, which hasn't
been persisted yet (1-second debounce), so the token is null.
Fix: read the token lazily from tokenProvider at the point of use instead
of capturing it at construction time. Remove the now-unused _token field.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- 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>