Skip to content
This repository was archived by the owner on Jan 21, 2023. It is now read-only.

Commit 251854c

Browse files
authored
Adds exporter for list of assets to XML (#710)
1 parent 6f7b772 commit 251854c

File tree

3 files changed

+169
-16
lines changed

3 files changed

+169
-16
lines changed

AssetStudioGUI/AssetStudioGUIForm.Designer.cs

+49-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

AssetStudioGUI/AssetStudioGUIForm.cs

+62-14
Original file line numberDiff line numberDiff line change
@@ -1274,7 +1274,7 @@ private void copyToolStripMenuItem_Click(object sender, EventArgs e)
12741274

12751275
private void exportSelectedAssetsToolStripMenuItem_Click(object sender, EventArgs e)
12761276
{
1277-
ExportAssets(2, ExportType.Convert);
1277+
ExportAssets(ExportFilter.Selected, ExportType.Convert);
12781278
}
12791279

12801280
private void showOriginalFileToolStripMenuItem_Click(object sender, EventArgs e)
@@ -1398,47 +1398,62 @@ private void goToSceneHierarchyToolStripMenuItem_Click(object sender, EventArgs
13981398

13991399
private void exportAllAssetsMenuItem_Click(object sender, EventArgs e)
14001400
{
1401-
ExportAssets(1, ExportType.Convert);
1401+
ExportAssets(ExportFilter.All, ExportType.Convert);
14021402
}
14031403

14041404
private void exportSelectedAssetsMenuItem_Click(object sender, EventArgs e)
14051405
{
1406-
ExportAssets(2, ExportType.Convert);
1406+
ExportAssets(ExportFilter.Selected, ExportType.Convert);
14071407
}
14081408

14091409
private void exportFilteredAssetsMenuItem_Click(object sender, EventArgs e)
14101410
{
1411-
ExportAssets(3, ExportType.Convert);
1411+
ExportAssets(ExportFilter.Filtered, ExportType.Convert);
14121412
}
14131413

14141414
private void toolStripMenuItem4_Click(object sender, EventArgs e)
14151415
{
1416-
ExportAssets(1, ExportType.Raw);
1416+
ExportAssets(ExportFilter.All, ExportType.Raw);
14171417
}
14181418

14191419
private void toolStripMenuItem5_Click(object sender, EventArgs e)
14201420
{
1421-
ExportAssets(2, ExportType.Raw);
1421+
ExportAssets(ExportFilter.Selected, ExportType.Raw);
14221422
}
14231423

14241424
private void toolStripMenuItem6_Click(object sender, EventArgs e)
14251425
{
1426-
ExportAssets(3, ExportType.Raw);
1426+
ExportAssets(ExportFilter.Filtered, ExportType.Raw);
14271427
}
14281428

14291429
private void toolStripMenuItem7_Click(object sender, EventArgs e)
14301430
{
1431-
ExportAssets(1, ExportType.Dump);
1431+
ExportAssets(ExportFilter.All, ExportType.Dump);
14321432
}
14331433

14341434
private void toolStripMenuItem8_Click(object sender, EventArgs e)
14351435
{
1436-
ExportAssets(2, ExportType.Dump);
1436+
ExportAssets(ExportFilter.Selected, ExportType.Dump);
14371437
}
14381438

14391439
private void toolStripMenuItem9_Click(object sender, EventArgs e)
14401440
{
1441-
ExportAssets(3, ExportType.Dump);
1441+
ExportAssets(ExportFilter.Filtered, ExportType.Dump);
1442+
}
1443+
1444+
private void toolStripMenuItem11_Click(object sender, EventArgs e)
1445+
{
1446+
ExportAssetsList(ExportFilter.All);
1447+
}
1448+
1449+
private void toolStripMenuItem12_Click(object sender, EventArgs e)
1450+
{
1451+
ExportAssetsList(ExportFilter.Selected);
1452+
}
1453+
1454+
private void toolStripMenuItem13_Click(object sender, EventArgs e)
1455+
{
1456+
ExportAssetsList(ExportFilter.Filtered);
14421457
}
14431458

14441459
private void exportAllObjectssplitToolStripMenuItem1_Click(object sender, EventArgs e)
@@ -1501,7 +1516,7 @@ private void FilterAssetList()
15011516
assetListView.EndUpdate();
15021517
}
15031518

1504-
private void ExportAssets(int type, ExportType exportType)
1519+
private void ExportAssets(ExportFilter type, ExportType exportType)
15051520
{
15061521
if (exportableAssets.Count > 0)
15071522
{
@@ -1513,13 +1528,13 @@ private void ExportAssets(int type, ExportType exportType)
15131528
List<AssetItem> toExportAssets = null;
15141529
switch (type)
15151530
{
1516-
case 1: //All Assets
1531+
case ExportFilter.All:
15171532
toExportAssets = exportableAssets;
15181533
break;
1519-
case 2: //Selected Assets
1534+
case ExportFilter.Selected:
15201535
toExportAssets = GetSelectedAssets();
15211536
break;
1522-
case 3: //Filtered Assets
1537+
case ExportFilter.Filtered:
15231538
toExportAssets = visibleAssets;
15241539
break;
15251540
}
@@ -1532,6 +1547,39 @@ private void ExportAssets(int type, ExportType exportType)
15321547
}
15331548
}
15341549

1550+
private void ExportAssetsList(ExportFilter type)
1551+
{
1552+
// XXX: Only exporting as XML for now, but would JSON(/CSV/other) be useful too?
1553+
1554+
if (exportableAssets.Count > 0)
1555+
{
1556+
var saveFolderDialog = new OpenFolderDialog();
1557+
if (saveFolderDialog.ShowDialog(this) == DialogResult.OK)
1558+
{
1559+
timer.Stop();
1560+
1561+
List<AssetItem> toExportAssets = null;
1562+
switch (type)
1563+
{
1564+
case ExportFilter.All:
1565+
toExportAssets = exportableAssets;
1566+
break;
1567+
case ExportFilter.Selected:
1568+
toExportAssets = GetSelectedAssets();
1569+
break;
1570+
case ExportFilter.Filtered:
1571+
toExportAssets = visibleAssets;
1572+
break;
1573+
}
1574+
Studio.ExportAssetsList(saveFolderDialog.Folder, toExportAssets, ExportListType.XML);
1575+
}
1576+
}
1577+
else
1578+
{
1579+
StatusStripUpdate("No exportable assets loaded");
1580+
}
1581+
}
1582+
15351583
#region FMOD
15361584
private void FMODinit()
15371585
{

AssetStudioGUI/Studio.cs

+58-1
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
using System.Globalization;
66
using System.IO;
77
using System.Linq;
8-
using System.Text;
98
using System.Threading;
109
using System.Windows.Forms;
10+
using System.Xml.Linq;
1111
using static AssetStudioGUI.Exporter;
1212
using Object = AssetStudio.Object;
1313

@@ -20,6 +20,18 @@ internal enum ExportType
2020
Dump
2121
}
2222

23+
internal enum ExportFilter
24+
{
25+
All,
26+
Selected,
27+
Filtered
28+
}
29+
30+
internal enum ExportListType
31+
{
32+
XML
33+
}
34+
2335
internal static class Studio
2436
{
2537
public static AssetsManager assetsManager = new AssetsManager();
@@ -442,6 +454,51 @@ public static void ExportAssets(string savePath, List<AssetItem> toExportAssets,
442454
});
443455
}
444456

