Merge pull request #2604 from wabbajack-tools/fo3-bsa-fix

Fix FO3 / FNV / Skyrim LE files with special characters in the path corrupting when being packed
This commit is contained in:
trawzified 2024-08-11 23:28:03 +02:00 committed by GitHub
commit ec36b8ab4a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 17 additions and 1 deletions

View File

@ -1,5 +1,11 @@
### Changelog ### Changelog
#### Version - 3.7.1.0 - ?
* Fixed file paths with special characters corrupting when packed into BSAs
* This issue only affected Fallout 3, Fallout NV and Skyrim LE
* Added logging to determine which downloaded files cannot be hashed
* This could occur in the downloading phase when installing a modlist when there are broken/corrupted files in the downloads folder
#### Version - 3.7.0.0 - 6/21/2024 #### Version - 3.7.0.0 - 6/21/2024
* Added Starfield support * Added Starfield support
* Note: Hashes were added earlier, but the earlier version was not fully compatible due to Wabbajack extracting the BA2 archives incorrectly. This has been fixed. * Note: Hashes were added earlier, but the earlier version was not fully compatible due to Wabbajack extracting the BA2 archives incorrectly. This has been fixed.

View File

@ -23,6 +23,7 @@ public static class BinaryHelperExtensions
return version switch return version switch
{ {
VersionType.TES3 => Encoding.ASCII, VersionType.TES3 => Encoding.ASCII,
VersionType.FO3 => Encoding.UTF8,
VersionType.SSE => Windows1252, VersionType.SSE => Windows1252,
_ => Encoding.UTF7 _ => Encoding.UTF7
}; };

View File

@ -247,7 +247,16 @@ public class StandardInstaller : AInstaller<StandardInstaller>
var metaFile = download.WithExtension(Ext.Meta); var metaFile = download.WithExtension(Ext.Meta);
var found = bySize[download.Size()]; var found = bySize[download.Size()];
var hash = await FileHashCache.FileHashCachedAsync(download, token); Hash hash = default;
try
{
hash = await FileHashCache.FileHashCachedAsync(download, token);
}
catch(Exception ex)
{
_logger.LogError($"Failed to get hash for file {download}!");
throw;
}
var archive = found.FirstOrDefault(f => f.Hash == hash); var archive = found.FirstOrDefault(f => f.Hash == hash);
IEnumerable<string> meta; IEnumerable<string> meta;