mirror of
https://github.com/jaquadro/NBTExplorer.git
synced 2025-01-09 09:26:25 +00:00
Fix failure accounting, add comments
This commit is contained in:
parent
4dfee8cfd6
commit
00e8edf453
2 changed files with 23 additions and 7 deletions
|
@ -56,6 +56,7 @@ namespace NBTUtil
|
|||
if (!string.IsNullOrEmpty(v))
|
||||
Values.Add(v);
|
||||
}},
|
||||
{ "delete", "Delete the NBT tag if found", v => Command = ConsoleCommand.DeleteValue },
|
||||
{ "help", "Print this help message", v => Command = ConsoleCommand.Help },
|
||||
{ "<>", v => {
|
||||
switch (_currentKey) {
|
||||
|
@ -65,7 +66,6 @@ namespace NBTUtil
|
|||
break;
|
||||
}
|
||||
}},
|
||||
{ "delete", "Delete the NBT tag if found", v => Command = ConsoleCommand.DeleteValue },
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -29,6 +29,8 @@ namespace NBTUtil
|
|||
|
||||
public bool Run (string[] args)
|
||||
{
|
||||
// Parse and validate command line arguments.
|
||||
|
||||
_options.Parse(args);
|
||||
|
||||
if (_options.Command == ConsoleCommand.Help)
|
||||
|
@ -48,6 +50,9 @@ namespace NBTUtil
|
|||
|
||||
var nodesToProcess = new List<DataNode>();
|
||||
|
||||
// Iterate over all nodes matching the provided Path and create a list of the ones that can be processed
|
||||
// using the provided ConsoleCommand.
|
||||
|
||||
foreach (var node in new NbtPathEnumerator(_options.Path))
|
||||
{
|
||||
if (op.CanProcess(node))
|
||||
|
@ -61,18 +66,29 @@ namespace NBTUtil
|
|||
}
|
||||
}
|
||||
|
||||
// Iterate over all the processable nodes and process them.
|
||||
// Doing this separately from the CanProcess loop allows Process to make significant changes to the NBT
|
||||
// tree like node deletion.
|
||||
|
||||
foreach (var targetNode in nodesToProcess) {
|
||||
// Since Process may render targetNode inoperable, save targetNode.Root beforehand.
|
||||
var root = targetNode.Root;
|
||||
|
||||
if (!op.Process(targetNode, _options)) {
|
||||
if (op.Process(targetNode, _options))
|
||||
{
|
||||
// Now that processing has succeeded, save the changes.
|
||||
root.Save();
|
||||
Console.WriteLine(targetNode.NodePath + ": OK");
|
||||
successCount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Since processing failed, discard any changes that may have been made. This prevents other
|
||||
// iterations of this loop from saving them.
|
||||
targetNode.RefreshNode();
|
||||
Console.WriteLine(targetNode.NodePath + ": ERROR (apply)");
|
||||
failCount++;
|
||||
}
|
||||
|
||||
root.Save();
|
||||
|
||||
Console.WriteLine(targetNode.NodePath + ": OK");
|
||||
successCount++;
|
||||
}
|
||||
|
||||
Console.WriteLine("Operation complete. Nodes succeeded: {0} Nodes failed: {1}", successCount, failCount);
|
||||
|
|
Loading…
Reference in a new issue