457+
public static void ExportAssetsList(string savePath, List<AssetItem> toExportAssets, ExportListType exportListType)
458+
{
459+
ThreadPool.QueueUserWorkItem(state =>
460+
{
461+
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
462+
463+
Progress.Reset();
464+
465+
switch (exportListType)
466+
{
467+
case ExportListType.XML:
468+
var filename = Path.Combine(savePath, "assets.xml");
469+
var doc = new XDocument(
470+
new XElement("Assets",
471+
new XAttribute("filename", filename),
472+
new XAttribute("createdAt", DateTime.UtcNow.ToString("s")),
473+
toExportAssets.Select(
474+
asset => new XElement("Asset",
475+
new XElement("Name", asset.Text),
476+
new XElement("Container", asset.Container),
477+
new XElement("Type", new XAttribute("id", (int)asset.Type), asset.TypeString),
478+
new XElement("PathID", asset.m_PathID),
479+
new XElement("Source", asset.SourceFile.fullName),
480+
new XElement("Size", asset.FullSize)
481+
)
482+
)
483+
)
484+
);
485+
486+
doc.Save(filename);
487+
488+
break;
489+
}
490+
491+
var statusText = $"Finished exporting asset list with {toExportAssets.Count()} items.";
492+
493+
StatusStripUpdate(statusText);
494+
495+
if (Properties.Settings.Default.openAfterExport && toExportAssets.Count() > 0)
496+
{
497+
Process.Start(savePath);
498+
}
499+
});
500+
}
501+
445502
public static void ExportSplitObjects(string savePath, TreeNodeCollection nodes)
446503
{
447504
ThreadPool.QueueUserWorkItem(state =>

0 commit comments

Comments
 (0)