public static VersionConverterStatus ConvertVersions(string inputVersion, string outputVersion, XDocument document)
{
if (inputVersion == outputVersion)
{
return VersionConverterStatus.NoError;
}
var error = VersionConverterStatus.NoError;
var versionPair = new CatrobatVersionPair(inputVersion, outputVersion);
if (double.Parse(inputVersion, NumberStyles.Any) < XmlConstants.MinimumCodeVersion)
{
return VersionConverterStatus.VersionTooOld;
}
if (ConvertersPaths.ContainsKey(versionPair))
{
var path = ConvertersPaths[versionPair];
if (path.Count == 0)
{
error = VersionConverterStatus.VersionTooOld;
}
else
{
try
{
foreach (var pair in path)
{
if (pair.IsInverse)
{
var inversePath = new CatrobatVersionPair(pair.OutputVersion, pair.InputVersion);
Converters[inversePath].ConvertBack(document);
}
else
{
Converters[pair].Convert(document);
}
}
}
catch (Exception)
{
error = VersionConverterStatus.ProgramDamaged;
}
}
}
else
{
error = VersionConverterStatus.ProgramDamaged;
}
return error;
}