Skip to content

Commit

Permalink
Merge pull request #60 from Gml-Launcher/1.0.3
Browse files Browse the repository at this point in the history
Update to v1.0.3
  • Loading branch information
GamerVII-NET authored Dec 31, 2024
2 parents 802038a + 118640b commit 7b66ae1
Show file tree
Hide file tree
Showing 8 changed files with 167 additions and 88 deletions.
2 changes: 1 addition & 1 deletion src/Gml.Client
Submodule Gml.Client updated 30 files
+10 −0 src/Gml.Client/GmlClientManager.cs
+10 −1 src/Gml.Client/Helpers/ApiProcedures.cs
+1 −7 src/Gml.Client/Helpers/ProcessHelper.cs
+1 −0 src/Gml.Client/IGmlClientManager.cs
+14 −1 src/Gml.Web.Api.Domains/Gml.Web.Api.Domains.csproj
+1 −0 src/Gml.Web.Api.Domains/Integrations/AuthResult.cs
+34 −0 src/Gml.Web.Api.Domains/Integrations/AzuriomAuthResult.cs
+82 −0 src/Gml.Web.Api.Domains/Integrations/UnicoreAuthResult.cs
+1 −2 src/Gml.Web.Api.Domains/Launcher/LauncherVersion.cs
+1 −0 src/Gml.Web.Api.Domains/Sentry/SentryBugs.cs
+3 −1 src/Gml.Web.Api.Dto/Files/FolderWhiteListDto.cs
+2 −2 src/Gml.Web.Api.Dto/Gml.Web.Api.Dto.csproj
+1 −0 src/Gml.Web.Api.Dto/Integration/IntegrationUpdateDto.cs
+1 −1 src/Gml.Web.Api.Dto/Launcher/LauncherBuildReadDto.cs
+1 −2 src/Gml.Web.Api.Dto/Minecraft/AuthLib/Textures.cs
+1 −0 src/Gml.Web.Api.Dto/Notifications/NotificationReadDto.cs
+12 −0 src/Gml.Web.Api.Dto/Player/AuthUserHistoryDto.cs
+10 −0 src/Gml.Web.Api.Dto/Player/ExtendedPlayerReadDto.cs
+1 −1 src/Gml.Web.Api.Dto/Player/PlayerReadDto.cs
+1 −1 src/Gml.Web.Api.Dto/Player/PlayerTextureDto.cs
+9 −0 src/Gml.Web.Api.Dto/Player/ServerJoinHistoryDto.cs
+1 −0 src/Gml.Web.Api.Dto/Profile/ProfileReadDto.cs
+4 −0 src/Gml.Web.Api.Dto/Profile/ProfileReadInfoDto.cs
+20 −10 src/Gml.Web.Api.Dto/Sentry/SentryEventDto.cs
+5 −2 src/Gml.Web.Api.Dto/Sentry/SentryEventLengthDto.cs
+1 −0 src/Gml.Web.Api.Dto/Sentry/SentryModulesDto.cs
+4 −1 src/Gml.Web.Api.Dto/Sentry/SentryOperationSystem.cs
+1 −3 src/Gml.Web.Api.Dto/Sentry/SentryReadDto.cs
+1 −1 src/Gml.Web.Api.Dto/Servers/CreateServerDto.cs
+1 −1 src/Gml.Web.Api.Dto/Texture/UrlServiceDto.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@ public static class ResourceKeysDictionary
public const string JavaNotFound = "JavaNotFound";
public const string IsDiskFull = "IsDiskFull";
// public const string Host = "https://gmlb.recloud.tech";
public const string Host = "http://10.0.10.128:5000";
public const string Host = "http://localhost:5000";
public const string FolderName = "GamerVIILacunerhV2";
}
5 changes: 4 additions & 1 deletion src/Gml.Launcher/Core/Extensions/ServiceLocator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,11 @@ private static GmlClientManager RegisterGmlManager(SystemService systemService,
var manager = new GmlClientManager(installationDirectory, ResourceKeysDictionary.Host,
ResourceKeysDictionary.FolderName,
systemService.GetOsType());

#if DEBUG
manager.SkipUpdate = true;
#else
manager.SkipUpdate = arguments.Contains("-skip-update");
#endif

Locator.CurrentMutable.RegisterConstant(manager, typeof(IGmlClientManager));

Expand Down
199 changes: 123 additions & 76 deletions src/Gml.Launcher/Core/Services/SkinService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,18 @@
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;


namespace Gml.Launcher.Core.Services;

public abstract class SkinViewer
{
public static byte[] GetHead(string skinPath, int size)
{
if (!File.Exists(skinPath))
{
return [];
}

using var inputImage = Image.Load(skinPath);

var scaleFactor = inputImage.Width / 64;
Expand Down Expand Up @@ -42,72 +48,78 @@ public static byte[] GetCloak(string cloakPath, int size)
return memoryStream.ToArray();
}

public static byte[] GetFront(Stream skinStream, int size) {
using var inputImage = Image.Load(skinStream);

var scaleFactor = inputImage.Width / 64;

var croppedHead = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(8 * scaleFactor, 8 * scaleFactor, 8 * scaleFactor, 8 * scaleFactor)));
var croppedBody = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(20 * scaleFactor, 20 * scaleFactor, 8 * scaleFactor, 12 * scaleFactor)));
var croppedLeg = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(4 * scaleFactor, 20 * scaleFactor, 4 * scaleFactor, 12 * scaleFactor)));
var croppedArm = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(44 * scaleFactor, 20 * scaleFactor, 4 * scaleFactor, 12 * scaleFactor)));

