Merge pull request #7 from Miepee/slightclean

Slight cleanage of project
pull/9/head
Lojemiru 4 years ago committed by GitHub
commit 213604cc2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -10,16 +10,7 @@ public partial class ModPacker : Form
public ModPacker()
{
profile = new ModProfileXML("", 1, "", "", "", false, "", false, false, ""); // (1, "", "", false, "default", false, false);
isOriginalLoaded = false;
isModLoaded = false;
isApkLoaded = false;
isLinuxLoaded = false;
localPath = Directory.GetCurrentDirectory();
originalPath = "";
modPath = "";
linuxPath = "";
apkPath = "";
localPath =
Title = "AM2R ModPacker " + VERSION;
// Currently broken as I don't know how to do this from Rider
@ -33,8 +24,8 @@ public partial class ModPacker : Form
// Left side
var modInfoPanel = new DynamicLayout() { Spacing = new Size(5, 5) };
modInfoPanel.AddRow(nameLabel, NameTextBox);
modInfoPanel.AddRow(authorLabel, AuthorTextBox);
modInfoPanel.AddRow(nameLabel, nameTextBox);
modInfoPanel.AddRow(authorLabel, authorTextBox);
modInfoPanel.AddRow(versionLabel, versionTextBox);
modInfoPanel.AddRow(modNotesLabel);
@ -47,26 +38,26 @@ public partial class ModPacker : Form
// Right Side
var savePanel = new DynamicLayout();
savePanel.AddRow(SaveCheckBox, null, winSaveButton);
savePanel.AddRow(customSaveCheckBox, null, customSaveButton);
var saveTextPanel = new DynamicLayout();
saveTextPanel.AddRow(saveTextBox);
saveTextPanel.AddRow(customSaveTextBox);
var miscOptionsPanel = new DynamicLayout() { Spacing = new Size(5, 5) };
miscOptionsPanel.AddRow(MusicCheckBox);
miscOptionsPanel.AddRow(YYCCheckBox);
miscOptionsPanel.AddRow(AndroidCheckBox);
miscOptionsPanel.AddRow(ApkButton, ApkLabel);
miscOptionsPanel.AddRow(musicCheckBox);
miscOptionsPanel.AddRow(yycCheckBox);
miscOptionsPanel.AddRow(apkCheckBox);
miscOptionsPanel.AddRow(apkButton, apkLabel);
miscOptionsPanel.AddRow(linuxCheckBox);
miscOptionsPanel.AddRow(linuxButton, linuxLabel);
var loadZipsPanel = new DynamicLayout() { Spacing = new Size(5, 5) };
loadZipsPanel.AddRow(OriginalButton, null, ModButton);
loadZipsPanel.AddRow(OriginalLabel, null, ModLabel);
loadZipsPanel.AddRow(originalZipButton, null, modZipButton);
loadZipsPanel.AddRow(originalZipLabel, null, modZipLabel);
var resultPanel = new DynamicLayout() { Spacing = new Size(5, 5) };
resultPanel.AddRow(CreateButton);
resultPanel.AddRow(CreateLabel);
resultPanel.AddRow(createButton);
resultPanel.AddRow(createLabel);
// Combine together
rightSide.AddRow(savePanel);
@ -88,47 +79,47 @@ public partial class ModPacker : Form
Content = mainContent;
// Assign events
OriginalButton.Click += OriginalButton_Click;
ModButton.Click += ModButton_Click;
CreateButton.Click += CreateButton_Click;
ApkButton.Click += ApkButton_Click;
AndroidCheckBox.CheckedChanged += AndroidCheckBox_CheckedChanged;
SaveCheckBox.CheckedChanged += SaveCheckBox_CheckedChanged;
linuxCheckBox.CheckedChanged += linuxCheckBox_CheckedChanged;
linuxButton.Click += linuxButton_Click;
winSaveButton.Click += CustomSaveDataButton_Click;
originalZipButton.Click += OriginalZipButton_Click;
modZipButton.Click += ModZipButton_Click;
createButton.Click += CreateButton_Click;
apkButton.Click += ApkButton_Click;
apkCheckBox.CheckedChanged += ApkCheckBoxCheckedChanged;
customSaveCheckBox.CheckedChanged += CustomSaveCheckBoxChecked_Changed;
linuxCheckBox.CheckedChanged += LinuxCheckBox_CheckedChanged;
linuxButton.Click += LinuxButton_Click;
customSaveButton.Click += CustomSaveDataButton_Click;
}
#region Design Elements
private Label nameLabel = new Label() { Text = "Mod name:" };
private TextBox NameTextBox = new TextBox();
private TextBox nameTextBox = new TextBox();
private Label authorLabel = new Label() { Text = "Author:" };
private TextBox AuthorTextBox = new TextBox();
private TextBox authorTextBox = new TextBox();
private Label versionLabel = new Label() { Text = "Version:" };
private TextBox versionTextBox = new TextBox();
private Label modNotesLabel = new Label() { Text = "Mod notes:" };
private TextArea modNotesTextBox = new TextArea() { };
private CheckBox SaveCheckBox = new CheckBox() { Text = "Uses custom save directory" };
private Button winSaveButton = new Button() { Text = "Select folder", Enabled = false };
private TextBox saveTextBox = new TextBox();
private CheckBox MusicCheckBox = new CheckBox() { Text = "Uses custom music" };
private CheckBox customSaveCheckBox = new CheckBox() { Text = "Uses custom save directory" };
private Button customSaveButton = new Button() { Text = "Select folder", Enabled = false };
private TextBox customSaveTextBox = new TextBox();
private CheckBox musicCheckBox = new CheckBox() { Text = "Uses custom music" };
private CheckBox YYCCheckBox = new CheckBox() { Text = "Uses the YoYo Compiler" };
private CheckBox yycCheckBox = new CheckBox() { Text = "Uses the YoYo Compiler" };
private CheckBox AndroidCheckBox = new CheckBox() { Text = "Supports Android" };
private Button ApkButton = new Button() { Text = "Load modded Android APK", Enabled = false };
private Label ApkLabel = new Label() { Text = "Modded APK loaded!", Visible = false };
private CheckBox apkCheckBox = new CheckBox() { Text = "Supports Android" };
private Button apkButton = new Button() { Text = "Load modded Android APK", Enabled = false };
private Label apkLabel = new Label() { Text = "Modded APK loaded!", Visible = false };
private CheckBox linuxCheckBox = new CheckBox() { Text = "Supports Linux" };
private Button linuxButton = new Button() { Text = "Load modded Linux .zip", Enabled = false };
private Label linuxLabel = new Label() { Text = "Modded Linux game loaded!", Visible = false };
private Button OriginalButton = new Button() { Text = "Load 1.1" };
private Label OriginalLabel = new Label() { Text = "1.1 loaded!", Visible = false};
private Button ModButton = new Button() { Text = "Load modded game" };
private Label ModLabel = new Label() { Text = "Mod loaded!", Visible = false };
private Button CreateButton = new Button() { Text = "Create mod package(s)", Enabled = false };
private Label CreateLabel = new Label() { Text = "Mod package created!", Visible = false};
private Button originalZipButton = new Button() { Text = "Load 1.1" };
private Label originalZipLabel = new Label() { Text = "1.1 loaded!", Visible = false};
private Button modZipButton = new Button() { Text = "Load modded game" };
private Label modZipLabel = new Label() { Text = "Mod loaded!", Visible = false };
private Button createButton = new Button() { Text = "Create mod package(s)", Enabled = false };
private Label createLabel = new Label() { Text = "Mod package created!", Visible = false};
#endregion
}

