- [CLI] fix bug with containers.

This commit is contained in:
Razmoth
2024-02-20 20:48:10 +04:00
parent 462ac7b396
commit 8ba29c28e3

View File

@@ -235,7 +235,7 @@ namespace AssetStudio.CLI
{ {
foreach (var asset in assetsFile.Objects) foreach (var asset in assetsFile.Objects)
{ {
ProcessAssetData(asset, typeFilters, nameFilters, objectAssetItemDic, mihoyoBinDataNames, containers, ref i); ProcessAssetData(asset, objectAssetItemDic, mihoyoBinDataNames, containers, ref i);
} }
} }
foreach ((var pptr, var name) in mihoyoBinDataNames) foreach ((var pptr, var name) in mihoyoBinDataNames)
@@ -257,15 +257,7 @@ namespace AssetStudio.CLI
{ {
if (pptr.TryGet(out var obj)) if (pptr.TryGet(out var obj))
{ {
var item = objectAssetItemDic[obj]; objectAssetItemDic[obj].Container = container;
if (containerFilters.IsNullOrEmpty() || containerFilters.Any(x => x.IsMatch(container)))
{
item.Container = container;
}
else
{
exportableAssets.Remove(item);
}
} }
} }
containers.Clear(); containers.Clear();
@@ -274,9 +266,19 @@ namespace AssetStudio.CLI
UpdateContainers(); UpdateContainers();
} }
} }
var matches = exportableAssets.Where(x =>
{
var isMatchRegex = nameFilters.IsNullOrEmpty() || nameFilters.Any(y => y.IsMatch(x.Text));
var isFilteredType = typeFilters.IsNullOrEmpty() || typeFilters.Contains(x.Type);
var isContainerMatch = containerFilters.IsNullOrEmpty() || containerFilters.Any(y => y.IsMatch(x.Container));
return isMatchRegex && isFilteredType && isContainerMatch;
}).ToArray();
exportableAssets.Clear();
exportableAssets.AddRange(matches);
} }
public static void ProcessAssetData(Object asset, ClassIDType[] typeFilters, Regex[] nameFilters, Dictionary<Object, AssetItem> objectAssetItemDic, List<(PPtr<Object>, string)> mihoyoBinDataNames, List<(PPtr<Object>, string)> containers, ref int i) public static void ProcessAssetData(Object asset, Dictionary<Object, AssetItem> objectAssetItemDic, List<(PPtr<Object>, string)> mihoyoBinDataNames, List<(PPtr<Object>, string)> containers, ref int i)
{ {
var assetItem = new AssetItem(asset); var assetItem = new AssetItem(asset);
objectAssetItemDic.Add(asset, assetItem); objectAssetItemDic.Add(asset, assetItem);
@@ -353,9 +355,7 @@ namespace AssetStudio.CLI
assetItem.Text = assetItem.TypeString + assetItem.UniqueID; assetItem.Text = assetItem.TypeString + assetItem.UniqueID;
} }
var isMatchRegex = nameFilters.IsNullOrEmpty() || nameFilters.Any(x => x.IsMatch(assetItem.Text)); if (exportable)
var isFilteredType = typeFilters.IsNullOrEmpty() || typeFilters.Contains(assetItem.Type);
if (isMatchRegex && isFilteredType && exportable)
{ {
exportableAssets.Add(assetItem); exportableAssets.Add(assetItem);
} }