Skip to content

Commit

Permalink
Merge pull request #3 from asquared31415/master
Browse files Browse the repository at this point in the history
Better error handling
  • Loading branch information
skairunner authored Nov 25, 2019
2 parents 196ab77 + e76e032 commit 6308c81
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 29 deletions.
14 changes: 7 additions & 7 deletions kanimal-cli/Options.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace kanimal_cli
{
internal abstract class ProgramOptions
public abstract class ProgramOptions
{
[Option('v', "verbose", Required = false, HelpText = "Enable debug output.")]
public bool Verbose { get; set; }
Expand All @@ -15,21 +15,21 @@ internal abstract class ProgramOptions
public string OutputPath { get; set; } = "output";
}

internal abstract class ConversionOptions : ProgramOptions
public abstract class ConversionOptions : ProgramOptions
{
[Option('S', "strict", Required = false, HelpText = "When writing to scml, enabling this flag ")]
public bool Strict { get; set; }
}

[Verb("dump", HelpText = "Output a dump of the specified kanim.")]
internal class DumpOptions : ProgramOptions
public class DumpOptions : ProgramOptions
{
[Value(0)] public IEnumerable<string> Files { get; set; }
}

// For ones with Output and Input specifiers
[Verb("convert", HelpText = "Convert between formats.")]
internal class GenericOptions : ConversionOptions
public class GenericOptions : ConversionOptions
{
[Option('I', "input-format", Required = true, HelpText = "The input format, from [kanim, scml]")]
public string InputFormat { get; set; }
Expand All @@ -41,19 +41,19 @@ internal class GenericOptions : ConversionOptions
}

[Verb("scml", HelpText = "Convert kanim to scml. Convenience verb equivalent to 'convert -I kanim -O scml'.")]
internal class KanimToScmlOptions : ConversionOptions
public class KanimToScmlOptions : ConversionOptions
{
[Value(0)] public IEnumerable<string> Files { get; set; }
}

[Verb("kanim", HelpText = "Convert scml to kanim. Convenience verb equivalent to 'convert -I scml -O kanim'.")]
internal class ScmlToKanimOptions : ConversionOptions
public class ScmlToKanimOptions : ConversionOptions
{
[Value(0)] public string ScmlFile { get; set; }
}

[Verb("batch-convert", HelpText = "Given an Assets/ directory, attempt to batch convert kanim to scml.")]
internal class BatchConvertOptions : ConversionOptions
public class BatchConvertOptions : ConversionOptions
{
[Value(0)] public string AssetDirectory { get; set; }
}
Expand Down
76 changes: 54 additions & 22 deletions kanimal-cli/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,22 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.ExceptionServices;
using NLog;
using CommandLine;
using kanimal;
using NLog;
using NLog.Config;
using NLog.Filters;
using NLog.Fluent;
using NLog.Targets;

namespace kanimal_cli
{
internal class Program
public class Program
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();

private static LoggingConfiguration GetLoggerConfig(ProgramOptions o)
{
var config = new NLog.Config.LoggingConfiguration();
var targetConsole = new NLog.Targets.ConsoleTarget("logconsole");
targetConsole.Layout = "[${level}] ${message}";
var config = new LoggingConfiguration();
var targetConsole = new ConsoleTarget("logconsole") {Layout = "[${level}] ${message}"};

if (o.Verbose && o.Silent)
{
Expand All @@ -37,7 +34,7 @@ private static LoggingConfiguration GetLoggerConfig(ProgramOptions o)

return config;
}

private static void SetVerbosity(ProgramOptions o)
{
LogManager.Configuration = GetLoggerConfig(o);
Expand All @@ -59,8 +56,10 @@ private static void Convert(string inputFormat, string outputFormat, List<string
{
case "scml":
var scml = files.Find(path => path.EndsWith(".scml"));
var scmlreader = new ScmlReader(scml);
scmlreader.AllowMissingSprites = !opt.Strict;
var scmlreader = new ScmlReader(scml)
{
AllowMissingSprites = !opt.Strict
};
scmlreader.Read();
reader = scmlreader;
break;
Expand All @@ -69,6 +68,30 @@ private static void Convert(string inputFormat, string outputFormat, List<string
var build = files.Find(path => path.EndsWith("build.bytes"));
var anim = files.Find(path => path.EndsWith("anim.bytes"));

var fileNames = new[] {png, build, anim};

var nullCount = fileNames.Count(o => o == null);
if (nullCount > 0)
{
Logger.Fatal($"The following file{(nullCount > 1 ? "s were" : "was")} not specified:");
for (var i = 0; i < 3; ++i)
if (fileNames[i] == null)
switch (i)
{
case 0:
Logger.Fatal(" png");
break;
case 1:
Logger.Fatal(" build");
break;
case 2:
Logger.Fatal(" anim");
break;
}

Environment.Exit((int) ExitCodes.IncorrectArguments);
}

reader = new KanimReader(
new FileStream(build, FileMode.Open),
new FileStream(anim, FileMode.Open),
Expand All @@ -87,8 +110,10 @@ private static void Convert(string inputFormat, string outputFormat, List<string
switch (outputFormat)
{
case "scml":
var scmlWriter = new ScmlWriter(reader);
scmlWriter.FillMissingSprites = !opt.Strict;
var scmlWriter = new ScmlWriter(reader)
{
FillMissingSprites = !opt.Strict
};
scmlWriter.SaveToDir(Path.Join(opt.OutputPath));
break;
case "kanim":
Expand All @@ -106,7 +131,9 @@ private static void Convert(string inputFormat, string outputFormat, List<string

private static void Main(string[] args)
{
Parser.Default.ParseArguments<KanimToScmlOptions, ScmlToKanimOptions, GenericOptions, DumpOptions, BatchConvertOptions>(args)
Parser.Default
.ParseArguments<KanimToScmlOptions, ScmlToKanimOptions, GenericOptions, DumpOptions, BatchConvertOptions
>(args)
.WithParsed<KanimToScmlOptions>(o => Convert(
"kanim",
"scml",
Expand All @@ -133,15 +160,14 @@ private static void Main(string[] args)
.WithParsed<ScmlToKanimOptions>(o => Convert(
"scml",
"kanim",
new List<string> {o.ScmlFile},
o.ScmlFile == null ? new List<string>() : new List<string> {o.ScmlFile},
o))
.WithParsed<GenericOptions>(o => Convert(o.InputFormat, o.OutputFormat, o.Files.ToList(), o))
.WithParsed<BatchConvertOptions>(o =>
{
// Silence Info output from kanimal
var config = new LoggingConfiguration();
var target = new NLog.Targets.ConsoleTarget("logconsole");
target.Layout = "[${level}] ${message}";
var target = new ConsoleTarget("logconsole") {Layout = "[${level}] ${message}"};
var loggingRule1 = new LoggingRule("kanimal_cli.*", target);
loggingRule1.SetLoggingLevels(LogLevel.Info, LogLevel.Fatal);
config.LoggingRules.Add(loggingRule1);
Expand All @@ -153,12 +179,13 @@ private static void Main(string[] args)
if (!Directory.Exists(Path.Join(o.AssetDirectory, "Texture2D")))
{
Logger.Fatal($"The path \"{o.AssetDirectory}/Texture2D\" does not exist.");
Environment.Exit((int)ExitCodes.IncorrectArguments);
Environment.Exit((int) ExitCodes.IncorrectArguments);
}
if (!Directory.Exists(Path.Join(o.AssetDirectory, "TextAsset")))
{
Logger.Fatal($"The path \"{o.AssetDirectory}/TextAsset\" does not exist.");
Environment.Exit((int)ExitCodes.IncorrectArguments);
Environment.Exit((int) ExitCodes.IncorrectArguments);
}
foreach (var filepath in Directory.GetFiles(Path.Join(o.AssetDirectory, "Texture2D"), "*.png"))
Expand All @@ -170,24 +197,28 @@ private static void Main(string[] args)
Logger.Warn($"Skipping \"{filename}\" as it does not seem to be a valid anim.");
continue;
}
var png = new FileStream(filepath, FileMode.Open);
var animPath = Path.Join(o.AssetDirectory, "TextAsset", $"{basename}_anim.bytes");
var buildPath = Path.Join(o.AssetDirectory, "TextAsset", $"{basename}_build.bytes");
if (!File.Exists(animPath))
{
Logger.Warn($"Skipping \"{basename}\" because it does not have a corresponding anim.bytes file.");
Logger.Warn(
$"Skipping \"{basename}\" because it does not have a corresponding anim.bytes file.");
continue;
}
if (!File.Exists(buildPath))
{
Logger.Warn($"Skipping \"{basename}\" because it does not have a corresponding build.bytes file.");
Logger.Warn(
$"Skipping \"{basename}\" because it does not have a corresponding build.bytes file.");
continue;
}
var anim = new FileStream(animPath, FileMode.Open);
var build = new FileStream(buildPath, FileMode.Open);
var reader = new KanimReader(build, anim, png);
try
{
Expand All @@ -202,6 +233,7 @@ private static void Main(string[] args)
Logger.Error("Skipping.");
continue;
}
Logger.Info($"Exported \"{reader.BuildData.Name}\".");
}
});
Expand Down

0 comments on commit 6308c81

Please sign in to comment.