var secondLayerHead = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(40 * scaleFactor, 8 * scaleFactor, 8 * scaleFactor, 8 * scaleFactor)));
var secondLayerBody = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(20 * scaleFactor, 36 * scaleFactor, 8 * scaleFactor, 12 * scaleFactor)));
var secondLayerLeg = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(4 * scaleFactor, 52 * scaleFactor, 4 * scaleFactor, 12 * scaleFactor)));
var secondLayerArm = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(44 * scaleFactor, 52 * scaleFactor, 4 * scaleFactor, 12 * scaleFactor)));

var newWidth = croppedArm.Width * 2 + croppedBody.Width;
var newHeight = croppedHead.Height + croppedBody.Height + croppedArm.Height;

var combinedImage = new Image<Rgba32>(newWidth, newHeight);

combinedImage.Mutate(context => {
var headPosition = new Rectangle(croppedArm.Width, 0, croppedHead.Width, croppedHead.Height);
var bodyPosition = new Rectangle(headPosition.X, croppedHead.Height, croppedBody.Width, croppedBody.Height);

var leftArmPosition = new Rectangle(0, bodyPosition.Y, croppedArm.Width, croppedArm.Height);
var rightArmPosition = new Rectangle(leftArmPosition.Width + bodyPosition.Width, leftArmPosition.Y,
leftArmPosition.Width, leftArmPosition.Height);

var leftLegPosition = new Rectangle(leftArmPosition.Width, headPosition.Height + bodyPosition.Height,
croppedLeg.Width, croppedLeg.Height);
var rightLegPosition = new Rectangle(leftArmPosition.Width + leftLegPosition.Width,
headPosition.Height + bodyPosition.Height, leftLegPosition.Width, leftLegPosition.Height);

context.DrawImage(croppedHead, new Point(headPosition.X, headPosition.Y), 1f);
context.DrawImage(croppedBody, new Point(bodyPosition.X, bodyPosition.Y), 1f);
context.DrawImage(croppedArm, new Point(leftArmPosition.X, leftArmPosition.Y), 1f);
context.DrawImage(croppedArm, new Point(rightArmPosition.X, rightArmPosition.Y), 1f);
context.DrawImage(croppedLeg, new Point(leftLegPosition.X, leftLegPosition.Y), 1f);
context.DrawImage(croppedLeg, new Point(rightLegPosition.X, rightLegPosition.Y), 1f);

context.DrawImage(secondLayerHead, new Point(headPosition.X, headPosition.Y), 1f);
context.DrawImage(secondLayerBody, new Point(bodyPosition.X, bodyPosition.Y), 1f);
context.DrawImage(secondLayerArm, new Point(leftArmPosition.X, leftArmPosition.Y), 1f);
context.DrawImage(secondLayerArm, new Point(rightArmPosition.X, rightArmPosition.Y), 1f);
context.DrawImage(secondLayerLeg, new Point(leftLegPosition.X, leftLegPosition.Y), 1f);
context.DrawImage(secondLayerLeg, new Point(rightLegPosition.X, rightLegPosition.Y), 1f);
});

