// 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);
 }
示例#2
0
        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;
        }
示例#3
0
        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));
        }