Commit graph

3644 commits

Author SHA1 Message Date
Pat Hartl
5b9b63cf09 Fix built output to .NET 10 2026-04-12 20:18:44 -05:00
Pat Hartl
b8cba6b024 Use observable collection for chat messages 2026-04-12 20:00:44 -05:00
Pat Hartl
415c804f7f Add missing method implementation 2026-04-12 20:00:18 -05:00
Pat Hartl
0ae9cb127b Merge branch 'main' of https://github.com/LANCommander/LANCommander 2026-04-12 19:59:56 -05:00
Pat Hartl
07ec314370 Fix .NET 10 build 2026-04-12 19:59:53 -05:00
Pat Hartl
c48bf31db1 Made allocation method on key nullable, added manual assign key dialog, reworked how the next available key is chosen 2026-04-12 19:58:47 -05:00
Pat Hartl
8fb5779070 Add migration for ratings 2026-04-12 19:55:43 -05:00
Pat Hartl
6013cd8cdf Fix download status message when downloading 2026-04-12 00:19:08 -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
063e8c0580
Merge pull request #400 from MasterMNB/main
Avalonia Launcher GameDetailView Back Button should now be more usable.
2026-04-11 01:40:48 -05:00
MasterMNB
2813e682dd Change of the background color to same color of title bar.
And class name to Glass.Dark, plus a fix in the ColorPalette.axaml.
2026-04-11 01:02:21 +02:00
MasterMNB
bd5b053a59 Avalonia Launcher GameDetailView Back Button should now be more usable. 2026-04-10 21:34:56 +02:00
Pat Hartl
7f801cde22 Bump CLI to 10.0 2026-04-10 02:22:47 -05:00
Pat Hartl
f9863043d1 Bump to .NET 10 2026-04-10 02:19:50 -05:00
Pat Hartl
afa20bee72 Merge branch 'avalonia-launcher' 2026-04-10 01:52:20 -05:00
Pat Hartl
c62a8f105d Nightly builds for Avalonia launcher 2026-04-10 01:01:38 -05:00
Pat Hartl
c9fb738a21 Update to .NET 10 2026-04-10 00:54:43 -05:00
Pat Hartl
0e612faf3e Include multiplayer modes in depot results 2026-04-09 21:50:58 -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
91a56c5d3b Fix uninstall -> reinstall not working correctly 2026-04-08 18:07:32 -05:00
Pat Hartl
3494c48cc0 Fix library button, default to library view 2026-04-08 17:56:13 -05:00
Pat Hartl
a90b45f2ee Make add to library button square 2026-04-08 17:55:50 -05:00
Pat Hartl
2f42ab7c76
Merge pull request #398 from akifreak/fix-game-archive-upload
Improve game archive upload
2026-04-07 23:42:07 -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
319b762fd7 Error message in server selection 2026-04-07 23:08:16 -05:00
Pat Hartl
5debc68697 Restyle detail view, move metadata to right side under cover 2026-04-07 23:07:51 -05:00
Pat Hartl
a6b0b1e90e Adjust contents of empty in download queue 2026-04-07 23:07:19 -05:00
Pat Hartl
bb08c56012 Style IconButton, remove library section of game details in favor of single button 2026-04-07 23:07:06 -05:00
Pat Hartl
b5b13a34c1 Style badge 2026-04-07 23:06:19 -05:00
Pat Hartl
5d2e271e59 Add IconButton control 2026-04-07 23:05:48 -05:00
Pat Hartl
777333c46b Make LC controls default namespace 2026-04-07 23:05:36 -05:00
Pat Hartl
ae0f67869c Fix clipping with carousel 2026-04-05 01:32:25 -05:00
Pat Hartl
6b61c28e39 Fix in library icons 2026-04-04 17:53:51 -05:00
Pat Hartl
fe307e4b7e Fix depot search layout 2026-04-04 17:53:41 -05:00
Pat Hartl
1a5c74aea4 Standardize class names 2026-04-04 17:53:26 -05:00
Pat Hartl
1fab7324f3 Fix alignment of carousel controls, styling 2026-04-04 17:52:52 -05:00
Pat Hartl
95f376f9b2 Fix icon color, rendering 2026-04-04 17:52:29 -05:00
akifreak
80bb5d59ee Replace var with const/let and remove unused variable in ChunkUploader
- var request and var response in Init() → const (never reassigned,
  var is function-scoped and hoisted which is undesirable in class methods)
