Skip to content

Allow loading of uncompressed rcnet file to allow version control tools to work nicely w/ ReClass.NET files #227

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions ReClass.NET/DataExchange/ReClass/ReClassNetFile.Constants.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
namespace ReClassNET.DataExchange.ReClass
namespace ReClassNET.DataExchange.ReClass
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What are these changes here and in ReClass.NET_Launcher/Program.cs? BOM or something?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems so? Idk why those got added. I tried to revert them and vscode wasn't showing those lines as changed.

{
public partial class ReClassNetFile
{
public const string FormatName = "ReClass.NET File";
public const string FileExtension = ".rcnet";
public const string FileExtensionId = "rcnetfile";
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;
Expand Down
31 changes: 20 additions & 11 deletions ReClass.NET/DataExchange/ReClass/ReClassNetFile.Read.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,24 +18,33 @@ public partial class ReClassNetFile
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)
{
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.");
Expand Down
22 changes: 14 additions & 8 deletions ReClass.NET/DataExchange/ReClass/ReClassNetFile.Write.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,24 @@ public partial class ReClassNetFile
public void Save(string filePath, ILogger logger)
{
using var fs = new FileStream(filePath, FileMode.Create);
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(fs, logger);
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}"),
Expand All @@ -40,8 +47,7 @@ public void Save(Stream output, ILogger logger)
new XElement(XmlClassesElement, CreateClassElements(project.Classes, logger))
)
);

document.Save(entryStream);
document.Save(output);
}

private static IEnumerable<XElement> CreateEnumElements(IEnumerable<EnumDescription> enums)
Expand Down
12 changes: 8 additions & 4 deletions ReClass.NET/Forms/MainForm.Functions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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}"
};
Expand All @@ -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;
}
Expand All @@ -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:
Expand Down
8 changes: 5 additions & 3 deletions ReClass.NET/Forms/MainForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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;
Expand Down
8 changes: 5 additions & 3 deletions ReClass.NET_Launcher/Program.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;
Expand All @@ -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;
}
Expand Down