if (size != combinedImage.Width) {
var scaleSize = GetScaleSize(size, combinedImage.Width);
if (scaleSize != 0)
combinedImage = combinedImage.Clone(ctx => ctx.Resize(combinedImage.Width * scaleSize,
combinedImage.Height * scaleSize, KnownResamplers.Box));
}
public static byte[] GetFront(Stream skinStream, int size)
{
using var inputImage = Image.Load(skinStream);

var scaleFactor = inputImage.Width / 64;
var extendedSkin = inputImage.Height / scaleFactor >= 64;

var croppedHead = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(8 * scaleFactor, 8 * scaleFactor, 8 * scaleFactor, 8 * scaleFactor)));
var croppedBody = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(20 * scaleFactor, 20 * scaleFactor, 8 * scaleFactor, 12 * scaleFactor)));
var leftCroppedLeg = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(4 * scaleFactor, 20 * scaleFactor, 4 * scaleFactor, 12 * scaleFactor)));
var leftCroppedArm = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(44 * scaleFactor, 20 * scaleFactor, 4 * scaleFactor, 12 * scaleFactor)));

var rightCroppedLeg = extendedSkin
? inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(20 * scaleFactor, 52 * scaleFactor, 4 * scaleFactor, 12 * scaleFactor)))
: leftCroppedLeg.Clone(x => x.Flip(FlipMode.Horizontal));

var rightCroppedArm = extendedSkin
? inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(36 * scaleFactor, 52 * scaleFactor, 4 * scaleFactor, 12 * scaleFactor)))
: leftCroppedArm.Clone(x => x.Flip(FlipMode.Horizontal));

using var memoryStream = new MemoryStream();
combinedImage.Save(memoryStream, new PngEncoder());
return memoryStream.ToArray();
var secondLayerHead = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(40 * scaleFactor, 8 * scaleFactor, 8 * scaleFactor, 8 * scaleFactor)));

// var secondLayerArm = inputImage.Clone(ctx =>
// ctx.Crop(new Rectangle(44 * scaleFactor, 52 * scaleFactor, 4 * scaleFactor, 12 * scaleFactor)));

var newWidth = leftCroppedArm.Width * 2 + croppedBody.Width;
var newHeight = croppedHead.Height + croppedBody.Height + leftCroppedArm.Height;

var combinedImage = new Image<Rgba32>(newWidth, newHeight);

combinedImage.Mutate(context =>
{
var headPosition = new Rectangle(leftCroppedArm.Width, 0, croppedHead.Width, croppedHead.Height);
var bodyPosition = new Rectangle(headPosition.X, croppedHead.Height, croppedBody.Width, croppedBody.Height);

var leftArmPosition = new Rectangle(0, bodyPosition.Y, leftCroppedArm.Width, leftCroppedArm.Height);
var rightArmPosition = new Rectangle(leftArmPosition.Width + bodyPosition.Width, leftArmPosition.Y,
leftArmPosition.Width, leftArmPosition.Height);

var leftLegPosition = new Rectangle(leftArmPosition.Width, headPosition.Height + bodyPosition.Height,
leftCroppedLeg.Width, leftCroppedLeg.Height);
var rightLegPosition = new Rectangle(leftArmPosition.Width + leftLegPosition.Width,
headPosition.Height + bodyPosition.Height, leftLegPosition.Width, leftLegPosition.Height);

context.DrawImage(croppedHead, new Point(headPosition.X, headPosition.Y), 1f);
context.DrawImage(croppedBody, new Point(bodyPosition.X, bodyPosition.Y), 1f);
context.DrawImage(leftCroppedArm, new Point(leftArmPosition.X, leftArmPosition.Y), 1f);
context.DrawImage(rightCroppedArm, new Point(rightArmPosition.X, rightArmPosition.Y), 1f);
context.DrawImage(leftCroppedLeg, new Point(leftLegPosition.X, leftLegPosition.Y), 1f);
context.DrawImage(rightCroppedLeg, new Point(rightLegPosition.X, rightLegPosition.Y), 1f);

context.DrawImage(secondLayerHead, new Point(headPosition.X, headPosition.Y), 1f);
});

if (size != combinedImage.Width)
{
var scaleSize = GetScaleSize(size, combinedImage.Width);
if (scaleSize != 0)
combinedImage = combinedImage.Clone(ctx => ctx.Resize(combinedImage.Width * scaleSize,
combinedImage.Height * scaleSize, KnownResamplers.Box));
}

