Skip to content
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

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

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
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
5 changes: 4 additions & 1 deletion ReClass.NET/DataExchange/ReClass/ReClassNetFile.Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
29 changes: 19 additions & 10 deletions ReClass.NET/DataExchange/ReClass/ReClassNetFile.Read.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,32 @@ 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
21 changes: 14 additions & 7 deletions ReClass.NET/DataExchange/ReClass/ReClassNetFile.Write.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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}"),
Expand All @@ -41,7 +48,7 @@ public void Save(Stream output, ILogger 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
6 changes: 4 additions & 2 deletions ReClass.NET_Launcher/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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