Merge tag 'v1.0.4' into v1.1.0

# Conflicts:
#	LANCommander.Launcher.Services/InstallService.cs
#	LANCommander.Launcher.Services/ProfileService.cs
#	LANCommander.Launcher/UI/Components/DownloadQueue.razor
#	LANCommander.Launcher/wwwroot/css/app.css.map
#	LANCommander.SDK/Enums/InstallStatus.cs
This commit is contained in:
Pat Hartl 2024-10-28 01:01:57 -05:00
commit 0821dfde5c
13 changed files with 40 additions and 12 deletions

View file

@ -60,7 +60,7 @@ namespace LANCommander.Launcher.Models
Title = game.Title;
Version = game.Archives.OrderByDescending(a => a.CreatedOn).FirstOrDefault()?.Version;
QueuedOn = DateTime.Now;
Status = GameInstallStatus.Idle;
Status = GameInstallStatus.Queued;
var cover = game.Media.FirstOrDefault(m => m.Type == SDK.Enums.MediaType.Cover);

View file

@ -173,7 +173,7 @@ namespace LANCommander.Launcher.Services
public async Task Next()
{
var currentItem = Queue.FirstOrDefault(i => i.State);
var currentItem = Queue.FirstOrDefault(i => i.Status == GameInstallStatus.Queued);
if (currentItem == null)
return;

View file

@ -40,9 +40,12 @@
}
.login-form-pane {
padding: 24px;
background: #000;
.ant-form {
padding: 24px;
}
.ant-form-item:last-child {
margin-bottom: 0;
}

View file

@ -256,7 +256,7 @@
SelectedItem.State = LibraryItemState.Installing;
break;
case SDK.Enums.GameInstallStatus.Idle:
case SDK.Enums.GameInstallStatus.Queued:
SelectedItem.State = LibraryItemState.Queued;
break;

View file

@ -131,7 +131,7 @@
{
if (!_MainLayout.Importing)
{
await _MainLayout.JS.InvokeVoidAsync("sendMessage", "import");
await _MainLayout.JS.InvokeVoidAsync("window.external.sendMessage", "import");
_MainLayout.Importing = true;
_MainLayout.StateHasChanged();

View file

@ -288,9 +288,11 @@ footer {
margin-bottom: 0;
}
.authentication-form .login-form-pane {
padding: 24px;
background: #000;
}
.authentication-form .login-form-pane .ant-form {
padding: 24px;
}
.authentication-form .login-form-pane .ant-form-item:last-child {
margin-bottom: 0;
}

View file

@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["../../Styles/app.scss","../../Styles/_appbar.scss","../../Styles/_window.scss","../../Styles/_scrollbar.scss","../../Styles/_layout.scss","../../Styles/_footer.scss","../../Styles/_button.scss","../../Styles/_radio.scss","../../Styles/_modal.scss","../../Styles/_collapse.scss","../../Styles/_list.scss","../../Styles/_authentication.scss","../../Styles/_library.scss","../../Styles/_download-queue.scss","../../Styles/_game-actions-dialog.scss","../../Styles/_install-dialog.scss","../../Styles/_checkbox-button-group.scss"],"names":[],"mappings":"AAAA;EACI;;;AAGJ;EACI;;;ACLJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;AAEA;EAEI;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;;;ACxCP;EACG;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;;AAEA;EACI;EACA;EACA;;AAGJ;EACI;;AAIR;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;;;AC1DP;EACG;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;ACzBJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;AAGA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;;AAIR;EACI;IACI;;;ACjDP;EACG;EACA;EACA;EACA;EACA;;;ACLH;AAAA;AAAA;EAGG;;;ACFA;AAAA;EAEI;;AAGJ;AAAA;EAEI;;;AAIR;EACI;;AAEA;AAAA;EAEI;;;ACfR;AAAA;EAEI;;AAEA;AAAA;EACI;;;AAKJ;EACI;;AAGJ;AAAA;EAEI,cAlBS;;AAqBb;AAAA;EAEI,eAvBS;;;ACCb;EACI;;;ACFR;EACI;EACA;EACA;;;AAIA;EACI;EACA;;AAEA;EAEI;;AAEA;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AC3BX;EACG;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAGJ;EACI;;AAEA;EACI;EACA;;AAGJ;EACI;;AAKZ;EACI;EACA;;AAEA;EACI;;;AC9CZ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAGA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;;AAEA;EACI;EACA;EACA;EACA;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAIR;EACI;;AAIR;EACI;EACA;;;AAKJ;EACI;;AAGJ;EACI;;AAEA;EACI;;;AAKZ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAIA;EACI;;AAEA;EACI;;AAGJ;EACI;;;AAMR;EACI;;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;;ACxNR;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAEA;AAAA;AAAA;EAGI;;AAGJ;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAIR;EACI;;AAGJ;EAEI;EACA;;AAGJ;EACI;EACA;;;AAIR;EACI;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAEA;EACI;;AAIR;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;;;ACzGJ;EACI;;AAGJ;EACI;;;ACHA;EACI;;AAGJ;EACI;;AAIR;EACI;;;ACbP;EACG;;AAEA;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA","file":"app.css"}
{"version":3,"sourceRoot":"","sources":["../../Styles/app.scss","../../Styles/_appbar.scss","../../Styles/_window.scss","../../Styles/_scrollbar.scss","../../Styles/_layout.scss","../../Styles/_footer.scss","../../Styles/_button.scss","../../Styles/_radio.scss","../../Styles/_modal.scss","../../Styles/_collapse.scss","../../Styles/_list.scss","../../Styles/_authentication.scss","../../Styles/_library.scss","../../Styles/_download-queue.scss","../../Styles/_game-actions-dialog.scss","../../Styles/_install-dialog.scss","../../Styles/_checkbox-button-group.scss"],"names":[],"mappings":"AAAA;EACI;;;AAGJ;EACI;;;ACLJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;AAEA;EAEI;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;;;ACxCP;EACG;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;;AAEA;EACI;EACA;EACA;;AAGJ;EACI;;AAIR;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;;;AC1DP;EACG;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;ACzBJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;AAGA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;;AAIR;EACI;IACI;;;ACjDP;EACG;EACA;EACA;EACA;EACA;;;ACLH;AAAA;AAAA;EAGG;;;ACFA;AAAA;EAEI;;AAGJ;AAAA;EAEI;;;AAIR;EACI;;AAEA;AAAA;EAEI;;;ACfR;AAAA;EAEI;;AAEA;AAAA;EACI;;;AAKJ;EACI;;AAGJ;AAAA;EAEI,cAlBS;;AAqBb;AAAA;EAEI,eAvBS;;;ACCb;EACI;;;ACFR;EACI;EACA;EACA;;;AAIA;EACI;EACA;;AAEA;EAEI;;AAEA;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AC3BX;EACG;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAGJ;EACI;;AAEA;EACI;EACA;;AAGJ;EACI;;AAKZ;EACI;;AAEA;EACI;;AAGJ;EACI;;;ACjDZ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAGA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAIA;EACI;;AAGJ;EACI;;AAIR;EACI;;AAEA;EACI;EACA;EACA;EACA;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAIR;EACI;;AAIR;EACI;EACA;;;AAKJ;EACI;;AAGJ;EACI;;AAEA;EACI;;;AAKZ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAIA;EACI;;AAEA;EACI;;AAGJ;EACI;;;AAMR;EACI;;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;;ACxNR;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAEA;AAAA;AAAA;EAGI;;AAGJ;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAIR;EACI;;AAGJ;EAEI;EACA;;AAGJ;EACI;EACA;;;AAIR;EACI;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAEA;EACI;;AAIR;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;;;ACzGJ;EACI;;AAGJ;EACI;;;ACHA;EACI;;AAGJ;EACI;;AAIR;EACI;;;ACbP;EACG;;AAEA;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA","file":"app.css"}

View file

@ -106,8 +106,7 @@ namespace LANCommander.SDK
BaseUrl = new Uri(baseUrl);
ApiClient = new RestClient(new RestClientOptions
{
BaseUrl = BaseUrl,
ThrowOnAnyError = true
BaseUrl = BaseUrl
});
}
}
@ -447,6 +446,20 @@ namespace LANCommander.SDK
Password = password
}));
if (response.ErrorException != null)
{
Logger?.LogError(response.ErrorException, "Registration failed for user {UserName}", username);
if (!String.IsNullOrWhiteSpace(response?.Data?.Message))
{
Logger?.LogError(response.Data.Message);
throw new Exception(response.Data.Message);
}
else
throw response.ErrorException;
}
switch (response.StatusCode)
{
case HttpStatusCode.OK:

View file

@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>1.0.0</Version>
<Version>1.0.3</Version>
<Authors>pathartl</Authors>
<Company>LANCommander</Company>
<Description>A .NET library for interacting with a LANCommander server</Description>

View file

@ -167,6 +167,10 @@ namespace LANCommander.SDK.Services
if (File.Exists(entryPath))
{
var destinationDirectory = Path.GetDirectoryName(entryPath);
Directory.CreateDirectory(destinationDirectory);
// Handle individual files that were saved as an entry in the path
if (File.Exists(destinationPath))
File.Delete(destinationPath);
@ -180,6 +184,10 @@ namespace LANCommander.SDK.Services
foreach (var entryFile in entryFiles)
{
var destinationDirectory = Path.GetDirectoryName(entryFile);
Directory.CreateDirectory(destinationDirectory);
var fileDestination = entryFile.Replace(entryPath, destinationPath);
if (File.Exists(fileDestination))

View file

@ -75,6 +75,7 @@ namespace LANCommander.Server.Services
if (manifestConsole != null)
{
serverConsole.ServerId = server.Id;
serverConsole.Name = manifestConsole.Name;
serverConsole.Type = (ServerConsoleType)(int)manifestConsole.Type;
serverConsole.Path = manifestConsole.Path;
@ -93,6 +94,7 @@ namespace LANCommander.Server.Services
server.ServerConsoles.Add(new ServerConsole()
{
Id = manifestConsole.Id,
ServerId = server.Id,
Name = manifestConsole.Name,
Type = (ServerConsoleType)(int)manifestConsole.Type,
Path = manifestConsole.Path,

View file

@ -77,7 +77,7 @@ namespace LANCommander.Server.Controllers
foreach (var file in files)
{
var entryName = file.Substring(server.WorkingDirectory.Length, file.Length - server.WorkingDirectory.Length).Replace(Path.DirectorySeparatorChar, '/');
var entryName = file.Substring(server.WorkingDirectory.Length, file.Length - server.WorkingDirectory.Length).Replace(Path.DirectorySeparatorChar, '/').TrimStart('/');
if (System.IO.File.Exists(file))
{

View file

@ -6,7 +6,7 @@
<UserSecretsId>aspnet-LANCommander-C1F79CFA-9767-4AD7-BD5A-2549F8328A2D</UserSecretsId>
<ApplicationIcon>wwwroot\favicon.ico</ApplicationIcon>
<TypeScriptModuleKind>none</TypeScriptModuleKind>
<Version>1.0.0</Version>
<Version>1.0.3</Version>
</PropertyGroup>
<PropertyGroup>