using var memoryStream = new MemoryStream();
combinedImage.Save(memoryStream, new PngEncoder());
return memoryStream.ToArray();
}


Expand All @@ -116,29 +128,56 @@ public static byte[] GetBack(string skinPath, int size, bool includeCloak = fals
using var inputImage = Image.Load(skinPath);
Image? cloakImage = /*includeCloak && user.HasCloak ? Image.Load(user.CloakFullPath) :*/ default;

var scaleFactor = inputImage.Width / 64;
var skinScaleFactor = inputImage.Width / 64;
var cloakScaleFactor = cloakImage?.Width >= 64 ? cloakImage.Width / 64 : 1;
var needSkinResizeToCloakSize = cloakScaleFactor > skinScaleFactor;
var extendedSkin = inputImage.Height / skinScaleFactor >= 64;

var croppedHead = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(24 * scaleFactor, 8 * scaleFactor, 8 * scaleFactor, 8 * scaleFactor)));
ctx.Crop(new Rectangle(24 * skinScaleFactor, 8 * skinScaleFactor, 8 * skinScaleFactor,
8 * skinScaleFactor)));

var croppedBody = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(32 * scaleFactor, 20 * scaleFactor, 8 * scaleFactor, 12 * scaleFactor)));
ctx.Crop(new Rectangle(32 * skinScaleFactor, 20 * skinScaleFactor, 8 * skinScaleFactor,
12 * skinScaleFactor)));

var croppedLeftLeg = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(12 * scaleFactor, 20 * scaleFactor, 4 * scaleFactor, 12 * scaleFactor)));
var croppedRightLeg = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(12 * skinScaleFactor, 20 * skinScaleFactor, 4 * skinScaleFactor,
12 * skinScaleFactor)));

var croppedRightLeg = croppedLeftLeg.Clone(x => x.Flip(FlipMode.Horizontal));
var croppedRightArm = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(52 * skinScaleFactor, 20 * skinScaleFactor, 4 * skinScaleFactor,
12 * skinScaleFactor)));

var croppedLeftArm = inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(52 * scaleFactor, 20 * scaleFactor, 4 * scaleFactor, 12 * scaleFactor)));
var croppedLeftLeg = extendedSkin
? inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(28 * skinScaleFactor, 52 * skinScaleFactor, 4 * skinScaleFactor,
12 * skinScaleFactor)))
: croppedRightLeg.Clone(x => x.Flip(FlipMode.Horizontal));

var croppedRightArm = croppedLeftArm.Clone(x => x.Flip(FlipMode.Horizontal));
var croppedLeftArm = extendedSkin
? inputImage.Clone(ctx =>
ctx.Crop(new Rectangle(44 * skinScaleFactor, 52 * skinScaleFactor, 4 * skinScaleFactor,
12 * skinScaleFactor)))
: croppedRightArm.Clone(x => x.Flip(FlipMode.Horizontal));

Image? croppedCloak = null;
// var croppedRightArm = croppedLeftArm.Clone(x => x.Flip(FlipMode.Horizontal));

if (needSkinResizeToCloakSize)
{
croppedHead = ResizeImage(croppedHead, cloakScaleFactor);
croppedBody = ResizeImage(croppedBody, cloakScaleFactor);
croppedLeftLeg = ResizeImage(croppedLeftLeg, cloakScaleFactor);
croppedRightLeg = ResizeImage(croppedRightLeg, cloakScaleFactor);
croppedLeftArm = ResizeImage(croppedLeftArm, cloakScaleFactor);
croppedRightArm = ResizeImage(croppedRightArm, cloakScaleFactor);
}

Image croppedCloak = null;

if (includeCloak && cloakImage != null)
croppedCloak = cloakImage.Clone(ctx =>
ctx.Crop(new Rectangle(0, 0, 11, 17)))
ctx.Crop(new Rectangle(0, 0, 11 * cloakScaleFactor, 17 * cloakScaleFactor)))
.Clone(ctx => ctx.Resize(croppedBody.Width, croppedBody.Height, KnownResamplers.Box));

var newWidth = croppedLeftArm.Width * 2 + croppedBody.Width;
Expand Down Expand Up @@ -203,6 +242,14 @@ public static byte[] GetBack(string skinPath, int size, bool includeCloak = fals
return resizeMemoryStream.ToArray();
}

