diff --git a/ReClass.NET/DataExchange/ReClass/ReClassNetFile.Constants.cs b/ReClass.NET/DataExchange/ReClass/ReClassNetFile.Constants.cs index d44c645f..293cf999 100644 --- a/ReClass.NET/DataExchange/ReClass/ReClassNetFile.Constants.cs +++ b/ReClass.NET/DataExchange/ReClass/ReClassNetFile.Constants.cs @@ -3,8 +3,11 @@ public partial class ReClassNetFile { public const string FormatName = "ReClass.NET File"; - public const string FileExtension = ".rcnet"; + public const string DefaultFileExtension = ".rcnet"; + public const string AlternateFormatName = "ReClass.NET XML File"; + public const string AlternateFileExtension = ".rcnetxml"; public const string FileExtensionId = "rcnetfile"; + public const string AlternateFileExtensionId = "rcnetxmlfile"; private const uint FileVersion = 0x00010001; private const uint FileVersionCriticalMask = 0xFFFF0000; diff --git a/ReClass.NET/DataExchange/ReClass/ReClassNetFile.Read.cs b/ReClass.NET/DataExchange/ReClass/ReClassNetFile.Read.cs index 4a3cb65d..17bf1277 100644 --- a/ReClass.NET/DataExchange/ReClass/ReClassNetFile.Read.cs +++ b/ReClass.NET/DataExchange/ReClass/ReClassNetFile.Read.cs @@ -19,7 +19,24 @@ public void Load(string filePath, ILogger logger) { using var fs = new FileStream(filePath, FileMode.Open); - Load(fs, logger); + var ext = Path.GetExtension(filePath); + if (ext == DefaultFileExtension) + { + using var archive = new ZipArchive(fs, ZipArchiveMode.Read); + var dataEntry = archive.GetEntry(DataFileName); + if (dataEntry == null) + { + throw new FormatException(); + } + + using var entryStream = dataEntry.Open(); + + Load(entryStream, logger); + } + else if (ext == AlternateFileExtension) + { + Load(fs, logger); + } } public void Load(Stream input, ILogger logger) @@ -27,15 +44,7 @@ public void Load(Stream input, ILogger logger) Contract.Requires(input != null); Contract.Requires(logger != null); - using var archive = new ZipArchive(input, ZipArchiveMode.Read); - var dataEntry = archive.GetEntry(DataFileName); - if (dataEntry == null) - { - throw new FormatException(); - } - - using var entryStream = dataEntry.Open(); - var document = XDocument.Load(entryStream); + var document = XDocument.Load(input); if (document.Root?.Element(XmlClassesElement) == null) { throw new FormatException("The data has not the correct format."); diff --git a/ReClass.NET/DataExchange/ReClass/ReClassNetFile.Write.cs b/ReClass.NET/DataExchange/ReClass/ReClassNetFile.Write.cs index 1d33ebc5..34ff749d 100644 --- a/ReClass.NET/DataExchange/ReClass/ReClassNetFile.Write.cs +++ b/ReClass.NET/DataExchange/ReClass/ReClassNetFile.Write.cs @@ -17,16 +17,23 @@ public void Save(string filePath, ILogger logger) { using var fs = new FileStream(filePath, FileMode.Create); - Save(fs, logger); + var ext = Path.GetExtension(filePath); + if(ext == DefaultFileExtension) + { + using var archive = new ZipArchive(fs, ZipArchiveMode.Create); + + var dataEntry = archive.CreateEntry(DataFileName); + using var entryStream = dataEntry.Open(); + Save(entryStream, logger); + } + else if(ext == AlternateFileExtension) + { + Save(fs, logger); + } } public void Save(Stream output, ILogger logger) { - using var archive = new ZipArchive(output, ZipArchiveMode.Create); - - var dataEntry = archive.CreateEntry(DataFileName); - using var entryStream = dataEntry.Open(); - var document = new XDocument( new XComment($"{Constants.ApplicationName} {Constants.ApplicationVersion} by {Constants.Author}"), new XComment($"Website: {Constants.HomepageUrl}"), @@ -41,7 +48,7 @@ public void Save(Stream output, ILogger logger) ) ); - document.Save(entryStream); + document.Save(output); } private static IEnumerable CreateEnumElements(IEnumerable enums) diff --git a/ReClass.NET/Forms/MainForm.Functions.cs b/ReClass.NET/Forms/MainForm.Functions.cs index 84f1b53a..f6a05705 100644 --- a/ReClass.NET/Forms/MainForm.Functions.cs +++ b/ReClass.NET/Forms/MainForm.Functions.cs @@ -193,8 +193,9 @@ public static string ShowOpenProjectFileDialog() using var ofd = new OpenFileDialog { CheckFileExists = true, - Filter = $"All ReClass Types |*{ReClassNetFile.FileExtension};*{ReClassFile.FileExtension};*{ReClassQtFile.FileExtension}" - + $"|{ReClassNetFile.FormatName} (*{ReClassNetFile.FileExtension})|*{ReClassNetFile.FileExtension}" + Filter = $"All ReClass Types |*{ReClassNetFile.DefaultFileExtension};*{ReClassNetFile.AlternateFileExtension};*{ReClassFile.FileExtension};*{ReClassQtFile.FileExtension}" + + $"|{ReClassNetFile.FormatName} (*{ReClassNetFile.DefaultFileExtension})|*{ReClassNetFile.DefaultFileExtension}" + + $"|{ReClassNetFile.AlternateFormatName} (*{ReClassNetFile.AlternateFileExtension})|*{ReClassNetFile.AlternateFileExtension}" + $"|{ReClassFile.FormatName} (*{ReClassFile.FileExtension})|*{ReClassFile.FileExtension}" + $"|{ReClassQtFile.FormatName} (*{ReClassQtFile.FileExtension})|*{ReClassQtFile.FileExtension}" }; @@ -218,7 +219,9 @@ public void LoadProjectFromPath(string path) LoadProjectFromPath(path, ref project); // If the file is a ReClass.NET file remember the path. - if (Path.GetExtension(path) == ReClassNetFile.FileExtension) + var ext = Path.GetExtension(path); + if (ext == ReClassNetFile.DefaultFileExtension + || ext == ReClassNetFile.AlternateFileExtension) { project.Path = path; } @@ -238,7 +241,8 @@ private static void LoadProjectFromPath(string path, ref ReClassNetProject proje IReClassImport import; switch (Path.GetExtension(path)?.ToLower()) { - case ReClassNetFile.FileExtension: + case ReClassNetFile.DefaultFileExtension: + case ReClassNetFile.AlternateFileExtension: import = new ReClassNetFile(project); break; case ReClassQtFile.FileExtension: diff --git a/ReClass.NET/Forms/MainForm.cs b/ReClass.NET/Forms/MainForm.cs index e771a10d..757fc305 100644 --- a/ReClass.NET/Forms/MainForm.cs +++ b/ReClass.NET/Forms/MainForm.cs @@ -307,8 +307,9 @@ private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) using var sfd = new SaveFileDialog { - DefaultExt = ReClassNetFile.FileExtension, - Filter = $"{ReClassNetFile.FormatName} (*{ReClassNetFile.FileExtension})|*{ReClassNetFile.FileExtension}" + DefaultExt = ReClassNetFile.DefaultFileExtension, + Filter = $"{ReClassNetFile.FormatName} (*{ReClassNetFile.DefaultFileExtension})|*{ReClassNetFile.DefaultFileExtension}" + + $"|{ReClassNetFile.AlternateFormatName} (*{ReClassNetFile.AlternateFileExtension})|*{ReClassNetFile.AlternateFileExtension}" }; if (sfd.ShowDialog() == DialogResult.OK) @@ -756,7 +757,8 @@ private void MainForm_DragEnter(object sender, DragEventArgs e) { switch (Path.GetExtension(files.First())) { - case ReClassNetFile.FileExtension: + case ReClassNetFile.DefaultFileExtension: + case ReClassNetFile.AlternateFileExtension: case ReClassQtFile.FileExtension: case ReClassFile.FileExtension: e.Effect = DragDropEffects.Copy; diff --git a/ReClass.NET_Launcher/Program.cs b/ReClass.NET_Launcher/Program.cs index 8c160e3e..133ee0ed 100644 --- a/ReClass.NET_Launcher/Program.cs +++ b/ReClass.NET_Launcher/Program.cs @@ -19,13 +19,15 @@ static void Main(string[] args) // Register the files with the launcher. if (commandLineArgs[Constants.CommandLineOptions.FileExtRegister] != null) { - NativeMethods.RegisterExtension(ReClassNetFile.FileExtension, ReClassNetFile.FileExtensionId, PathUtil.ExecutablePath, Constants.ApplicationName); + NativeMethods.RegisterExtension(ReClassNetFile.DefaultFileExtension, ReClassNetFile.FileExtensionId, PathUtil.ExecutablePath, Constants.ApplicationName); + NativeMethods.RegisterExtension(ReClassNetFile.AlternateFileExtension, ReClassNetFile.AlternateFileExtensionId, PathUtil.ExecutablePath, Constants.ApplicationName); return; } if (commandLineArgs[Constants.CommandLineOptions.FileExtUnregister] != null) { - NativeMethods.UnregisterExtension(ReClassNetFile.FileExtension, ReClassNetFile.FileExtensionId); + NativeMethods.UnregisterExtension(ReClassNetFile.DefaultFileExtension, ReClassNetFile.FileExtensionId); + NativeMethods.UnregisterExtension(ReClassNetFile.AlternateFileExtension, ReClassNetFile.AlternateFileExtensionId); return; }