Commit graph

482 commits

Author SHA1 Message Date
Pat Hartl
6dfc0906ac Refactor launcher library importing, manifests
Switched the library importing in the launcher to work based on a queue. As a new game is added to the queue, it should find any related data and also add it to the queue. This should result in an easier to maintain importer while reducing the load on the launcher's DAL. This may result in more RAM usage while importing. Local manifests have also been refactored to match manifests in import/export LCX files, removing the old manifest format. This is a large breaking change that will probably break existing game installations. A migration will probably have to be created.
2025-11-29 18:24:27 -06:00
Pat Hartl
a281ef473e Fix script debugging in launcher, fix cmdlet registration 2025-11-26 22:38:04 -06:00
Pat Hartl
ffa8ba2399 Add cmdlet to patch GameSpy games 2025-11-26 18:45:19 -06:00
Pat Hartl
e6c12b4809 Refactor script debugging
Instead of providing delegates to a ScriptClient singleton, script execution now relies on dependency injection for debugging. This can be handled by registering an implementation of IScriptDebugger. Multiple script debuggers are supported. These changes required the creation of a PowerShellScriptFactory to handle DI of the service provider to the script.

In the case of LANCommander, "debugging" scripts really just gives an opportunity for the application to break after a script's execution and provide a poor-man's pty. This could be expanded upon in the future to hook directly into PowerShell's debugging functionality, but would require a substantial refactor to script execution.
2025-11-26 01:09:52 -06:00
Pat Hartl
d8af75df26 Load all cmdlets defined in code 2025-11-25 23:58:43 -06:00
Pat Hartl
a549f06a85 Fix service registration in CLI. Create abstraction for external script runners. 2025-11-23 20:54:56 -06:00
Pat Hartl
edc3e706d1 Check if the game archive can stream before trying to download 2025-11-20 22:05:02 -06:00
Pat Hartl
17c45d9821 Fix token secret not loading from config 2025-11-20 01:21:23 -06:00
Pat Hartl
88686383db Unwrap settings config builder extensions 2025-11-19 19:52:36 -06:00
Pat Hartl
256b46e823 Fix storage of authentication token 2025-11-19 00:36:03 -06:00
Pat Hartl
b0025daea0 Prefer IOptions, fix setting duplication bug 2025-11-17 18:01:53 -06:00
Pat Hartl
add770b227 Refactor Settings
Settings for the server are now combined with the settings from the SDK. This introduces a large breaking change and a migration should be created. This refactor utilizes .NET Configuration and the Options pattern. This will allow for the overriding of any setting using envionment variables. It also means that Settings.yml can be used to override any .NET configuration. A SettingsProvider implementation was created, and any updating of settings was changed from SettingsService.SaveSettings() to SettingsProvider.Update(s => { ... })
2025-11-16 12:31:25 -06:00
Pat Hartl
9ad5021d9e Implement RPC keepalive method as Task 2025-11-13 21:04:13 -06:00
Pat Hartl
4535d9891a Add chat read status, badges to avatars, avatars for groups 2025-11-12 18:26:25 -06:00
Pat Hartl
ad058e87d7 Add method for getting users 2025-11-11 01:10:29 -06:00
Pat Hartl
37eebfde9c Add hub method to get stripped list of users 2025-11-10 18:06:55 -06:00
Pat Hartl
acb91f8484 Fix login/logout UX
- Moves authentication back to a /Authenticate page route
- Flatten the namespaces of page components
- Implement top-level layouts as windows
- Move handling of redirecting to /Authenticate with component inside of an AuthenticatedLayout
- Use individiual injected services instead of SDK.Client
- Wipe out tokens on logout
- Process logout even if server can't be reached
2025-11-07 20:19:13 -06:00
Pat Hartl
8f89f6f816 Avoid null address throwing exception 2025-11-07 00:25:53 -06:00
Pat Hartl
5a9606bf71 Fix redistributable not installing if no archives exist 2025-11-05 18:59:02 -06:00
Pat Hartl
a92c7be6ec Enhance chat list
- Added SafeAvatar component for retrieving user avatars with fallback to initials
- Added a title/name for chat threads
- Moved chat input to a separate component
2025-11-03 23:27:05 -06:00
Pat Hartl
7a562cdb10 Fix authentication limbo in launcher 2025-11-03 23:24:47 -06:00
Pat Hartl
e98d4d449a Auth with RPC, simplify chat delegates, load threads and implement sending messages 2025-10-28 22:21:16 -05:00
Pat Hartl
d25003481c Avoid exception stream progress update 2025-10-26 17:05:24 -05:00
Pat Hartl
ede0e814a5 Change how windows are created. Refactor SignalR client to be named subscriber. Call ChatClient static methods on response from SignalR chat client. Fix dependency loop with chat. 2025-10-25 22:00:50 -05:00
Pat Hartl
d85e716bbb Add cancel install to launcher
Fixes #293
2025-10-15 21:26:40 -05:00
Pat Hartl
c4217d7b41 Refactor HTTP streaming
Greatly reduces the amount of memory usage when streaming from the server by:
1. Shedding use of an internal MemoryStream
2. Using HttpCompletionOption.ResponseHeadersRead to start reading the stream without loading all of the HttpContent into memory
2025-10-09 02:16:20 -05:00
Pat Hartl
36761bede7 Fix configuration getting wiped on start 2025-10-08 20:45:57 -05:00
Pat Hartl
41f9191745 Register server configuration source refresher 2025-10-08 19:53:05 -05:00
Pat Hartl
14f8bfc372 Simplify settings write, increase debounce 2025-10-08 19:52:37 -05:00
Pat Hartl
cf73dca217 Increase debug logging 2025-10-08 19:51:44 -05:00
Pat Hartl
694b8b9842 Use SettingsProvider when getting any settings
SettingsProvider uses IOptionsMonitor to maintain the current value of settings. This gets updates on YML file changes and since it's a single instance (instead of injecting IOptions<Settings>), consumers always have the latest values.
2025-10-06 20:29:34 -05:00
Pat Hartl
14e789beae Fix loaded server config breaking local config 2025-10-06 19:25:42 -05:00
Pat Hartl
2b30158764 Implement debounce to avoid thrashing disk on settings update 2025-10-06 19:25:24 -05:00
Pat Hartl
3783dac472 Reload config on change 2025-10-06 19:24:18 -05:00
Pat Hartl
4968481460 Standardize YAML serializers 2025-10-06 19:23:49 -05:00
Pat Hartl
c6bcb7e920 Refactor KeepAliveService to rely on IConnectionClient 2025-10-05 19:30:59 -05:00
Pat Hartl
f5cdea1afc Handle connection state based on SignalR connection state 2025-10-05 17:52:37 -05:00
Pat Hartl
382a270b03 Simplify connection state management 2025-10-05 17:13:47 -05:00
Pat Hartl
0466fd38bd Use SettingsProvider 2025-10-02 20:07:44 -05:00
Pat Hartl
ab73e9c4e0 Rework SettingsProvider 2025-10-02 19:41:47 -05:00
Pat Hartl
4cbf672bb1 Fix auth, API response deserialization 2025-10-01 18:45:30 -05:00
Pat Hartl
d21a7dfc0d Store server address as string in Settings.yml 2025-09-29 19:51:16 -05:00
Pat Hartl
5cab1f3618 Remove old SettingsService, replace with Options pattern 2025-09-29 19:49:09 -05:00
Pat Hartl
aaf65fcf09 Runnable launcher using new client 2025-09-27 16:39:54 -05:00
Pat Hartl
9050722890 Grab settings via authenticated API 2025-09-26 00:51:25 -05:00
Pat Hartl
7f99fb481c Use Options pattern, 2025-09-26 00:51:02 -05:00
Pat Hartl
22df6677bc Remove settings interfaces 2025-09-26 00:33:59 -05:00
Pat Hartl
d24f72beed Merge branch 'main' into refactor/sdk-dependency-injection
# Conflicts:
#	LANCommander.SDK/LANCommander.SDK.csproj
2025-09-25 19:38:21 -05:00
Pat Hartl
6dd4475e49 Centrally manage packages 2025-09-25 19:11:37 -05:00
Pat Hartl
d875377f15 Rename SDK services -> clients, implement new configuration, use dependency injection for clients 2025-09-24 20:58:23 -05:00