private static Image ResizeImage(Image croppedHead, int cloakScaleFactor)
{
var newSize = croppedHead.Size;
croppedHead = croppedHead.Clone(ctx =>
ctx.Resize(newSize.Width * cloakScaleFactor, newSize.Height * cloakScaleFactor, KnownResamplers.Box));
return croppedHead;
}


private static MemoryStream ResizeImage(int size, Image inputImage, Image croppedImage)
{
Expand Down
12 changes: 6 additions & 6 deletions src/Gml.Launcher/Core/Services/SystemService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,13 @@ public string GetHwid()
return $"{cpuIdentifier}-{motherboardIdentifier}-{diskIdentifiers}";
}

public async Task LoadSystemData()
public Task LoadSystemData()
{
var refreshDriveListTask = Task.Run(() => _hardwareInfo.RefreshDriveList());
var refreshMotherboardListTask = Task.Run(() => _hardwareInfo.RefreshMotherboardList());
var refreshCpuListTask = Task.Run(() => _hardwareInfo.RefreshCPUList());

await Task.WhenAll(refreshDriveListTask, refreshMotherboardListTask, refreshCpuListTask);
return Task.WhenAll([
Task.Run(() => _hardwareInfo.RefreshDriveList()),
Task.Run(() => _hardwareInfo.RefreshMotherboardList()),
Task.Run(() => _hardwareInfo.RefreshCPUList())
]);
}

public bool IsDiskFull(IOException ioException)
Expand Down
1 change: 0 additions & 1 deletion src/Gml.Launcher/ViewModels/Pages/LoginPageViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,6 @@ private async Task OnAuth(CancellationToken arg)

if (authInfo.User.IsAuth)
{
await _gmlClientManager.OpenServerConnection(authInfo.User);
await _storageService.SetAsync(StorageConstants.User, authInfo.User);
_screen.Router.Navigate.Execute(new OverviewPageViewModel(_screen, authInfo.User, _onClosed));
return;
Expand Down
4 changes: 2 additions & 2 deletions src/Gml.Launcher/ViewModels/Pages/OverviewPageViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ private async void SaveSelectedServer(ProfileReadDto? profile)

private async Task OnLogout(CancellationToken arg)
{
await _storageService.SetAsync(StorageConstants.User, new AuthUser());
await _storageService.SetAsync<IUser?>(StorageConstants.User, null);
_mainViewModel.Router.Navigate.Execute(new LoginPageViewModel(_mainViewModel, _onClosed));
}

Expand Down Expand Up @@ -338,7 +338,7 @@ await _gmlManager.UpdateDiscordRpcState(

private async Task LoadProfiles()
{
var profilesData = await _gmlManager.GetProfiles();
var profilesData = await _gmlManager.GetProfiles(User.AccessToken);

ListViewModel.Profiles = new ObservableCollection<ProfileReadDto>(profilesData.Data ?? []);

Expand Down
30 changes: 30 additions & 0 deletions src/Gml.Launcher/Views/Components/GmlButton.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<controls:GmlButton Classes="TextIcon Primary" />
<controls:GmlButton Classes="TextIcon Secondary" />
<controls:GmlButton Classes="TextIcon Additional" />
<controls:GmlButton Classes="Text Additional" />
</StackPanel>
</Border>
</Design.PreviewWith>
Expand Down Expand Up @@ -89,6 +90,35 @@
</Setter>
</Style>

<Style Selector="controls|GmlButton.Text">

<Setter Property="CornerRadius" Value="50" />
<Setter Property="Height" Value="50" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Padding" Value="20, 0, 20 0" />

<Setter Property="Template">
<ControlTemplate>
<Button Name="PART_Button"
Background="{TemplateBinding Background}"
Command="{TemplateBinding Command}"
CommandParameter="{TemplateBinding CommandParameter}"
Padding="{TemplateBinding Padding}"
IsDefault="{TemplateBinding IsDefault}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding CornerRadius}"
Width="{TemplateBinding Width}"
Height="{TemplateBinding Height}">
<TextBlock Text="{TemplateBinding Text}"
VerticalAlignment="Center"
FontWeight="{TemplateBinding FontWeight}"
Foreground="{DynamicResource HeadlineColor}" />
</Button>
</ControlTemplate>
</Setter>
</Style>

<Style Selector="controls|GmlButton.Secondary">
<Setter Property="Background" Value="{StaticResource SecondaryColor}" />
</Style>
Expand Down

0 comments on commit 7b66ae1

Please sign in to comment.