// This is dumb private ScanError FormatToConverter(MonsterFormat format, out IMonsterConverter converter) { if (format == MonsterFormat.TfsXml) { converter = new TfsXmlConverter(); } else if (format == MonsterFormat.PyOT) { converter = new PyOtConverter(); } else if (format == MonsterFormat.TfsRevScriptSys) { converter = new TfsRevScriptSysConverter(); } else if (format == MonsterFormat.TibiaWiki) { converter = new TibiaWikiConverter(); } else { converter = null; return(ScanError.InvalidMonsterFormat); } return(ScanError.Success); }
/// <summary> /// The main entry point for the application. /// </summary> static int Main(string[] args) { bool showHelp = false; string inputDirectory = ""; string outputDirectory = ""; MonsterFormat inputFormat = MonsterFormat.TfsXml; MonsterFormat outputFormat = MonsterFormat.TfsRevScriptSys; bool mirrorFolderStructure = true; var p = new OptionSet() { "Usage: OTMonsterConverter [OPTIONS]+", "", "Options:", { "i|inputDirectory=", "The directory of monster files to parse.", v => inputDirectory = v }, { "o|outputDirectory=", "The directory of monster files to parse.", v => outputDirectory = v }, { "inputFormat=", "The starting monster file format.", (MonsterFormat v) => inputFormat = v }, { "outputFormat=", "The format to converter the monster files to.", (MonsterFormat v) => outputFormat = v }, { "m|MirrorFolders", "True to mirror the folder structure of the input directory", v => mirrorFolderStructure = v != null }, { "h|help", "show this message and exit", v => showHelp = v != null }, }; List <string> extra; try { extra = p.Parse(args); } catch (OptionException e) { Console.Write("OTMonsterConverter: "); Console.WriteLine(e.Message); Console.WriteLine("Try `OTMonsterConverter --help' for more information."); return(-1); } if (showHelp) { p.WriteOptionDescriptions(Console.Out); return(0); } ConsoleWindow consoleWindow = new ConsoleWindow(inputDirectory, outputDirectory, inputFormat, outputFormat, mirrorFolderStructure); if (!consoleWindow.ValidateValues()) { return(-2); } if (!consoleWindow.ScanFiles()) { return(-3); } else { return(0); } }
public ConsoleWindow(string inputDirectory, string outputDirectory, MonsterFormat inputFormat, MonsterFormat outputFormat, bool mirrorFolderStructure) { this.inputDirectory = inputDirectory; this.outputDirectory = outputDirectory; this.inputFormat = inputFormat; this.outputFormat = outputFormat; this.mirrorFolderStructure = mirrorFolderStructure; fileProcessor = new MonsterFileProcessor(); }
private async void buttonConvert_Click(object sender, RoutedEventArgs e) { buttonConvert.IsEnabled = false; Cursor = Cursors.Wait; textBlockScanStatus.Text = "scanning..."; progressBarScan.Visibility = Visibility.Visible; taskBarProgressScan.ProgressState = System.Windows.Shell.TaskbarItemProgressState.Indeterminate; monsterListDataTable.Rows.Clear(); string inputDir = textBoxInputPath.Text; string outputDir = textBoxOutputPath.Text; MonsterFormat inputFormat = (MonsterFormat)GetMonsterFormatFromCombo(comboInputFormat); MonsterFormat outputFormat = (MonsterFormat)GetMonsterFormatFromCombo(comboOutputFormat); ScanError result = ScanError.Success; await Task.Run(() => { result = fileProcessor.ConvertMonsterFiles(inputDir, inputFormat, outputDir, outputFormat, true); }); switch (result) { case ScanError.Success: textBlockScanStatus.Text = "Completed successfully."; break; case ScanError.NoMonstersFound: textBlockScanStatus.Text = "Couldn't find any monster files."; break; case ScanError.InvalidMonsterDirectory: textBlockScanStatus.Text = "The selected project directory is invald."; break; case ScanError.InvalidMonsterFormat: textBlockScanStatus.Text = "The selected input or output monster format is invalid."; break; case ScanError.CouldNotCreateDirectory: textBlockScanStatus.Text = "Couldn't create destination directory."; break; case ScanError.DirectoriesMatch: textBlockScanStatus.Text = "Input and output directories can't be the same."; break; default: break; } taskBarProgressScan.ProgressState = System.Windows.Shell.TaskbarItemProgressState.None; progressBarScan.Visibility = Visibility.Hidden; Cursor = Cursors.Arrow; buttonConvert.IsEnabled = true; }
// Functions public ScanError ConvertMonsterFiles(string monsterDirectory, MonsterFormat inputFormat, string outputDirectory, MonsterFormat outputFormat, bool mirroredFolderStructure = false) { if ((inputFormat != MonsterFormat.TibiaWiki) && (!Directory.Exists(monsterDirectory))) { return(ScanError.InvalidMonsterDirectory); } if (!Directory.Exists(outputDirectory)) { try { Directory.CreateDirectory(outputDirectory); } catch (Exception) { return(ScanError.CouldNotCreateDirectory); } } if ((inputFormat != MonsterFormat.TibiaWiki) && (Path.GetFullPath(monsterDirectory) == Path.GetFullPath(outputDirectory))) { return(ScanError.DirectoriesMatch); } var result = FormatToConverter(inputFormat, out IMonsterConverter inputConverter); if (result != ScanError.Success) { return(result); } result = FormatToConverter(outputFormat, out IMonsterConverter outputConverter); if (result != ScanError.Success) { return(result); } string[] files; if (inputFormat == MonsterFormat.TibiaWiki) { files = GetWikiMonsters(); // TibiaWiki provides a flat list mirroredFolderStructure = false; } else { files = GetLocalFiles(monsterDirectory, inputConverter.FileExtRegEx); } if ((files != null) && (files.Length == 0)) { return(ScanError.NoMonstersFound); } bool copyOk; string destination; foreach (string file in files) { destination = FindExactFileDestination(monsterDirectory, outputDirectory, file, mirroredFolderStructure); copyOk = ProcessFile(file, inputConverter, outputConverter, destination); RaiseEvent(OnMonsterConverted, new FileProcessorEventArgs(file, destination, copyOk)); } return(ScanError.Success); }