@ -12,58 +12,98 @@ namespace AM2RModPacker;
public partial class ModPacker : Form
{
private static readonly string VERSION = "2.0.3";
private static readonly string ORIGINAL_MD5 = "f2b84fe5ba64cb64e284be1066ca08ee";
private const string VERSION = "2.0.3";
private const string ORIGINAL_MD5 = "f2b84fe5ba64cb64e284be1066ca08ee";
private bool isOriginalLoaded, isModLoaded, isApkLoaded, isLinuxLoaded;
private string localPath, originalPath, modPath, apkPath, linuxPath;
private static readonly string[] DATAFILES_BLACKLIST = { "data.win", "AM2R.exe", "D3DX9_43.dll", "game.unx" };
private static string saveFilePath = null;
private ModProfileXML profile;
// TODO: do not get current directory, wont end well
private readonly string localPath = Directory.GetCurrentDirectory();
private string originalPath, modPath, apkPath, linuxPath;
private readonly string[] DATAFILES_BLACKLIST = { "data.win", "AM2R.exe", "D3DX9_43.dll", "game.unx" };
private string saveFilePath;
private readonly ModProfileXML profile;
private FileFilter zipFileFilter = new FileFilter("zip archives (*.zip)", ".zip");
private readonly FileFilter zipFileFilter = new FileFilter("zip archives (*.zip)", ".zip");
#region Eto events
private void CustomSaveCheckBoxChecked_Changed(object sender, EventArgs e)
{
customSaveButton.Enabled = customSaveCheckBox.Checked.Value;
customSaveTextBox.Enabled = customSaveCheckBox.Checked.Value;
UpdateCreateButton();
}
private void ApkButton_Click(object sender, EventArgs e)
{
// Open window to select modded AM2R APK
(isApkLoaded, apkPath) = SelectFile("Please select your custom AM2R .apk", "android application packages (*.apk)|*.apk");
apkLabel.Visible = isApkLoaded;
private void OriginalButton_Click(object sender, EventArgs e)
UpdateCreateButton();
}
private void ApkCheckBoxCheckedChanged(object sender, EventArgs e)
{
apkButton.Enabled = apkCheckBox.Checked.Value;
UpdateCreateButton();
}
private void LinuxCheckBox_CheckedChanged(object sender, EventArgs e)
{
linuxButton.Enabled = linuxCheckBox.Checked.Value;
UpdateCreateButton();
}
private void LinuxButton_Click(object sender, EventArgs e)
{
// Open window to select modded Linux .zip
(isLinuxLoaded, linuxPath) = SelectFile("Please select your custom Linux AM2R .zip", zipFileFilter);
linuxLabel.Visible = isLinuxLoaded;
UpdateCreateButton();
}
private void OriginalZipButton_Click(object sender, EventArgs e)
{
// Open window to select AM2R 1.1
(isOriginalLoaded, originalPath) = SelectFile("Please select AM2R_11.zip", zipFileFilter);
OriginalLabel.Visible = isOriginalLoaded;
originalZipLabel.Visible = isOriginalLoaded;
UpdateCreateButton();
}
private void ModButton_Click(object sender, EventArgs e)
private void ModZipButton_Click(object sender, EventArgs e)
{
// Open window to select modded AM2R
(isModLoaded, modPath) = SelectFile("Please select your custom AM2R .zip", zipFileFilter);
ModLabel.Visible = isModLoaded;
modZipLabel.Visible = isModLoaded;
UpdateCreateButton();
}
private void CreateButton_Click(object sender, EventArgs e)
{
if (NameTextBox.Text == "" || AuthorTextBox.Text == "" || versionTextBox.Text == "")
if (nameTextBox.Text == "" || authorTextBox.Text == "" || versionTextBox.Text == "")
{
MessageBox.Show("Text field missing! Mod packaging aborted.", "Error", MessageBoxButtons.OK, MessageBoxType.Error);
return;
}
if (Path.GetInvalidFileNameChars().Any(NameTextBox.Text.Contains))
if (Path.GetInvalidFileNameChars().Any(nameTextBox.Text.Contains))
{
MessageBox.Show("Name contains invalid characters! These characters are not allowed:\n" + string.Join("\n", Path.GetInvalidFileNameChars()));
MessageBox.Show("Name contains invalid characters! These characters are not allowed:\n" + String.Join("\n", Path.GetInvalidFileNameChars()));
return;
}
CreateLabel.Visible = true;
CreateLabel.Text = "Packaging mod(s)... This could take a while!";
createLabel.Visible = true;
createLabel.Text = "Packaging mod(s)... This could take a while!";
string output;
using (SaveFileDialog saveFile = new SaveFileDialog { Title = "Save Windows mod profile", Filters = {zipFileFilter} })
using (var saveFile = new SaveFileDialog { Title = "Save Windows mod profile", Filters = { zipFileFilter } })
{
if (saveFile.ShowDialog(this) == DialogResult.Ok)
{
@ -71,7 +111,7 @@ public partial class ModPacker : Form
}
else
{
CreateLabel.Text = "Mod packaging aborted!";
createLabel.Text = "Mod packaging aborted!";
return;
}
}
@ -80,7 +120,7 @@ public partial class ModPacker : Form
if (linuxCheckBox.Checked.Value)
{
using (SaveFileDialog saveFile = new SaveFileDialog { Title = "Save Linux mod profile", Filters = {zipFileFilter} })
using (var saveFile = new SaveFileDialog { Title = "Save Linux mod profile", Filters = { zipFileFilter } })
{
if (saveFile.ShowDialog(this) == DialogResult.Ok)
{
@ -88,7 +128,7 @@ public partial class ModPacker : Form
}
else
{
CreateLabel.Text = "Mod packaging aborted!";
createLabel.Text = "Mod packaging aborted!";
return;
}
}
@ -96,8 +136,9 @@ public partial class ModPacker : Form
CreateModPack("Linux", linuxPath, output);
}
CreateLabel.Text = "Mod package(s) created!";
createLabel.Text = "Mod package(s) created!";
}
#endregion
private void CreateModPack(string operatingSystem, string input, string output)
{
@ -105,15 +146,13 @@ public partial class ModPacker : Form
// Cleanup in case of previous errors
if (Directory.Exists(Path.GetTempPath() + "\\AM2RModPacker"))
{
Directory.Delete(Path.GetTempPath() + "\\AM2RModPacker", true);
}
// Create temp work folders
string tempPath = "",
tempOriginalPath = "",
tempModPath = "",
tempProfilePath = "";
string tempPath,
tempOriginalPath,
tempModPath,
tempProfilePath;
// We might not have permission to access to the temp directory, so we need to catch the exception.
try
@ -223,7 +262,7 @@ public partial class ModPacker : Form
// - java -jar apktool.jar d "%~dp0AM2RWrapper_old.apk"
// Process startInfo
ProcessStartInfo procStartInfo = new ProcessStartInfo
var procStartInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
WorkingDirectory = tempAndroid,
@ -233,7 +272,7 @@ public partial class ModPacker : Form
};
// Run process
using (Process proc = new Process { StartInfo = procStartInfo })
using (var proc = new Process { StartInfo = procStartInfo })
{
proc.Start();
@ -249,40 +288,32 @@ public partial class ModPacker : Form
string[] whitelist = { "splash.png", "portrait_splash.png" };
// Get directory
DirectoryInfo androidAssets = new DirectoryInfo(tempAndroid + "\\assets");
var androidAssets = new DirectoryInfo(tempAndroid + "\\assets");
// Delete files
foreach (FileInfo file in androidAssets.GetFiles())
foreach (var file in androidAssets.GetFiles())
{
if (file.Name.EndsWith(".ini") && file.Name != "modifiers.ini")
{
if (File.Exists(tempProfilePath + "\\AM2R.ini"))
{
// This shouldn't be a problem... normally...
File.Delete(tempProfilePath + "\\AM2R.ini");
}
File.Copy(file.FullName, tempProfilePath + "\\AM2R.ini");
}
if (!whitelist.Contains(file.Name))
{
File.Delete(file.FullName);
}
}
foreach (DirectoryInfo dir in androidAssets.GetDirectories())
{
foreach (var dir in androidAssets.GetDirectories())
Directory.Delete(dir.FullName, true);
}
// Create wrapper
// Process startInfo
// - java -jar apktool.jar b "%~dp0AM2RWrapper_old" -o "%~dp0AM2RWrapper.apk"
ProcessStartInfo procStartInfo2 = new ProcessStartInfo
var procStartInfo2 = new ProcessStartInfo
{
FileName = "cmd.exe",
WorkingDirectory = tempAndroid,
@ -292,7 +323,7 @@ public partial class ModPacker : Form
};
// Run process
using (Process proc = new Process { StartInfo = procStartInfo2 })
using (var proc = new Process { StartInfo = procStartInfo2 })
{
proc.Start();
@ -309,16 +340,16 @@ public partial class ModPacker : Form
// Copy datafiles (exclude .ogg if custom music is not selected)
DirectoryInfo dinfo = new DirectoryInfo(tempModPath);
var dirInfo = new DirectoryInfo(tempModPath);
if (profile.OperatingSystem == "Linux")
dinfo = new DirectoryInfo(tempModPath + "\\assets");
dirInfo = new DirectoryInfo(tempModPath + "\\assets");
Directory.CreateDirectory(tempProfilePath + "\\files_to_copy");
if (profile.UsesCustomMusic)
{
// Copy files, excluding the blacklist
CopyFilesRecursive(dinfo, DATAFILES_BLACKLIST, tempProfilePath + "\\files_to_copy");
CopyFilesRecursive(dirInfo, DATAFILES_BLACKLIST, tempProfilePath + "\\files_to_copy");
}
else
{
@ -333,7 +364,7 @@ public partial class ModPacker : Form
string[] blacklist = musFiles.Concat(DATAFILES_BLACKLIST).ToArray();
// Copy files, excluding the blacklist
CopyFilesRecursive(dinfo, blacklist, tempProfilePath + "\\files_to_copy");
CopyFilesRecursive(dirInfo, blacklist, tempProfilePath + "\\files_to_copy");
}
// Export profile as XML
@ -342,9 +373,7 @@ public partial class ModPacker : Form
// Compress temp folder to .zip
if (File.Exists(output))
{
File.Delete(output);
}
ZipFile.CreateFromDirectory(tempProfilePath, output);
@ -352,54 +381,23 @@ public partial class ModPacker : Form
Directory.Delete(tempPath, true);
}
private void ApkButton_Click(object sender, EventArgs e)
{
// Open window to select modded AM2R APK
(isApkLoaded, apkPath) = SelectFile("Please select your custom AM2R .apk", "android application packages (*.apk)|*.apk");
ApkLabel.Visible = isApkLoaded;
UpdateCreateButton();
}
private void AndroidCheckBox_CheckedChanged(object sender, EventArgs e)
{
ApkButton.Enabled = AndroidCheckBox.Checked.Value;
UpdateCreateButton();
}
private void SaveCheckBox_CheckedChanged(object sender, EventArgs e)
{
winSaveButton.Enabled = SaveCheckBox.Checked.Value;
saveTextBox.Enabled = SaveCheckBox.Checked.Value;
UpdateCreateButton();
}
#endregion
private void LoadProfileParameters(string operatingSystem)
{
profile.Name = NameTextBox.Text;
profile.Author = AuthorTextBox.Text;
profile.Name = nameTextBox.Text;
profile.Author = authorTextBox.Text;
profile.Version = versionTextBox.Text;
profile.UsesCustomMusic = MusicCheckBox.Checked.Value;
profile.UsesYYC = YYCCheckBox.Checked.Value;
profile.Android = AndroidCheckBox.Checked.Value;
profile.UsesCustomMusic = musicCheckBox.Checked.Value;
profile.UsesYYC = yycCheckBox.Checked.Value;
profile.Android = apkCheckBox.Checked.Value;
profile.ProfileNotes = modNotesTextBox.Text;
profile.OperatingSystem = operatingSystem;
if (SaveCheckBox.Checked.Value && saveTextBox.Text != "")
{
profile.SaveLocation = saveTextBox.Text;
}
if (customSaveCheckBox.Checked.Value && customSaveTextBox.Text != "")
profile.SaveLocation = customSaveTextBox.Text;
else
{
profile.SaveLocation = "%localappdata%/AM2R";
}
if (operatingSystem == "Linux")
{
profile.SaveLocation = profile.SaveLocation.Replace("%localappdata%", "~/.config");
}
}
private void AbortPatch()
{
@ -415,83 +413,66 @@ public partial class ModPacker : Form
saveFilePath = null;
// Set labels
CreateLabel.Text = "Mod packaging aborted!";
OriginalLabel.Visible = false;
ModLabel.Visible = false;
ApkLabel.Visible = false;
createLabel.Text = "Mod packaging aborted!";
originalZipLabel.Visible = false;
modZipLabel.Visible = false;
apkLabel.Visible = false;
linuxLabel.Visible = false;
// Remove temp directory
if (Directory.Exists(Path.GetTempPath() + "\\AM2RModPacker"))
{
Directory.Delete(Path.GetTempPath() + "\\AM2RModPacker", true);
}
}
private void linuxCheckBox_CheckedChanged(object sender, EventArgs e)
{
linuxButton.Enabled = linuxCheckBox.Checked.Value;
UpdateCreateButton();
}
private void linuxButton_Click(object sender, EventArgs e)
{
// Open window to select modded Linux .zip
(isLinuxLoaded, linuxPath) = SelectFile("Please select your custom Linux AM2R .zip", zipFileFilter);
linuxLabel.Visible = isLinuxLoaded;
UpdateCreateButton();
}
private void CustomSaveDataButton_Click(object sender, EventArgs e)
{
bool wasSuccessfull = false;
Regex saveRegex = new Regex(@"C:\\Users\\.*\\AppData\\Local\\"); //this is to ensure, that the save directory is valid. so far, this is only important for windows
bool wasSuccessful = false;
// TODO: make sure that the validation works on other platforms too
var saveRegex = new Regex(@"C:\\Users\\.*\\AppData\\Local\\"); //this is to ensure, that the save directory is valid. so far, this is only important for windows
SelectFolderDialog dialog = new SelectFolderDialog();
var dialog = new SelectFolderDialog();
// currently not implemented in eto
//dialog.InitialDirectory = Environment.GetEnvironmentVariable("LocalAppData");
while (!wasSuccessfull)
while (!wasSuccessful)
{
if (dialog.ShowDialog(this) == DialogResult.Ok)
{
Match match = saveRegex.Match(dialog.Directory);
var match = saveRegex.Match(dialog.Directory);
if (match.Success == false)
{
MessageBox.Show("Invalid Save Directory! Please choose one in %LocalAppData%");
}
else
{
wasSuccessfull = true;
wasSuccessful = true;
saveFilePath = dialog.Directory.Replace(match.Value, "%localappdata%/");
saveFilePath = saveFilePath.Replace("\\", "/"); // if we don't do this, custom save locations are going to fail on Linux
// if someone has a custom save path inside of am2r and creates these whithin game maker, they will always be lower case
// we need to adjust them here to lowercase as well, as otherwise launcher gets problems on nix systems
string vanillaPrefix = "%localappdata%/AM2R/";
const string vanillaPrefix = "%localappdata%/AM2R/";
if (saveFilePath.Contains(vanillaPrefix))
saveFilePath = vanillaPrefix + saveFilePath.Substring(vanillaPrefix.Length).ToLower();
}
}
else
{
wasSuccessfull = true;
wasSuccessful = true;
saveFilePath = null;
}
}
saveTextBox.Text = saveFilePath;
customSaveTextBox.Text = saveFilePath;
}
private void CopyFilesRecursive(DirectoryInfo source, string[] blacklist, string destination)
private static void CopyFilesRecursive(DirectoryInfo source, string[] blacklist, string destination)
{
foreach (FileInfo file in source.GetFiles())
foreach (var file in source.GetFiles())
{
if (!blacklist.Contains(file.Name))
{
file.CopyTo(destination + "\\" + file.Name);
}
}
foreach (DirectoryInfo dir in source.GetDirectories())
foreach (var dir in source.GetDirectories())
{
// Folders need to be lowercase, because GM only reads from lowercase names on *nix systems. Windows is case-insensitive so doesnt matter for them
string newDir = Directory.CreateDirectory(destination + "\\" + dir.Name.ToLower()).FullName;
@ -503,35 +484,27 @@ public partial class ModPacker : Form
{
if (isOriginalLoaded &&
isModLoaded &&
(!AndroidCheckBox.Checked.Value || isApkLoaded) &&
(!apkCheckBox.Checked.Value || isApkLoaded) &&
(!linuxCheckBox.Checked.Value || isLinuxLoaded) &&
(!SaveCheckBox.Checked.Value || saveTextBox.Text != ""))
{
CreateButton.Enabled = true;
}
(!customSaveCheckBox.Checked.Value || customSaveTextBox.Text != ""))
createButton.Enabled = true;
else
{
CreateButton.Enabled = false;
}
createButton.Enabled = false;
}
// Thanks, stackoverflow: https://stackoverflow.com/questions/10520048/calculate-md5-checksum-for-a-file
private string CalculateMD5(string filename)
private static string CalculateMD5(string filename)
{
using (var stream = File.OpenRead(filename))
{
using (var md5 = MD5.Create())
{
var hash = md5.ComputeHash(stream);
using var stream = File.OpenRead(filename);
using var md5 = MD5.Create();
byte[] hash = md5.ComputeHash(stream);
return BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
}
}
}
private void CreatePatch(string original, string modified, string output)
{
// Specify process start info
ProcessStartInfo parameters = new ProcessStartInfo
var parameters = new ProcessStartInfo
{
FileName = localPath + "\\utilities\\xdelta\\xdelta3.exe",
WorkingDirectory = localPath,
@ -541,29 +514,22 @@ public partial class ModPacker : Form
};
// Launch process and wait for exit. using statement automatically disposes the object for us!
using (Process proc = new Process { StartInfo = parameters })
{
using var proc = new Process { StartInfo = parameters };
proc.Start();
proc.WaitForExit();
}
}
private (bool, string) SelectFile(string title, FileFilter filter)
{
using (OpenFileDialog fileFinder = new OpenFileDialog() {Filters = { filter }})
{
using var fileFinder = new OpenFileDialog { Filters = { filter } };
fileFinder.Title = title;
fileFinder.CurrentFilter = fileFinder.Filters.First();
fileFinder.CheckFileExists = true;
if (fileFinder.ShowDialog(this) == DialogResult.Ok)
{
if (fileFinder.ShowDialog(this) != DialogResult.Ok)
return (false, "");
string location = fileFinder.FileName;
return (true, location);
}
else return (false, "");
}
}
}

@ -1,8 +1,9 @@
using System;
using System.Xml.Serialization;
namespace AM2RModPacker.XML
{
namespace AM2RModPacker.XML;
//TODO: sync this with the launcher xml, a bunch more comments are in there.
/// <summary>
/// Class that handles how the modmeta settings are saved as XML.
/// </summary>
@ -55,6 +56,7 @@ namespace AM2RModPacker.XML
public string ProfileNotes
{ get; set; }
// TODO: this should fill in sensible default values
public ModProfileXML()
{ }
@ -73,4 +75,3 @@ namespace AM2RModPacker.XML
Installable = installable;
}
}
}

@ -2,8 +2,8 @@
using System.IO;
using System.Text;
namespace AM2RModPacker.XML
{
namespace AM2RModPacker.XML;
/// <summary>
/// The <c>Serializer</c> class, that serializes to and deserializes from XML files.
/// </summary>
@ -49,4 +49,3 @@ namespace AM2RModPacker.XML
}
}
}
}
Loading…
Cancel
Save