- let formData in UploadChunk() → const (never reassigned)
- chunkResponse in UploadChunk() removed (assigned but never read)
- let start in GetChunks() → const (never reassigned)
- var percent in UpdateProgressBar() → const (never reassigned)
2026-04-04 15:05:06 +02:00
akifreak
7dbb1b7619 Remove unused UploadInitResponse import from ChunkUploader 2026-04-04 15:05:06 +02:00
akifreak
171c409ccc Pass correct archive ID to OnArchiveUploaded callback
Archive is the local form model used for version/changelog input.
On a new upload Archive.Id is Guid.Empty, so callers received an
empty GUID instead of the real database ID. Pass uploadedArchive.Id,
which is the record fetched from the database after the upload
completes.
2026-04-04 15:05:06 +02:00
akifreak
8254a212c3 Reset Uploading flag in finally block after Start()
If ChunkUploader.Start() threw a JS interop exception Uploading was
left as true permanently, disabling the Upload and Cancel buttons
for the rest of the session without any visible error. Using a
finally block ensures the flag is reset whether the call succeeds,
throws, or is cancelled.
2026-04-04 15:05:06 +02:00
akifreak
d61b8b2ae4 Fix FileMode.Append conflicting with explicit fs.Position seek
FileMode.Append forces all writes to the end of the file, making
fs.Position assignments ineffective. This works by accident on a
fresh sequential upload but will silently corrupt the file on any
retry, since chunks are re-sent from their original offset but land
at the current end instead. Use FileMode.OpenOrCreate so the seek
to chunk.Start is honoured.
2026-04-04 15:05:06 +02:00
akifreak
c37be528ca Require administrator authorization on upload endpoints
/api/Upload/Init and /api/Upload/Chunk had no authorization policy,
meaning any unauthenticated request could create archive database
records and write arbitrary data to server storage. Every other
endpoint group in the application requires authorization; apply
the same administrator role requirement here.
2026-04-04 15:05:06 +02:00
akifreak
4065232e61 Null-guard progress bar DOM elements in UpdateProgressBar
document.querySelector() can return null if the elements are not
yet in the DOM. Dereferencing null would throw inside the axios
onUploadProgress callback, which is caught by UploadChunk's catch
and re-thrown as a string - causing the whole upload to fail
silently with an undefined message.
2026-04-04 15:05:06 +02:00
akifreak
9882f14d04 Fix undefined error message when UploadChunk throws a string
UploadChunk throws a template literal string, not an Error object.
Accessing .message on a string primitive returns undefined, so
JSOnUploadError was always called with undefined and the server log
showed no useful detail. Use String(ex) as fallback so the message
is always populated.
2026-04-04 15:05:06 +02:00
akifreak
a439cf5638 Propagate init net failure instead of swallowing
The original catch block was simply swalloing errors instead of
propagating them upwards.
When the /api/Upload/Init request failed it set this.Key = null, logged
to the console, and returned normally. From the caller's perspective
Init() had succeeded.

Start() in the Blazor component then called Upload() immediately after,
which proceeded with this.Key = null. Every chunk was sent to the server
with a null key, the server returned 400 for each one, each UploadChunk
call threw, and the whole upload failed - but only after sending every
chunk, and only with the opaque "Error uploading chunk N/M" message
rather than anything pointing at the actual cause.

By removing the catch, an axios error in Init() propagates up through
the JS interop call InvokeVoidAsync("Init", ...) in Start(). That throws
a JSException in C#, Start() exits immediately before Upload() is ever
called, and the finally block resets Uploading so the UI recovers. The
user gets a failure where it actually happened.
2026-04-04 15:02:46 +02:00