From c92103857e90917634b29dbc0ded21bce3260ede Mon Sep 17 00:00:00 2001 From: Asval Date: Sat, 15 Feb 2025 23:47:33 +0100 Subject: [PATCH] fixed backups being case sensitive --- CUE4Parse | 2 +- FModel/ViewModels/BackupManagerViewModel.cs | 5 +++-- FModel/ViewModels/Commands/LoadCommand.cs | 14 +++++++++----- FModel/Views/Snooper/Renderer.cs | 9 +++++---- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/CUE4Parse b/CUE4Parse index 7c76fdc0..c36748f2 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit 7c76fdc0d3053170121bd5b6f0bb3b5fa28afbf6 +Subproject commit c36748f206d19eea45a6f2ea4cc82e56617d87c9 diff --git a/FModel/ViewModels/BackupManagerViewModel.cs b/FModel/ViewModels/BackupManagerViewModel.cs index 92a15561..0010b761 100644 --- a/FModel/ViewModels/BackupManagerViewModel.cs +++ b/FModel/ViewModels/BackupManagerViewModel.cs @@ -66,7 +66,7 @@ public class BackupManagerViewModel : ViewModel var backupFolder = Path.Combine(UserSettings.Default.OutputDirectory, "Backups"); var fileName = $"{_gameName}_{DateTime.Now:MM'_'dd'_'yyyy}.fbkp"; var fullPath = Path.Combine(backupFolder, fileName); - var func = new Func(x => !x.Path.EndsWith(".uexp") && !x.Path.EndsWith(".ubulk") && !x.Path.EndsWith(".uptnl")); + var func = new Func(x => !x.IsUePackagePayload); using var fileStream = new FileStream(fullPath, FileMode.Create); using var compressedStream = LZ4Stream.Encode(fileStream, LZ4Level.L00_FAST); @@ -80,7 +80,7 @@ public class BackupManagerViewModel : ViewModel if (!func(asset)) continue; writer.Write(asset.Size); writer.Write(asset.IsEncrypted); - writer.Write($"/{asset.Path.ToLower()}"); + writer.Write(asset.Path); } SaveCheck(fullPath, fileName, "created", "create"); @@ -121,6 +121,7 @@ public enum EBackupVersion : byte { BeforeVersionWasAdded = 0, Initial, + PerfectPath, // no more leading slash and ToLower LatestPlusOne, Latest = LatestPlusOne - 1 diff --git a/FModel/ViewModels/Commands/LoadCommand.cs b/FModel/ViewModels/Commands/LoadCommand.cs index 3e58b4e8..0a2683bb 100644 --- a/FModel/ViewModels/Commands/LoadCommand.cs +++ b/FModel/ViewModels/Commands/LoadCommand.cs @@ -182,7 +182,7 @@ public class LoadCommand : ViewModelCommand { case ELoadingMode.AllButNew: { - var paths = new HashSet(); + var paths = new HashSet(StringComparer.OrdinalIgnoreCase); var magic = archive.Read(); if (magic != BackupManagerViewModel.FBKP_MAGIC) { @@ -192,7 +192,7 @@ public class LoadCommand : ViewModelCommand cancellationToken.ThrowIfCancellationRequested(); archive.Position += 29; - paths.Add(archive.ReadString().ToLower()[1..]); + paths.Add(archive.ReadString()[1..]); archive.Position += 4; } } @@ -205,7 +205,10 @@ public class LoadCommand : ViewModelCommand cancellationToken.ThrowIfCancellationRequested(); archive.Position += sizeof(long) + sizeof(byte); - paths.Add(archive.ReadString().ToLower()[1..]); + var fullPath = archive.ReadString(); + if (version < EBackupVersion.PerfectPath) fullPath = fullPath[1..]; + + paths.Add(fullPath); } } @@ -233,7 +236,7 @@ public class LoadCommand : ViewModelCommand var uncompressedSize = archive.Read(); var isEncrypted = archive.ReadFlag(); archive.Position += 4; - var fullPath = archive.ReadString().ToLower()[1..]; + var fullPath = archive.ReadString()[1..]; archive.Position += 4; AddEntry(fullPath, uncompressedSize, isEncrypted, entries); @@ -249,7 +252,8 @@ public class LoadCommand : ViewModelCommand var uncompressedSize = archive.Read(); var isEncrypted = archive.ReadFlag(); - var fullPath = archive.ReadString().ToLower()[1..]; + var fullPath = archive.ReadString(); + if (version < EBackupVersion.PerfectPath) fullPath = fullPath[1..]; AddEntry(fullPath, uncompressedSize, isEncrypted, entries); } diff --git a/FModel/Views/Snooper/Renderer.cs b/FModel/Views/Snooper/Renderer.cs index 0dfceee2..f067336e 100644 --- a/FModel/Views/Snooper/Renderer.cs +++ b/FModel/Views/Snooper/Renderer.cs @@ -122,14 +122,15 @@ public class Renderer : IDisposable public void Animate(Lazy anim) => Animate(anim.Value, Options.SelectedModel); private void Animate(UObject anim, FGuid guid) { - if (anim is not UAnimSequenceBase animBase || !Options.TryGetModel(guid, out var m) || m is not SkeletalModel model) + if (anim is not UAnimSequenceBase animBase || !animBase.Skeleton.TryLoad(out USkeleton skeleton) || + !Options.TryGetModel(guid, out var m) || m is not SkeletalModel model) return; var animSet = animBase switch { - UAnimSequence animSequence when animSequence.Skeleton.TryLoad(out USkeleton skeleton) => skeleton.ConvertAnims(animSequence), - UAnimMontage animMontage when animMontage.Skeleton.TryLoad(out USkeleton skeleton) => skeleton.ConvertAnims(animMontage), - UAnimComposite animComposite when animComposite.Skeleton.TryLoad(out USkeleton skeleton) => skeleton.ConvertAnims(animComposite), + UAnimSequence animSequence => skeleton.ConvertAnims(animSequence), + UAnimMontage animMontage => skeleton.ConvertAnims(animMontage), + UAnimComposite animComposite => skeleton.ConvertAnims(animComposite), _ => throw new ArgumentException("Unknown animation type") };