// 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); }
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; IMonsterConverter inputFormat = (IMonsterConverter)comboInputFormat.SelectedItem; IMonsterConverter outputFormat = (IMonsterConverter)comboOutputFormat.SelectedItem; 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; }
public ConsoleWindow(string inputDirectory, string outputDirectory, string inputFormatName, string outputFormatName, bool mirrorFolderStructure) { this.inputDirectory = inputDirectory; this.outputDirectory = outputDirectory; this.mirrorFolderStructure = mirrorFolderStructure; PluginHelper plugins = PluginHelper.Instance.Task.Result; input = plugins.Converters.FirstOrDefault(mc => mc.ConverterName == inputFormatName); output = plugins.Converters.FirstOrDefault(mc => mc.ConverterName == outputFormatName); fileProcessor = new MonsterFileProcessor(); fileProcessor.OnMonsterConverted += FileProcessor_OnMonsterConverted; }
// Functions public ScanError ConvertMonsterFiles(string monsterDirectory, IMonsterConverter inputConverter, string outputDirectory, IMonsterConverter outputConverter, bool mirroredFolderStructure = false) { if ((inputConverter.FileSource == FileSource.LocalFiles) && (!Directory.Exists(monsterDirectory))) { return(ScanError.InvalidMonsterDirectory); } if (!Directory.Exists(outputDirectory)) { try { Directory.CreateDirectory(outputDirectory); } catch (Exception) { return(ScanError.CouldNotCreateDirectory); } } if ((inputConverter.FileSource == FileSource.LocalFiles) && (Path.GetFullPath(monsterDirectory) == Path.GetFullPath(outputDirectory))) { return(ScanError.DirectoriesMatch); } string[] files = inputConverter.GetFilesForConversion(monsterDirectory); if (inputConverter.FileSource == FileSource.Web) { // TibiaWiki provides a flat list mirroredFolderStructure = false; } if ((files != null) && (files.Length == 0)) { return(ScanError.NoMonstersFound); } string destination; for (int i = 0; i < files.Length; i++) { string file = files[i]; destination = FindExactFileDestination(monsterDirectory, outputDirectory, file, mirroredFolderStructure); var result = ProcessFile(file, inputConverter, outputConverter, destination); RaiseEvent(OnMonsterConverted, new FileProcessorEventArgs(result.Item1, result.Item2, i, files.Length)); } return(ScanError.Success); }
private bool ProcessFile(string file, IMonsterConverter input, IMonsterConverter output, string outputDir) { bool result = false; try { if (input.ReadMonster(file, out Monster monster)) { if (!Directory.Exists(outputDir)) { Directory.CreateDirectory(outputDir); } output.WriteMonster(outputDir, ref monster); result = true; } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"Error pasring {file}. Exception {ex.Message}"); result = false; } return(result); }
private Tuple <ConvertResult, ConvertResult> ProcessFile(string file, IMonsterConverter input, IMonsterConverter output, string outputDir) { ConvertResult readResult = new ConvertResult("unknown", ConvertError.Error, "Unknown error occured"); ConvertResult writeResult = new ConvertResult("unknown", ConvertError.Error, "Unknown error occured"); // The ReadMonster and Write methods processors should really do their best to catch and return meaningful errors try { readResult = input.ReadMonster(file, out Monster monster); if (readResult.Code != ConvertError.Error) { if (!Directory.Exists(outputDir)) { Directory.CreateDirectory(outputDir); } writeResult = output.WriteMonster(outputDir, ref monster); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"Error pasring {file}. Exception {ex.Message}"); } return(new(readResult, writeResult)); }