Exemple #1
0
        private static void WriteRrdbTypeLine(int typeId, RdbType knownType)
        {
            Console.Write($"Type ID: {typeId}");
            if (!string.IsNullOrWhiteSpace(knownType?.Name))
            {
                Console.Write($"   Name: '{ knownType.Name }'");
            }

            if (!string.IsNullOrWhiteSpace(knownType?.OtherDesc))
            {
                Console.Write($"    {knownType.OtherDesc}");
            }
            Console.WriteLine();
        }
Exemple #2
0
        static void Main(string[] args)
        {
            var cmd = new CommandLineApplication();

            var listOption      = cmd.Option("-l | --list", "List known RDB Types.", CommandOptionType.NoValue);
            var listAllOption   = cmd.Option("-la | --listAll", "List all RDB types, including unknown or types not used by SWL.", CommandOptionType.NoValue);
            var pathOption      = cmd.Option("-i | --installDir <SWLPath>", "Path to SWL installation", CommandOptionType.SingleValue);
            var rdbOption       = cmd.Option("-d | --rdb <RDBNumberOrName>", "The name or ID of the RDB type to export.", CommandOptionType.SingleValue);
            var rawOption       = cmd.Option("-r | --raw", "Export raw .dat files instead of using the exporter type configured in RDBTypes.json.", CommandOptionType.NoValue);
            var dumpIndexOption = cmd.Option("-di | --dumpIndex", "Dump the RDB Index", CommandOptionType.NoValue);

            cmd.HelpOption("-? | -h | --help");

            cmd.OnExecute(() => {
                if (!pathOption.HasValue())
                {
                    Console.WriteLine("--installDir option is required.");
                    cmd.ShowHelp();
                    return(1);
                }

                if (listOption.HasValue() || listAllOption.HasValue())
                {
                    PrintIndex(pathOption.Value(), listAllOption.HasValue());
                    return(0);
                }

                if (dumpIndexOption.HasValue())
                {
                    DumpIndex(pathOption.Value());
                    return(0);
                }

                if (!rdbOption.HasValue())
                {
                    Console.WriteLine("--rdb or --list option is required.");
                    cmd.ShowHelp();
                    return(1);
                }

                var rdbType = Helpers.GetKnownRdbType(rdbOption.Value());
                if (rdbType == null)
                {
                    if (int.TryParse(rdbOption.Value(), out int rdbId))
                    {
                        Console.WriteLine($"Known RdbType with name or ID '{rdbOption.Value()}' not found. Exporting as raw .dat files.");
                        rdbType = new RdbType()
                        {
                            Id = rdbId
                        };
                    }
                    else
                    {
                        Console.Error.WriteLine("RdbType provided is not a know named type and is an invalid number.");
                        return(1);
                    }
                }

                var rdbIndex         = Helpers.GetRdbIndex(pathOption.Value());
                var exportParameters = new ExportParameters()
                {
                    RdbType         = rdbType,
                    Arguments       = rdbType.ExporterArguments,
                    SwlInstallDir   = pathOption.Value(),
                    RdbFileEntries  = rdbIndex.Where(i => i.Type == rdbType.Id).ToList(),
                    ExportDirectory = Directory.CreateDirectory(Path.Combine(Directory.GetCurrentDirectory(), string.IsNullOrWhiteSpace(rdbType.Name) ? rdbType.Id.ToString() : $"{rdbType.Id} - {rdbType.Name}")).FullName
                };

                if (exportParameters.RdbFileEntries.Count == 0)
                {
                    Console.Error.WriteLine($"No entries found for RDB Type Id '{rdbType.Id}'.");
                    return(1);
                }

                if (!string.IsNullOrWhiteSpace(rdbType.ExporterType) && !rawOption.HasValue())
                {
                    Console.WriteLine("Running export for type:");
                    WriteRrdbTypeLine(rdbType.Id, rdbType);
                    var type     = Type.GetType(rdbType.ExporterType);
                    var exporter = Activator.CreateInstance(type) as IExporter;
                    exporter.RunExport(exportParameters);
                }
                else
                {
                    Console.WriteLine($"Exporting type {exportParameters.RdbType.Id} as raw .dat files.");
                    exportParameters.Arguments = new List <string> {
                        ".dat"
                    };
                    new RawFileExporter().RunExport(exportParameters);
                }

                return(0);
            });

            cmd.Execute(args);
        }