Some minor fixes

This commit is contained in:
VaDiM 2024-03-05 23:42:35 +03:00
parent 045f6c0ff4
commit afdc81bca8
2 changed files with 22 additions and 34 deletions

View File

@ -145,8 +145,7 @@ namespace AssetStudio
switch (reader?.FileType) switch (reader?.FileType)
{ {
case FileType.AssetsFile: case FileType.AssetsFile:
LoadAssetsFile(reader); return LoadAssetsFile(reader);
break;
case FileType.BundleFile: case FileType.BundleFile:
return LoadBundleFile(reader); return LoadBundleFile(reader);
case FileType.WebFile: case FileType.WebFile:
@ -165,7 +164,7 @@ namespace AssetStudio
return true; return true;
} }
private void LoadAssetsFile(FileReader reader) private bool LoadAssetsFile(FileReader reader)
{ {
if (!assetsFileListHash.Contains(reader.FileName)) if (!assetsFileListHash.Contains(reader.FileName))
{ {
@ -173,6 +172,7 @@ namespace AssetStudio
try try
{ {
var assetsFile = new SerializedFile(reader, this); var assetsFile = new SerializedFile(reader, this);
var dirName = Path.GetDirectoryName(reader.FullPath);
CheckStrippedVersion(assetsFile); CheckStrippedVersion(assetsFile);
assetsFileList.Add(assetsFile); assetsFileList.Add(assetsFile);
assetsFileListHash.Add(assetsFile.fileName); assetsFileListHash.Add(assetsFile.fileName);
@ -183,12 +183,12 @@ namespace AssetStudio
if (!importFilesHash.Contains(sharedFileName)) if (!importFilesHash.Contains(sharedFileName))
{ {
var sharedFilePath = Path.Combine(Path.GetDirectoryName(reader.FullPath), sharedFileName); var sharedFilePath = Path.Combine(dirName, sharedFileName);
if (!noexistFiles.Contains(sharedFilePath)) if (!noexistFiles.Contains(sharedFilePath))
{ {
if (!File.Exists(sharedFilePath)) if (!File.Exists(sharedFilePath))
{ {
var findFiles = Directory.GetFiles(Path.GetDirectoryName(reader.FullPath), sharedFileName, SearchOption.AllDirectories); var findFiles = Directory.GetFiles(dirName, sharedFileName, SearchOption.AllDirectories);
if (findFiles.Length > 0) if (findFiles.Length > 0)
{ {
sharedFilePath = findFiles[0]; sharedFilePath = findFiles[0];
@ -211,10 +211,11 @@ namespace AssetStudio
{ {
Logger.Error(e.Message); Logger.Error(e.Message);
reader.Dispose(); reader.Dispose();
return false;
} }
catch (Exception e) catch (Exception e)
{ {
Logger.Warning($"Error while reading assets file {reader.FullPath}\r\n{e}"); Logger.Warning($"Failed to read assets file {reader.FullPath}\r\n{e}");
reader.Dispose(); reader.Dispose();
} }
} }
@ -223,9 +224,10 @@ namespace AssetStudio
Logger.Info($"Skipping {reader.FullPath}"); Logger.Info($"Skipping {reader.FullPath}");
reader.Dispose(); reader.Dispose();
} }
return true;
} }
private void LoadAssetsFromMemory(FileReader reader, string originalPath, string unityVersion = null) private bool LoadAssetsFromMemory(FileReader reader, string originalPath, string unityVersion = null)
{ {
if (!assetsFileListHash.Contains(reader.FileName)) if (!assetsFileListHash.Contains(reader.FileName))
{ {
@ -245,16 +247,20 @@ namespace AssetStudio
{ {
Logger.Error(e.Message); Logger.Error(e.Message);
resourceFileReaders.Add(reader.FileName, reader); resourceFileReaders.Add(reader.FileName, reader);
return false;
} }
catch (Exception e) catch (Exception e)
{ {
Logger.Warning($"Error while reading assets file {reader.FullPath} from {Path.GetFileName(originalPath)}\r\n{e}"); Logger.Warning($"Failed to read assets file {reader.FullPath} from {Path.GetFileName(originalPath)}\r\n{e}");
resourceFileReaders.Add(reader.FileName, reader); resourceFileReaders.Add(reader.FileName, reader);
} }
} }
else else
{
Logger.Info($"Skipping {originalPath} ({reader.FileName})"); Logger.Info($"Skipping {originalPath} ({reader.FileName})");
} }
return true;
}
private bool LoadBundleFile(FileReader reader, string originalPath = null) private bool LoadBundleFile(FileReader reader, string originalPath = null)
{ {
@ -268,7 +274,8 @@ namespace AssetStudio
var subReader = new FileReader(dummyPath, file.stream); var subReader = new FileReader(dummyPath, file.stream);
if (subReader.FileType == FileType.AssetsFile) if (subReader.FileType == FileType.AssetsFile)
{ {
LoadAssetsFromMemory(subReader, originalPath ?? reader.FullPath, bundleFile.m_Header.unityRevision); if (!LoadAssetsFromMemory(subReader, originalPath ?? reader.FullPath, bundleFile.m_Header.unityRevision))
return false;
} }
else if (!resourceFileReaders.ContainsKey(file.fileName)) else if (!resourceFileReaders.ContainsKey(file.fileName))
{ {

View File

@ -1,20 +1,22 @@
using Newtonsoft.Json.Serialization; using Newtonsoft.Json;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Collections.Specialized; using System.Collections.Specialized;
using System.Reflection;
namespace AssetStudio namespace AssetStudio
{ {
public class Object public class Object
{ {
[JsonIgnore]
public SerializedFile assetsFile; public SerializedFile assetsFile;
[JsonIgnore]
public ObjectReader reader; public ObjectReader reader;
public long m_PathID; public long m_PathID;
[JsonIgnore]
public int[] version; public int[] version;
protected BuildType buildType; protected BuildType buildType;
[JsonIgnore]
public BuildTarget platform; public BuildTarget platform;
public ClassIDType type; public ClassIDType type;
[JsonIgnore]
public SerializedType serializedType; public SerializedType serializedType;
public uint byteSize; public uint byteSize;
@ -66,7 +68,6 @@ namespace AssetStudio
{ {
Formatting = Formatting.Indented, Formatting = Formatting.Indented,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore, ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
ContractResolver = new IgnorePropertiesResolver()
}).Replace(" ", " "); }).Replace(" ", " ");
} }
catch catch
@ -99,25 +100,5 @@ namespace AssetStudio
reader.Reset(); reader.Reset();
return reader.ReadBytes((int)byteSize); return reader.ReadBytes((int)byteSize);
} }
private class IgnorePropertiesResolver : DefaultContractResolver
{
private static readonly HashSet<string> _ignoreProps;
static IgnorePropertiesResolver()
{
_ignoreProps = new HashSet<string> { "assetsFile", "reader", "version", "platform", "serializedType" };
}
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
if (_ignoreProps.Contains(property.PropertyName))
{
property.ShouldSerialize = _ => false;
}
return property;
}
}
} }
} }